Saltar a contenido

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.

  1. Instalar mailutils para poder enviar avisos por email:
sudo apt install mailutils
  1. 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.

  1. 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