Advanced Intrusion Detection Environment

DevOps, Puesta en producción

AIDE

16 Mar , 2025  

Protección de nuestro servidor Debian 12 mediante Advanced Intrusion Detection Environment (AIDE)

Detectar intrusos en un servidor es crucial para garantizar la seguridad de los datos y la integridad del sistema. Los atacantes pueden comprometer un servidor con el objetivo de robar información sensible, insertar malware, realizar actividades maliciosas o interrumpir los servicios. Si no se detectan a tiempo, estos intrusos pueden causar daños significativos, como pérdida de datos, robo de credenciales, manipulación de archivos críticos o incluso el control total del sistema. La detección temprana de intrusiones permite tomar acciones correctivas antes de que los atacantes logren sus objetivos, minimizando el impacto en la seguridad y la confianza de los usuarios o clientes que dependen del servidor.

Qué es AIDE

AIDE (Advanced Intrusion Detection Environment) es una herramienta de detección de intrusos que se basa en el monitoreo de la integridad de archivos en un sistema. Su funcionamiento se centra en crear una base de datos inicial que almacena información sobre los archivos y directorios importantes, como su tamaño, permisos, inodo, hash y otros atributos.

Posteriormente, AIDE realiza verificaciones periódicas para comparar el estado actual de los archivos con la base de datos almacenada. Si detecta cambios en los atributos monitoreados, como modificaciones, eliminaciones o adiciones de archivos, genera alertas, permitiendo identificar intrusiones o actividades no autorizadas en el sistema. De esta manera, AIDE actúa como una herramienta eficaz para detectar alteraciones en el sistema que podrían indicar un intento de ataque o brecha de seguridad.

Instalando AIDE

Prerequisitos

Nos aseguraremos de que nuestro usuario tiene permisos para ejecutar comandos con sudo. Esto es importante porque muchas de las tareas que realizaremos, como la instalación de paquetes y la modificación de archivos del sistema, requieren privilegios de administrador. Para verificarlo, podemos ejecutar un comando simple con sudo, y si el sistema nos solicita una contraseña sin mostrar errores, significa que tenemos los permisos adecuados.

sudo whoami

Antes de instalar cualquier paquete, siempre es recomendable actualizar la lista de paquetes disponibles para asegurarnos de que estamos descargando la última versión. Esto se hace con el siguiente comando:

sudo apt update

Instalación de AIDE

Una vez que los repositorios estén actualizados, podemos instalar AIDE con el siguiente comando. Esto descargará e instalará AIDE y los archivos comunes necesarios para su funcionamiento:

sudo apt install aide aide-common -y

Este paso instalará AIDE y sus archivos necesarios en el sistema, dejándolo listo para configurarse.

Configurando AIDE

vamos a configurar AIDE para que monitoree los archivos y directorios importantes de tu sistema. AIDE tiene un archivo de configuración llamado aide.conf, donde puedes especificar qué directorios o archivos deseas monitorear y qué atributos deben ser verificados (como permisos, tamaño de archivo, contenido, etc.).

Es importante personalizar esta configuración para asegurarnos de que AIDE esté verificando los archivos más relevantes para la seguridad de tu servidor.

El fichero de configuración de AIDE

El archivo de configuración de AIDE se encuentra en /etc/aide/aide.conf. Vamos a abrirlo con un editor de texto como Vim:

sudo vim /etc/aide/aide.conf
Fichero de configuración (click para ver)
# AIDE conf
# This configuration file does not contain every possible option
# For a complete reference, see man aide.conf(5)

# set environment for executable config files included by x_include
@@x_include_setenv UPAC_settingsd /etc/aide/aide.settings.d
@@x_include_setenv PATH /bin:/usr/bin

# The daily cron job depends on these paths and settings
database_in=file:/var/lib/aide/aide.db
database_out=file:/var/lib/aide/aide.db.new
database_new=file:/var/lib/aide/aide.db.new
gzip_dbout=yes

# Set to no to disable report_summarize_changes option.
#report_summarize_changes=true

# Set to no to disable grouping of files in report.
#report_grouped=true

# have AIDE version and time of database generation in database
#database_add_metadata=true

# Set verbosity of aide run and reports
#log_level=warning
#report_level=changed_attributes

# Ignore e2fs attributes that cannot be set manually
report_ignore_e2fsattrs=VNIE

# Set to yes to print the checksums in the report in hex format
#report_base16 = false

###### GROUPS ######

# See documentation in aide.conf(5). To list the default compount
# groups available in this aide binary, use aide --version.

# if you want to sacrifice security for speed, list some checksum
# explicitly here. H specifies that all checksums compiled in are used.
Checksums = H

# The checksums of the databases to be printed in the report
# Set to 'E' to disable. Set to a list if you want a special set of
# checksums for the database itself
database_attrs = Checksums

OwnerMode = p+u+g+ftype
Size = s+b
InodeData = OwnerMode+n+i+Size+l+X
StaticFile = m+c+Checksums
Full = InodeData+StaticFile
VarTime = InodeData+Checksums
VarInode = VarTime-i
VarFile = OwnerMode+n+l+X
VarDir = OwnerMode+n+i+X
RecreatedDir = OwnerMode+n+X

# Files that stay static but are copied to a ram disk on startup
# (causing different inode). Please do not use for new rules.
RamdiskData = InodeData-i

# VarDirInode is kind of a misnomer, as it does _less_ checks than
# VarDir. Renaming it would mean touching > 60 rule files though.
# Please use RecreatedDir for new rules.
VarDirInode = RecreatedDir

# Directories that change their mtimes or ctimes but not their contents
VarDirTime = InodeData

###### LOG HANDLING ######

# aide 0.18 is the first version of aide that offers infrastructure to
# track log contents on its entire way through the log rotation mechanics
# common on unxoid operating systems.

# For a detailed description of the challenges of handling logs with
# aide, see the "LOG HANDLING" section in aide.conf(5).

ActLog = Full+growing+ANF+I
RotLog = Full
CompSerLog = Full+I+compressed
MidlSerLog = Full+I
LastSerLog = Full+ARF

