Cuando leí el artículo de Gaurav Kamathe Escanee su seguridad de Linux con Lynis , me recordó mi tiempo como administrador de sistemas para el Departamento de Trabajo de EE. UU. Uno de mis deberes era mantener reforzados nuestros servidores Unix. Cada trimestre, un verificador independiente vino a revisar el estado de seguridad de nuestros servidores. Cada vez que el verificador estaba programado para llegar, ejecuté Security Readiness Review (SRR), una herramienta de escaneo que usaba un gran conjunto de secuencias de comandos para identificar e informar cualquier hallazgo de seguridad. SRR era de código abierto, por lo que podía ver todos los scripts de origen y sus funciones. Esto me permitió examinar el código, determinar qué estaba mal específicamente y solucionar rápidamente cada problema que encontraba.
¿Qué es Lynis?
Más recursos de Linux
- Hoja de trucos de los comandos de Linux
- Hoja de trucos de comandos avanzados de Linux
- Curso en línea gratuito:Descripción general técnica de RHEL
- Hoja de trucos de red de Linux
- Hoja de trucos de SELinux
- Hoja de trucos de los comandos comunes de Linux
- ¿Qué son los contenedores de Linux?
- Nuestros últimos artículos sobre Linux
Lynis es una herramienta de auditoría de seguridad de código abierto que funciona de manera muy similar a SRR al escanear un sistema Linux y proporcionar informes detallados sobre cualquier debilidad que encuentre. También como SRR, se compone de un gran conjunto de secuencias de comandos, y cada secuencia de comandos comprueba un elemento específico, por ejemplo, los requisitos mínimos y máximos de antigüedad de la contraseña.
Después de ejecutar Lynis, puede usar su informe para ubicar el script de cada elemento y aprender exactamente cómo Lynis verificó e informó cada problema. También puede usar el mismo código de secuencia de comandos para crear un nuevo código para automatizar una resolución.
Cómo leer los informes de Lynis
Dado que el artículo de Gaurav cubría la instalación y el uso de Lynis, en este artículo mostraré algunos ejemplos de cómo puede leer y usar sus informes.
Para comenzar, ejecute una auditoría:
# lynis audit system --quick
Una vez que se complete, el informe completo se mostrará en su pantalla. Hacia la parte inferior, las Sugerencias La sección enumera todos los elementos que pueden necesitar ser clasificados para fortalecer mejor el sistema, así como un TEST-ID para cada uno.
Para fortalecer el sistema y reducir el tamaño de la lista, comience a perseguir cada elemento. La descripción en las Sugerencias La sección puede ser todo lo que necesita para saber qué acción tomar. Si no es así, puede usar show details
comando:
# lynis show details TEST-ID
Por ejemplo, una de las sugerencias en mi sistema es:
La base de datos requerida para locate
no pudo ser encontrado. Ejecute updatedb
o locate.updatedb
para crear este archivo. [ARCHIVO-6410]
Parece que solo necesito ejecutar el comando updatedb
, pero si quiero estar seguro, puedo usar show details
de Lynis opción:
# lynis show details FILE-6410
2020-06-16 20:54:33 Performing test ID FILE-6410 (Checking Locate database)
2020-06-16 20:54:33 Test: Checking locate database
2020-06-16 20:54:33 Result: file /var/lib/mlocate/mlocate.db not found
2020-06-16 20:54:33 Result: file /var/lib/locate/locatedb not found
2020-06-16 20:54:33 Result: file /var/lib/locatedb not found
2020-06-16 20:54:33 Result: file /var/lib/slocate/slocate.db not found
2020-06-16 20:54:33 Result: file /var/cache/locate/locatedb not found
2020-06-16 20:54:33 Result: file /var/db/locate.database not found
2020-06-16 20:54:33 Result: database not found
2020-06-16 20:54:33 Suggestion: The database required for 'locate' could not be found. Run 'updatedb' or 'locate.updatedb' to create this file. [test:FILE-6410] [details:-] [solution:-]
2020-06-16 20:54:33 ====
Estos detalles indican que Lynis no pudo encontrar varios archivos. Este caso es muy claro. Puedo ejecutar updatedb
comando y vuelva a comprobar esta prueba:
# updatedb
# lynis --tests FILE-6410
Además, al volver a verificar los detalles, se muestra qué archivo encontró que cumplió con la prueba:
# lynis show details FILE-6410
2020-06-16 21:38:40 Performing test ID FILE-6410 (Checking Locate database)
2020-06-16 21:38:40 Test: Checking locate database
2020-06-16 21:38:40 Result: locate database found (/var/lib/mlocate/mlocate.db)
2020-06-16 21:38:40 Result: file /var/lib/locate/locatedb not found
2020-06-16 21:38:40 Result: file /var/lib/locatedb not found
2020-06-16 21:38:40 Result: file /var/lib/slocate/slocate.db not found
2020-06-16 21:38:40 Result: file /var/cache/locate/locatedb not found
2020-06-16 21:38:40 Result: file /var/db/locate.database not found
2020-06-16 21:38:40 ====
Buceando más profundo
Muchas de las sugerencias de Lynis no son tan sencillas como esta. Si no está seguro de a qué se refiere un hallazgo o una sugerencia, puede ser difícil saber cómo solucionar el problema. Supongamos que ejecuta Lynis en un nuevo servidor Linux y hay varios elementos relacionados con el demonio de shell seguro (SSH), uno de los cuales se refiere a MaxAuthTries
ajuste:
* Consider hardening SSH configuration [SSH-7408]
- Details : MaxAuthTries (6 --> 3)
https://cisofy.com/lynis/controls/SSH-7408/
Para resolver esto, necesita conocer la ubicación de los archivos de configuración de SSH. Es posible que un administrador de Linux experimentado ya sepa dónde encontrarlos, pero si no lo sabe, hay una manera de ver dónde los encontró Lynis.
Ubicar scripts de prueba de Lynis
Lynis es compatible con muchos sistemas operativos; por lo tanto, su ubicación de instalación puede variar. En un sistema Red Hat Enterprise Linux o Fedora Linux, use rpm
para encontrar los archivos de prueba:
# rpm -ql lynis
Esto enumera todos los archivos de prueba e informa su ubicación en lynis/include
directorio. Busque en este directorio el TEST-ID que desea conocer (SSH-7408 en este caso):
# grep SSH-7408 /usr/share/lynis/include/*
/usr/share/lynis/include/tests_ssh: # Test : SSH-7408
Buscar problemas de SSH
El archivo llamado tests_ssh
contiene el TEST-ID, y aquí es donde puede encontrar las funciones de escaneo relacionadas con SSH. Eche un vistazo a este archivo para ver las diversas funciones llamadas por el escáner Lynis. La primera sección define una lista de directorios en una variable llamada SSH_DAEMON_CONFIG_LOCS
. Las siguientes secciones son responsables de verificar el estado del demonio SSH, ubicar su archivo de configuración e identificar su versión. Encontré el código que busca el archivo de configuración en la sección Test SSH-7404, descrito como "Determinar la ubicación del archivo de configuración del demonio SSH". Este código contiene un for
bucle que busca en los elementos de la lista un archivo llamado sshd_config
. Puedo usar esta lógica para hacer mi propia búsqueda:
# find /etc /etc/ssh /usr/local/etc/ssh /opt/csw/etc/ssh -name sshd_config
/etc/ssh/sshd_config
/etc/ssh/sshd_config
find: ‘/usr/local/etc/ssh’: No such file or directory
find: ‘/opt/csw/etc/ssh’: No such file or directory
Explorar más este archivo revela el código relacionado con la búsqueda de SSH-7408. Esta prueba cubre MaxAuthTries
y varios otros ajustes. Ahora puedo encontrar la variable en el archivo de configuración de SSH:
# grep MaxAuthTries /etc/ssh/sshd_config
#MaxAuthTries 6
Solucionar problemas de anuncios legales
Lynis también informó sobre un hallazgo relacionado con los avisos legales que se muestran cuando inicia sesión en un sistema. En mi sistema de escritorio doméstico (donde no espero que muchas otras personas inicien sesión), no me he molestado en cambiar el issue
predeterminado archivos Es probable que un sistema corporativo o gubernamental deba incluir un anuncio legal para advertir a los usuarios que sus inicios de sesión y actividad pueden ser registrados y monitoreados. Lynis informa esto con las pruebas BANN-7126 y BANN-7130:
* Add a legal banner to /etc/issue, to warn unauthorized users [BANN-7126]
https://cisofy.com/lynis/controls/BANN-7126/
* Add legal banner to /etc/issue.net, to warn unauthorized users [BANN-7130]
https://cisofy.com/lynis/controls/BANN-7130/
No encuentro mucho en mi sistema que ejecuta Fedora 32 Workstation:
# cat /etc/issue /etc/issue.net
\S
Kernel \r on an \m (\l)
\S
Kernel \r on an \m (\l)
Podría agregar algo como "Manténgase al margen" o "No rompa nada", pero la descripción de la prueba no proporciona suficiente información para resolver el problema, así que eché otro vistazo a los scripts de Lynis. Noté que el include
El directorio contenía un archivo llamado tests_banners
; esto parecía un buen lugar para buscar. Con algo de ayuda de grep
, vi las pruebas asociadas:
# grep -E 'BANN-7126|BANN-7130' /usr/share/lynis/include/tests_banners
# Test : BANN-7126
Register --test-no BANN-7126 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue banner file contents"
# Test : BANN-7130
Register --test-no BANN-7130 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue.net banner file contents"
Después de examinar el código asociado en el archivo de la prueba, descubrí que ambas pruebas están iterando a través de algunos términos legales predefinidos con for
bucle:
for ITEM in ${LEGAL_BANNER_STRINGS}; do
Estos términos legales se almacenan en la variable LEGAL_BANNER_STRINGS
definido en la parte superior del archivo. Desplazarse hacia atrás hasta la parte superior muestra la lista completa:
LEGAL_BANNER_STRINGS="audit access authori condition connect consent continu criminal enforce evidence forbidden intrusion law legal legislat log monitor owner penal policy policies privacy private prohibited record restricted secure subject system terms warning"
Mis sugerencias iniciales ("manténgase alejado" y "no rompa nada") no habrían superado la prueba, porque no contienen ninguna palabra de esta lista.
Este mensaje de banner contiene varias de las palabras requeridas y, por lo tanto, cumplirá con esta prueba y evitará que Lynis lo informe:
Atención, al continuar conectándose a este sistema, usted acepta que el propietario almacene un registro de toda la actividad. El acceso no autorizado está prohibido.
Tenga en cuenta que este mensaje debe agregarse a ambos /etc/issue
y /etc/issue.net
.
Hacerlo repetible
Puede realizar estas ediciones manualmente, pero en su lugar puede considerar la automatización. Por ejemplo, puede haber muchas configuraciones que deban cambiarse, o es posible que deba realizar estas ediciones regularmente en muchos servidores. Crear un script de endurecimiento sería una excelente manera de optimizar este proceso. Para configuraciones SSH, algunos sed
los comandos en su secuencia de comandos de endurecimiento resolverán esos hallazgos. O bien, puede usar una declaración de eco para agregar los avisos legales:
sed -i '/MaxAuthTries/s/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config
echo "Legal Banner" | tee -a /etc/issue /etc/issue.net
La automatización le permite crear un script repetible que se puede guardar y administrar en toda su infraestructura. También podría incorporar esta secuencia de comandos en su aprovisionamiento inicial del servidor.
Reforzar su sistema
Este tipo de ejercicio puede mejorar sus habilidades de secuencias de comandos siguiendo el código existente y escribiendo sus propias secuencias de comandos. Debido a que es de código abierto, Lynis facilita ver bajo el capó cómo se verifica su sistema y qué significan sus informes. El resultado final será un sistema bien reforzado que podrá presumir cada vez que se presenten esos auditores.