Lorsqu’on utilise des outils de surveillance tels que tripwire ou rkhunter pour surveiller les modifications des fichiers installés, on rencontre le problème suivant : ces outils ne permettent pas de déterminer si les fichiers ont été modifiés par une mise à jour régulière d’un paquet ou altérés par une personne non autorisée.
Si, par exemple, rkhunter signale que le fichier /usr/bin/ldd a été modifié, il faut vérifier manuellement si la somme de contrôle du fichier correspond à la version la plus récente du paquet Debian.
Il existe un outil nommé debsums qui facilite cette tâche. L’installation se fait avec :
Une fois l’outil installé, on peut effectuer la vérification au niveau du paquet :
/usr/bin/file OK
/usr/share/bug/file/control OK
/usr/share/bug/file/presubj OK
/usr/share/doc/file/README.Debian OK
/usr/share/doc/file/README.gz OK
/usr/share/doc/file/changelog.Debian.gz OK
/usr/share/doc/file/changelog.gz OK
/usr/share/doc/file/copyright OK
/usr/share/lintian/overrides/file OK
/usr/share/man/man1/file.1.gz OK
mais pas au niveau du fichier :
debsums: invalid package name ‘/usr/bin/ldd’
Il faut d’abord déterminer à quel paquet appartient le fichier /usr/bin/ldd.
libc-bin: /usr/bin/ldd
Afin de ne pas avoir à effectuer cette recherche à chaque fois, j’ai écrit un petit script shell qui se charge de cette tâche et appelle debsums avec les résultats obtenus :
EC=0
PKGS=$(dpkg -S « $@ » | awk -F’:’ ‘{print $1}’ | sed -e ‘s/, /
/g’ | sort | uniq)
for i in $PKGS; do
debsums « $i » | grep -v OK
dec=$PIPESTATUS
echo -n « === Package ‘$i’ : »
if [ $dec -eq 0 ]; then echo OK; else echo MODIFIED; EC=$dec; fi
done
exit $EC
Dans cet exemple, j’ai nommé le script check-inst.sh. Son utilisation est simple :
=== Package ‘libc-bin’ : OK
On peut appeler le script avec plusieurs noms de fichiers :
=== Package ‘file’ : OK
=== Package ‘libc-bin’ : OK
Si l’on n’utilise pas de chemin absolu, on obtient des résultats de recherche pour les paquets installés :
=== Package ‘apache2’ : OK
=== Package ‘apache2.2-bin’ : OK
=== Package ‘apache2.2-common’ : OK
=== Package ‘apache2-doc’ : OK
=== Package ‘apache2-mpm-prefork’ : OK
=== Package ‘apache2-suexec’ : OK
=== Package ‘apache2-utils’ : OK
=== Package ‘bash-completion’ : OK
=== Package ‘libapache2-mod-fcgid’ : OK
=== Package ‘libapache2-mod-php5’ : OK
=== Package ‘libapache2-mod-ruby’ : OK
=== Package ‘libapache2-mod-suphp’ : OK
Si les résultats sont OK, tu peux mettre à jour ton outil de surveillance en toute tranquillité. Par exemple, pour rkhunter :
Voici un exemple de sortie affichant les fichiers modifiés par l’utilisateur :
/usr/bin/pear FAILED
/usr/bin/peardev FAILED
/usr/bin/pecl FAILED
…
/usr/share/php/pearcmd.php FAILED
/usr/share/php/peclcmd.php FAILED
=== Package ‘php-pear’ : MODIFIED
Le script renvoie le code de sortie 0 si toutes les vérifications ont réussi, sinon le code d’erreur de la première vérification ayant échoué. Cela est utile lorsqu’on souhaite d’abord connaître uniquement le code de sortie et consulter les résultats détaillés dans un fichier journal.
Amuse-toi bien avec tes essais
C.


