Système de sécurité HIDS

AIDE est un système de détection d'intrusion sur la machine hôte (HIDS: Host Integrity Detection System). La machine hôte contient un système de fichier qui permet de faire fonctionner le système d'exploitation. Les fichiers vitaux du système d'exploitation sont principalement la cible des attaques informatiques. L'intègrité d'une machine est compromise si ses fichiers parvenaient à être modifiés par un moyen quelconque utilisé par un attaquant. AIDE est un logiciel qui permet de détecter si une intrusion a eu lieu, mais ne sert pas à empècher et à bloquer cette intrusion. C'est un détecteur et non un système de réponse adaptée à une situation précise (logiciel de contre-mesure). Il permet donc d'avoir un rapport exhaustif sur l'intègrité du système d'exploitation. En fait, ce logiciel indique juste quels fichiers ont été modifiés, créés, supprimés, en comparant ceux actuellement présent sur le système avec ceux d'une base de données initialisée par l'administrateur de la machine. Il est obligatoire de créer cette base de données avant de raccorder la machine au réseau la rendant sujette au risque de compromission. Personnellement, avant d'avoir découvert AIDE dans ce très bon guide, j'avais installé sur mon serveur un autre HIDS : Tripwire. Maintenant Tripwire et AIDE cohabitent sur la même machine, les HIDS ne peuvent pas entrer en conflit entre-eux.

Installation sur Fedora 20

L'installation et la mise en route sont encore plus simple que pour Tripwire :

# yum install aide

Puis il faut créer la base de données initiale contenant la liste des fichiers du système d'exploitation ainsi que leurs informations de contrôle :

# aide --init

Cette commande prend du temps, je vous invite à aller prendre un café pendant que ça tourne. Lorsque la commande aura rendu le prompt, la base de données écrite par AIDE sera toujours dans le fichier /var/lib/aide/aide.db.new.gz.

Et la base de données utilisée pour effectuer le test d'intègrité sera toujours dans le fichier /var/lib/aide/aide.db.gz. Aussi avant de lancer les tests il convient de copier la base de données nouvellement créée au bon emplacement :

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

AIDE et SELinux

Les deux fichiers qui viennent d'être créés n'ont pas les bons contextes SELinux.

# ll -Z /var/lib/aide/
-rw-------. root root unconfined_u:object_r:var_lib_t:s0 aide.db.gz
-rw-------. root root unconfined_u:object_r:var_lib_t:s0 aide.db.new.gz

Du coup, si on lance les tests avec l'utilisateur root qui possède le contexte :

# id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Le processus ne sera pas cloisonné mais ça marchera quand même. Ça fonctionne uniquement parce que le processus n'est pas cloisonné. Par contre, si on lance AIDE dans une tâche Cron, alors le processus sera cloisonné et SELinux nous fera un joli refus d'accès AVC. Heureusement, il y a un contexte prévus par défaut dans le module de règles targeted. Au lieu d'appliquer de nouveaux contextes, l'opération ressemble plutôt à une restauration des contextes initialement prévus par le module de règles :

# restorecon -vR /var/lib/aide/
restorecon reset /var/lib/aide/aide.db.gz context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:aide_db_t:s0
restorecon reset /var/lib/aide/aide.db.new.gz context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:aide_db_t:s0

La target prévue était aide_db_t, j'ignore encore pourquoi ce contexte n'a pas été appliqué dès la création des fichiers malgrès que le service restorecond soit actif. (C'est un service systemd livré avec le paquet policycoreutils-restorecond et qui n'est pas toujours installé par défaut).

Rapport journalier

On peut automatiser le test d'intègrité dans une tâche Cron afin de suivre l'évolution du système d'exploitation au jour le jour. Le rapport est vraiment bien détaillé et permet de voir l'impact d'une mise à jour ainsi que les déploiements de l'admin. C'est toujours utile pour la recherche d'une avarie. Le script est tout simple, mais il n'est pas livré avec le paquet, il faut donc l'ajouter à la main :

# cat /etc/cron.daily/z-aidereport.sh
#!/usr/bin/bash

aide --update --verbose=20
cp -f /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz && \
echo "Updated database file: aide.db.gz"

On oublie pas de paramétrer les bonnes permissions (chmod +x). Le nom du script est important, ici je le fais commencer par la lettre Z car les scripts du répertoire /etc/cron.daily/ sont exécutés dans l'ordre alphabétique, il sera donc lancé après tous les autres. Le rapport sera alors envoyé par email à l'utilisateur root de la machine.

Prelink étant retiré définitivement de Fedora à partir de la version 20, il n'y a plus besoin de le désactiver pour éviter les faux positifs dans les rapports de HIDS.