AIDE¶
AIDE (Advanced Intrusion Detection Environment) es un sistema de detección de intrusiones basado en host (HIDS) para sistemas Unix/Linux. Guarda una "foto" de los ficheros críticos del sistema y, al compararla después con el estado actual, detecta ficheros añadidos, modificados o eliminados sin permiso.
Qué hace y cómo funciona¶
AIDE calcula un hash (huella) de los ficheros que se le indica y los guarda en una base de datos (línea base). En ejecuciones posteriores vuelve a calcular los hashes actuales y los compara contra la base: si un hash no coincide, significa que el contenido del fichero ha cambiado.
Los cambios se clasifican en:
- added (
+) — un fichero nuevo que no estaba en la base. - removed (
-) — un fichero que estaba en la base y ya no existe. - changed (
>) — un fichero cuyo contenido, permisos, propietario u otros atributos han cambiado.
Además de comprobar el contenido, puede vigilar atributos del sistema de ficheros (permisos, propietario, tamaño, etc.). Está pensado para detectar intrusiones: si un atacante consigue modificar un binario, plantarse una puerta trasera o alterar la configuración, el hash cambiará y AIDE lo notificará.
La configuración (qué se vigila y con qué profundidad) se define en /etc/aide/aide.conf. Funciona por lista blanca: solo se comprueba lo que se declara explícitamente, no todo el disco.
Instalar¶
sudo apt update
sudo apt install aide
apt instalará también aide-common (viene como Recommends, no como dependencia obligatoria, pero apt instala los Recommends por defecto). Esta guía no usa ni su config (+200 fragmentos automáticos, uno por servicio detectado, con una precedencia de reglas fácil de malinterpretar) ni sus wrappers (aideinit, aide.wrapper); escribimos nuestra propia config para saber exactamente qué se vigila y por qué. Si prefieres no instalarlo ni ocupar esos ~934 KB: sudo apt install --no-install-recommends aide, o si ya lo tienes: sudo apt purge aide-common.
En Ubuntu el binario aide no trae compilada una ruta de config por defecto — siempre hay que pasarle --config= explícito, esté instalado aide-common o no.
Configurar¶
Reemplazar la config por defecto¶
/etc/aide/aide.conf ya viene con contenido de serie (lo pone aide-common al instalarse, con el @@x_include a los +200 fragmentos que no vamos a usar). Guarda una copia por si acaso y sustituye todo el contenido — no lo añadas al final:
sudo cp /etc/aide/aide.conf /etc/aide/aide.conf.dist
sudo vim /etc/aide/aide.conf
aide.conf está gestionado con ucf (el mecanismo de Debian para ficheros de config generados). Esto significa que si algún día actualizas el paquete aide-common y cambia su plantilla por defecto, ucf te preguntará qué hacer con la tuya (como con cualquier conffile) — no te la va a pisar en silencio. Puedes responder "mantener la tuya" tranquilamente.
Contenido:
# Config propia de AIDE — sin aide-common. Ubuntu no compila una ruta
# de config por defecto: usa siempre --config=/etc/aide/aide.conf.
database_in=file:/var/lib/aide/aide.db
database_out=file:/var/lib/aide/aide.db.new
report_url=stdout
# R y L ya vienen con AIDE (R = hash completo, L = solo permisos y
# propietario, sin hashear contenido).
# --- Todo /etc con hash completo: es pequeño, el coste es despreciable
# y así no hay que acordarse de listar cada fichero suelto que toque
# el servidor (sshd_config.d, fail2ban, sysctl.d, limits.d, passwd,
# swapfile.swap...) — ya cae dentro de /etc ---
/etc R
!/etc/mtab$
# --- Arranque y kernel: objetivo clásico de rootkits/bootkits ---
/boot R
/lib/modules R
/usr/lib/modules R
# --- Binarios y librerías del sistema: cambios aquí son sospechosos ---
/bin R
/sbin R
/usr/bin R
/usr/sbin R
/usr/lib R
/lib R
# --- Lugares clásicos de persistencia (binarios sueltos, como un
# agente de monitorización si no lo deja bajo /etc/systemd/system) ---
/opt R
/usr/local/bin R
# --- Accesos SSH fuera de /etc ---
/root/\.ssh R
/home/hosting/\.ssh/authorized_keys R
Ajusta /home/hosting/\.ssh/authorized_keys si tu usuario se llama distinto. No se vigila nada de /var ni /home/*/web — es un enfoque de lista blanca (solo lo que declaras aquí), no de lista negra sobre todo el sistema, así que no hace falta excluir el contenido de hosting: nunca se incluyó.
Usar¶
AIDE se maneja desde la línea de comandos pasando siempre --config= para señalar el fichero de configuración. Requiere sudo porque lee directorios protegidos.
Crear la base de datos¶
Genela por primera vez sobre el sistema actual (--init genera aide.db.new):
sudo aide --config=/etc/aide/aide.conf --init
Activar esa base de datos como la referencia oficial — hay que renombrarla a aide.db para que --check la use:
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
Verificar el estado¶
Compara el estado actual contra la base de datos. Recién creada, no debería salir ninguna diferencia:
sudo aide --config=/etc/aide/aide.conf --check
Actualizar la base¶
--update es --check + --init en un solo paso (evita escanear el sistema dos veces): comprueba los cambios y regenera la base nueva. Útil cuando haces cambios legítimos y quieres volver a dejar la línea base al día:
sudo aide --config=/etc/aide/aide.conf --update
Después de --update, activar la base regenerada como nueva referencia:
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
Vigilancia diaria¶
Como no usamos aide-common, tampoco tenemos su cron automático, así que montamos el nuestro para comprobar el sistema cada día y avisar por email si hay cambios.
- Instalar
mailutilspara poder enviar avisos por email:
sudo apt install mailutils
- Crear el script de comprobación diaria:
sudo vim /usr/local/bin/aide-check.sh
Contenido:
#!/bin/bash
# aide-check.sh - ejecuta el check de AIDE y avisa por email si hay cambios
set -o pipefail
AIDE_CONF="/etc/aide/aide.conf"
LOG_FILE="/var/log/aide/aide-check.log"
ALERT_EMAIL="tu-email@dominio.com"
HOST="$(hostname)"
mkdir -p /var/log/aide
aide --config="$AIDE_CONF" --check 2>&1 | tee "$LOG_FILE"
EXIT_CODE=$?
# Códigos de salida de aide (se suman si hay varios tipos de cambio):
# 0 = sin diferencias · 1 = ficheros nuevos · 2 = ficheros eliminados
# 4 = ficheros modificados · 14+ = error genérico
if [ "$EXIT_CODE" -ne 0 ]; then
mail -s "AIDE: cambios detectados en ${HOST}" "$ALERT_EMAIL" < "$LOG_FILE"
logger "AIDE: cambios detectados (código de salida: $EXIT_CODE)"
else
logger "AIDE: comprobación diaria sin cambios"
fi
sudo chmod +x /usr/local/bin/aide-check.sh
!!! note " " Cambia ALERT_EMAIL por tu dirección real. mail necesita un MTA local que entregue el correo; si el aviso no llega, revisa primero el MTA antes de sospechar del script.
- Programar la ejecución diaria (no hace falta
crontab -e; un fichero en/etc/cron.d/con el usuario incluido en la línea ya es válido):
echo "0 3 * * * root /usr/local/bin/aide-check.sh" | sudo tee /etc/cron.d/aide-check