# Please note that these example rules need to be adapted to the logrotate
# configuration for the log. Compression may be disabled or lead to a
# different extension, the dateext option may be used, old logs might be
# held in a different place, a log series does not necessarily need to be
# compressed etc.

# Please note that savelog rotates the live log to .0 and not to .1 as it
# is logrotates (changeable) default.

# Log Handling, old method. This causes false reports and is not
# necessary any more since aide 0.18. Please consider migating your
# log rules to the new method. The groups used in this method will be
# removed after Debian bookworm (but of course you can re-add them).
#
Log = OwnerMode+n+growing+s+X
FreqRotLog = Log-growing-s
LowLog = Log-growing-s
LoSerMemberLog = Full+I+ANF
SerMemberLog  = Full+I
HiSerMemberLog = Full+I+ARF
LowDELog = SerMemberLog+ANF+ARF
SerMemberDELog = Full+ANF
LinkedLog = Log-n

# include rules from /etc/aide/aide.conf.d, honoring the
# file name restrictions that are common in Debian. Files with
# the x bit set are executed and their output included.
@@x_include /etc/aide/aide.conf.d ^[a-zA-Z0-9_-]+$

Diseccionando el fichero de configuración

Aunque parece técnico, entender sus principales secciones nos ayudará a personalizarlo según nuestras necesidades.

# AIDE conf
# This configuration file does not contain every possible option
# For a complete reference, see man aide.conf(5)

# set environment for executable config files included by x_include
@@x_include_setenv UPAC_settingsd /etc/aide/aide.settings.d
@@x_include_setenv PATH /bin:/usr/bin

las líneas de configuración que comienzan con @@x_include_setenv se utilizan para establecer variables de entorno específicas que afectan la ejecución de archivos de configuración incluidos mediante la directiva @@x_include. Permiten definir rutas o configuraciones globales para facilitar la personalización. Estas variables de entorno permiten personalizar el entorno en el que se ejecutan los archivos de configuración externos, ofreciendo flexibilidad y control adicional sobre su comportamiento:

  • UPAC_settingsd: Esta variable puede ser utilizada dentro de los archivos de configuración incluidos para referirse a la ruta del directorio donde se encuentran configuraciones adicionales de AIDE.
  • PATH: Modifica el entorno de búsqueda de ejecutables durante la ejecución de los archivos de configuración incluidos, asegurando que los comandos necesarios estén disponibles.

Gestión de la base de datos de AIDE

# The daily cron job depends on these paths and settings
database_in=file:/var/lib/aide/aide.db
database_out=file:/var/lib/aide/aide.db.new
database_new=file:/var/lib/aide/aide.db.new
gzip_dbout=yes

AIDE compara el estado actual del sistema con una base de datos que almacena información previa. Estas líneas configuran el almacenamiento de la base de datos:

  • gzip_dbout: Comprime la base de datos para ahorrar espacio.
  • database_in: Ubicación de la base de datos existente con la información registrada.
  • database_out y database_new: Almacenan la nueva base de datos después de la verificación.

Gestión de reportes

# Set to no to disable report_summarize_changes option.
#report_summarize_changes=true
 
# Set to no to disable grouping of files in report.
#report_grouped=true

# have AIDE version and time of database generation in database
#database_add_metadata=true
 
# Set verbosity of aide run and reports
#log_level=warning
#report_level=changed_attributes

Aquí se configuran opciones para los reportes que genera AIDE por el propio sistema. Como vemos, estas opciones están comentadas y por tanto no se producirán los reportes con este sistema de forma automática. En cualquier caso, las opciones son:

  • log_level y report_level: Controlan el nivel de detalle de los reportes. log_level=warning muestra advertencias, mientras que report_level=changed_attributes solo reporta cambios detectados.
  • report_summarize_changes: Resumen de los cambios detectados.
  • report_grouped: Agrupa archivos similares en el informe para mayor claridad.
  • database_add_metadata: Agrega la versión de AIDE y la fecha de generación en la base de datos.

Gestión de atributos especiales

# Ignore e2fs attributes that cannot be set manually
report_ignore_e2fsattrs=VNIE

Ext4 tiene atributos especiales en los archivos que no pueden modificarse manualmente, por lo que report_ignore_e2fsattrs evita falsas alertas al ignorar estos atributos.

Grupos de atributos

###### GROUPS ######

# See documentation in aide.conf(5). To list the default compount
# groups available in this aide binary, use aide --version.

# if you want to sacrifice security for speed, list some checksum
# explicitly here. H specifies that all checksums compiled in are used.
Checksums = H

# The checksums of the databases to be printed in the report
# Set to 'E' to disable. Set to a list if you want a special set of
# checksums for the database itself
database_attrs = Checksums

Aquí se configuran opciones de comprobación hash. Checksums se utiliza como variable para posteriormente asignar su valor a database_attrs:

  • database_attrs: Aquí H significa que se utilizarán todos los métodos de hash disponibles en AIDE. Mi recomendación es especificar uno en particular. Más adelante tendremos una sección detallada sobre los hashes, aunque mi recomendación es utilizar sha256 o sha512 en función del sistema.
OwnerMode = p+u+g+ftype
Size = s+b
InodeData = OwnerMode+n+i+Size+l+X
StaticFile = m+c+Checksums
Full = InodeData+StaticFile
VarTime = InodeData+Checksums
VarInode = VarTime-i
VarFile = OwnerMode+n+l+X
VarDir = OwnerMode+n+i+X
RecreatedDir = OwnerMode+n+X

