Assurez l’intégrité de son OS Linux avec Tripwire

I. Présentation

Avec l'augmentation exponentielle du stockage des données et des connexions réseaux sans cesse plus performantes, il devient nécessaire de détecter d'éventuelles modifications de l'OS ou de fichiers. Tripwire est un outil contenant des programmes utilisés pour tester et vérifier l'intégrité d'un OS ou d'un système de fichiers.

Tripwire compare des fichiers, groupes de fichiers ou encore des répertoires avec des données valides préalablement enregistrées dans une DB. Toutes les différences, modifications, ajouts ou suppressions sont « flaggés » et loggés.

Tripwire est un outil de sécurité efficace, pour plate-formes Linux s'il est installé sur un système dont on est sûr de l'intégrité, c'est à dire juste après l'installation de l'OS et avant toute connexion réseau.

Si vous n'utilisez pas les paquets .deb pour installer Tripwire, il sera très difficile de trouver les fichiers installés par tripwire si vous voulez faire une mise à jour du package. C'est pour cela qu'il est fortement conseillé de prendre une « image » de l'OS avant l'installation et une « image » de l'OS après l'installation pour pouvoir comparer via le simple utilitaire diff les données avant et après.

En ce qui me concerne pour ce tutoriel, l'installation a été testée sur une Debian 8.3 et, sachez que toutes les commandes Linux/Unix sont compatibles. Aucune recompilation du noyau n'est nécessaire.

La dernière version en production de Tripwire est la 2.4.2.2. Elle est téléchargeable sur le site SourceForge à l'adresse : Tripwire

II. Installation

A. Pré-requis

Se loguer sous root.

Avant de lancer la compilation des sources, il faut bien vérifier que le package build-essential est installé. Il est en outre recommandé d'installer OpenSSL-1.0.2g

Le plus simple, ce qui est d'ailleurs conseillé, est d'utiliser Synaptic pour Debian, ou votre installateur de paquets préféré (RPM, yum) pour les autres distributions (RedHat, OpenSuse).

Tripwire utilise un système de mails pour avertir l'utilisateur root en cas de problèmes. Il a besoin pour cela d'un MTA local. Si vous n'en avez pas et n'avez pas l'intention d'en installer un, il faut modifier le fichier install.cfg pour le remplacer par un serveur SMTP. Sinon l'installation échoue.

En ce qui concerne le système de mails et donc de MTA, 3 MTA sont possibles sur Debian : Sendmail, Postfix et exim4. Même si le plus fourni et le plus complet est sendmail car historiquement il a été le 1er à remplir ce type mission, il est complexe à configurer. Je vous conseille personnellement Exim4 pour sa simplicité, sa sécurité et car il consomme peu de ressources.

Voici une schéma représentatif du fonctionnement d'un MTA :

mta

Pour l'installation de Exim4 rendez-vous sur : Exim4

B. Compilation

Après avoir téléchargé le fichier tar.bz2, décompressez le dans le répertoire /usr/src :

#cp tripwire-2.4.2.2-src.tar.gz2 /usr/src
 #tar -xvzf tripwire-2.4.2.2-src.tar.gz2
 #cd /usr/src/tripwire-2.4.2.2-src

Utilisez l'option –prefix pour stipuler le répertoire d'installation (/opt/tripwire)

Compiler en utilisant les commandes suivantes :

#./configure –prefix=/opt/tripwire –sysconfdir=/etc/tripwire
 #find /* > Tripwire-avant
 ----> installer la DB et les rapports dans /var/lib/tripwire :
 #sed -i -e '@TWDB="${prefix}@TWDB="/var@' install/install.cfg
 La commande sed permet de remplacer la variable @TWDB par ${prefix}@TWDB dans le fichier /install/install.cfg
 ----> corrige une erreur de compilation avec gcc-4.7 :
 #sed -i -e 's/!Equal/!this->Equal/' src/cryptlib/algebra.h
 ----> corrige une erreur de compilation avec gcc-4.7 :
 #sed -i -e '/stdtwadmin.h/i#include ' src/twadmin/twadmincl.cpp
 ----> renseigne la localisation des fichiers d'aide et de documentation
 #sed -i -e '/TWMAN/ s|${prefix}|/usr/share|' \ -e '/TWDOCS/s|${prefix}/doc/tripwire|/usr/share/doc/tripwire-2.4.2.2|' \install/install.cfg
 ----> corrige une erreur de compilatioin avec gcc-4.9
 #sed -i -e 's/eArchiveOpen e\([^)]*)\)/throw ( eArchiveOpen\1 )/' \ -e '/throw e;/d' src/core/archive.cpp
 #make
 #make install
 #cp -v policy/*.txt /usr/share/doc/tripwire-2.4.2.2

