AIDE (Advanced Intrusion Detection Environment) es una herramienta de detección de intrusos para verificar la integridad de archivos y directorios. El funcionamiento se basa en crear una base de datos con información importante de los archivos y directorios (por ejemplo: nombre, tamaño, fecha de modificación, permisos y un hash del contenido) y luego chequear periodicamente contra esta información de referencia para verificar que no se hayan producido cambios inesperados.

Lo ideal es generar la base de datos de AIDE inmediatamente luego de instalar un sistema y a partir de ahí monitorear los cambios que se producen. Monitoreando los cambios en el sistema de archivos se puede detectar rápidamente una intrusión y tomar cartas en el asunto.

Este artículo explica cómo instalar y configurar AIDE en CentOS y Debian para recibir a diario un resumen por correo electrónico con las modificaciones en el sistema de archivos.

AIDE se encuentra disponible en los repositorios de las distribuciones GNU/Linux más importantes, aunque también es posible instalarlo compilando su código fuente desde aide.sourceforge.net.

CentOS 6.3

En CentOS, AIDE se encuentra disponible en el repositorio base. La versión disponible actualmente para CentOS 6.3 es la 0.14.

# repoquery -i aide

Name        : aide
Version     : 0.14
Release     : 3.el6_2.2
Architecture: x86_64
Size        : 303706
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Group       : Applications/System
URL         : http://sourceforge.net/projects/aide
Repository  : base
Summary     : Intrusion detection environment
Source      : aide-0.14-3.el6_2.2.src.rpm
Description :
AIDE (Advanced Intrusion Detection Environment) is a file integrity
checker and intrusion detection program.

Para instalar AIDE ejecutar:

# yum install aide

Luego de la instalación, es posible verificar la versión utilizando la opción --version:

# aide --version
Aide 0.14

Compiled with the following options:

WITH_MMAP
WITH_POSIX_ACL
WITH_SELINUX
WITH_PRELINK
WITH_XATTR
WITH_LSTAT64
WITH_READDIR64
WITH_ZLIB
WITH_GCRYPT
WITH_AUDIT
CONFIG_FILE = "/etc/aide.conf"

El archivo /etc/aide.conf contiene la configuración de AIDE. Dentro del mismo es posible definir la ubicación donde almacenar las bases de datos y las reglas de monitoreo para cada directorio. Para comenzar a utilizar AIDE es suficiente con las reglas que vienen definidas por defecto, luego es posible ajustarlas para adecuarse al sistema (por ejemplo configurar para que reporte mayor detalle sobre ciertos directorios, y menor detalle sobre otros).

Para inicializar la base de datos se debe ejecutar:

# aide --init

AIDE, version 0.14

### AIDE database at /var/lib/aide/aide.db.new.gz initialized.

Lo cual genera una nueva base de datos de archivos y directorios. Para generar un primer reporte de prueba se debe copiar la base de datos generada con el nombre /var/lib/aide/aide.db.gz:

# cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

Para verificar los cambios en el sistema de archivos contra la base de datos /var/lib/aide/aide.db.gz ejecutar:

aide --check

La versión 0.14 disponible para CentOS 6.3 no tiene implementada la funcionalidad para el envío de mails, ni los cron jobs para actualizar diariamente la base de datos, por lo que se debe crear un script que relice esta tarea. El binario de AIDE se encuentra en /usr/sbin/aide:

# which aide
/usr/sbin/aide

Para que se envíe un reporte por mail y se actualice la base de datos una vez al día se crea un script en el directorio /etc/cron.daily:

# touch /etc/cron.daily/aide
# nano /etc/cron.daily/aide

El script genera un reporte de modificaciones y luego actualiza la base de datos (para que los cambios que encuentra AIDE se informen solamente una vez y no se reporten nuevamente al día siguiente, salvo que se hayan repetido).

#!/bin/sh

servidor=$(hostname)
destinatario="sysadmin@pepe.org"

# Generar reporte de cambios en el sistema de archivos
reporte=$(/usr/sbin/aide --check)

# Enviar reporte por mail
asunto="Reporte diario AIDE para $servidor"
echo "$reporte" | /bin/mail -s "$asunto" $destinatario

# Actualizar la base de datos:
/usr/sbin/aide --init
cp -f /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

Finalmente debe asignarse permiso de ejecución al script:

[root@qualyserver02 ~]# chmod +x /etc/cron.daily/aide

Es posible verificar el funcionamiento ejecutando:

# /etc/cron.daily/aide

Debería recibirse un correo electrónico con el reporte de AIDE, como por ejemplo:

AIDE found differences between database and filesystem!!
Start timestamp: 2012-12-26 12:25:22

Summary:
  Total number of files:        75023
  Added files:                  0
  Removed files:                0
  Changed files:                33


---------------------------------------------------
Changed files:
---------------------------------------------------

