auditd: Guía para Estudiantes de Ciberseguridad

🔍 ¿Qué es auditd?

auditd es el demonio (daemon) del sistema de auditoría del kernel Linux que proporciona capacidades de registro y monitoreo de eventos del sistema en tiempo real. Forma parte del Linux Audit Framework, un conjunto de herramientas diseñadas para ayudar a los administradores de sistemas a crear un rastro de auditoría de prácticamente todas las acciones realizadas en el sistema.

Este sistema permite rastrear accesos a archivos, ejecución de comandos, cambios en configuraciones del sistema, intentos de autenticación, modificaciones de permisos, y muchos otros eventos críticos para la seguridad. auditd opera a nivel del kernel, lo que significa que puede capturar eventos que ocurren incluso antes de que las aplicaciones de espacio de usuario puedan intervenir.

auditd es fundamental para cumplir con estándares de seguridad como PCI DSS, HIPAA, SOX, y requisitos de certificación como Common Criteria.

🏢 Dónde se emplea auditd

Entornos Empresariales

auditd es ampliamente utilizado en:

  • Centros de datos corporativos - Para monitorear servidores críticos y cumplir con políticas de seguridad internas
  • Instituciones financieras - Cumplimiento de regulaciones PCI DSS y auditorías de transacciones
  • Organizaciones sanitarias - Cumplimiento de HIPAA para proteger información médica sensible
  • Agencias gubernamentales - Monitoreo de sistemas clasificados y cumplimiento de estándares como FISMA
  • Proveedores de servicios cloud - Auditoría de accesos y actividades en infraestructura compartida

Casos de Uso Específicos

  • Detección de intrusiones - Identificar actividades sospechosas o no autorizadas
  • Análisis forense - Reconstruir secuencias de eventos durante incidentes de seguridad
  • Monitoreo de privilegios - Rastrear uso de comandos sudo y cambios de usuario
  • Auditoría de archivos sensibles - Monitorear accesos a datos confidenciales
  • Cumplimiento normativo - Generar informes para auditorías externas

🏗️ Arquitectura y Componentes

El Linux Audit Framework está compuesto por varios componentes que trabajan en conjunto:

Componentes Principales

  • auditd: El demonio principal que recibe eventos del kernel y los escribe en disco
  • auditctl: Herramienta para controlar el sistema de auditoría y gestionar reglas
  • ausearch: Utilidad para buscar eventos específicos en los logs de auditoría
  • aureport: Genera reportes resumidos y estadísticas de los eventos auditados
  • audispd: Dispatcher de eventos que puede enviar eventos a otros programas
  • auditspd: Plugins para procesamiento adicional de eventos

Flujo de Eventos

  1. Captura: El kernel detecta un evento basado en las reglas activas
  2. Envío: El kernel envía el evento a auditd a través de una cola
  3. Procesamiento: auditd procesa el evento (filtrado, formateo)
  4. Almacenamiento: El evento se escribe en el archivo de log
  5. Distribución: Si está configurado, el evento se envía a otros sistemas

Tipos de Reglas de Auditoría

  • Reglas de control (-D, -e): Para gestionar el sistema de auditoría
  • Reglas de archivo (-w): Para monitorear cambios en archivos y directorios
  • Reglas de syscall (-a, -A): Para monitorear llamadas al sistema
  • Reglas de usuario (-u): Para auditoría específica de usuarios
  • Reglas de exit (-F): Para filtrar eventos basados en campos específicos

⚙️ Configuración Avanzada de auditd

Instalación y Configuración Inicial

# En sistemas basados en Red Hat/CentOS/RHEL 7+
sudo yum install audit audit-libs

# En CentOS/RHEL 8+ y Fedora
sudo dnf install audit audit-libs

# En sistemas basados en Debian/Ubuntu
sudo apt-get install auditd audispd-plugins

# Verificar estado del kernel
sudo auditctl -s

# Iniciar y habilitar el servicio
sudo systemctl start auditd
sudo systemctl enable auditd