N'oubliez pas de faire la comparaison entre les fichiers « avant l'installation » et « après l'installation »

#find /* > Tripwire-apres
#diff Tripwire-avant Tripwire-apres > Tripwire-installed

Tout doit être prêt pour la suite...

A la fin de l'installation il faut immédiatement initialiser la base interne en exécutant l'instruction suivante :

#tripwire -m i

Les messages d'avertissement sont des failles potentielles pouvant être réintroduites par des pirates. Il convient donc de NE PAS les supprimer dans le fichier de configuration twpol.txt du répertoire /etc/tripwire.

Il suffit ensuite de valider l'intégrité de votre système en utilisant l'option -m c (ou --check) de la commande tripwire.

#tripwire --check

On peut également tester le système en exécutant la commande ci-dessous permettant de simuler l'envoi d'un message d'alerte à l'administrateur :

#tripwire -m t 4

De nombreuses options sont disponibles et il est vivement conseillé de lire le manuel en ligne pour délimiter le périmètre de vos applications et de leur sécurité.

Les principales options de la commande tripwire sont :

-m i : Initialisation de la Base de Données tripwire
-m c : Validation de l'intégrité et de la cohérence du système
-m u : Mise à jour de la Base de Données et mise à jour de la cohérence
-m p : Changement de politique de sécurité
-m t : Tests de cohérence et niveau de validation par messagerie

III. Configuration

A. Renforcer la sécurité

Après avoir initialisé la base de collecte des évènements serveurs et réseaux, il faut encore affiner le réglage de tripwire. Cela s'effectue au travers des 2 fichiers de configuration NON CHIFFRES que sont :

/etc/tripwire/twpol.txt

Ce fichier concerne le descriptif de la politique de sécurité mise en œuvre sur vos serveurs : systèmes de fichiers, règles, zones critiques...

Le 1er§ donne la localisation des fichiers et des répertoires utilisés par tripwire.

/etc/tripwire/twcfg.txt

Le second contient plus particulièrement toutes les variables propres à tripwire et à la sécurité.

B. Fichier twpol.txt : règles de sécurité

Le fichier twpol.txt est fourni avec des données standards. Vous aurez donc besoin de le configurer selon vos propores besoins.

La 1ère section liste la localisation des fichiers et des répertoires Tripwire et le nom de la machine sur laquelle ils sont installés.

# Global Variable Definitions
 @@section GLOBAL
 TWROOT=/usr/sbin;
 TWBIN=/usr/sbin;
 TWPOL="/etc/tripwire";
 TWDB="/var/lib/tripwire";
 TWSKEY="/etc/tripwire";
 TWLKEY="/etc/tripwire";
 TWREPORT="/var/lib/tripwire/report";
 HOSTNAME= your host

Le § suivant définit les règles et les paramètres utilisés pour surveiller les changements et assignent un niveau de sécurité pour différencier les niveaux de criticité.

@@section FS
 SEC_CRIT $(IgnoreNone)-Sha; #Fichiers critiques situés dans /boot, /lib/mmodules et /root répertoires; A MODIFIER AVEC PRUDENCE
 SEC_SUID $(IgnoreNone)-SHa; # Positionnement des bits de sécurité SUID et SGID
 SEC_BIN = $(ReadOnly); # Binaries qui ne devraient pas être modifiés sauf en cas de mise à jour du système
 SEC_CONFIG = $(Dynamic); # Fichiers de config qui sont modifiés épisodiquement mais auxquels on accède souvent
 SEC_LOG = $(Growing); # Fichiers de log qui grossissent rapidement mais qui ne doivent pas changer de propriétaire.
 SEC_INVARIANT = +pug; # Files cririques qui ne doivent changer ni de propriétaire ni de permissions
 SIG_LOW = 33; # Fichiers non-critiques qui impactent très peu la sécurité, essentiellement situés dans les répertoires utilisateurs
 SIG_MED = 66; # Fichiers non-critiques mais qui impactent la sécurité
 SIG_HI = 100; # Fichiers très « sensibles » est très vulnérables, par exemple ceux qui sont situés dans les répertoires /boot, /bin, /sbin et /lib