Estas reglas definen qué atributos de los archivos serán monitoreados como variables que podrán ser utilizadas posteriormente. Este punto es crítico para entender qué se va a monitorizar posteriormente:

  • OwnerMode: Monitorea permisos (p), propietario (u), grupo (g) y tipo de archivo (ftype).
  • Size: Verifica el tamaño del archivo (s) y el número de bloques (b).
  • InodeData: Agrega verificación de inodos (n y i), número de enlaces (l) y permisos extendidos (X).
  • StaticFile: Monitorea modificaciones (m), cambios (c) y los checksums (Checksums).
  • Full: Una combinación de todas las verificaciones anteriores para una seguridad completa.
  • VarTime: Verifica los inodos (InodeData) y los checksums de los archivos para detectar cambios en metadatos y contenido. Ideal para directorios con archivos que cambian frecuentemente, como /var.
  • VarInode: Similar a VarTime, pero omite la verificación del número de inodo (i). Útil para directorios con archivos dinámicos, donde los inodos pueden cambiar, pero no es necesario verificarlos.
  • VarFile: Monitorea el propietario (OwnerMode), el número de enlaces (n), las marcas de tiempo (l) y los atributos extendidos (X) de los archivos. Se usa en directorios con archivos que cambian frecuentemente.
  • VarDir: Supervisa el propietario (OwnerMode), el número de inodos (n), el número de enlaces (i) y los atributos extendidos (X) de los directorios. Se aplica a directorios donde los archivos pueden modificarse a menudo, pero no es necesario revisar el contenido.
  • RecreatedDir: Verifica el propietario (OwnerMode), el número de enlaces (n) y los atributos extendidos (X) de los directorios recreados. Se utiliza para directorios que pueden ser recreados dinámicamente, como los temporales.
# Files that stay static but are copied to a ram disk on startup
# (causing different inode). Please do not use for new rules.
RamdiskData = InodeData-i

# VarDirInode is kind of a misnomer, as it does _less_ checks than
# VarDir. Renaming it would mean touching > 60 rule files though.
# Please use RecreatedDir for new rules.
VarDirInode = RecreatedDir

# Directories that change their mtimes or ctimes but not their contents
VarDirTime = InodeData

Veamos el siguiente pack de reglas:

  • RamdiskData: regla está diseñada para archivos que permanecen estáticos en el sistema, pero son copiados a un disco RAM (ramdisk) durante el inicio del sistema. Esto provoca que el número de inodo cambie cada vez que se reinicia el servidor, ya que los inodos se generan de forma dinámica en la memoria RAM. Nota: Se recomienda no usar esta regla para nuevos archivos, ya que está orientada a situaciones muy específicas de archivos que se cargan en la memoria RAM al inicio del sistema.
  • VarDirInode: se utiliza para directorios cuyo contenido puede cambiar, pero donde la verificación del inodo no es tan relevante. Se recomienda usar RecreatedDir en lugar de VarDirInode para nuevas reglas, ya que la primera es más precisa y evita la redundancia.
  • VarDirTime: Esta regla está diseñada para directorios que tienen cambios en sus marcas de tiempo (mtime o ctime) pero no en su contenido. Es útil para directorios donde la estructura o los metadatos pueden cambiar, pero donde el contenido del directorio no se ve afectado. Por ejemplo, algunos directorios del sistema, como los de /var, pueden cambiar sus marcas de tiempo sin que se altere el contenido, y esta regla ayuda a evitar alarmas innecesarias por esos cambios en las marcas de tiempo.

Manejo de logs nuevo

###### LOG HANDLING ######

# aide 0.18 is the first version of aide that offers infrastructure to
# track log contents on its entire way through the log rotation mechanics
# common on unxoid operating systems.

# For a detailed description of the challenges of handling logs with
# aide, see the "LOG HANDLING" section in aide.conf(5).

ActLog = Full+growing+ANF+I
RotLog = Full
CompSerLog = Full+I+compressed
MidlSerLog = Full+I
LastSerLog = Full+ARF

Los archivos de log cambian constantemente, por lo que AIDE tiene reglas especiales para manejarlos correctamente:

  • ActLog: Para logs activos, realiza una verificación completa (Full), permite el crecimiento del archivo (growing), y verifica los atributos de archivo como acceso (A), lectura (N), y ejecución (F). También se verifica el inodo (I) para detectar cambios en los atributos o contenido del archivo de log mientras continúa siendo escrito.
  • RotLog: Para logs rotados, aplica una verificación completa (Full), lo que garantiza que se compruebe tanto el contenido del archivo como sus metadatos. Ideal para logs que se han rotado, es decir, archivos que se han archivado y reemplazado por otros nuevos.
  • CompSerLog: Para logs comprimidos, realiza una verificación completa (Full), comprueba los atributos de inodo (I) y maneja los archivos comprimidos. Esto asegura que se validen tanto los archivos de log como su integridad después de ser comprimidos, lo que es útil para archivos que ocupan mucho espacio o tienen grandes volúmenes de datos.
  • MidlSerLog: Para logs intermedios, realiza una verificación completa (Full) y verifica los atributos de inodo (I), lo que ayuda a detectar cambios en los atributos de los archivos de log mientras están en uso o durante el proceso de rotación.
  • LastSerLog: Para los logs más antiguos o finales, aplica una verificación completa (Full) y utiliza los atributos de archivos de acceso (A), lectura (R) y permisos de archivo (F). Esta configuración está diseñada para detectar cambios en los logs que han sido archivados o procesados.

Manejo de logs antiguo

# Log Handling, old method. This causes false reports and is not
# necessary any more since aide 0.18. Please consider migating your
# log rules to the new method. The groups used in this method will be
# removed after Debian bookworm (but of course you can re-add them).
#
Log = OwnerMode+n+growing+s+X
FreqRotLog = Log-growing-s
LowLog = Log-growing-s
LoSerMemberLog = Full+I+ANF
SerMemberLog  = Full+I
HiSerMemberLog = Full+I+ARF
LowDELog = SerMemberLog+ANF+ARF
SerMemberDELog = Full+ANF
LinkedLog = Log-n

Esta configuración para monitorizar los logs es la que se utilizaba en AIDE en versiones previas a la 0.18. Según las notas puede generar informes falsos y no es necesario. Se conserva para evitar incompatibilidades con instalaciones previas, por lo que no nos detendremos a comentarlo.

Inclusión de reglas de monitorización

# include rules from /etc/aide/aide.conf.d, honoring the
# file name restrictions that are common in Debian. Files with
# the x bit set are executed and their output included.
@@x_include /etc/aide/aide.conf.d ^[a-zA-Z0-9_-]+$

