Saltar al contenido principal

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