Archivos de Configuración

  • /etc/audit/auditd.conf - Configuración principal del demonio
  • /etc/audit/audit.rules - Reglas de auditoría (deprecated en RHEL 8+)
  • /etc/audit/rules.d/ - Directorio para reglas modulares (recomendado)
  • /etc/audisp/ - Configuración del dispatcher
  • /etc/audisp/plugins.d/ - Plugins del dispatcher

Configuración Optimizada del Demonio

# /etc/audit/auditd.conf optimizado
log_file = /var/log/audit/audit.log
log_format = ENRICHED
log_group = root
priority_boost = 4
flush = INCREMENTAL_ASYNC
freq = 50
num_logs = 10
max_log_file = 100
max_log_file_action = ROTATE
space_left = 75
space_left_action = EMAIL
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
tcp_listen_port = 60
tcp_max_per_addr = 1
use_libwrap = yes
tcp_client_ports = 1024-65535
enable_krb5 = no
krb5_principal = auditd

Reglas de Auditoría por Cumplimiento

STIG Compliance (Security Technical Implementation Guide)

# Reglas para cumplimiento STIG
-w /etc/selinux/ -p wa -k MAC-policy
-w /usr/share/selinux/ -p wa -k MAC-policy

# Auditoría de módulos del kernel
-w /etc/modprobe.d/ -p wa -k modules
-w /etc/modules-load.d/ -p wa -k modules

# Configuración de red crítica
-w /etc/ipsec.d/ -p wa -k ipsec-config
-w /etc/libreswan/ -p wa -k ipsec-config

PCI DSS Compliance

# Reglas específicas para PCI DSS
-w /var/log/audit/ -p wa -k audit-logs
-w /etc/audit/ -p wa -k audit-config

# Monitoreo de datos sensibles
-w /etc/pci/ -p wa -k pci-config
-w /var/log/pci/ -p wa -k pci-logs

HIPAA Compliance

# Reglas para protección de datos médicos
-w /var/log/hipaa/ -p wa -k hipaa-logs
-w /etc/hipaa/ -p wa -k hipaa-config

# Auditoría de acceso a registros médicos
-a always,exit -F arch=b64 -S openat -F path=/var/medical -k hipaa-access

Reglas de Seguridad Esenciales

# === REGLAS DE CONTROL ===
-D  # Eliminar todas las reglas
-e 2  # Habilitar auditoría

# === IDENTIDAD Y AUTENTICACIÓN ===
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/sudoers -p wa -k identity
-w /etc/sudoers.d/ -p wa -k identity

# === LOGS DE AUTENTICACIÓN ===
-w /var/log/lastlog -p wa -k logins
-w /var/log/faillog -p wa -k logins
-w /var/log/btmp -p wa -k logins

# === CONFIGURACIÓN DEL SISTEMA ===
-w /etc/hosts -p wa -k network
-w /etc/network/ -p wa -k network
-w /etc/netplan/ -p wa -k network
-w /etc/sysconfig/network -p wa -k network

# === SYSCALLS CRÍTICOS ===
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -k perm_mod
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -k perm_mod
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -k delete

# === EJECUTABLES PRIVILEGIADOS ===
-w /bin/su -p x -k privileged
-w /usr/bin/sudo -p x -k privileged
-w /usr/bin/ssh -p x -k privileged
-w /usr/bin/scp -p x -k privileged
-w /usr/bin/sftp -p x -k privileged

# === ACCESO A ARCHIVOS SENSIBLES ===
-a always,exit -F arch=b64 -S openat -F path=/etc/passwd -k sensitive-files
-a always,exit -F arch=b64 -S openat -F path=/etc/shadow -k sensitive-files

Gestión de Reglas

# Ver estado del sistema
sudo auditctl -s

# Listar reglas activas
sudo auditctl -l

# Agregar regla temporal
sudo auditctl -w /etc/hosts -p wa -k network-config

# Eliminar regla temporal
sudo auditctl -W /etc/hosts

# Cargar reglas desde archivo
sudo auditctl -R /etc/audit/rules.d/custom.rules

# Verificar sintaxis de reglas
sudo auditctl -c /etc/audit/rules.d/audit.rules

🔍 Análisis y Búsqueda de Eventos