Para finalizar, nos encontramos con la inclusión de configuraciones que se encuentran en /etc/aide/aide.conf.d. Este método permite una configuración modular y facilita la gestión de reglas

  • @@x_include: Es una directiva especial en AIDE que permite incluir archivos o ejecutar scripts para generar configuraciones dinámicas. A diferencia de @@include, que simplemente inserta archivos de configuración estáticos, @@x_include ejecuta archivos con permisos de ejecución y usa su salida como configuración adicional.

El directorio aide.conf.d

¿Qué nos encontraremos en aide.conf.d? El contenido exacto depende de la configuración del sistema y los paquetes instalados, pero generalmente incluye:

  • Reglas específicas para directorios y ficheros críticos: Ficheros como 01_os_rules, 10_var_log, 20_home_dirs
  • Reglas específicas de paquetes y servicios: Ficheros como 31_aide_aptitude, 31_aide_clamav, 31_aide_dovecot
  • Reglas dinámicas generadas por scripts: Scripts ejecutables que generan reglas dinámicas basadas en la configuración del sistema.

Personalizando las reglas de monitorización

AIDE utiliza reglas para determinar qué aspectos de los archivos y directorios se deben verificar. En la versión actual de AIDE en Debian 12 (0.18.3) gran parte de la configuración ya viene bastante bien especificada, pero siempre podemos incluir o excluir directorios y especificar qué atributos se deben controlar. Por ejemplo, podrías querer verificar si se han modificado los permisos o el contenido de archivos en directorios críticos como /etc o /bin.

Lo ideal para esto es que utilicemos alguna de las reglas que ya hemos examinado en el fichero aide.conf o bien diseñemos alguna propia y la introduzcamos en aide.conf.d. Esto, en cualquier caso, será algo que iremos viendo según los reportes que obtengamos.

Las Reglas de monitorización en AIDE

Como acabamos de comentar, la configuración de AIDE se basa en reglas de monitorización que determinan qué archivos y directorios serán supervisados y qué atributos específicos se verificarán. Esto es crucial para adaptar AIDE a las necesidades de cada servidor, asegurando que se revisen los archivos críticos sin generar falsas alarmas innecesarias. Estas reglas se definen en el archivo de configuración /etc/aide/aide.conf y permiten especificar tanto los elementos a monitorear como los atributos que deben ser validados en cada verificación.

AIDE ofrece una variedad de atributos que pueden ser supervisados, cada uno con una función específica.

Atributos que AIDE Puede Verificar

  • p (Permisos): Verifica que los permisos de los archivos no hayan cambiado. Es útil para detectar modificaciones indebidas que podrían permitir accesos no autorizados.
  • i (Número de inodo): Comprueba si el inodo del archivo ha cambiado, lo que puede indicar que el archivo ha sido reemplazado.
  • n (Número de enlaces): Supervisa la cantidad de enlaces duros de un archivo, lo que puede ser útil para detectar intentos de ocultación de archivos.
  • u (Propietario del archivo): Se asegura de que el usuario propietario del archivo no haya cambiado, evitando escaladas de privilegios indebidas.
  • g (Grupo del archivo): Similar al anterior, pero verifica si el grupo propietario del archivo ha cambiado.
  • s (Tamaño del archivo): Comprueba que el tamaño del archivo no haya sido modificado, útil para detectar alteraciones en archivos de configuración o ejecutables.
  • b (Número de bloques ocupados): Verifica si la cantidad de bloques en disco utilizada por el archivo ha cambiado.
  • m (Hora de modificación): Registra cualquier cambio en la fecha y hora de última modificación del archivo.
  • c (Hora de cambio de estado): Se enfoca en los cambios del estado del archivo en el sistema de archivos, útil para detectar modificaciones encubiertas.
  • acl (Listas de control de acceso): Supervisa las ACLs (Access Control Lists), que son configuraciones avanzadas de permisos en Linux.
  • selinux (Contexto de seguridad SELinux): Comprueba si el contexto de seguridad SELinux ha cambiado en un archivo o directorio, importante en sistemas con SELinux activado.
  • xattrs (Extended attributes): Verifica los atributos extendidos del sistema de archivos, que pueden incluir información específica sobre seguridad y control de acceso.
  • md5/sha256/sha512/etc (Verificación con hashes criptográficos): Utiliza algoritmos de hash para verificar la integridad de los archivos, asegurándose de que su contenido no haya sido alterado. Sobre este último punto vamos a ver algo más detalladas las posibilidades

Conocer los detalles de nuestra instalación AIDE

Podemos visualizar los tipos de Hash y atributos disponibles ejecutando el comando informativo de aide:

aide --version
Salida del comando (Click para ver)
AIDE 0.18.3

Compile-time options:
use pcre2: mandatory
use pthread: yes
use zlib compression: yes
use POSIX ACLs: yes
use SELinux: yes
use xattr: yes
use POSIX 1003.1e capabilities: yes
use e2fsattrs: yes
use cURL: no
use Mhash: yes
use GNU crypto library: no
use Linux Auditing Framework: yes
use locale: no
syslog ident: aide
syslog logopt: LOG_CONS
syslog priority: LOG_NOTICE
default syslog facility: LOG_LOCAL0

Default config values:
config file: <none>
database_in: <none>
database_out: <none>

Available compiled-in attributes:
acl: yes
xattrs: yes
selinux: yes
e2fsattrs: yes
caps: yes

Available hashsum attributes:
md5: yes
sha1: yes
sha256: yes
sha512: yes
rmd160: yes
tiger: yes
crc32: yes
crc32b: yes
haval: yes
whirlpool: yes
gost: yes
stribog256: no
stribog512: no

Default compound groups:
R: l+p+u+g+s+c+m+i+n+md5+acl+selinux+xattrs+ftype+e2fsattrs+caps
L: l+p+u+g+i+n+acl+selinux+xattrs+ftype+e2fsattrs+caps
>: l+p+u+g+s+i+n+acl+selinux+xattrs+ftype+e2fsattrs+caps+growing
H: md5+sha1+rmd160+tiger+crc32+haval+gost+crc32b+sha256+sha512+whirlpool
X: acl+selinux+xattrs+e2fsattrs+caps