Les fichiers binaires, de données, de configuration et de règles (policy) peuvent être Tripwire mis en commentaires ou même supprimés mais il est recommandé de les conserver pour prévenir des modifications dans les fichiers Tripwire qui pourraient compromettre l'intégrité des rapports. Devant chaque liste de fichiers on définit le niveau de sécurité. Dans le fichier par défaut, les variables sont assignés à une valeur numérique ou à une action.

Tripwire Binaries (rulename = "Tripwire Binaries", severity = $(SIG_HI))
 {
 $(TWBIN)/siggen -> $(ReadOnly);
 $(TWBIN)/tripwire -> $(ReadOnly);
 $(TWBIN)/twadmin -> $(ReadOnly);
 $(TWBIN)/twprint -> $(ReadOnly);
 }

Le § suivant donne le niveau d'accessibilité aux sous-répertoires. « 0 » interdit cet accès.

(rulename = "Invariant Directories", severity = $(SIG_MED))
 {
 / -> $(SEC_INVARIANT) (recurse = 0);
 /home -> $(SEC_INVARIANT) (recurse = 0);
 /etc -> $(SEC_INVARIANT) (recurse = 0);
 /opt -> $(SEC_INVARIANT) (recurse = 0);
 }

C. Paramétrage

Il faut modifier le fichier /etc/tripwire/twcfg.txt et positionner la variable :

LOOSEDIRECTORYCHECKING=true

Dans le fichier /etc/tripwire/twpol.txt il faut également initialiser le compte de messagerie d'envoi d'alerte par défaut. On peut écrire, par exemple, la ligne suivante :

# Tripwire Binaries
 (
 rulename = "Tripwire Binaries",
 severity = $(SIG_HI)
 emailto = root@localhost
 )
 {
 $(TWBIN)/siggen -> $(ReadOnly) ;
 $(TWBIN)/tripwire -> $(ReadOnly) ;
 $(TWBIN)/twadmin -> $(ReadOnly) ;
 $(TWBIN)/twprint -> $(ReadOnly) ;
 }

D. Utilisation de tripwire.cron

On peut automatiser la procédure de test d'intégrité (1 fois par semaine par exemple), il suffit de créer le fichier tripwire.cron dans /etc/cron.weekly et ajouter le script shell suivant :

#!/bin/sh
 HOST_NAME=`uname -n`
 if [ ! -e /var/lib/tripwire/${HOST_NAME}.twd ] ; then
 echo "**** Error: Tripwire database for ${HOST_NAME} not found. ****"
 echo "**** Run "/etc/tripwire/twinstall.sh" and/or "tripwire --init". ****"
 else
 test -f /etc/tripwire/tw.cfg && /usr/sbin/tripwire --check
 fi

Il reste maintenant à positionner les sécurités d'accès et d'exécution de ce fichier :

#chmod 500 /etc/cron.weekly/tripwire.cron
 #chown 0.0 /etc/cron.weekly/tripwire.cron

IV. Utilisation

A. Modification du fichier Policy

Durant l'initialisation de la DB on peut voir certains messages « No such file or directory » concernant des fichiers ou répertoires mentionnés dans twpol.txt et qui n'existent pas sur la machine. Il faut alors mettre en commentaire les fichiers ou répertoires concernés. Par exemple :

################################################
 # #
 # OS Boot Files and Mount Points #
 # #
 ################################################
 (
 rulename = "OS Boot Files and Mount Points",
 )
 {
 /boot -> $(ReadOnly) ;
 #/cdrom -> $(Dynamic) ;
 #/floppy -> $(Dynamic) ;
 /mnt -> $(Dynamic) ;
 }