Campos de Eventos de Auditoría

Cada evento de auditoría contiene múltiples campos que proporcionan información detallada:

  • type: Tipo de evento (SYSCALL, USER_LOGIN, etc.)
  • pid: ID del proceso que generó el evento
  • uid: ID del usuario que ejecutó la acción
  • auid: ID de auditoría del usuario (persiste a través de sudo)
  • comm: Nombre del comando ejecutado
  • exe: Ruta completa del ejecutable
  • key: Etiqueta personalizada asignada por reglas
  • arch: Arquitectura (b64 para 64-bit, b32 para 32-bit)

Búsqueda con ausearch

# Buscar por clave
sudo ausearch -k identity

# Buscar por tipo de evento
sudo ausearch -m USER_LOGIN
sudo ausearch -m SYSCALL

# Buscar por usuario
sudo ausearch -ui 1000
sudo ausearch -ua 1000

# Buscar por PID
sudo ausearch -p 1234

# Buscar por archivo
sudo ausearch -f /etc/passwd

# Buscar en un rango de tiempo
sudo ausearch -ts today -te now
sudo ausearch -ts yesterday -te today

# Búsqueda combinada
sudo ausearch -k identity -ui 1000 -ts today

Generación de Reportes con aureport

# Reporte de autenticación
sudo aureport --auth

# Reporte de archivos
sudo aureport --file

# Reporte de usuarios
sudo aureport --user

# Reporte de comandos ejecutados
sudo aureport --executable

# Reporte de accesos denegados
sudo aureport --failed

# Reportes por fecha
sudo aureport --start 01/01/2024 --end 12/31/2024

# Reportes en tiempo real
sudo aureport --input-logs

Análisis de Eventos en Tiempo Real

# Monitoreo en tiempo real
sudo tail -f /var/log/audit/audit.log

# Usando aureport para análisis continuo
sudo watch -n 5 'aureport --failed --since 05:00:00'

# Análisis de patrones con awk
sudo ausearch -k privileged | aureport --file --summary

⚡ Optimización y Rendimiento

Consideraciones de Rendimiento

Las reglas de auditoría pueden impactar significativamente el rendimiento del sistema:

  • Reglas específicas vs genéricas: Las reglas específicas (-w /ruta/exacta) son más eficientes que las genéricas
  • Syscalls frecuentes: Evitar auditar syscalls muy comunes como open() sin filtros
  • Volumen de logs: Monitorear el crecimiento de /var/log/audit/
  • Procesamiento en tiempo real: Considerar el impacto en sistemas de alta carga

Técnicas de Optimización

# Reglas optimizadas para rendimiento
-w /etc/ -p wa -k etc-modify

# En lugar de múltiples reglas específicas:
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity

# Usar filtros para reducir eventos
-a always,exit -F arch=b64 -S openat -F path=/etc/passwd -k sensitive

# Configuración de buffer
sudo auditctl -b 8192  # Aumentar buffer del kernel

Monitoreo de Rendimiento

# Ver estadísticas del sistema de auditoría
sudo auditctl -s

# Monitorear uso de CPU por auditd
ps aux | grep auditd

# Ver logs del sistema relacionados con auditoría
sudo journalctl -u auditd

# Monitoreo de espacio en disco
sudo df -h /var/log/audit/

# Análisis de rendimiento con perf
sudo perf record -e audit:* -a sleep 10

Estrategias de Filtrado

  • Filtros por usuario: -F uid!=0 para excluir root
  • Filtros por proceso: -F exe=/usr/bin/sudo
  • Filtros por resultado: -F success=1 para solo exitosos
  • Filtros por tiempo: Limitar auditoría a horarios específicos

🔧 Solución de Problemas

Problemas Comunes y Soluciones

1. Reglas No Persisten Después del Reinicio

# Problema: Reglas temporales se pierden
sudo auditctl -l > /tmp/rules_backup.txt

# Solución: Usar directorio rules.d/
sudo cp /tmp/rules_backup.txt /etc/audit/rules.d/persistent.rules
sudo systemctl restart auditd

2. Espacio en Disco Agotado