Tipos de Hash en AIDE y su Importancia

Uno de los mecanismos más efectivos que AIDE usa para verificar la integridad de los archivos es el uso de hashes criptográficos. Un hash es una firma digital única generada a partir del contenido de un archivo. Si el contenido cambia aunque sea en un solo bit, el hash resultante será completamente diferente, permitiendo detectar modificaciones con precisión. Esta es una lista detallada de los hashes disponibles en AIDE ordenados de menor a mayor seguridad según lo que acabamos de ver en la información de nuestra versión:

Los Hash de cifrado
  • crc32 / crc32b: Son códigos de redundancia cíclica utilizados principalmente para verificar la integridad de datos, no diseñados para seguridad criptográfica.
    • Ventajas: Rápidos y eficientes para detectar errores accidentales en datos.
    • Desventajas: No son seguros criptográficamente; vulnerables a colisiones intencionales.
  • MD5: Algoritmo de hash de 128 bits ampliamente utilizado en el pasado.
    • Ventajas: Rápido y con amplia implementación.
    • Desventajas: Vulnerable a ataques de colisión; se pueden generar dos entradas diferentes con el mismo hash en segundos utilizando hardware común.
  • HAVAL-128: Función hash configurable en cuanto al número de rondas y longitud del hash; HAVAL-128 produce hashes de 128 bits.
    • Ventajas: Flexible en su configuración.
    • Desventajas: Las versiones de 128 bits son vulnerables a ataques de colisión; se han encontrado colisiones con una complejidad de 2^7 operaciones en el año 2004.
  • RIPEMD-160: Función hash de 160 bits diseñada como alternativa a SHA-1 y MD5.
    • Ventajas: Mayor seguridad que MD5 y SHA-1; no se conocen colisiones en la versión completa.
    • Desventajas: Menos eficiente en software que otros algoritmos.
  • Tiger: Algoritmo de hash de 192 bits optimizado para plataformas de 64 bits.
    • Ventajas: Rápido en plataformas de 64 bits y considerado seguro.
    • Desventajas: Menos estudiado y adoptado que otros algoritmos.
  • GOST: Función hash de 256 bits desarrollada en Rusia como estándar nacional.
    • Ventajas: Longitud de hash más larga que MD5 y SHA-1.
    • Desventajas: Vulnerabilidades han sido identificadas; ataques de colisión con una complejidad de 2^105 operaciones reportados en 2008.
  • SHA-256: Parte de la familia SHA-2, produce un hash de 256 bits.
    • Ventajas: Considerado seguro; sin ataques prácticos conocidos.
    • Desventajas: Más lento que algoritmos como MD5 y SHA-1.
  • SHA-512: Otra variante de SHA-2, genera un hash de 512 bits.
    • Ventajas: Alta seguridad.
    • Desventajas: Mayor consumo de recursos y longitud de hash más larga.
  • Whirlpool: Función hash de 512 bits basada en el cifrado de bloque AES.
    • Ventajas: Diseño robusto y sin vulnerabilidades conocidas en la versión completa.
    • Desventajas: Menos adoptado y más lento que otros algoritmos.

Podemos comprobar las vulnerabilidades y obtener información adicional de estos hashes en Wikipedia. También podemos consultar información sobre su rendimiento. En el sitio web Crypto++ podemos encontrar una tabla de prueba de rendimiento de una vasta cantidad de hashes. Aquí tenemos los resultados de las tres opciones más robustas y MD5 para tener una mejor visión de la diferencia de rendimiento:

AlgoritmoMiB/SegundoCiclos por bit
MD53356,3
SHA-25613915
SHA-51215413,6
Whirlpool7727,3

Lo que observamos es que el hash Whirpool es el más seguro de los disponibles, dado que sabemos que SHA512 es vulnerable a ataques de extensión de longitud, sin embargo, en términos de rendimiento, SHA512 es mucho más eficiente, siendo incluso más eficiente que SHA256 en procesadores de 64bits.

Creando nuestros propios grupos y reglas de monitorización en AIDE

Un apoyo en la IA

Ahora que ya tenemos un conocimiento profundo de qué es AIDE, cómo funcionan sus grupos de atributos y qué son las reglas de monitorización es momento de ir al detalle y crear configuraciones específicas según lo que tengamos en nuestro servidor. Veamos un ejemplo práctico: Queremos monitorizar un sitio WordPress de nuestro servidor. ¿Cómo podemos empezar? Bueno, estamos en 2025, y en los últimos años hay algo que ha irrumpido en nuestras vidas con una fuerza excepcional: las IA. ¿Por qué no utilizar esta herramienta para ayudarnos? Debajo tienes la transcripción de la conversación, aunque también puedes consultarla aquí.

Conversación con ChatGPT (Click para ver)
Usuario:
Tengo los siguientes grupos definidos en mi instancia AIDE 0.18.3 debian 12 BookWorm:

R: l+p+u+g+s+c+m+i+n+md5+acl+selinux+xattrs+ftype+e2fsattrs+caps
L: l+p+u+g+i+n+acl+selinux+xattrs+ftype+e2fsattrs+caps
>: l+p+u+g+s+i+n+acl+selinux+xattrs+ftype+e2fsattrs+caps+growing
H: md5+sha1+rmd160+tiger+crc32+haval+gost+crc32b+sha256+sha512+whirlpool
X: acl+selinux+xattrs+e2fsattrs+caps

Checksums = sha512
database_attrs = Checksums
OwnerMode = p+u+g+ftype
Size = s+b
InodeData = OwnerMode+n+i+Size+l+X
StaticFile = m+c+Checksums
Full = InodeData+StaticFile
VarTime = InodeData+Checksums
VarInode = VarTime-i
VarFile = OwnerMode+n+l+X
VarDir = OwnerMode+n+i+X
RecreatedDir = OwnerMode+n+X
RamdiskData = InodeData-i
VarDirInode = RecreatedDir
VarDirTime = InodeData
ActLog = Full+growing+ANF+I
RotLog = Full
CompSerLog = Full+I+compressed
MidlSerLog = Full+I
LastSerLog = Full+ARF

