Tripwire : contrôle d’intégrité et monitoring

16/04/12

Il y a peu, je vous parlais d’une solution qui cherchait les différences entre le retour du ps et ce qui se trouve sous /proc/ -en bref, démasquer les processus cachés.

Ce qui pose tout naturellement la question suivante : comment cacher un processus ? Plusieurs moyens sont à votre disposition, depuis l’encapsulation dans un autre processus plus passe partout jusqu’à la modification toute bête de votre ps. Et pourquoi pas de ses copains…

Tripwire est une solution de monitoring d’intégrité de données. Dit comme ça, c’est pile poil ce qu’il nous faut et surtout c’est un peu le grand nom du milieu.

Principes

Rien de bien sorcier, Tripwire implémente l’évident : une installation suivie d’une initialisation de la base de données dans laquelle on stockera les infos des données.

Une fois l’initialisation faite, on touche les configurations du service et celles visant à mentionner qui, et quoi faire en cas de changement. Un check doit suivre, afin d’initialiser les valeurs témoins pour chacune des data.

Tripwire produit des rapports sur chacune de ses analyses, et si vous voyez un truc qui cloche, vous pouvez repousser une sauvegarde de ces données ou valider les modifications relevées par Tripwire et mettre à jour la database en conséquence.

Applications

L’installation se fait depuis les dépôts, car pour Debian ils sont plutôt à jour et que je ne souhaite pas avoir affaire à de possibles complications si update :)

# apt-get install tripwire

L’installation pose sous /etc/tripwire, sous /var/lib/tripwire et sous /usr/sbin pour les exécutables.

Configuration

De manière standard, vous trouverez les conf sous /etc/tripwire. Deux configurations sont à modeler selon les besoins. Elles ont chacune une version accessible en clair :

  • /etc/tripwire/twcfg.txt, qui est propre à la configuration du service en lui-même
  • /etc/tripwire/twpol.txt, qui concerne les politiques à mettre en place

Respectivement, une fois parsées, cela deviendra /etc/tripwire/tw.cfg pour la configuration du service et /etc/tripwire/tw.pol pour la spécification des policies.

On commence par :

# /etc/tripwire/twinstall.sh

Le process pose alors pas mal de question, que l’on peut éviter en demandant le mode noprompt mais qui a le désavantage de demander explicitement les passphrases pour la génération des clés local et site.

L’installation faite est une installation en mode standalone (c’est-à-dire que les checks ne sont pas centralisés, chacun des serveurs a sa propre base de données).

2 informations sont à fournir : la passphrase pour la clé locale et la passphrase pour la clé du site. Ces clés servent à signer les policies, les configurations et la base de données contenant les références sur lesquelles se base Tripwire.

# /etc/tripwire/twinstall.sh

----------------------------------------------
The Tripwire site and local passphrases are used to sign a variety of files, such as the configuration, policy, and database files.

Passphrases should be at least 8 characters in length and contain both letters and numbers.

See the Tripwire manual for more information.

----------------------------------------------
Creating key files...

(When selecting a passphrase, keep in mind that good passphrases typically have upper and lower case letters, digits and punctuation marks, and are at least 8 characters in length.)

Enter the site keyfile passphrase:
Verify the site keyfile passphrase:
Generating key (this may take several minutes)...
....Key generation complete.

----------------------------------------------
Signing configuration file...
Please enter your site passphrase:
Wrote configuration file: /etc/tripwire/tw.cfg

A clear-text version of the Tripwire configuration file /etc/tripwire/twcfg.txt has been preserved for your inspection. It is recommended that you delete this file manually after you have examined it.
----------------------------------------------
Signing policy file...
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol

A clear-text version of the Tripwire policy file /etc/tripwire/twpol.txt has been preserved for your inspection. This implements a minimal policy, intended only to test essential Tripwire functionality. You should edit the policy file to describe your system, and then use twadmin to generate a new signed copy of the Tripwire policy.