changed: /usr/sbin
changed: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib
changed: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/jli
changed: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin
changed: /usr/lib/cups/filter
changed: /usr/bin
changed: /usr/libexec
changed: /usr/libexec/utempter
changed: /usr/libexec/getconf
changed: /usr/libexec/polkit-1
changed: /usr/libexec/gcc/x86_64-redhat-linux/4.4.4
changed: /usr/libexec/certmonger
changed: /usr/libexec/mc
changed: /usr/libexec/gstreamer-0.10
changed: /usr/libexec/awk
changed: /usr/libexec/sssd
changed: /usr/libexec/oddjob
changed: /usr/lib64
changed: /usr/lib64/sa
changed: /usr/lib64/sfcb
changed: /usr/lib64/vte
changed: /usr/lib64/nss/unsupported-tools
changed: /usr/lib64/perl5/CORE
changed: /usr/lib64/mysql
changed: /usr/lib64/gettext
changed: /usr/lib64/pm-utils/bin
changed: /lib/udev
changed: /sbin
changed: /lib64
changed: /lib64/dbus-1
changed: /lib64/ebtables
changed: /lib64/security/pam_krb5
changed: /bin

--------------------------------------------------
Detailed information about changes:
---------------------------------------------------


Directory: /usr/sbin
  Mtime    : 2012-12-26 12:11:31              , 2012-12-26 12:21:58
  Ctime    : 2012-12-26 12:11:31              , 2012-12-26 12:21:58

Directory: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib
  Mtime    : 2012-12-26 12:11:31              , 2012-12-26 12:21:58
  Ctime    : 2012-12-26 12:11:31              , 2012-12-26 12:21:58

Directory: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/jli
  Mtime    : 2012-12-26 12:11:33              , 2012-12-26 12:22:00
  Ctime    : 2012-12-26 12:11:33              , 2012-12-26 12:22:00

Directory: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin
  Mtime    : 2012-12-26 12:11:33              , 2012-12-26 12:22:00
  Ctime    : 2012-12-26 12:11:33              , 2012-12-26 12:22:00

Directory: /usr/lib/cups/filter
  Mtime    : 2012-12-26 12:11:35              , 2012-12-26 12:22:02
  Ctime    : 2012-12-26 12:11:35              , 2012-12-26 12:22:02

Directory: /usr/bin
  Mtime    : 2012-12-26 12:11:57              , 2012-12-26 12:22:23
  Ctime    : 2012-12-26 12:11:57              , 2012-12-26 12:22:23

Directory: /usr/libexec
  Mtime    : 2012-12-26 12:11:57              , 2012-12-26 12:22:23
  Ctime    : 2012-12-26 12:11:57              , 2012-12-26 12:22:23

Directory: /usr/libexec/utempter
  Mtime    : 2012-12-26 12:11:57              , 2012-12-26 12:22:23
  Ctime    : 2012-12-26 12:11:57              , 2012-12-26 12:22:23

Directory: /usr/libexec/getconf
  Mtime    : 2012-12-26 12:11:57              , 2012-12-26 12:22:23
  Ctime    : 2012-12-26 12:11:57              , 2012-12-26 12:22:23

Directory: /usr/libexec/polkit-1
  Mtime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:23
  Ctime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:23

Directory: /usr/libexec/gcc/x86_64-redhat-linux/4.4.4
  Mtime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:23
  Ctime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:23

Directory: /usr/libexec/certmonger
  Mtime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:24
  Ctime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:24

Directory: /usr/libexec/mc
  Mtime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:24
  Ctime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:24

Directory: /usr/libexec/gstreamer-0.10
  Mtime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:24
  Ctime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:24

Directory: /usr/libexec/awk
  Mtime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:24
  Ctime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:24

Directory: /usr/libexec/sssd
  Mtime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:24
  Ctime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:24

Directory: /usr/libexec/oddjob
  Mtime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:24
  Ctime    : 2012-12-26 12:11:58              , 2012-12-26 12:22:24

Directory: /usr/lib64
  Mtime    : 2012-12-26 12:12:03              , 2012-12-26 12:22:29
  Ctime    : 2012-12-26 12:12:03              , 2012-12-26 12:22:29

Directory: /usr/lib64/sa
  Mtime    : 2012-12-26 12:12:03              , 2012-12-26 12:22:29
  Ctime    : 2012-12-26 12:12:03              , 2012-12-26 12:22:29

Directory: /usr/lib64/sfcb
  Mtime    : 2012-12-26 12:12:03              , 2012-12-26 12:22:29
  Ctime    : 2012-12-26 12:12:03              , 2012-12-26 12:22:29

Directory: /usr/lib64/vte
  Mtime    : 2012-12-26 12:12:03              , 2012-12-26 12:22:29
  Ctime    : 2012-12-26 12:12:03              , 2012-12-26 12:22:29

Directory: /usr/lib64/nss/unsupported-tools
  Mtime    : 2012-12-26 12:12:04              , 2012-12-26 12:22:29
  Ctime    : 2012-12-26 12:12:04              , 2012-12-26 12:22:29

