Ce matin je ne ferai pas grand chose sur l'HIDS. CISCO …
Je viens juste de le rendre plus "compliant" avec la PEP 8. C'est plus beau et ça doit faire plaisir à Stéphane.
Je posterai plus tard.
Si vous vous ennuyez vous pouvez lire ça ainsi que ça, si vous êtes pressé lisez ça. Si vous avez vraiment le temps lisez ça.
Excellent, le site netacad est en maintenance pour pas mal de temps en plus…
J'ai encore fait un peu de Python. Ainsi, j'ai commencé vite fait un log MySQL et mail ;-)
Y a trois méthodes de log :
- log : fichier ;
- log_mysql : base de données ;
- log_mail : via mail.
Les deux derniers c'est pour le fun on va dire. Les mails seraient à la limite utilisés quand une valeur de hachage a changé.
Le log mail, c'est encore moins embêtant que MySQL.
Je voulais faire ça proprement, avec une classe pour les mails, une autre pour MySQL. Mais vu la taille du code, je me suis dit nan. C'est tellement cour que j'aurai plus de lignes inutiles que de codes…
Version 0.3
Voilà je viens d'uploader la version 0.3.
À noter que si vous voulez tester il faudra changer quelques adresses. J'ai mis les adresses en dur quand j'ai testé avec cron…
De plus, il vous faudra être root car le programme veut lire /etc/shadow. ça ne me pose plus de problèmes car maintenant j'ai mis un script shell dans cron.hourly qui exécute le script Python ;-) Il a donc plus de privilèges.
J'ai un peu changé les logs :
"""
[root@localhost pyHIDS]# python pyHIDS.py
[07/12/08 21:45:53] HIDS starting.
[07/12/08 21:45:53] [notice] /etc/security/limits.conf ok
[07/12/08 21:45:53] [notice] /etc/shadow ok
[07/12/08 21:45:53] [notice] /etc/ssh/ssh_config ok
[07/12/08 21:45:53] [notice] /boot/grub/menu.lst ok
[07/12/08 21:45:53] [notice] /etc/passwd ok
[07/12/08 21:45:53] Error(s) : 0
[07/12/08 21:45:53] Warning(s) : 0
[07/12/08 21:45:53] HIDS finished.
[root@localhost pyHIDS]#
"""
De cette façon on peut mieux faire des recherches avec grep sur une date, sur 'notice' ou un 'warning' (quand un hash diffère).
J'ai enlevé la fonction log_mysql qui ne servira à rien de toute manière …
La fonction log_syslog est uniquement utilisée quand les hash ne sont pas bons.
genBase.py est aussi plus sécurisé. Du coup, un test de pyHIDS.py devient futile. Je l'ai quand même laissé.
Ah oui, je me demandais si ça avait une utilité de vérifier tous les .conf dans /etc. Via le module glob ça va vite.
Je me disais que c'est inutile, mieux vaut surveiller ce qui est important. Sinon on pourrait surveiller encore tous pas mal d'exécutables…
Mais en même temps plus on surveille, plus facilement on détectera une intrusion.
Je pense que ça ne sert pas à grand chose de tout scanné. Même avec un HIDS "normal" on ne scanne pas tout.
Comme compromis, on pourrait scanner tous les fichiers de configuration de /etc, puis le reste on le précisera comme on le fait actuellement.
Niveau performance, on ne perdra quasiment rien je pense. Ce ne sont que des fichiers texte. Même avec les exécutables ça ira toujours vite je pense.
Lors des tests que j'ai fait pour le TP de produit de la sécurité, avec des boucles de 10000000000 (dix milliards) d'itérations, ça allait encore vite sur un gros fichier. Puis là on a threadé …
Optimisations. Voilà la version 0.4 va beaucoup plus vite ! Et tous les liens symboliques sont filtrés correctement.
ça prend environ 10 secondes pour traiter plus de 400 fichiers sur mon vieux PC. Et le processeur ne travail même pas beaucoup plus que normalement.
Voilà :
"""
[root@localhost pyHIDS]# python genBase.py
Loading public key
Generating data base…
404 files in the base.
[root@localhost pyHIDS]# python pyHIDS.py
[10/12/08 00:02:46] HIDS starting.
[10/12/08 00:02:51] [notice] /etc/sane.d/stv680.conf ok
[10/12/08 00:02:51] [notice] /etc/X11/xorg.conf.mdv1227283295 ok
[10/12/08 00:02:51] [notice] /etc/X11/xorg.conf.mdv1227084349 ok
[10/12/08 00:02:51] [notice] /etc/gconf/gconf.xml.defaults/%gconf-tree-nl.xml ok
[10/12/08 00:02:51] [notice] /etc/sane.d/matsushita.conf ok
[10/12/08 00:02:51] [notice] /etc/avahi/avahi-daemon.conf ok
.
.
.
[10/12/08 00:02:56] [notice] /etc/modprobe.d/ipw-no-associate.conf ok
[10/12/08 00:02:56] [notice] /etc/security/pam_env.conf ok
[10/12/08 00:02:56] [notice] /etc/dbus-1/session.conf ok
[10/12/08 00:02:56] [notice] /etc/fonts/conf.avail/70-yes-bitmaps.conf ok
[10/12/08 00:02:56] Error(s) : 0
[10/12/08 00:02:56] Warning(s) : 0
[10/12/08 00:02:56] HIDS finished.
[root@localhost pyHIDS]#
"""
Et dans l'expression régulière je prend tout ce qui contient conf.
On peut encore améliorer un peu certainement.
ça donne envie de scanner toute la racine ;-)