# Verificar tamaño de logs
sudo du -sh /var/log/audit/

# Configurar rotación automática
sudo vim /etc/audit/auditd.conf
# max_log_file = 50
# max_log_file_action = ROTATE

# Limpiar logs antiguos
sudo find /var/log/audit/ -name "audit.log.*" -type f -delete

3. Eventos No se Registran

# Verificar si auditd está corriendo
sudo systemctl status auditd

# Verificar reglas activas
sudo auditctl -l

# Verificar permisos de archivos
sudo ls -la /var/log/audit/

# Revisar logs del sistema
sudo journalctl -u auditd -f

4. Rendimiento Degradado

# Identificar reglas problemáticas
sudo auditctl -l | grep -i open

# Optimizar reglas
sudo auditctl -W /path/to/problematic/file

# Ver estadísticas
sudo auditctl -s

5. Errores de Configuración

# Validar sintaxis de reglas
sudo auditctl -c /etc/audit/rules.d/audit.rules

# Ver logs de error
sudo tail -f /var/log/messages | grep audit

# Verificar configuración
sudo auditd -f /etc/audit/auditd.conf

Herramientas de Diagnóstico

# Análisis completo del sistema de auditoría
sudo aureport --summary

# Ver eventos por tipo
sudo ausearch -m all | aureport --event --summary

# Análisis de cobertura
sudo auditctl -l | wc -l

# Verificar integridad
sudo rpm -V audit

🤝 Integración con Otras Herramientas

Integración con OSSEC/Wazuh

# Configurar OSSEC para monitorear auditd
# En /var/ossec/etc/ossec.conf

  syslog
  /var/log/audit/audit.log


# Reiniciar OSSEC
sudo systemctl restart wazuh-agent

Integración con Fail2Ban

# Configurar jail para auditd
# En /etc/fail2ban/jail.local
[auditd]
enabled = true
logpath = /var/log/audit/audit.log
banaction = iptables-multiport
findtime = 600
bantime = 3600
maxretry = 3

Integración con rsyslog

# Configurar envío remoto de logs
# En /etc/rsyslog.conf
*.* @@log-server.empresa.com:514;RSYSLOG_SyslogProtocol23Format

# Configurar audisp-syslog
# En /etc/audisp/plugins.d/syslog.conf
active = yes
direction = out
path = /sbin/audisp-syslog
type = always
format = string

Automatización con Scripts

#!/bin/bash
# Script de gestión de auditd

# Función para backup de logs
backup_audit_logs() {
    TIMESTAMP=$(date +%Y%m%d_%H%M%S)
    tar -czf /backup/audit_logs_$TIMESTAMP.tar.gz /var/log/audit/
}

# Función para análisis de eventos críticos
analyze_critical_events() {
    ausearch -k privileged -ts today | aureport --summary
}

# Función para limpieza de logs antiguos
cleanup_old_logs() {
    find /var/log/audit/ -name "*.log" -mtime +30 -delete
}

# Menú principal
case "$1" in
    backup) backup_audit_logs ;;
    analyze) analyze_critical_events ;;
    cleanup) cleanup_old_logs ;;
    *) echo "Uso: $0 {backup|analyze|cleanup}" ;;
esac

📚 Casos Prácticos y Ejemplos

Caso 1: Detección de Actividad Sospechosa

# Buscar intentos de escalada de privilegios
sudo ausearch -k privileged -ts yesterday | aureport --user --summary

# Identificar accesos fuera de horario
sudo ausearch -ts 22:00 -te 06:00 -m USER_LOGIN

# Detectar modificaciones en archivos críticos
sudo ausearch -k identity -ts today

Caso 2: Análisis Forense Post-Incidente

# Reconstruir timeline de eventos
sudo ausearch -ts "2024-01-01 00:00:00" -te "2024-01-01 23:59:59" | aureport --event

# Identificar procesos comprometidos
sudo ausearch -p 1234 -o /tmp/process_analysis.txt

# Buscar conexiones de red relacionadas
sudo ausearch -m SOCKADDR -ts today

Caso 3: Cumplimiento y Auditoría