Directory: /usr/lib64/perl5/CORE
  Mtime    : 2012-12-26 12:12:04              , 2012-12-26 12:22:29
  Ctime    : 2012-12-26 12:12:04              , 2012-12-26 12:22:29

Directory: /usr/lib64/mysql
  Mtime    : 2012-12-26 12:12:08              , 2012-12-26 12:22:33
  Ctime    : 2012-12-26 12:12:08              , 2012-12-26 12:22:33

Directory: /usr/lib64/gettext
  Mtime    : 2012-12-26 12:12:10              , 2012-12-26 12:22:35
  Ctime    : 2012-12-26 12:12:10              , 2012-12-26 12:22:35

Directory: /usr/lib64/pm-utils/bin
  Mtime    : 2012-12-26 12:12:11              , 2012-12-26 12:22:36
  Ctime    : 2012-12-26 12:12:11              , 2012-12-26 12:22:36

Directory: /lib/udev
  Mtime    : 2012-12-26 12:12:21              , 2012-12-26 12:22:46
  Ctime    : 2012-12-26 12:12:21              , 2012-12-26 12:22:46

Directory: /sbin
  Mtime    : 2012-12-26 12:12:22              , 2012-12-26 12:22:47
  Ctime    : 2012-12-26 12:12:22              , 2012-12-26 12:22:47

Directory: /lib64
  Mtime    : 2012-12-26 12:12:29              , 2012-12-26 12:22:54
  Ctime    : 2012-12-26 12:12:29              , 2012-12-26 12:22:54

Directory: /lib64/dbus-1
  Mtime    : 2012-12-26 12:12:29              , 2012-12-26 12:22:54
  Ctime    : 2012-12-26 12:12:29              , 2012-12-26 12:22:54

Directory: /lib64/ebtables
  Mtime    : 2012-12-26 12:12:29              , 2012-12-26 12:22:54
  Ctime    : 2012-12-26 12:12:29              , 2012-12-26 12:22:54

Directory: /lib64/security/pam_krb5
  Mtime    : 2012-12-26 12:12:29              , 2012-12-26 12:22:54
  Ctime    : 2012-12-26 12:12:29              , 2012-12-26 12:22:54

Directory: /bin
  Mtime    : 2012-12-26 12:12:30              , 2012-12-26 12:22:56
  Ctime    : 2012-12-26 12:12:30              , 2012-12-26 12:22:56

Debian 6

En Debian 6, la versión disponible de AIDE es la 0.15 la cual incorpora el soporte para el envío de mails y actualización automática, por lo que la configuración es más sencilla.

Para instalar AIDE ejecutar:

# apt-get install aide

Luego de la instalación, el directorio /etc/aide posee el siguiente contenido:

# ll /etc/aide/
total 24
drwxr-xr-x  4 root root 4096 dic 10 11:19 .
drwxr-xr-x 76 root root 4096 dic 10 11:19 ..
-rw-r--r--  1 root root 6557 abr 11  2011 aide.conf
drwxr-xr-x  2 root root 4096 dic 10 11:20 aide.conf.d
drwxr-xr-x  2 root root 4096 dic 10 11:19 aide.settings.d

El archivo /etc/aide/aide.conf contiene la configuración de AIDE.

En Debian, para inicializar las bases de datos se debe ejecutar:

# aideinit 
Running aide --init...

AIDE, version 0.15.1

### AIDE database at /var/lib/aide/aide.db.new initialized.

# ll /var/lib/aide
total 16660
drwxr-xr-x  2 root root    4096 dic 10 12:24 .
drwxr-xr-x 30 root root    4096 dic 10 11:19 ..
-rw-r--r--  1 root root   67808 dic 10 11:55 aide.conf.autogenerated
-rw-------  1 root root 8487906 dic 10 12:24 aide.db
-rw-------  1 root root 8487906 dic 10 12:24 aide.db.new

Para verificar de forma manual ejecutar:

aide -c /etc/aide/aide.conf --check

Por defecto AIDE instala el cron job /etc/cron.daily/aide. Este script se ejecuta diariamente e informa por correo electrónico los cambios que encuentre en el sistema de archivos. La cuenta de correo que utiliza como destino se configura en el archivo /etc/default/aide en la variable MAILTO.

MAILTO=sysadmin@pepe.org

Adicionalmente, en el archivo /etc/default/aide se configura la variable COPYNEWDB para que se actualice la base de datos a diario.

# This parameter defines which AIDE command to run from the cron script.
# 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=yes

Con esta excelente herramienta podremos saber qué es lo que está sucediendo en los sistemas de archivos de nuestros servidores.

Actualización 11/08/2014 - Recientemente encontré un manual muy completo que cubre desde la instalación, configuración y uso de AIDE, junto con algunas recomendaciones de seguridad: The AIDE manual.


Tal vez pueda interesarte


Compartí este artículo