¿Alguna vez ha pensado en cuán segura es realmente su máquina Linux? Hay numerosas distribuciones de Linux, cada una con su propia configuración predeterminada, en las que ejecuta docenas de paquetes de software con diferentes números de versión y numerosos servicios que se ejecutan en segundo plano, que apenas conocemos o nos importan.
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
Para encontrar la postura de seguridad, el estado de seguridad general del software, la red y los servicios que se ejecutan en su máquina Linux, puede ejecutar algunos comandos y obtener fragmentos de información relevante, pero la cantidad de datos que necesita analizar es enorme. .
Sería mucho mejor si pudiera ejecutar una herramienta que genera un informe sobre la postura de seguridad de una máquina. Y por suerte hay una:Lynis. Es una herramienta de auditoría de seguridad de código abierto extremadamente popular que ayuda a fortalecer los sistemas basados en Linux y Unix. Según el proyecto:
"Realiza un escaneo de seguridad en profundidad y se ejecuta en el propio sistema. El objetivo principal es probar las defensas de seguridad y brindar consejos para fortalecer aún más el sistema. También buscará información general del sistema, paquetes de software vulnerables y posibles problemas de configuración. Lynis [es] comúnmente utilizado por administradores de sistemas y auditores para evaluar las defensas de seguridad de sus sistemas".
Instalar Lynis
Lynis podría estar disponible en su repositorio de software de Linux. Si es así, puede instalarlo usando:
dnf install lynis
o
apt install lynis
Sin embargo, si la versión en su repositorio no es la última, es mejor que la instale desde GitHub. (Estoy usando un sistema Red Hat Linux, pero puede ejecutarlo en cualquier distribución de Linux). Como con todas las herramientas, tiene sentido probarlo primero en una máquina virtual. Para instalarlo desde GitHub:
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.8 (Maipo)
$
$ uname -r
3.10.0-1127.el7.x86_64
$
$ git clone https://github.com/CISOfy/lynis.git
Cloning into 'lynis'...
remote: Enumerating objects: 30, done.
remote: Counting objects: 100% (30/30), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 12566 (delta 15), reused 8 (delta 0), pack-reused 12536
Receiving objects: 100% (12566/12566), 6.36 MiB | 911.00 KiB/s, done.
Resolving deltas: 100% (9264/9264), done.
$
Una vez que haya clonado el repositorio, muévase a él y vea qué hay disponible. La herramienta principal está en un archivo llamado lynis . En realidad, es un script de shell, por lo que puede abrirlo y leer lo que está haciendo. De hecho, Lynis se implementa principalmente mediante scripts de shell:
$ cd lynis/
$ ls
CHANGELOG.md CONTRIBUTING.md db developer.prf FAQ include LICENSE lynis.8 README SECURITY.md
CODE_OF_CONDUCT.md CONTRIBUTORS.md default.prf extras HAPPY_USERS.md INSTALL lynis plugins README.md
$
$ file lynis
lynis: POSIX shell script, ASCII text executable, with very long lines
$
Ejecutar Lynis
Saca a Lynis a dar una vuelta dándole una -h opción para ver la sección de Ayuda:
$ ./lynis -h
Verá una breve pantalla de información seguida de todos los comandos compatibles con Lynis.
A continuación, pruebe algunos comandos de prueba para familiarizarse con las cosas y sentirse cómodo. Para ver con qué versión de Lynis está trabajando, ejecute:
$ ./lynis show version
3.0.0
$
Para ver todos los comandos disponibles en Lynis:
$ ./lynis show commands
Commands:
lynis audit
lynis configure
lynis generate
lynis show
lynis update
lynis upload-only
$
Auditoría de un sistema Linux
Para auditar la postura de seguridad de su sistema, ejecute el siguiente comando:
$ ./lynis audit system
Esto se ejecuta rápidamente y devuelve un informe detallado:el resultado puede parecer intimidante al principio, pero lo guiaré a continuación. La salida del comando también se guarda en un archivo de registro, por lo que siempre puede volver más tarde y verificar cualquier cosa que pueda ser de su interés.
Lynis guarda los registros aquí:
Files:
- Test and debug information : /var/log/lynis.log
- Report data : /var/log/lynis-report.dat
Puede verificar si los archivos de registro se crearon y, de hecho, lo fueron:
$ ls -l /var/log/lynis.log
-rw-r-----. 1 root root 341489 Apr 30 05:52 /var/log/lynis.log
$
$ ls -l /var/log/lynis-report.dat
-rw-r-----. 1 root root 638 Apr 30 05:55 /var/log/lynis-report.dat
$
Explore los informes
Lynis proporciona informes bastante completos, por lo que cubriré algunas de las secciones importantes. Lo primero que hace Lynis como parte de la inicialización es encontrar información completa sobre el sistema operativo que se ejecuta en la máquina. A esto le siguen verificaciones para ver qué herramientas y complementos del sistema están instalados:
[+] Initializing program
------------------------------------
- Detecting OS... [ DONE ]
- Checking profiles... [ DONE ]
---------------------------------------------------
Program version: 3.0.0
Operating system: Linux
Operating system name: Red Hat Enterprise Linux Server 7.8 (Maipo)
Operating system version: 7.8
Kernel version: 3.10.0
Hardware platform: x86_64
Hostname: example
---------------------------------------------------
<<snip>>
[+] System Tools
------------------------------------
- Scanning available tools...
- Checking system binaries...
[+] Plugins (phase 1)
------------------------------------
Note: plugins have more extensive tests and may take several minutes to complete
- Plugin: pam
[..]
- Plugin: systemd
[................]
A continuación, el informe se divide en varias secciones, y cada sección comienza con un [+] símbolo. Algunas de las secciones se pueden ver a continuación. (¡Vaya, hay tantas áreas para auditar y Lynis es la herramienta adecuada para el trabajo!)
[+] Boot and services
[+] Kernel
[+] Memory and Processes
[+] Users, Groups and Authentication
[+] Shells
[+] File systems
[+] USB Devices
[+] Storage
[+] NFS
[+] Name services
[+] Ports and packages
[+] Networking
[+] Printers and Spools
[+] Software: e-mail and messaging
[+] Software: firewalls
[+] Software: webserver
[+] SSH Support
[+] SNMP Support
[+] Databases
[+] LDAP Services
[+] PHP
[+] Squid Support
[+] Logging and files
[+] Insecure services
[+] Banners and identification
[+] Scheduled tasks
[+] Accounting
[+] Time and Synchronization
[+] Cryptography
[+] Virtualization
[+] Containers
[+] Security frameworks
[+] Software: file integrity
[+] Software: System tooling
[+] Software: Malware
[+] File Permissions
[+] Home directories
[+] Kernel Hardening
[+] Hardening
[+] Custom tests
Lynis utiliza un código de colores para que el informe sea más fácil de analizar:
- Verde:todo bien
- Amarillo:Omitido, no encontrado o puede tener una sugerencia
- Rojo:es posible que tengas que echarle un vistazo más de cerca
En mi caso, la mayoría de las marcas rojas se encontraron en la sección de endurecimiento del kernel. El kernel tiene varias configuraciones ajustables que definen cómo funciona el kernel, y algunas de estas configuraciones ajustables pueden tener un contexto de seguridad. Es posible que la distribución no los configure de forma predeterminada por varias razones, pero debe examinar cada uno y ver si necesita cambiar su valor en función de su postura de seguridad:
[+] Kernel Hardening
------------------------------------
- Comparing sysctl key pairs with scan profile
- fs.protected_hardlinks (exp: 1) [ OK ]
- fs.protected_symlinks (exp: 1) [ OK ]
- fs.suid_dumpable (exp: 0) [ OK ]
- kernel.core_uses_pid (exp: 1) [ OK ]
- kernel.ctrl-alt-del (exp: 0) [ OK ]
- kernel.dmesg_restrict (exp: 1) [ DIFFERENT ]
- kernel.kptr_restrict (exp: 2) [ DIFFERENT ]
- kernel.randomize_va_space (exp: 2) [ OK ]
- kernel.sysrq (exp: 0) [ DIFFERENT ]
- kernel.yama.ptrace_scope (exp: 1 2 3) [ DIFFERENT ]
- net.ipv4.conf.all.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.all.accept_source_route (exp: 0) [ OK ]
- net.ipv4.conf.all.bootp_relay (exp: 0) [ OK ]
- net.ipv4.conf.all.forwarding (exp: 0) [ OK ]
- net.ipv4.conf.all.log_martians (exp: 1) [ DIFFERENT ]
- net.ipv4.conf.all.mc_forwarding (exp: 0) [ OK ]
- net.ipv4.conf.all.proxy_arp (exp: 0) [ OK ]
- net.ipv4.conf.all.rp_filter (exp: 1) [ OK ]
- net.ipv4.conf.all.send_redirects (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.default.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.default.accept_source_route (exp: 0) [ OK ]
- net.ipv4.conf.default.log_martians (exp: 1) [ DIFFERENT ]
- net.ipv4.icmp_echo_ignore_broadcasts (exp: 1) [ OK ]
- net.ipv4.icmp_ignore_bogus_error_responses (exp: 1) [ OK ]
- net.ipv4.tcp_syncookies (exp: 1) [ OK ]
- net.ipv4.tcp_timestamps (exp: 0 1) [ OK ]
- net.ipv6.conf.all.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv6.conf.all.accept_source_route (exp: 0) [ OK ]
- net.ipv6.conf.default.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv6.conf.default.accept_source_route (exp: 0) [ OK ]
Mire SSH, un ejemplo, ya que es un área clave y debe protegerse. No hay nada en rojo aquí, pero Lynis tiene muchas sugerencias sobre cómo fortalecer el servicio SSH en mi configuración:
[+] SSH Support
------------------------------------
- Checking running SSH daemon [ FOUND ]
- Searching SSH configuration [ FOUND ]
- OpenSSH option: AllowTcpForwarding [ SUGGESTION ]
- OpenSSH option: ClientAliveCountMax [ SUGGESTION ]
- OpenSSH option: ClientAliveInterval [ OK ]
- OpenSSH option: Compression [ SUGGESTION ]
- OpenSSH option: FingerprintHash [ OK ]
- OpenSSH option: GatewayPorts [ OK ]
- OpenSSH option: IgnoreRhosts [ OK ]
- OpenSSH option: LoginGraceTime [ OK ]
- OpenSSH option: LogLevel [ SUGGESTION ]
- OpenSSH option: MaxAuthTries [ SUGGESTION ]
- OpenSSH option: MaxSessions [ SUGGESTION ]
- OpenSSH option: PermitRootLogin [ SUGGESTION ]
- OpenSSH option: PermitUserEnvironment [ OK ]
- OpenSSH option: PermitTunnel [ OK ]
- OpenSSH option: Port [ SUGGESTION ]
- OpenSSH option: PrintLastLog [ OK ]
- OpenSSH option: StrictModes [ OK ]
- OpenSSH option: TCPKeepAlive [ SUGGESTION ]
- OpenSSH option: UseDNS [ SUGGESTION ]
- OpenSSH option: X11Forwarding [ SUGGESTION ]
- OpenSSH option: AllowAgentForwarding [ SUGGESTION ]
- OpenSSH option: UsePrivilegeSeparation [ OK ]
- OpenSSH option: AllowUsers [ NOT FOUND ]
- OpenSSH option: AllowGroups [ NOT FOUND ]
No tengo máquinas virtuales o contenedores ejecutándose en mi sistema, por lo que muestran resultados vacíos:
[+] Virtualization
------------------------------------
[+] Containers
------------------------------------
Lynis comprueba los permisos de archivo en algunos archivos que son importantes desde el punto de vista de la seguridad:
[+] File Permissions
------------------------------------
- Starting file permissions check
File: /boot/grub2/grub.cfg [ SUGGESTION ]
File: /etc/cron.deny [ OK ]
File: /etc/crontab [ SUGGESTION ]
File: /etc/group [ OK ]
File: /etc/group- [ OK ]
File: /etc/hosts.allow [ OK ]
File: /etc/hosts.deny [ OK ]
File: /etc/issue [ OK ]
File: /etc/issue.net [ OK ]
File: /etc/motd [ OK ]
File: /etc/passwd [ OK ]
File: /etc/passwd- [ OK ]
File: /etc/ssh/sshd_config [ OK ]
Directory: /root/.ssh [ SUGGESTION ]
Directory: /etc/cron.d [ SUGGESTION ]
Directory: /etc/cron.daily [ SUGGESTION ]
Directory: /etc/cron.hourly [ SUGGESTION ]
Directory: /etc/cron.weekly [ SUGGESTION ]
Directory: /etc/cron.monthly [ SUGGESTION ]
Hacia la parte inferior del informe, Lynis ofrece sugerencias basadas en los hallazgos del informe. Cada sugerencia va seguida de un TEST-ID (mantén esto a mano para la siguiente parte):
Suggestions (47):
----------------------------
* If not required, consider explicit disabling of core dump in /etc/security/limits.conf file [KRNL-5820]
https://cisofy.com/lynis/controls/KRNL-5820/
* Check PAM configuration, add rounds if applicable and expire passwords to encrypt with new values [AUTH-9229]
https://cisofy.com/lynis/controls/AUTH-9229/
Lynis ofrece una opción para encontrar más información sobre cada sugerencia, a la que puede acceder mediante mostrar detalles comando seguido del número de identificación de la prueba:
./lynis show details TEST-ID
Esto mostrará información adicional sobre esa prueba. Por ejemplo, verifiqué los detalles de SSH-7408:
$ ./lynis show details SSH-7408
2020-04-30 05:52:23 Performing test ID SSH-7408 (Check SSH specific defined options)
2020-04-30 05:52:23 Test: Checking specific defined options in /tmp/lynis.k8JwazmKc6
2020-04-30 05:52:23 Result: added additional options for OpenSSH < 7.5
2020-04-30 05:52:23 Test: Checking AllowTcpForwarding in /tmp/lynis.k8JwazmKc6
2020-04-30 05:52:23 Result: Option AllowTcpForwarding found
2020-04-30 05:52:23 Result: Option AllowTcpForwarding value is YES
2020-04-30 05:52:23 Result: OpenSSH option AllowTcpForwarding is in a weak configuration state and should be fixed
2020-04-30 05:52:23 Suggestion: Consider hardening SSH configuration [test:SSH-7408] [details:AllowTcpForwarding (set YES to NO)] [solution:-]
Pruébalo
Si desea obtener más información sobre la seguridad de su máquina Linux, consulte Lynis. Y, si desea aprender cómo funciona Lynis, profundice en sus scripts de shell para ver cómo recopila toda esta información.