28 julio 2014

Auditando la seguridad de un servidor RedHat y sus derivados

Luego de unos cuantos años, por requerimientos de mi trabajo, tuve que retomar un viejo proyecto "checklistlinux", el cual tiene como objetivo verificar el hardening de un servidor RedHat o alguno de sus derivados comparando su configuración con mejores prácticas de seguridad.



Cabe aclarar que debía cumplir con ciertas pautas ya establecidas. Por este motivo no utilice "lynis" para la tarea. 

El proyecto está desarrollado en PERL y cuenta con 41 scripts que pertenecen a las fases que son ejecutadas durante el análisis. 

Las fases se dividen de la siguiente forma:
  • Fase 0.0 -- Información del Equipo
  • Fase 1.0 -- Información de los usuarios del sistema
  • Fase 1.1 -- Comprobación de Usuarios/Grupos
  • Fase 1.2 -- Verificar que no existan cuentas con password vacías
  • Fase 1.3 -- Verificar que no existan usuarios con ID 0
  • Fase 1.4 -- Verificación del archivo login.defs
  • Fase 1.5 -- Últimos usuarios agregados
  • Fase 1.6 -- Configuración PAM
  • Fase 1.7 -- Últimos usuarios conectados
  • Fase 1.8 -- Últimos comandos ejecutados por los usuarios
  • Fase 1.9 -- Relaciones de confianza
  • Fase 1.10 -- Usuarios con acceso al sistema
  • Fase 1.11 -- Verificar que no existan usuarios con Grupo ID 0
  • Fase 2.0 -- Eventos mediante Syslog - AUTHPRIV
  • Fase 2.1 -- Eventos mediante Rsyslog - AUTHPRIV
  • Fase 3.0 -- Verificar permisos en archivos y directorios
  • Fase 3.1 -- Verificación de Sticky Bit
  • Fase 3.2 -- Verificación de archivos con permisos de escritura para todos los usuarios
  • Fase 3.3 -- Verificación de suid/gsid
  • Fase 3.4 -- Verificación  de archivos sin usuario asignado y grupo
  • Fase 4.0 -- Archivo de autenticación ftp
  • Fase 5.0 -- Cierre de conexión automático
  • Fase 6.0 -- Banner personalizado
  • Fase 7.0 -- Verificación de la configuración del servicio ssh
  • Fase 8.0 -- Verificación  de SeLinux
  • Fase 9.0 -- Verificación  de IPTABLES
  • Fase 10.0 -- Verificación  de Servicios
  • Fase 11.0 -- Verificación  de Procesos
  • Fase 12.0 -- Verificación  de Conexiones
  • Fase 13.0 -- Verificación  de Hash de binarios
  • Fase 14.0 -- Configuración de Sudoers
  • Fase 15.0 -- Cron.Daily
  • Fase 16.0 -- Versiones de softwares
  • Fase 17.0 -- Configuración de Red
  • Fase 17.1 -- Verificación de rutas
  • Fase 17.2 -- Verificación configuración sysctl
  • Fase 18.0 -- Verificar el nivel de inittab
  • Fase 18.1 -- Verificar que no este activo ctrlaltdel en inittab
  • Fase 19.0 -- Verificar configuración samba
  • Fase 20.0 -- Verificar sincronización NTP
Comenzamos a describir el procedimiento de uso:
  1. Descargamos la herramienta: https://github.com/marcositu/redhatchecklist
  2. Luego debemos descomprimir el archivo "master.zip"
  3. Personalizamos algunos parámetros buscados.
    • Modificar la línea "20" del archivo /libs/fase6.pl donde se encuentra la variable "$bannerpersona" con el valor "Cable" por algún string que se encuentra en el banner personalizado de su Compañía. 
    • Modificar la línea "29" del archivo /libs/fase7.pl donde se encuentra la variable "ListenAddress" con el valor '10.246' por las direcciones IP que deben estar configuradas. 
  4. Luego, debemos copiar el archivo redhatchecklist.pl y el directorio /libs/ al servidor que será analizado.
  5. Una vez que tenemos los archivos en nuestro servidor, ejecutamos la herramienta para comenzar con el análisis.
    [root@miserver]# perl redhatchecklist.pl
  6. El último paso es copiar a nuestra computadora los 2 reportes HTML que nos generó la herramienta en la misma carpeta que tenemos los siguientes archivos y directorios:
  • /src/
  • /vendor/
  • demo.css
  • sprite.png
A continuación, les dejamos algunas capturas de pantalla de un análisis ejecutado:

Informe:

Descripción de un hallazgo:

Recomendación:

Si alguna persona quiere ayudarme a optimizar/organizar o reprogramar el "código" es bienvenida, como verán voluntad no me falto pero el código no es el mejor logrado.

Artículo cortesía de marcositu

    3 comments :

    ykvi dijo...

    muy buen proyecto, me llama mucha la curiosidad

    Santiago Bernal B dijo...

    Marcos, lo estuve probando en uno de mis servidores, pero se congela en el punto 9 de iptables.

    4lfr3d7115 dijo...

    Probado en un centOS 6.X sin inconvenientes.. excepto por la fase 1.10 "Usuarios con acceso al sistema" se repite 2 veces...el reporte de esa fase.