Ensuite ?

Attaquons la partie configurations. Comme dit un peu au dessus, il y a 2 configurations à valider : celle du service et celle des politiques à suivre.

La configuration du service est stockée dans le fichier /etc/tripwire/tw.cfg, qui est une version parsée du /etc/tripwire/twcfg.txt. Cette dernière est à moduler selon vos besoins. Elle contient notamment le nom et l’emplacement de la base de données où Tripwire va stocker tout son bazar.

La configuration des policies est plus tendue… Editons et voyons un peu sa tronche :

# vim /etc/tripwire/twpol.txt

C’est un fichier texte, à la syntaxe très particulière. Pas mal de policies sont déjà à votre disposition, implémentées ou commentées d’ailleurs, et cela permet de se familiariser avec la syntaxe. Si je veux faire dans le spécifique, je peux rajouter à la fin de la configuration :

(
rulename = "Application to monitor" ,
severity = 100,
emailto = rssi@k-tux.com

)

{
/APPS -> $(IgnoreNone)-MCHracm (recurse=true) ;
}

Pour les détails des options, je vous laisse consulter le man.

Après avoir défini la politique de scellement dans le fichier twpol.txt, lancer la commande suivante :

# twadmin -m P -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twpol.txt
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol

-m P équivaut également à –create-polfile.

Maintenant que nos conf sont parsées bien comme il faut, on doit créer la base des sceaux de référence. Très facile :

# tripwire --init -c /etc/tripwire/tw.cfg

Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /var/lib/tripwire/db.twd
The database was successfully generated.

La base de donnée créée, il ne reste plus qu’à rentrer les valeurs de référence en lançant le fameux check.

# tripwire --check

Parsing policy file: /etc/tripwire/tw.pol
*** Processing Unix File System ***
Performing integrity check...
Wrote report file: /var/lib/tripwire/report/kserv-20120412-210750.twr
... ... ...
Total objects scanned: 52397
Total violations found: 0

Les rapports produits par les check de Tripwire sont situés par défaut sous /var/lib/tripwire/report/ et ont une extension en .twr. Ce sont des data qui sont lisibles via la commande twprint. De là, il est facile de rediriger la sortie standard vers un fichier lisible via un less par exemple, c’est à votre convenance.

# twprint -m r -r /var/lib/tripwire/report/kserv-20120412-210750.twr

Evolution de la base et mise à jour des policies

Comme les filesystems évoluent vite rien que par les mises à jour, il est nécessaire de faire évoluer la base de données de Tripwire en conséquence.

Tout d’abord, on doit mettre à jour la base de données de Tripwire à l’aide du rapport en question :

# tripwire -m u --twrfile /var/lib/tripwire/report/kserv-20120412-210750.twr

Please enter your local passphrase:
Wrote database file: /var/lib/tripwire/db.twd

Si besoin, vous pouvez encore revoir les policies. Pour cela, il faut regénérer le tw.pol après avoir modifier twpol.txt :

# twadmin -m P -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twpol.txt
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol

Il faut supprimer et recréer la database. C’est un peu brutal, mais c’est comme ça que ça marche.

# rm /var/lib/tripwire/db.twd
# tripwire --init -c /etc/tripwire/tw.cfg

Cronner le tout

Tripwire n’est pas un daemon, il est nécessaire de le lancer de façon récurrente. Crond s’impose donc :

00 03 * * * /usr/sbin/tripwire --check

And voilà ! Tout est prêt pour vous avertir dès qu’une modification est faite sur un des éléments sous surveillance.

Conclusion

Tripwire est, à mon sens, une réponse à un besoin élémentaire en terme de sécurité. Bien qu’elle nécessite un petit ajustement dans sa prise en main -mais minime alors- et une maintenance continue, elle reste plus que pertinente, surtout vu le niveau des joueurs.

Et comme un système parfaitement sécurisé n’est que pure utopie, on se doit de checker un minimum nos bécanes :)