# Generar reporte mensual de accesos
sudo aureport --auth --start 01/01/2024 --end 01/31/2024

# Análisis de accesos por usuario
sudo aureport --user --summary --start 01/01/2024

# Reporte de modificaciones de archivos
sudo aureport --file --summary --start 01/01/2024

Caso 4: Monitoreo de Aplicaciones Específicas

# Auditar una aplicación específica
sudo auditctl -w /usr/bin/myapp -p x -k myapp-exec
sudo auditctl -a always,exit -F exe=/usr/bin/myapp -k myapp-activity

# Buscar actividad de la aplicación
sudo ausearch -k myapp-activity -ts today

🔗 Integración con SIEM

La integración de auditd con un Sistema de Gestión de Eventos e Información de Seguridad (SIEM) es crucial para el análisis centralizado, correlación de eventos y respuesta automatizada a incidentes.

Métodos de Integración

1. Envío directo via Syslog

# Configurar audisp-syslog en /etc/audisp/plugins.d/syslog.conf
active = yes
direction = out
path = /sbin/audisp-syslog
type = always
format = string

# Configuración en /etc/rsyslog.conf
*.* @@siem-server.empresa.com:514

# Reiniciar servicios
sudo systemctl restart auditd rsyslog

2. Usando Agentes Especializados

Integración con Splunk:

# Configurar Splunk Universal Forwarder
# En /opt/splunkforwarder/etc/system/local/inputs.conf
[monitor:///var/log/audit/audit.log]
disabled = false
sourcetype = linux_audit
index = security

# Reiniciar Splunk Forwarder
sudo /opt/splunkforwarder/bin/splunk restart

Integración con Elastic Stack (ELK):

# Configurar Filebeat para auditd
# En /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/audit/audit.log
  fields:
    logtype: auditd
  fields_under_root: true

output.elasticsearch:
  hosts: ["elasticsearch.empresa.com:9200"]
  index: "auditd-%{+yyyy.MM.dd}"

Mejores Prácticas para Integración SIEM

  • Normalización - Convertir eventos auditd a formato común (CEF, LEEF, JSON)
  • Filtrado inteligente - Enviar solo eventos relevantes para reducir ruido
  • Etiquetado - Usar campos consistentes para facilitar correlación
  • Retención - Configurar políticas apropiadas de almacenamiento
  • Monitoreo - Verificar que los logs lleguen correctamente al SIEM
  • Respuesta automatizada - Configurar playbooks para eventos críticos

Un SIEM bien configurado puede reducir el tiempo de detección de amenazas de días a minutos, utilizando la riqueza de datos que proporciona auditd.

📊 Casos de Uso Avanzados

Detección de Amenazas Persistentes Avanzadas (APT)

auditd puede identificar patrones sutiles de actividad maliciosa que caracterizan a las APT:

  • Movimiento lateral entre sistemas
  • Accesos fuera de horarios normales
  • Uso inusual de herramientas del sistema
  • Modificaciones de logs y herramientas de auditoría

Análisis de Comportamiento de Usuario y Entidad (UEBA)

Los datos de auditd alimentan algoritmos de machine learning para establecer líneas base de comportamiento normal y detectar anomalías.

La implementación efectiva de auditd requiere planificación cuidadosa, especialmente en entornos de alta escala donde el volumen de eventos puede ser abrumador.

🎯 Conclusiones

auditd representa una herramienta fundamental en el arsenal de ciberseguridad de cualquier organización que utilice sistemas Linux. Su capacidad para proporcionar visibilidad completa a nivel del kernel, combinada con su flexibilidad de configuración y facilidad de integración con sistemas SIEM, lo convierte en un componente esencial para:

  • Cumplimiento normativo y auditorías
  • Detección temprana de amenazas
  • Análisis forense post-incidente
  • Monitoreo continuo de la postura de seguridad

La correcta implementación y gestión de auditd requiere un equilibrio entre seguridad, rendimiento y manejabilidad de datos. Los profesionales de ciberseguridad deben dominar no solo su configuración técnica, sino también su integración estratégica en el ecosistema de seguridad más amplio de la organización.