HIDS (pyHIDS)

Les trois serveurs de notre site marchand disposeront d'HIDS afin de vérifier l'intégrité des fichiers sensibles.

Nous écrirons nous même notre HIDS avec le langage Python, baptisé pyHIDS.
La page du projet pyHIDS.

Utilisation

Installation

Configuration

La configuration du programme est très facile à réaliser. Voici les variables à renseigner :

  • la configuration des paires de clés RSA se fait dans le fichier genKeys.py. Vous avez la possibilité de configurer le nombre de bits des clés. Par défaut le nombre est à 128 pour des raisons de performances. Ceci dit, un chiffrement de 128 bits pour cette application est déjà suffisant ;
  • les fichiers à surveiller doivent être renseignés dans le fichier genBase.py comme indiqués dans celui-ci.

Test du programme

Afin de tester le programme, 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. Ceci afin que d'éventuels pirates ne puissent compromettre le contenu de la base de hachage.

Cette opération est à priori à réaliser qu'une seule fois. Sauf si un pirate parvenait à s'emparer de la clé publique. Dans lequel cas, il faudrait donc régénérer les clés ainsi que la base.

La deuxième ligne génère la base contenant les valeurs de hachages. C'est ce fichier qui est donc crypté.
Cette opération est à répéter dans un de ces cas :

  • modification de notre part d'un fichier surveillé ;
  • ajout/suppression d'un fichier à surveiller ;
  • vol de la clé publique.

La troisième ligne sera exécutée périodiquement par cron.

Exemple

[cedric@localhost hids]$ python genKeys.py
Generating RSA keys ...
Dumping Keys
Done.
[cedric@localhost hids]$ python genBase.py
[cedric@localhost hids]$ python pyHids.py
[04/12/08 22:27:28] HIDS starting ...
/etc/security/limits.conf ok
/etc/ssh/ssh_config ok
/boot/grub/menu.lst ok
/etc/passwd ok
[04/12/08 22:27:28] HIDS finished.
Error(s) : 0 . Warning(s) : 0
[cedric@localhost hids]$

Modifions un caractère du fichier /etc/ssh/ssh_config et relançons le programme :

[cedric@localhost hids]$ python pyHids.py
[04/12/08 22:33:40] HIDS starting ...
/etc/security/limits.conf ok
/etc/ssh/ssh_config hash has changed :
b4889441ab35878c38cdc9fb422363680701a7d7 != 3cbfee0b3606a009529d9247b8ad80cbd6eaf4fe
/boot/grub/menu.lst ok
/etc/passwd ok
[04/12/08 22:33:40] HIDS finished.
Error(s) : 0 . Warning(s) : 1
[cedric@localhost hids]$

Le programme signal donc que la valeur de hachage a changé.

Principe de fonctionnement

Thread

Dans le soucis de faire toujours de notre mieux et d'accélérer l'exécution du script, les hachages et comparaisons sont réalisés dans des threads.

Logs

Base des valeurs de hachage

Cette base, stockée sur la machine locale, permet la comparaison avec les valeurs hachées périodiquement.
La cohérence de celle-ci est primordiale. C'est donc pour cela que nous avons décidé de la chiffrer via RSA en utilisant cette implémentation Python.

Exécution automatique du programme

Le programme pourra par exemple être exécuté toutes les heures grâce à cron.
Pour cela :

  • on créée un script shell pyHIDS dans /etc/cron.hourly/ lançant le programme ;
  • chown root pyHIDS, le script doit appartenir à root pour que le programme puisse lire certain fichiers (comme /etc/shadow) ;
  • chmod u+x pyHIDS, on rend le script exécutable.

Historique

Version 0.1 (3/12/08 13:36)
Version 0.2 (4/12/08 22:09)
Version 0.3 (7/12/08 21:27)
Version 0.4 (9/12/08 23:52)
Version 0.5 (22/01/09 21:52)
Version 0.6 (05/02/09 11:58)

subversion

Date : 3/12/08 13:36

Dépendances

  • python 2.5

Release notes

  • première version

Source

HIDS

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License