Tengo un sitio WordPress en la siguiente ruta:

/var/www/mi-sitio-wordpress

Me gustaría que AIDE monitorice este directorio y sus contenidos teniendo en cuenta que no quiero que aparezcan alertas por modificaciones típicas de WordPress.

Puedes utilizar los grupos existentes o sugerirme la creación de un nuevo grupo que se adapte a mis necesidades para la regla que sirva de monitorización de este directorio y sus ficheros. Quiero que razones detenidamente la respuesta y contrastes información con la documentación oficial de AIDE (advanced intrusion detection environment) y de WordPress para tener en cuenta ficheros críticos a los que prestar especial atención, directorios sujetos a cambios rutinarios, etc. Muestra las fuentes consultadas.
    
Asistente:
A continuación te propongo una estrategia para configurar AIDE de forma que monitorice únicamente los ficheros críticos de tu instalación WordPress, evitando alertas por modificaciones que se producen de manera normal en WordPress.

### 1. Identificar los ficheros críticos versus los dinámicos

Ficheros críticos (a monitorizar):
- wp-config.php y .htaccess: archivos esenciales de configuración y control.
- Directorios del núcleo: wp-admin y wp-includes (el “core” de WordPress).
- Temas y plugins: aunque se actualizan ocasionalmente, en un entorno controlado es útil detectar modificaciones no autorizadas.

Ficheros dinámicos (a excluir):
- wp-content/uploads: se actualiza rutinariamente con contenido subido.
- Otros directorios de cache o logs que se actualizan automáticamente.

### 2. Sugerencia para crear un grupo de monitorización específico

Puedes definir un grupo “personalizado” para WordPress, por ejemplo, llamado WP_Core, que combine atributos que raramente deberían cambiar (como permisos, inodo, tamaño y checksums). 

Ejemplo de definición en AIDE:
------------------------------------------------
WP_Core = OwnerMode+n+Size+Checksums
------------------------------------------------
*(Se asume que OwnerMode = p+u+g+ftype, Size = s+b y Checksums se calcula usando sha512.)*

### 3. Aplicar la regla de monitorización al directorio

Definir la regla para el directorio /var/www/mi-sitio-wordpress, excluyendo directorios dinámicos:

------------------------------------------------
/var/www/mi-sitio-wordpress    WP_Core
!/var/www/mi-sitio-wordpress/wp-content/uploads
!/var/www/mi-sitio-wordpress/wp-content/cache
------------------------------------------------

Si deseas utilizar actualizaciones automáticas para temas y plugins, también se excluirán:
------------------------------------------------
!/var/www/mi-sitio-wordpress/wp-content/plugins
!/var/www/mi-sitio-wordpress/wp-content/themes
------------------------------------------------

### 4. Fundamento y contraste con la documentación oficial

- Documentación de AIDE: Se recomienda agrupar atributos invariables para detectar modificaciones no autorizadas.
- Documentación de WordPress: La Guía de Hardening WordPress enfatiza la protección de archivos como wp-config.php y .htaccess, mientras que directorios como wp-content/uploads se actualizan de forma dinámica.

