Système de sécurité HIDS

AIDE est un système de détection de l'intègrité de l'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 hôte 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 une 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 d'exploitation avec ceux d'une base de données initialisée par l'administrateur de la machine. Il est d'usage 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 font jamais de conflits entre-eux.

Installation sur Fedora 20

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

# yum install aide

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

# aide --init

Cette commande prend du temps, prévoir 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. 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é et donc ça marchera. Par contre, si on lance AIDE dans un 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. (Service systemd livré avec le paquet policycoreutils-restorecond qui n'est pas toujours installé par défaut).

Rapport journalier

On peut automatiser le contrôle d'intègrité dans un Cron affin 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éveloppements de l'admin, très utile pour la recherche d'une avarie. Le script Cron 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"

Avec 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, pas besoin de le désactiver pour éviter les faux positifs dans le rapport des HIDS.