AIDE est un programme à ranger dans la catégorie des HIDS. Le principe de fonctionnement est simple, AIDE crée une base de signatures des fichiers et répertoires de votre choix, à l'instant T, et peux à volonté comparer cette base avec les signatures de ces fichiers à l'instant T+1. Il est ainsi possible de détecter les changements non souhaités de façon très simple et rapide.

Notez bien que ce programme n'améliore pas directement la sécurité d'un système, dans le sens ou il n'empêche pas l'intrusion et/ou la compromission, mais apporte une aide précieuse pour retrouver les fichiers compromis suite à une intrusion. AIDE est l'exemple type du logiciel à installer en dernier sur un serveur. AIDE n'a pas connu de mise à jour depuis la fin 2006, mais ce programme léger et rapide à mettre en place peut rendre de grand service. La dernière version est disponible ici.

hacker-rip.jpg

Après plus de 3 ans sans nouvelle version, voilà une 0.14 en cours de développement ! Disponible sur la page SourceForge du projet.


Installation

Comme souvent sous Ubuntu: apt.png
C'est facile! Il est pourtant sympathique de prendre le temps de compiler ce programme avec le configure suivant :

$./configure --with-mhash --with-zlib --with-config_file=/mnt/floppy/aide/aide.conf

Grâce à cela, vous disposerez de plus d'option de check avec mhash, de l'opportunité de compresser la base de donnée avec zlib, et de spécifier immédiatement l'emplacement du fichier de configuration vers "/mnt/floppy/aide/aide.conf"


Configuration

La configuration de AIDE doit être indiqué lors du lancement de programme avec l'option -c :

$aide -c /chemin/vers/aide.conf

Voilà un petit exemple de ce fichier :

# AIDE conf
# Emplacement des fichiers .db
database=file:/mnt/floppy/aide/aide.db
database_out=file:/mnt/floppy/aide/aide.db.new
#
# Compresse t-on la database: yes/true ou no/false. Par defaut no.
# Necessite une compilation avec --with-zlib
# gzip_dbout=true
#
# Voici la liste des check possibles.
#
# p:  permissions
# i:  inode
# n:  nombre de links
# l:  nom du link
# u:  utilisateur
# g:  groupe
# E:  groupe vide
# s:  taille
# b:  nombre de bloc
# m:  mtime
# a:  atime
# c:  ctime
# S:  verifie si la taille augmente
# I:  ignore changement de nom
# md5:  md5 checksum
# sha1:  sha1 checksum
# sha256:  sha256 checksum
# sha512:  sha512 checksum
# rmd160:  rmd160 checksum
# tiger:  tiger checksum
# haval:  haval checksum
# crc32:  crc32 checksum
#
# Ces deux options doivent avoir ete active lors de la compilation:
# gost:   gost checksum
# whirlpool: whirlpool checksum
#
# Ces trois options doivent etre definies sus le systeme:
# acl:    access control list
# selinux SELinux security context
# xattr:  extended file attributes

# Il est possible de créer des groupes de règles. 
#
# Une regle lourde pour les executables, avec controle de checksum
# Regle1 = p+i+n+u+g+s+b+m+c+md5+sha1 
# Une regle plus legere pour les fichiers de configuration
# Regle2 = p+u+g+i

# Ici commence la definition des regles sur les fichiers/dossiers
# Un ! devant un fichier/dossier l'ignore.
# Un = rend le fonctionnement non-récursif pour le fichier/dossier.
# Un / correspond à une utilisation normal.

/bin Regle1 
/var Regle1
/sbin Regle1 
/etc Regle2		
!/var/log/.*
!/var/spool/.*
!/var/adm/utmp$

Ici, on applique "Regle1" à "/bin", "/sbin", "/var" et "Regle2" à "/etc". Et on ignore le fichier "/var/adm/utmp" et tout ceux contenus dans "/var/log" et "/var/spool".

Le $ final pour la ligne "!/var/adm/utmp$" indique que l'on souhaite uniquement s'occuper de ce fichier. Notez qu'il est possible de préciser des fichiers ainsi :

 !/var/log/messages\.[0-9]$

Cette ligne fera en sorte d'ignorer les fichiers "/var/log/messages.1" à "/var/log/messages.9", mais n'ignorera pas "/var/log/messages.today

Comme vous le voyez, la syntaxe du fichier de configuration est simple.
Il est recommandé de placer les configurations les plus vastes en fin de fichier:

/ n+p+l+i+u+g+s+b+m+c+md5+sha1+rmd160+haval+gost+crc32+tiger
/etc$ n+p+l+i+u+g
/etc/resolv.conf$ n+p+l+u+g

Devrait être remplacé par :

/etc/resolv.conf$ n+p+l+u+g
/etc$ n+p+l+i+u+g
/ n+p+l+i+u+g+s+b+m+c+md5+sha1+rmd160+haval+gost+crc32+tiger

Cela permet de ne pas avoir de redondance dans l'application de certaines règles.

Utilisation

La première commande à lancer une fois la configuration en place a pour but d'initialiser la base de donnée :

$aide -c /mnt/floppy/aide/aide.conf -i

AIDE va alors créer le fichier "/mnt/floppy/aide/aide.db.new", qu'il faut immédiatement renommer vers "aide.db". Il convient alors de placer ce fichier sur un support en lecture seul, comme une disquette (si votre machine dispose d'un lecteur...) ou un CD. Il est primordial que ce fichier "aide.conf" ne soit en aucun cas compromit. Tout l'intérêt de AIDE en dépend !

Par le suite, on réalise un check avec la commande :

$aide -c /mnt/floppy/aide/aide.conf -C
AIDE, version 0.13.1
### All files match AIDE database. Looks okay!

Tout vas bien! Il est bien sur recommandé de lancer AIDE régulièrement via cron.

En cas de pépins, AIDE renvoi la liste des fichiers ayant été modifié, ainsi que quelques détails si disponibles. Il arrive forcement que certain fichiers changent pour une raison valable, suite à des mises à jours, modifications de configurations, etc... Dans ce cas, la commande suivante permet de mettre à jour la base de donnée avec les nouvelles données :

$aide -c /mnt/floppy/aide/aide.conf -u

Celle ci crée un nouveau fichier "aide.db.new", qu'il vous faut de nouveau renommer pour remplacer le "aide.db" actuel. Il est primordial de s'assurer que le système n'est pas compromis avant cette opération.

Et voilà, AIDE est une solution rapide à mettre en place, et très efficace pour surveiller les évolutions d'un système.