Dans cet article nous allons voir comment mettre en place certaines mesures permettant d’être alerté en cas de hack de serveurs.
Le principe est simple, nous faisons une image du serveur à un instant t, et vérifions le reste du temps qu’aucun changement ne soit fait.
Imaginons que votre système de fichiers /usr change, du jour au lendemain, sans intervention de votre part. Vous êtes peut être victime d’un hack.
La commande mtree, qui permet de créer ou vérifier l’arborescence d’un répertoire, fait l’objet de cet article.
Nous ne parlons pas de snapshot au niveau disque, mais seulement d’enregistrer dans un fichier texte la liste des fichiers et des répertoires présent sur notre serveur.
Ce fichier contiendra des informations sur les fichiers/répertoires, comme par exemple le propriétaire, le groupe, les droits, les flags, etc… le tout hacher en md5 et sha1.
Dressons la liste des fichiers et des répertoires vivant de notre serveur :
$ mkdir /root/spec $ cat /root/spec/exclude.list # root filesystem ./dev ./mnt ./proc ./root ./tmp # var filesystem ./log ./tmp # usr filesystem ./home ./obj ./src
Passons au listing des fichiers et des répertoires de notre serveur :
$ mtree -c -k md5digest,sha1digest -x -X /root/spec/exclude.list -p / > /root/spec/root.spec $ mtree -c -k md5digest,sha1digest -x -X /root/spec/exclude.list -p /usr > /root/spec/usr.spec $ mtree -c -k md5digest,sha1digest -x -X /root/spec/exclude.list -p /var > /root/spec/var.spec
-c : Afficher le résultat sur la sortie standard
-k : Ajouter des options (par défaut : flags, gid, mode, nlink, size, link, time, et uid)
-x : Ne pas descendre dans un point de montage
-X : Fichier d’exclusions
-p : Répertoire à vérifier
Le scan journalier à la recherche d’éventuelle modification, se fera à partir des fichiers ci-dessus qu’il nous faut conserver précieusement.
$ chmod 0500 /root/spec $ chmod 0400 /root/spec/*
Si vous êtes vraiment paranoïaque :
$ chflags -R schg /root/spec $ ls -lao /root/spec total 46454 dr-x------ 2 root wheel schg 512 Sep 26 21:14 . drwx------ 5 root wheel - 512 Sep 26 18:41 .. -r-------- 1 root wheel schg 35 Sep 26 20:56 exclude.list -r-------- 1 root wheel schg 23918730 Sep 26 21:06 root.spec -r-------- 1 root wheel schg 23333747 Sep 26 21:23 usr.spec -r-------- 1 root wheel schg 241933 Sep 26 21:14 var.spec
Pour montrer à quel point la commande mtree est utile et efficace, mettons un peu de désordre dans le répertoire /etc.
$ for i in `seq 1 3` > do > dd if=/dev/zero of=/etc/music$i.mp3 bs=1024k count=2 > done $ ls -l /etc/music* -rw-r--r-- 1 root wheel 2097152 Sep 26 22:10 /etc/music1.mp3 -rw-r--r-- 1 root wheel 2097152 Sep 26 22:10 /etc/music2.mp3 -rw-r--r-- 1 root wheel 2097152 Sep 26 22:10 /etc/music3.mp3
Nous sommes d’accord, les fichiers musicaux n’ont rien à faire dans le répertoire de configuration du système.
Voyons ce que la commande mtree remonte pour le système de fichiers racine.
$ mtree -K md5digest,sha1digest -x -X /root/spec/exclude.list -f /root/spec/root.spec -p / etc/music1.mp3 extra etc/music2.mp3 extra etc/music3.mp3 extra
-f : Fichier contenant une arborescence mtree
Une option sympatique de la commande mtree permet de garder une correspondance entre le fichier mtree et les fichiers sur disque.
$ mtree -K md5digest,sha1digest -x -r -U -X /root/spec/exclude.list -f /root/spec/root.spec -p / etc/music1.mp3 extra, removed etc/music2.mp3 extra, removed etc/music3.mp3 extra, removed
-r : Les fichiers présent sur disque mais absent du fichier mtree sont supprimés
-U : Les fichiers absent sur disque mais présent dans le fichier mtree sont créés
Avec cette vérification journalière, qui peut être exécutée par script, nous gardons un oeil sur ce qui se passe sur notre serveur.
Si vous avez des remarques ou juste pour dire un petit « merci », laissez un commentaire.