Capítulo 9.4 - Auditoría y Monitoreo de Seguridad
Objetivos de Aprendizaje
Al final de este capítulo, usted será capaz de:
- Utilizar las herramientas de auditoría de Linux
- Monitorear los intentos de acceso
- Analizar los logs de seguridad
- Detectar actividades sospechosas
- Configurar alertas de seguridad
- Comprender las herramientas de auditoría del sistema
Auditoría Linux (auditd)
Instalación
# Ubuntu/Debian
sudo apt install auditd audispd-plugins
# Red Hat/CentOS
sudo yum install audit
Servicio
# Estado
sudo systemctl status auditd
# Iniciar
sudo systemctl start auditd
# Habilitar
sudo systemctl enable auditd
Reglas de Auditoría
Ver las Reglas
# Lista de reglas
sudo auditctl -l
# Ver reglas cargadas
sudo ausearch -i
Agregar Reglas
# Auditar acceso a archivo
sudo auditctl -w /etc/passwd -p rwxa -k passwd_access
# Auditar comandos sudo
sudo auditctl -w /usr/bin/sudo -p x -k sudo_commands
# Auditar conexiones de red
sudo auditctl -a always,exit -F arch=b64 -S connect -k network_connect
# Auditar cambios de permisos
sudo auditctl -w /etc -p wa -k etc_changes
Reglas Permanentes
# Archivo: /etc/audit/rules.d/audit.rules
# Formato:
-w /etc/passwd -p rwxa -k passwd_access
-w /etc/shadow -p rwxa -k shadow_access
-w /usr/bin/sudo -p x -k sudo_commands
Recargar:
sudo systemctl restart auditd
Búsqueda en los Logs
ausearch
# Buscar por clave
sudo ausearch -k passwd_access
# Buscar por usuario
sudo ausearch -ua user1
# Buscar por tipo
sudo ausearch -m USER_LOGIN
# Buscar reciente
sudo ausearch -ts recent
# Buscar por período
sudo ausearch -ts 01/01/2024 00:00:00 -te 01/02/2024 00:00:00
aureport
# Reporte resumido
sudo aureport
# Reporte por usuario
sudo aureport -u
# Reporte por tipo de evento
sudo aureport -e
# Reporte de fallos
sudo aureport --failed
# Reporte de conexiones
sudo aureport -au
Monitoreo de Logs
Logs de Seguridad
# Ubuntu/Debian
sudo tail -f /var/log/auth.log
# Red Hat/CentOS
sudo tail -f /var/log/secure
# Intentos fallidos
sudo grep "Failed password" /var/log/auth.log
# Conexiones SSH
sudo grep "sshd" /var/log/auth.log
# sudo
sudo grep "sudo" /var/log/auth.log
last y lastlog
# Historial de conexiones
last
last -n 20 # Últimas 20
# Última conexión por usuario
lastlog
# Usuario específico
lastlog -u user1
who y w
# Usuarios conectados
who
w
# Detalles
w -f
Detección de Intrusiones
Script de Monitoreo
#!/bin/bash
# Monitoreo de seguridad
LOG_FILE="/var/log/security-monitor.log"
log_event() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$LOG_FILE"
}
# Intentos fallidos SSH
FAILED_SSH=$(grep "Failed password" /var/log/auth.log | wc -l)
if [ "$FAILED_SSH" -gt 10 ]; then
log_event "ALERTA: $FAILED_SSH intentos SSH fallidos"
fi
# Nuevos usuarios
NEW_USERS=$(lastlog | grep -v "Never logged in" | wc -l)
log_event "Usuarios activos: $NEW_USERS"
# Archivos modificados recientemente
MODIFIED=$(find /etc -type f -mtime -1 2>/dev/null | wc -l)
if [ "$MODIFIED" -gt 0 ]; then
log_event "ATENCIÓN: $MODIFIED archivos modificados en /etc"
fi
Alertas Automáticas
#!/bin/bash
# Alertas de seguridad por email
# Configuración
ALERT_EMAIL="admin@example.com"
THRESHOLD=10
# Intentos SSH fallidos
FAILED=$(grep "Failed password" /var/log/auth.log | tail -20 | wc -l)
if [ "$FAILED" -ge "$THRESHOLD" ]; then
echo "ALERTA: $FAILED intentos SSH fallidos" | \
mail -s "Alerta de Seguridad SSH" "$ALERT_EMAIL"
fi
Herramientas de Monitoreo
fail2ban
Protección contra fuerza bruta:
# Instalar
sudo apt install fail2ban
# Configuración
sudo nano /etc/fail2ban/jail.local
# Habilitar
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Estado
sudo fail2ban-client status
sudo fail2ban-client status sshd
rkhunter
Detección de rootkits:
# Instalar
sudo apt install rkhunter
# Actualizar base de datos
sudo rkhunter --update
# Escaneo
sudo rkhunter --check
# Escaneo rápido
sudo rkhunter --check --skip-keypress
chkrootkit
Detección de rootkits:
# Instalar
sudo apt install chkrootkit
# Escaneo
sudo chkrootkit
Informes de Seguridad
Script de Informe
#!/bin/bash
# Informe de seguridad diario
REPORT="/var/log/security-report-$(date +%Y%m%d).txt"
{
echo "=== INFORME DE SEGURIDAD $(date) ==="
echo
echo "=== Conexiones ==="
last -n 20
echo
echo "=== Intentos fallidos ==="
grep "Failed password" /var/log/auth.log | tail -10
echo
echo "=== Usuarios con sudo ==="
sudo -l | grep -E "^User|^Runas"
echo
echo "=== Servicios activos ==="
systemctl list-units --type=service --state=running | head -20
echo
echo "=== Puertos abiertos ==="
ss -tuln | grep LISTEN
} > "$REPORT"
# Enviar por email
mail -s "Informe de Seguridad $(date +%Y-%m-%d)" admin@example.com < "$REPORT"
Cron para Monitoreo
# /etc/cron.daily/security-check
#!/bin/bash
# Verificación diaria de seguridad
# Escaneo rootkit
rkhunter --check --skip-keypress
# Verificar integridad de archivos
# (si AIDE instalado)
# aide --check
# Informe
/usr/local/bin/security-report.sh
Resumen
En este capítulo, usted ha aprendido:
auditd: Sistema de auditoría de Linux, reglas, logs
Búsqueda: ausearch, aureport para analizar logs
Monitoreo: Logs de auth, last, who, w
Detección: Scripts de monitoreo, alertas
Herramientas: fail2ban, rkhunter, chkrootkit
Informes: Automatización de informes de seguridad
Práctica: Monitoreo continuo, alertas, informes
Próximos Pasos
Módulo 10: Gestión de Paquetes
Módulo 11: Monitoreo y Logs
Capítulo creado el: Diciembre 2024