B. Mise à jour du fichier Policy

Une fois le fichier modifié il faut mettre à jour les règles :

#./tripwire –update-policy /tripwire/twpol.txt

C. Validation et mise à jour de la DB

Cette commande est la pierre angulaire de Tripwire qui permet de connaître l'état actuel des fichiers par rapport à aux données de la DB de Tripwire, en utilisant les règles contenues dans le fichier wpol.txt.

Si ce fichier contient par exemple cette règle :

(
 rulemane = « Mes Fichier corrompus »,
 severity = 50
 )
 {
 /sbin/e2fsck → $(SEC_CRIT) ;
 /bin/cp → $(SEC_CRIT) ;
 /usr/tmp → $(SEC_INVARIANT) ;
 /etc/csh.cshrc → $(SEC_CONFIG) ;

Alors vous pouvez vérifier les fichiers sélectés et les répertoires avec la commande :

#tripwire –check /bin/cp /usr/tmp

ou

#tripwire –check (pour avoir les résultats à l'écran)

Une erreur telle que :

-------------------------------------------------------------------------------
 Section: Unix File System
 -------------------------------------------------------------------------------

File system error.
 Filename: /etc/rc.boot
 Aucun fichier ou dossier de ce type

signifie simplement que vous avez demandé à vérifier l'intégrité du fichier /etc/rc.boot dans le fichier de règles /etc/tripwire/twpol.txt et que celui-ci n'existe pas. Il suffit de l'enlever du de twpol.txt.

Vous pouvez aussi vérifier tous les fichiers de la règle :

#tripwire –check –rule-name "Mes Fichiers corrompus"

ou encore toutes les règles qui renvoient une sévérité > ou = à une valeur donnée :

#tripwire –check –severity 50

On récupère le résultat dans le fichier /etc/tripwire/report.txt :

#tripwire –check > /etc/tripwire/report.txt

D. Comment visualiser le fichier twr report ?

Les rapports sont stockés en binaire et, si on le désire, être encryptés. Pour les visualiser il suffit de lancer la commande :

#twprint –print-report -r /var/lib/tripwire/report/report-name.txt

E. Comment visualiser les fichiers paramètres ?

Il suffit de lancer les commandes :

#twadmin –print-polfile
 #twadmin –print-cfgfile

F. Modification du Policy File

Si vous voulez modifier le Policy File ou en utiliser un autre, exécuter la commande sous root :

#twadmin –create-polfile /etc/tripwire/twpol.txt

V. Conclusion

Tripwire est un outil HIDS (Host Intrusion Detection Server) qui permet de détecter les intrusions « systèmes » et donc de savoir si tel ou tel fichier ou répertoire a été modifé.

Il est souvent utilisé avec un outil NIDS (Network Intrusion Detection Server) qui détecte les intrusions réseaux. Snort et Bro sont des exemples d'outils NDIS.

Ces outils sont parfois utilisés dans des logiciels de supervision de niveau supèrieur comme Bastille, Harden qui, si on les installe, installeront automatiquement Tripwire.

N'hésitez pas à aller sur le site Tripwire

Un autre site que je vous conseille dans beaucoup de domaines : ServerFault - Tripwire

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Thierry

Consultant, Expert en Administration Systèmes et Réseaux

Nombre de posts de cet auteur : 1.Voir tous les posts

2 thoughts on “Assurez l’intégrité de son OS Linux avec Tripwire

  • Bonjour Thierry,

    Si vous deviez comparer cette solution au projet AIDE, quels seraient les point positifs pour Tripwire ?

    Mathieu

    Répondre
  • Bonjour Mathieu,

    le projet le projet AIDE est plus récent que Tripwire, plus « lourd » et moins abouti. Il y a parfois quelques problèmes à l’installation difficiles à résoudre.
    Par contre AIDE est plus complet et plus orienté « grosses entreprises » car il supporte un gros volume de machines sur de nombreux sous-réseaux. Tripwire est orienté vers les petits réseaux.

    Amicalement
    Thierry

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.