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.
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.
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
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.
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 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
# 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_-]+$
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.# 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.# 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.# 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.
El sistema de archivos ext4 en Linux permite asignar atributos especiales a los archivos, que modifican su comportamiento. Estos atributos, gestionados mediante el comando chattr
, incluyen características como la inmutabilidad, compresión y otras funcionalidades avanzadas. Sin embargo, algunos de estos atributos no pueden ser modificados manualmente por los usuarios, lo que puede provocar falsas alarmas en herramientas de monitoreo de integridad como AIDE.
Para abordar este problema, AIDE ofrece la opción report_ignore_e2fsattrs
, que permite especificar una lista de atributos del sistema de archivos ext2/ext3/ext4 que deben ser ignorados en los informes de cambios. Al configurar esta opción, AIDE omite los cambios en los atributos especificados, reduciendo así la posibilidad de generar alertas innecesarias.
Por ejemplo, si deseamos que AIDE ignore los atributos de archivo relacionados con la compresión (c
), los archivos enormes (h
) y los directorios indexados (I
), podemos establecer la siguiente configuración en el archivo aide.conf
:
report_ignore_e2fsattrs=chI
Es importante destacar que, al ignorar ciertos atributos, podríamos pasar por alto modificaciones relevantes en el sistema. Por lo tanto, se recomienda configurar esta opción con precaución, asegurándose de que solo se omitan los atributos que no son críticos para la seguridad o el funcionamiento del sistema.
###### 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.En sistemas de producción que requieren una alta seguridad, es fundamental seleccionar algoritmos de hash robustos para garantizar la integridad de los archivos. Aunque SHA-256 es ampliamente reconocido por su seguridad y eficiencia, es importante considerar la compatibilidad de la versión de AIDE que utilices.
SHA-256
y SHA-512
no son válidos en versiones anteriores de AIDE.aide.conf
para establecer SHA-256 como el algoritmo de hash predeterminado. Esto se puede hacer asignando sha256
a la variable 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
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./var
.i
). Útil para directorios con archivos dinámicos, donde los inodos pueden cambiar, pero no es necesario verificarlos.n
), las marcas de tiempo (l
) y los atributos extendidos (X
) de los archivos. Se usa en directorios con archivos que cambian frecuentemente.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.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.###### 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.# 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.
# 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.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:
01_os_rules
, 10_var_log
, 20_home_dirs
…31_aide_aptitude
, 31_aide_clamav
, 31_aide_dovecot
…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.
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.
Podemos visualizar los tipos de Hash y atributos disponibles ejecutando el comando informativo de aide:
aide --version
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
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:
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:
Algoritmo | MiB/Segundo | Ciclos por bit |
---|---|---|
MD5 | 335 | 6,3 |
SHA-256 | 139 | 15 |
SHA-512 | 154 | 13,6 |
Whirlpool | 77 | 27,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.
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í.
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.
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/
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
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.
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$
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.
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
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.
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
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
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:
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
.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.
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.
Ciberseguridad, Linux, Servidores, Tutoriales
Comments RSS Feed