Análisis de Registros de Auditoría de Linux para Detección de Intrusiones
Cuándo Usarlo
- Investigar sospechas de acceso no autorizado o escalada de privilegios en hosts Linux
- Buscar evidencia de explotación, instalación de backdoors o mecanismos de persistencia
- Auditar el cumplimiento de líneas base de seguridad (CIS, STIG, PCI-DSS) que requieren monitoreo de llamadas al sistema
- Reconstruir una línea de tiempo de las acciones del atacante durante la respuesta a incidentes
- Detectar manipulación de archivos en archivos críticos del sistema como
/etc/passwd,/etc/shadowo claves SSH
No usar para detección de intrusiones a nivel de red; use Suricata o Zeek para el análisis de tráfico de red. Auditd opera a nivel de kernel en hosts individuales.
Prerrequisitos
- Sistema Linux con el paquete
auditdinstalado y el demonio de auditoría en ejecución (systemctl status auditd) - Acceso root o sudo para configurar reglas de auditoría y consultar registros
- Reglas de auditoría desplegadas a través de
/etc/audit/rules.d/*.ruleso cargadas conauditctl - Recomendado: conjunto de reglas auditd de Neo23x0 de GitHub para una cobertura de línea base completa
- Familiaridad con las llamadas al sistema de Linux (
execve,open,connect,ptrace, etc.) - Almacenamiento de registros con retención suficiente (ubicación predeterminada:
/var/log/audit/audit.log)
Flujo de Trabajo
Paso 1: Verificar el Estado y la Configuración del Demonio de Auditoría
Confirme que el sistema de auditoría está en ejecución y verifique el conjunto de reglas actual:
# Verificar el estado del servicio auditd
systemctl status auditd
# Mostrar las reglas de auditoría cargadas en el kernel
auditctl -l
# Mostrar la configuración del demonio de auditoría
cat /etc/audit/auditd.conf | grep -E "log_file|max_log_file|num_logs|space_left_action"
# Verificar si el backlog de auditoría se está excediendo (eventos perdidos)
auditctl -s
Si se está alcanzando el límite del backlog, auméntelo:
auditctl -b 8192
Paso 2: Desplegar Reglas de Auditoría Enfocadas en Intrusiones
Agregue reglas que apunten a indicadores comunes de intrusión. Colóquelas en /etc/audit/rules.d/intrusion.rules:
# Monitorear archivos de credenciales para lecturas o modificaciones no autorizadas
-w /etc/passwd -p wa -k credential_access
-w /etc/shadow -p rwa -k credential_access
-w /etc/gshadow -p rwa -k credential_access
-w /etc/sudoers -p wa -k privilege_escalation
-w /etc/sudoers.d/ -p wa -k privilege_escalation
# Monitorear la configuración de SSH y las claves autorizadas
-w /etc/ssh/sshd_config -p wa -k sshd_config_change
-w /root/.ssh/authorized_keys -p wa -k ssh_key_tampering
# Monitorear comandos de gestión de usuarios y grupos
-w /usr/sbin/useradd -p x -k user_management
-w /usr/sbin/usermod -p x -k user_management
-w /usr/sbin/groupadd -p x -k user_management
# Detectar inyección de procesos mediante ptrace
-a always,exit -F arch=b64 -S ptrace -F a0=0x4 -k process_injection
-a always,exit -F arch=b64 -S ptrace -F a0=0x5 -k process_injection
-a always,exit -F arch=b64 -S ptrace -F a0=0x6 -k process_injection
# Monitorear la ejecución de programas desde directorios inusuales
-a always,exit -F arch=b64 -S execve -F exe=/tmp -k exec_from_tmp
-a always,exit -F arch=b64 -S execve -F exe=/dev/shm -k exec_from_shm
# Detectar carga de módulos del kernel (instalación de rootkits)
-a always,exit -F arch=b64 -S init_module -S finit_module -k kernel_module_load
-a always,exit -F arch=b64 -S delete_module -k kernel_module_remove
-w /sbin/insmod -p x -k kernel_module_tool
-w /sbin/modprobe -p x -k kernel_module_tool
# Monitorear la creación de sockets de red para shells inversas
-a always,exit -F arch=b64 -S socket -F a0=2 -k network_socket_created
-a always,exit -F arch=b64 -S connect -F a0=2 -k network_connection
# Detectar modificaciones de trabajos cron (persistencia)
-w /etc/crontab -p wa -k cron_persistence
-w /etc/cron.d/ -p wa -k cron_persistence
-w /var/spool/cron/ -p wa -k cron_persistence
# Monitorear la eliminación o manipulación de registros
-w /var/log/ -p wa -k log_tampering
Recargue las reglas después de editarlas:
augenrules --load
auditctl -l | wc -l # Confirmar el número de reglas
Paso 3: Buscar Indicadores de Intrusión con ausearch
Use ausearch para consultar el registro de auditoría en busca de eventos específicos:
# Buscar todos los intentos de inicio de sesión fallidos en las últimas 24 horas
ausearch -m USER_LOGIN --success no -ts recent
# Buscar comandos ejecutados por un usuario específico
ausearch -ua 1001 -m EXECVE -ts today
# Buscar todos los eventos de acceso a archivos en /etc/shadow
ausearch -f /etc/shadow -ts this-week
# Buscar escalada de privilegios mediante sudo
ausearch -m USER_CMD -ts today
# Buscar eventos de carga de módulos del kernel
ausearch -k kernel_module_load -ts this-month
# Buscar procesos ejecutados desde /tmp (escenario común de ataque)
ausearch -k exec_from_tmp -ts this-week
# Buscar modificaciones de claves SSH
ausearch -k ssh_key_tampering -ts this-month
# Buscar un evento específico por ID de evento de auditoría
ausearch -a 12345
# Buscar eventos en un rango de tiempo específico
ausearch -ts 03/15/2026 08:00:00 -te 03/15/2026 18:00:00
# Interpretar números de llamadas al sistema y formatear la salida de forma legible
ausearch -k credential_access -i -ts today
Paso 4: Generar Informes de Resumen con aureport
Use aureport para producir resúmenes agregados para triaje:
# Resumen de todos los eventos de autenticación
aureport -au -ts this-week --summary
# Informe de todos los eventos fallidos (inicio de sesión, acceso, etc.)
aureport --failed --summary -ts today
# Informe de ejecuciones de ejecutables
aureport -x --summary -ts today
# Informe de todos los eventos de anomalía (segfaults, modo promiscuo, etc.)
aureport --anomaly -ts this-week
# Informe de eventos de acceso a archivos
aureport -f --summary -ts today
# Informe de todos los eventos por clave (mapea a sus claves de reglas personalizadas)
aureport -k --summary -ts this-month
# Informe de todas las llamadas al sistema
aureport -s --summary -ts today
# Informe de eventos agrupados por usuario
aureport -u --summary -ts this-week
# Informe detallado de eventos basado en tiempo para la construcción de líneas de tiempo
aureport -ts 03/15/2026 08:00:00 -te 03/15/2026 18:00:00 --summary
Paso 5: Reconstruir la Línea de Tiempo del Ataque
Combine consultas ausearch para construir una narrativa cronológica:
# Paso 5a: Identificar la marca de tiempo de acceso inicial
ausearch -m USER_LOGIN -ua 0 --success yes -ts this-week -i | head -50
# Paso 5b: Rastrear lo que el atacante hizo después de obtener acceso
# Obtener todos los eventos de la cuenta comprometida dentro de la ventana del incidente
ausearch -ua <UID> -ts "03/15/2026 14:00:00" -te "03/15/2026 18:00:00" -i \
| aureport -f -i
# Paso 5c: Extraer todos los comandos ejecutados durante la ventana del incidente
ausearch -m EXECVE -ts "03/15/2026 14:00:00" -te "03/15/2026 18:00:00" -i
# Paso 5d: Verificar si se instalaron mecanismos de persistencia
ausearch -k cron_persistence -ts "03/15/2026 14:00:00" -i
ausearch -k ssh_key_tampering -ts "03/15/2026 14:00:00" -i
# Paso 5e: Verificar movimiento lateral (conexiones salientes)
ausearch -k network_connection -ts "03/15/2026 14:00:00" -i
Paso 6: Reenviar Registros de Auditoría al SIEM
Configure audisp-remote o auditbeat para enviar registros a un SIEM central para correlación:
# Opción A: Usando el plugin audisp-remote
# Editar /etc/audit/plugins.d/au-remote.conf
active = yes
direction = out
path = /sbin/audisp-remote
type = always
# Configurar el destino remoto en /etc/audit/audisp-remote.conf
remote_server = siem.internal.corp
port = 6514
transport = tcp
# Opción B: Usando Elastic Auditbeat
# Instalar auditbeat y configurar /etc/auditbeat/auditbeat.yml
# Auditbeat lee directamente del framework de auditoría del kernel
Conceptos Clave
| Término | Definición |
|---|---|
| auditd | El demonio de auditoría de Linux que recibe eventos de auditoría del kernel y los escribe en /var/log/audit/audit.log |
| auditctl | Utilidad de línea de comandos para controlar el sistema de auditoría: agregar/eliminar reglas, verificar estado, establecer tamaño del backlog |
| ausearch | Herramienta de consulta que busca en los registros de auditoría por tipo de mensaje, usuario, archivo, clave, rango de tiempo o ID de evento |
| aureport | Herramienta de informes que genera resúmenes agregados de eventos de auditoría para triaje y cumplimiento |
| clave de regla de auditoría (-k) | Una etiqueta definida por el usuario adjunta a una regla de auditoría, que permite el filtrado rápido de eventos relacionados con ausearch y aureport |
| auditoría de llamadas al sistema | Monitoreo a nivel de kernel de las llamadas al sistema (execve, open, connect, ptrace) que captura la actividad de procesos y archivos |
| augenrules | Utilidad que fusiona todos los archivos en /etc/audit/rules.d/ en /etc/audit/audit.rules y los carga en el kernel |
Verificación
- auditd está en ejecución y las reglas están cargadas (
auditctl -ldevuelve el número esperado de reglas) - No hay desbordamiento del backlog de auditoría (
auditctl -smuestrabacklog: 0o un valor bajo, lost: 0) - ausearch devuelve eventos para cada clave personalizada (
ausearch -k <key> -ts todaydevuelve resultados) - aureport genera resúmenes no vacíos para eventos de autenticación, ejecutables y archivos
- La reconstrucción de la línea de tiempo produce una secuencia cronológica coherente de las acciones del atacante
- Las vigilancias de archivos críticos activan alertas en modificaciones de prueba (
touch /etc/shadowgenera un evento) - Los registros se están reenviando al SIEM central (verifique con un evento de prueba y confirme la recepción)
- Las reglas de auditoría persisten tras el reinicio (reglas en
/etc/audit/rules.d/, no solo a través deauditctl)