
Ciberseguridad: Audit en Linux
Cuando hablamos de Ciberseguridad en Linux, solemos pensar en firewalls, permisos de usuarios o configuraciones de red. Todo eso está muy bien, pero hay una pieza que mucha gente olvida, saber exactamente qué pasa en el sistema. Ahí entra en juego Audit, un servicio que viene integrado en Linux y que actúa como esa “caja negra” que registra absolutamente todo lo que ocurre.
¿Quién intentó leer /etc/shadow? ¿Qué usuario borró un archivo crítico? ¿Qué proceso está accediendo a un socket extraño? Con Audit puedes responder a esas preguntas sin tener que adivinar. Y ojo, no se trata solo de seguridad, también sirve para cumplimiento (por ejemplo, normativas como PCI-DSS, HIPAA o ISO 27001 lo exigen).
En esta entrada vamos a ver de manera práctica qué aporta este servicio, cómo se usa en el día a día y qué pasos seguir para implementarlo sin complicarse demasiado.
¿Qué aporta Linux Audit?
- Visibilidad total: monitoriza accesos, modificaciones y ejecuciones.
- Rastreo de usuarios: identifica qué hizo cada cuenta, incluso root.
- Cumplimiento normativo: es un requisito en muchos marcos de seguridad.
- Investigación de incidentes: cuando algo falla, tienes pruebas claras.
Instalar y habilitar Auditd
Para implementar el servicio Auditd en un sistema Linux, usaremos los siguientes comandos:
Debian/Ubuntu
sudo apt update
sudo apt install -y auditd audispd-plugins
sudo systemctl enable --now auditd
## OPCIONAL (Añade parámetros al kernel). Editas "/etc/default/grub" :
GRUB_CMDLINE_LINUX="audit=1 audit_backlog_limit=8192"
Y lanzas un "sudo update-grub"
RHEL/Alma/Rocky
sudo dnf install -y audit
sudo systemctl enable --now auditd
Comprueba estado y versión:
sudo auditctl -s
sudo auditctl -v
## OPCIONAL:
sudo grubby --update-kernel=ALL --args="audit=1 audit_backlog_limit=8192" # RHEL/Alma/Rocky
Reglas base de Auditd
Para evitar mucho "ruido", es recomendable crear reglas persistentes en "/etc/audit/rules.d/". Usaremos claves (-k) para buscar luego fácil con ausearch.
- Recomendación: en máquinas x86_64 conviene duplicar reglas de syscalls para arch=b64 y arch=b32 si quieres cobertura total. Aquí meto b64 (lo común). Si quieres full, duplica con -F arch=b32.
- Crea un fichero de reglas:
sudo tee /etc/audit/rules.d/10-baseline.rules >/dev/null <<'EOF' ## Limpia reglas en memoria antes de cargar (solo en carga con auditctl)-D ## Monitoreo de cambios de identidad y archivos críticos -w /etc/passwd -p wa -k identity-w /etc/shadow -p r -k shadow_read -w /etc/group -p wa -k identity-w /etc/gshadow -p wa -k identity -w /etc/sudoers -p wa -k sudoers-w /etc/ssh/sshd_config -p wa -k ssh_config ## Directorios sensibles (recursivo)-w /etc/ -p wa -k etc_changes -w /var/log/ -p wa -k logs_watch ## Ejecución de binarios privilegiados o sensibles -w /usr/bin/sudo -p x -k sudo_exec-w /bin/su -p x -k su_exec ## Registro de toda ejecución de comandos por usuarios humanos (UID>=1000) -a always,exit -F arch=b64 -S execve -F auid>=1000 -F auid!=-1 -k exec_user ## Cambios de red/hostname -a always,exit -F arch=b64 -S sethostname -S setdomainname -k net_hostname ## Cambios de fecha/hora (muy sensible para Kerberos, firmas, etc.) -a always,exit -F arch=b64 -S adjtimex -S settimeofday -S clock_settime -k time_change -w /etc/localtime -p wa -k time_change## Carga/descarga de módulos del kernel -a always,exit -F arch=b64 -S init_module -S delete_module -k modules ## Opcional: proteger reglas una vez cargadas (immutable) # ¡Actívalo solo cuando tengas las reglas maduras! Requiere reboot para cambiar. #-e 2EOF
- Carga las reglas persistentes:
sudo augenrules --load
- Verifica reglas en memoria:
sudo auditctl -l
Simulación de eventos a Auditar en Linux
Vamos a crear un usuario de pruebas, ejecutar acciones comunes y provocar eventos.
- Crear usuario de pruebas en Linux:
- sudo useradd -m -s /bin/bash alice
- echo "alice:MiPassTemporal123" | sudo chpasswd
- Intento leer /etc/shadow con el usuario alice (no me debería dejar):
- sudo -u alice -i -- bash -lc 'cat /etc/shadow >/dev/null 2>&1 || true'
- Aunque falle, el intento de lectura queda registrado por -w /etc/shadow -p r -k shadow_read.
- # Intentos de leer /etc/shadow
- ausearch -k shadow_read -i
- sudo -u alice -i -- bash -lc 'cat /etc/shadow >/dev/null 2>&1 || true'
- Ejecutar comandos que intentan modificar "/etc":
- sudo -u alice -i -- bash -lc 'id; whoami; echo hola >/dev/null'
- sudo -u alice -i -- bash -lc 'sudo -l >/dev/null 2>&1 || true'
- Aunque no sea un usuario del grupo "sudoer", la ejecución es registrada:
- ausearch -k etc_changes -i
- ausearch -k identity -i
- Puedes probar a lanzar modificación como root, la cual generará un "write (wa)"
- echo "# linea de prueba $(date)" | sudo tee -a /etc/ssh/sshd_config >/dev/null
- Cambio el nombre del host: "sudo hostnamectl set-hostname demo-audit-$(date +%H%M)"
- Cambiar la hora del sistema: "sudo date -s "2025-08-17 12:34:56" 2>/dev/null || true" o "timedatectl"
- Buscar ejecuciones de usuarios:
- ausearch -k exec_user -i | less
- Buscar ejecuciones de sudo y su:
- sudo ausearch -k sudo_exec -i
- sudo ausearch -k su_exec -i
- Usa -ts today, -ts recent, -ts 10:00:00 -te 12:00:00 para acotar tiempo:
- sudo ausearch -k exec_user -ts recent -i
- Búsqueda por fichero o usuario:
- sudo ausearch -f /etc/ssh/sshd_config -i
- # Actividad del usuario alice (auid = ID al autenticar)
- ALICE_UID=$(id -u alice)
- sudo ausearch -ua "$ALICE_UID" -ts today -i
Informes rápidos con Audit
Podéis gestionar informes rápidos para ciertos eventos:
- Resumen de ficheros
- sudo aureport -f --summary
- sudo aureport -f --summary
- Resumen de ejecuciones
- sudo aureport -x --summary
- sudo aureport -x --summary
- Autenticaciones (logins)
- sudo aureport -au
- sudo aureport -au
- Por usuario
- sudo aureport -u
- sudo aureport -u
Tip: Añade -i a aureport para “humanizar” (resolución de IDs a nombres).
Afinar Logs de Auditd
Para evitar que colapsen un sistema en Producción, puedes mejorar la rotación de logs o cambiar el espacio utilizado según tus necesidades.
Edita /etc/audit/auditd.conf para gestionar rotación y espacio:
log_file = /var/log/audit/audit.log
max_log_file = 200 # tamaño en MB por fichero
num_logs = 10
max_log_file_action = ROTATE
space_left = 1024 # cuando queden 1GB libres
space_left_action = SYSLOG
admin_space_left = 512
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
Aplica:
sudo systemctl reload auditd
- Ruido: Si te salen toneladas por "execve", filtra demonios con:
-F auid>=1000 -F auid!=-1
Puedes además excluir rutas o procesos muy ruidosos (por ejemplo, agentes EDR, backup, etc.) con reglas -a never,exit -F exe=/ruta/ruidosa.
- Inmutabilidad: Cuando tengas tus reglas estables, activa al final de la regla (Esto bloquea cambios hasta reinicio. Úsalo en producción cuando esté todo validado):
-e 2
Reglas de oro de la gestión de eventos en Linux
A continuación, os damos algunas pautas para encontrar eventos:
- Cambios de identidad: /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow
- Ejecuciones de usuarios humanos: execve con auid>=1000
- Archivos de configuración: /etc/, /etc/ssh/sshd_config, /etc/sudoers
- Cambios de tiempo/hostname: time_change, net_hostname
- Módulos del kernel: init_module, delete_module
Control total de tus Linux con Audit
Con auditd conviertes tu Linux en un sistema auditado de verdad. Puedes revisar quién hizo qué, cuándo y cómo, sin especular. El truco está en elegir bien qué vigilar (identidad, configuración, ejecuciones) y en buscar por claves (-k) para investigar rápido. En minutos puedes reproducir un incidente, simulas un acceso, tiras de ausearch y tienes la película completa, con protagonistas, guion y desenlace.
Si lo integras con rotación de logs y reglas afinadas, auditd no molesta ni se come el disco, y te dará justo lo que necesitas para responder auditorías, investigar incidentes o cumplir requisitos de seguridad. Y cuando quieras “sellar” la política, lo inmutas y a dormir tranquilo.
Fin del Artículo. ¡Cuéntanos algo en los Comentarios!