Fuentes consultadas:
- [Reinstalar los archivos principales de WordPress en un sitio existente (DreamHost)](https://help.dreamhost.com/hc/es/articles/360028822932-Reinstalar-los-archivos-principales-de-WordPress-en-un-sitio-existente)
- [Cómo Arreglar el Error “Ha habido un error crítico en tu web” (Kinsta)](https://kinsta.com/es/base-de-conocimiento/ha-habido-un-error-critico-en-su-sitio-web/)
- Documentación oficial de AIDE: https://aide.github.io/manual.html
- Guía de Hardening WordPress: https://wordpress.org/support/article/hardening-wordpress/
    
Usuario:
Quiero utilizar actualizaciones automáticas para mis temas y plugins de WordPress, así que tenlo en cuenta para las reglas. Por último, quiero el resumen final de los grupos creados y las reglas todos juntos
    
Asistente:
Aquí tienes el resumen final de la configuración que te propongo para AIDE, adaptado a tus necesidades (mantener actualizaciones automáticas para temas y plugins, de modo que estos no generen alertas) y concentrándose en los ficheros críticos de tu instalación WordPress.

------------------------------------------------
Grupo Personalizado: WP_Core

Definición:
  WP_Core = OwnerMode+n+Size+Checksums
  (donde OwnerMode = p+u+g+ftype, Size = s+b y Checksums se calcula usando sha512)

------------------------------------------------
Regla de monitorización para el directorio:
/var/www/mi-sitio-wordpress    WP_Core
!/var/www/mi-sitio-wordpress/wp-content/uploads
!/var/www/mi-sitio-wordpress/wp-content/plugins
!/var/www/mi-sitio-wordpress/wp-content/themes
!/var/www/mi-sitio-wordpress/wp-content/cache

------------------------------------------------
Consideraciones:
- Se monitorizan los ficheros críticos (wp-config.php, .htaccess, directorios del núcleo, etc.).
- Se excluyen los directorios de contenido dinámico y aquellos afectados por actualizaciones automáticas.
- Fuentes consultadas: DreamHost, Kinsta, documentación oficial de AIDE y la Guía de Hardening WordPress.
    

Si te vas a apoyar en ChatGPT para que te ayude a crear reglas o a arreglar alertas que vayas encontrando durante la monitorización te sugiero que seas muy específico con lo que pides, que utilices el modo razonamiento (hará que tarde más en responderte, pero será más precisa) y que le pides que consulte en la web la documentación de lo que estés tratanto para miminizar los errores. Aún así tienes que ser consciente de que muchas veces ChatGPT (y todos los procesadores de lenguaje natural actuales) comete errores y por eso es importante haber entendido todo lo que hemos tratado hasta ahora de AIDE para poder guiarla correctamente.

Nuestra regla personalizada

Una vez hemos llegado a una conclusión de la regla que vamos a escribir para la monitorización de nuestro sitio WordPress la escribiremos en un fichero dentro de /etc/aide/aide.conf.d. Es importante destacar que AIDE tiene un sistema númerico de prioridad, por lo que cuando el fichero principal de configuración incluye estos ficheros auxiliares tendrá en cuenta el número con el que empieza el fichero. Si queremos que nuestras reglas sobrescriban otras reglas debemos poner un número alto al fichero.

# Log Handling, old method. This causes false reports and is not
# Archivos críticos: cualquier cambio debe ser reportado
/var/www/mi-sitio-wordpress/wp-config.php f Normal
/var/www/mi-sitio-wordpress/.htaccess f Normal
/var/www/mi-sitio-wordpress/nginx.conf f Normal
/var/www/mi-sitio-wordpress/.user.ini f Normal
/var/www/mi-sitio-wordpress/wordfence-waf.php f Normal

# Monitorizar configuración pero ignorar timestamps
/var/www/mi-sitio-wordpress/conf$ d OwnerMode+ANF
/var/www/mi-sitio-wordpress/conf/.*$ f Normal

# Monitorizar archivos raíz (excepto cache y backups)
!/var/www/mi-sitio-wordpress/wp-content/cache$
!/var/www/mi-sitio-wordpress/wp-content/upgrade$
!/var/www/mi-sitio-wordpress/wp-content/upgrade-temp-backup$
!/var/www/mi-sitio-wordpress/wp-content/wflogs$
/var/www/mi-sitio-wordpress/wp-content$ d OwnerMode+ANF
/var/www/mi-sitio-wordpress/wp-content/plugins$ d OwnerMode+ANF
/var/www/mi-sitio-wordpress/wp-content/themes$ d OwnerMode+ANF

# Archivos de WordPress: monitorizar sin alertar por cambios de contenido
/var/www/mi-sitio-wordpress/wp-admin$ d OwnerMode+ANF
/var/www/mi-sitio-wordpress/wp-includes$ d OwnerMode+ANF

# Ignorar logs dinámicos
/var/www/mi-sitio-wordpress/wp-content/debug.log$

La base de datos de AIDE

Una vez que AIDE está instalado y configurado, debemos inicializar la base de datos de AIDE. Esta base de datos es esencial, ya que contiene información sobre el estado actual de los archivos y directorios que AIDE monitoreará. La base de datos servirá como una referencia para futuras verificaciones.

Cuando se inicializa por primera vez, AIDE toma una «fotografía» del sistema, registrando detalles como el tamaño de los archivos, los permisos, las fechas de modificación y otros atributos importantes. Esto es crucial, ya que AIDE necesitará comparar estos datos con el estado actual en las próximas verificaciones.

Inicializar la base de datos

El comando aideinit es el encargado de generar la base de datos inicial de AIDE, registrando información sobre los archivos y directorios que se van a monitorizar. Su tiempo de ejecución puede variar dependiendo del tamaño del sistema y la cantidad de archivos que deben ser analizados. En un servidor típico con una instalación estándar de Debian 12, este proceso puede tardar desde unos pocos minutos hasta varias horas si hay una gran cantidad de archivos. Factores como la velocidad del disco (HDD vs. SSD), la carga del sistema y las reglas que hayamos definido también influyen en el tiempo de ejecución. Durante este proceso, AIDE escanea y calcula los hashes de los archivos para crear una referencia que se usará en futuras verificaciones de integridad.

sudo aideinit

Copiar la base de datos generada

Tras la inicialización, AIDE genera una base de datos temporal llamada aide.db.new. Para que AIDE la utilice en el futuro, debemos moverla a la ubicación predeterminada:

sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

Ahora AIDE está listo para comenzar a monitorizar el sistema y comparar el estado actual de los archivos con la base de datos inicializada.

Realizando una verificación manual

Es útil hacer una verificación manual para asegurarnos de que está funcionando correctamente. Durante esta verificación, AIDE comparará el estado actual de los archivos del sistema con la base de datos que se creó inicialmente. Si detecta algún cambio, lo reportará.

sudo aide --check --config /etc/aide/aide.conf

Automatizando las verificaciones con la utilidad proporcionada por AIDE para Debian

Para que AIDE verifique automáticamente la integridad del sistema sin que tengas que hacerlo manualmente, el paquete de AIDE para Debian tiene una serie de scripts que facilitan su uso. Ya hemos visto uno, aideinit, pero también existe otro que se encarga de realizar monitorizaciones diarias, dailyaidecheck. Este script se ejecutará automáticamente cada día gracias a que Debian 12 por defecto utiliza systemd y durante la instalación se crea un temporizador que ejecuta este script diariamente entre las 01:50 y las 03:50.

[Unit]
Description=Daily AIDE check

[Timer]
OnCalendar=*-*-* 01:50:00
RandomizedDelaySec=2h
Persistent=true

[Install]
WantedBy=timers.target

La configuración de dailyaidecheck

Podemos encontrar este completo script en /usr/share/aide/bin/dailyaidecheck aunque no es necesario que toquemos nada en el mismo. AIDE nos proporciona un fichero de configuración para personalizar el script en la ruta /etc/default/aide. AIDE para Debian ofrece una extensa documentación sobre qué hace cada cosa, problemas que podemos encontrar, etc.

Esta es la configuración que recomiendo utilizar, he actualizado algunos valores:

# These settings are mainly for the wrapper scripts around aide,
# such as aideinit and dailyaidecheck

# Main configuration file
CONFIG="/etc/aide/aide.conf"

# Set this to no to disable daily aide runs
#CRON_DAILY_RUN=yes

# The following variables control the sending of e-mail reports from
# the daily aide check. See /usr/share/doc/aide-common/README.Debian
# for detailed documentaton. Commented out settings are the default.
#FQDN=
#MAILSUBJ="Daily AIDE report for $FQDN"
MAILTO="[email protected]"
MAILCMD="/usr/bin/mail"
#MAILWIDTH=990

# Set this to yes to suppress mailings when no changes have been
# detected during the AIDE run and no error output was given.
QUIETREPORTS=yes

# Set this to yes to suppress mailings under all circumstances
# This option implies QUIETREPORTS=yes
#SILENTREPORTS=no

# Set this to no if you have figlet installed but do not want figlet
# output in your daily aide check mail
#FIGLET=yes

# This parameter defines which AIDE command to run from the daily aide check.
# Sensible values are "update" and "check".
# Default is "check", ensuring backwards compatibility.
# Since "update" does not take any longer, it is recommended to use "update",
# so that a new database is created every day. The new database needs to be
# manually copied over the current one, though.
COMMAND=update

# This parameter defines what to do with a new database created by
# COMMAND=update. It is ignored if COMMAND!=update.
# no: Do not copy new database to old database. This is the default.
# yes: Copy new database to old database. This means that changes to the
#   file system are only reported once. Possibly dangerous.
# ifnochange: Copy new database to old database if no changes have
#   been reported. This is needed for ANF/ARF to work reliably.
COPYNEWDB=no

# Set this to yes to truncate the detailed changes part in the mail. The full
# output will still be listed in the log file.
TRUNCATEDETAILS=no

# Set this to yes to suppress file changes by package and security
# updates from appearing in the e-mail report. Filtered file changes will
# still be listed in the log file. This option parses the /var/log/dpkg.log
# file and implies TRUNCATEDETAILS=yes
FILTERUPDATES=no

# Set this to yes to suppress file changes by package installations
# from appearing in the e-mail report. Filtered file changes will still
# be listed in the log file. This option parses the /var/log/dpkg.log file and
# implies TRUNCATEDETAILS=yes.
FILTERINSTALLATIONS=no

# This parameter defines how many lines to return per e-mail. Output longer
# than this value will be truncated in the e-mail sent out.
# Set value to "0" to disable this option.
LINES=1000

# This parameter gives a grep regular expression. If given, all output lines
# that _don't_ match the regexp are listed first in the script's output. This
# allows to easily remove noise from the AIDE report.
NOISE=""

# This parameter defines which options are given to aide in the daily
# aide check. The default is "-V4".
AIDEARGS=""

# Set this to a command that will be executed before the daily aide check
# exits. This can be used to postprocess the generated report.
# If the command is not in /sbin:/usr/sbin:/bin:/usr/bin (see PATH
# setting in the daily aide check), you need to give a fully qualified
# path. The script is executed before the aide lock is released.
# The hook is called with a single parameter meaning:
#    signal: The daily aide check was terminated by a signal
#    fatal: There was a fatal error
#    nolock: The lock could not be obtained
#    cantmovetmp: It was not possible to move away the temporary directory
#    cantcreatetmp: It was not possible to create the temporary directory
#    success: aide finished successfully and gave meaningful results
#    unknown: onexit was called with an illegal reason (should not happen)
# If the daily aide check aborted before the environment was fully set up,
# "early-" is prepended to the reason.
CRONEXITHOOK=""

Las partes clave de este fichero de configuración son las siguientes:

  • Ejecución diaria de AIDE. Como hemos comentado, si tienes habilitado systemd en Debian (lo que ocurre por defecto) no tienes que hacer nada para que la ejecución diaria se realice, pero si tienes systemd deshabilitado puedes establecer la configuración CRON_DAILY_RUN=yes para ejecutar la monitorización a través de cron.
  • Configuraciones de correo electrónico. Debemos establecer la dirección de correo electrónico que recibirá los informes. Por otra parte, llegamos a un punto que puede causar quebraderos de cabeza. La documentación comenta lo siguiente:
Comentarios sobre _aide y los correos electrónicos (Click para ver)

A partir de aide 0.18, los paquetes Debian crean un usuario de sistema _aide en la instalación e intentan ejecutar aide como ese usuario. Esto necesita que el sistema tenga systemd como pid 1 o capsh(1) del paquete libcap2-bin instalado. Si ninguno de los dos es el caso, aide se ejecuta como root. Un aide no root es aumentado con la capacidad cap_dac_read_search que permite al usuario no root leer en cualquier lugar.

La tarea cron diaria de aide que se ejecuta como no root en un sistema systemd no puede enviar correo a través de la interfaz tradicional /usr/lib/sendmail ya que la unidad systemd relacionada con la capacidad también deshabilitó suid que es necesario para que el MTA funcione. Esto afecta tanto a mailx como a bsd-mailx. Los aide no root en sistemas systemd sólo pueden enviar correo si s-nail está instalado, que a su vez depende de un MTA local para escuchar las conexiones SMTP de s-nail.

Esto afecta tanto a instalaciones nuevas como a instalaciones actualizadas. Véase más abajo para más detalles.

Una parte significativa de los scripts de shell que rodean las llamadas aide en Debian seguirán ejecutándose como root. Se aceptan parches.

Las rutas de código no systemd están mal probadas. Por favor, espere fallos y envíe parches. Agradecemos su ayuda.

En mi caso, dado que quería que el script se siguiera ejecutando con el usuario _aide y éste tiene permisos para utilizar el comando mail he optado por utilizar MAILCMD="/usr/bin/mail" para forzar el envío de correos electrónicos.

Conclusiones

AIDE es una herramienta esencial para la integridad del sistema en Debian 12, proporcionando un monitoreo detallado de cambios en archivos críticos. A lo largo de este artículo, hemos explorado su instalación, configuración y personalización para adaptarlo a nuestras necesidades, asegurando que cualquier modificación en el sistema sea detectada y reportada oportunamente por correo electrónico. Implementar AIDE con un cron job o un timer de systemd nos permite automatizar las verificaciones diarias, mejorando la seguridad sin intervención manual constante. Sin embargo, su efectividad depende de una correcta configuración y actualización de su base de datos. Mantener AIDE bien ajustado y revisar sus informes regularmente es clave para aprovechar todo su potencial en la protección del sistema.

Contenido adicional

, , ,

By  -        
Soy un Full Stack Developer que vive en Valladolid. Actualmente trabajo en la empresa Ilunion Tecnología y Accesibilidad. Soy un apasionado de la informática, la tecnología, aficionado a la fotografía y enamorado del diseño eficiente.



Deja un comentario