Voilà je me suis amusé à écrire un petit HIDS en Python.
Pour l'instant il ne fait pas grand chose. Il calcul simplement les hash d'un certain nombre de fichiers et détecte si un hash a été modifié.
Par contre il ne fonctionne que sous Linux. En effet il va chercher dans /etc/ entre autre ... Donc comme il peut y avoir beaucoup de fichier, il est threadé.
De plus, les logs sont sauvegardés dans un fichier crypté, via ce module :
http://stuvel.eu/rsa
Quelques explications :
Pour tester, saisissez les commandes :
python genKeys.py
python genBase.py
python pyHids.py
La première ligne génère les paires de clés RSA et les enregistre (via le module pickle de Python) dans deux fichiers distincts :
* cle_priv : la paire de clés privés que le programme connait pour décrypter le fichier de log ;
* cle_pub : la paire de clés publiques permettant de générer la base de hachage. Cette paire de clés ne doit pas rester sur la machine...
La deuxième ligne génère la base contenant les valeurs de hachages. C'est ce fichier qui est donc crypté.
La troisième ligne peut être exécutée périodiquement par cron, par exemple. Chez moi le script s'exécute toutes les heures. Mes logs font déjà plus de 3 Mo ...
Exemple d'exécution :
[cedric@localhost pyHIDS]$ python genKeys.py
Generating 256 bits RSA keys ...
Dumping Keys
Done.
[cedric@localhost pyHIDS]$ python genBase.py
Loading public key
Generating data base...
442 files in the base.
[cedric@localhost pyHIDS]$ python pyHIDS.py
[08/01/09 17:29:34] HIDS starting.
[08/01/09 17:29:39] [notice] /etc/X11/xorg.conf.mdv1227283295 ok
[08/01/09 17:29:39] [notice] /etc/sane.d/stv680.conf ok
[08/01/09 17:29:39] [notice] /etc/X11/xorg.conf.mdv1227084349 ok
[08/01/09 17:29:39] [notice] /etc/gconf/gconf.xml.defaults/%gconf-tree-nl.xml ok
[08/01/09 17:29:39] [notice] /etc/sane.d/matsushita.conf ok
[08/01/09 17:29:39] [notice] /etc/avahi/avahi-daemon.conf ok
[08/01/09 17:29:39] [notice] /etc/fonts/conf.avail/10-sub-pixel-bgr.conf ok
[08/01/09 17:29:39] [notice] /etc/security/time.conf ok
[08/01/09 17:29:39] [notice] /etc/X11/xorg.conf.mdv1229172361 ok
.
.
.
[08/01/09 17:29:40] [notice] /etc/dbus-1/session.conf ok
[08/01/09 17:29:40] [notice] /etc/fonts/conf.avail/70-yes-bitmaps.conf ok
[08/01/09 17:29:40] Error(s) : 0
[08/01/09 17:29:40] Warning(s) : 0
[08/01/09 17:29:40] HIDS finished.
[cedric@localhost pyHIDS]$
Après changement d'un caractère dans un fichier :
[cedric@localhost pyHIDS]$ python pyHIDS.py
[08/01/09 17:46:59] HIDS starting.
[08/01/09 17:47:05] [notice] /etc/sane.d/stv680.conf ok
.
.
.
[08/01/09 17:47:34] [warning] /etc/ssh/ssh_config hash has changed : b4889441ab35878c38cdc9fb422363680701a7d7 != 53139ec94a540688da2755a13344dd36d2eed740
.
.
.
[08 /01/09 17:47:34] [notice] /etc/dbus-1/session.conf ok
[08/01/09 17:47:34] [notice] /etc/fonts/conf.avail/70-yes-bitmaps.conf ok
[08/01/09 17:47:34] Error(s) : 0
[08/01/09 17:47:34] Warning(s) : 1
[08/01/09 17:47:34] HIDS finished.
[cedric@localhost pyHIDS]$