Tripwire

    



1 Pour quoi faire

Tripwire est un outil de sécurité. Il vérifie l'intégrité de votre système de fichiers et vous informe de toutes les modifications apportées à des fichiers importants. Cela permet entre autre d'éviter les chevaux de Troie.  
La gestion est assez fastidieuse, mais n'est ce pas le prix à payer pour la sécurité.!? 
Tripwire est maintenant un produit payant, mais il existe toujours une version libre. Je vais donc présenter cette version. On trouve des produits équivalents à Tripwire entre autre Aide
On peut aussi utiliser Tripwire pour surveiller son serveur Web et les pages qui s'y trouvent. Ainsi dès que Tripwire détecte un changement vous déclenchez un script qui remet en place les bonnes pages. 

2 L'installation

Pas grand chose à dire sur l'installation de tripwire sur votre machine, vous pouvez le trouver sur le site de tripwire (http://www.tripwire.org) ou directement sur le site de votre distribution ce qui a pour avantage d'avoir des règles de police correspondant à celle-ci. 
Vous allez alors avoir les fichiers suivants :

tripwire

Permet de créer la base, de vérifier l'intégrité du système, mettre à jour la base.

twadmin

Permet de créer les clés (du site et local)
Permet de créer les fichiers tw.pol et tw.cfg à partir de leur version texte.
Permet de signer des fichiers.

twprint

Permet de générer le rapport ou la base en texte clair.

twcfg.txt

Fichier où vous indiquez l'emplacement et le nom des différents fichiers utilisées par tripwire.
Pas grand chose à dire sur ce fichier vous devez simplement aller le vérifier. 
Il se transforme une fois crypté en tw.cfg. 

twpol.txt

Fichier dans lequel se trouve les règles de police à appliquer. 
Celui qu'il faut adapter avec le plus de soin.
Il se transforme en tw.pol une fois crypté

twinstall.sh

Un script qui s'occupe de créer les clés si elles n'existent pas, et de  crypter les deux fichiers précédents. Vous pouvez le réutiliser à chaque fois que vous faites une modification de l'un d'eux. 

Les trois premiers sont des binaires, ils se placent dans /usr/sbin, les autres se placent dans /etc/tripwire (si vous avez utilisé les RPM).  

3 Le principe

Le principe de mise en oeuvre est le suivant :
- Mettez en place Tripwire immédiatement après l'installation de la machine, avant de la brancher au réseau. Après vous n'êtes plus certain de rien.
- Adaptez le fichier des règles de police. Vous indiquez là les fichiers ou répertoires que vous souhaitez surveiller. On ne surveille pas de la même façon un fichier de log et un binaire. L'un change tout le temps (pour la taille, pas les droits), l'autre ne doit jamais être modifié, ni changé de propriétaire, de droits...etc.
- Cryptez ce fichier de police afin qu'il ne soit pas modifiable.
- Définissez les méthodes d'alerte, par défaut votre Email. 
- Construisez la base la première fois en faisant un tripwire --init et gardez une copie de cette base dans un autre endroit.
-  Mettez en place une crontab pour vérifier une fois toutes les... comme vous voulez.

Maintenant à chaque fois que vous allez changer un fichier vous devez remettre à jour votre base et éventuellement votre fichier de polices.

4 Le fichier de polices tw.pol


Vous devez dans le fichier twpol.txt créer les règles de police que vous souhaitez mettre en oeuvre. 
Quels fichiers, répertoires tripwire doit surveiller avec quel niveau de "sévérité", ce niveau permettant de classer les fichiers par niveau de risque. 
Normalement vous avez déjà un tel fichier, il peut ne pas correspondre à votre distribution ou à la version, ou il peut surveiller des fichiers qui n'existent pas sur votre machine car vous n'avez pas installé certaines choses. Inversement il peut manquer des fichiers importants que vous avez installés. Quelque soit votre choix vous devez obligatoirement mettre le nez dedans et essayer de comprendre les règles mises en place.
Il est composé de plusieurs paragraphes 

Dans le premier @@section GLOBAL on trouve les variables utilisées. Normalement vous n'avez rien à changer, sauf  le HOSTNAME.
Dans section FS on définit les règles que l'on va utiliser. On définit des noms à ces règles afin de rendre leur utilisation plus simple, et de ne pas avoir à chaque fois à taper le masque correspondant.
Certaines règles existent par défaut, vous pouvez donc les utiliser :

Nom 

Effet

les règles utilisées

$(Device)

Device

+pugs-intldamcCMSH

$(Dynamic)

fichiers qui ne changent pas souvent mais sont accédés souvent (les fichiers de conf).

+pinugtd-sacmbCMSH

$(Growing)

fichiers qui grossissent, mais qui ne doivent pas changer de propriétaire (les logs)

+pinugtdl-sacmbCMSH

$(IgnoreAll)

ignore tout

-pinusgslamctdbCMSH

$(IgnoreNone)

Tout vérifier

+pinusgsamctdbCMSH-l

$(ReadOnly)

fichier en lecture seule (les binaires par exemple)

+pinugsmtdbCM-acSH

Comme vous le constatez les règles utilisées sont un peu complexes. Chaque lettre est documentée dans le tableau ci-dessous. Le signe + indique que l'on doit tester ce critère. Le moins indique qu'il ne doit pas avoir lieu (équivaut à ne pas mettre la lettre). 

Par exemple +pi-u donne : vérifier les permissions du fichier et l'inode et ne pas vérifier le propriétaire -u (comme il n'y a pas les autres lettres cela revient à ne vérifier que les permissions et l'inode). 

 

Lettre

La vérification effectuée

p

Permission sur le fichier ou répertoire

i

Inode

n

Nombre de liens

u

id du propriétaire

g

id du groupe

t

type de fichier

s

taille du fichier

l

Autorise la taille du fichier à augmenter

d

device number du disque où est le fichier

b

Nombre de blocs alloués

a

heure du dernier accès

m

heure de la modification du fichier

c

heure de modification de l'inode

C

CRC 32 du fichier

M

MD5 du fichier

S

SHA du fichier

H

Haval (signature 128 bits) du fichier


Écriture des règles dans le fichier

La première partie qui est entre parenthèses est importante, car elle vous permet de trier les fichiers en fonction d'un nom : rulename, par la suite vous pouvez avec la commande suivante tripwire --check --rule-name Mon test perso générer le rapport d'intégrité sans vérifier les autres paragraphes de ce fichier.  Cela permet par exemple, de vérifier certains fichiers toutes les heures et d'autres toutes les semaines. De même avec severity on peut vérifier certains fichiers en fonction du nombre indiquer, par exemple vérifier tous les fichiers dont le niveau de sévérité est supérieur à 50 : tripwire --check --severity 50. On peut aussi indiquer dans cette partie recurse (pour indiquer la profondeur) et emailto (pour envoyer un mail rien que pour ce groupe de fichier). On peut aussi définir fichier par fichier les quatre attributs précédents.

#############################################
# Un exemple complètement fantaisiste
#############################################
(
    rulename = "Mon test perso",      
Indiquer un nom clair afin de pouvoir retrouver facilement ses fichiers
    severity = 50                                   
vous permet de générer des rapports en fonction d'une certaine valeur.
)
{
/home               -> +tpug  (recurse = 0 ) ;     
Je teste ici un répertoire (droits et propriétaire) mais pas ce qui se trouve dedans             
/sbin/fdisk        -> $(ReadOnly) ;                          
ici j'utilise une variable pré-définie et je ne teste qu'un fichier
/etc                   -> $(Dynamic) ;                   
Je teste tous les fichiers et sous répertoires qui sont dans /etc     
!/etc/hosts ;                                                   
Je ne teste pas le fichier /etc/hosts
/etc/shadow      -> $(ReadOnly) ( emailto = pchadefaux@ac-creteil.fr;toto@ac-creteil.fr ) ;   
J'envoie un message à moi même et à toto en cas de changement de ce fichier

}

Le rangement dans ce paragraphe est complètement farfelu. A vous de savoir ce que vous souhaitez contrôler. Cette partie est de loin la plus complexe à mettre en oeuvre. Utilisez donc le fichier correspondant à votre distribution.

Une fois mis en place ce fichier vous devez le signer, utilisez twinstall.sh ou la commande 
twadmin --create-polfile -S site.key /etc/tripwire/twpol.txt.

Vous pouvez aussi aller sur le site de tripwire pour générer ce fichier par défaut en fonction de votre distribution.

5 Visualisation de la base et des rapports

Une fois que vous avez généré la base avec la commande tripwire --init, vous ne pouvez pas la voir simplement, celle ci étant cryptée. Pour cela faites twprint -m d --print-dbfile avec un | less ou en redirigeant le résultat dans un fichier > la_base (la_base est le nom du fichier en clair). Attention ce fichier est très gros. 

On génère un rapport avec la commande tripwire --check
toutefois pour pouvoir lire le résultat du rapport en clair utilisez la commande :
twprint -m r --twrfile /var/lib/tripwire/report/nom.twr .Vous pouvez lire les rapports antérieurs en utilisant le nom correspondant. Normalement le nom contient la date de création du rapport.
/var/lib/tripwire/report est l'endroit ou les rapports sont stockés sous RedHat Mandrake. Vous pouvez avoir changé cela dans le fichier twcfg.txt. Encore une fois ce fichier peut être important en fonction de vos choix, utilisez donc | less ou redirigez le vers un fichier.

6 Mise à jour des règles de police

Si vous souhaitez modifier votre fichier de police, vous devez modifier la version en claire de ce fichier twpol.txt, puis recréer le fichier crypté avec la commande : twadmin --create-polfile -S site.key /etc/tripwire/twpol.txt.
 Vous devez redonner la phrase d'accès pour valider cela. 
Il vous faut ensuite revalider la base. Le plus simple consiste à la recréer, commencez par détruire l'ancienne base (un rm sur le fichier) puis tripwire --init. (Attention à faire avant tout cela une vérification d'intégrité).
On peut aussi avoir besoin de modifier le fichier de configuration (twcfg.txt), pour cela le principe reste le même, pour le recréer utilisez la commande twadmin --create-cfgfile -S site.key /etc/tripwire/twcfg.txt.

7 Mise à jour de la base

Pour mettre à jour votre base de données après des modifications et à partir du rapport d'intégrité, vous devez utiliser la commande tripwire --update --twrfile /var/lib/tripwire/report/nom_du_rapport_a_utiliser.twr. S'ouvre alors le rapport dans l'éditeur vi. Vous avez alors des cases à cocher pour accepter la mise à jour ou ne pas l'accepter. Sauvegardez et quittez vi avec :wq! on vous demande alors la passphrase. 
Une fois cela fait, les fichiers acceptés ne seront plus dans les rapports.

Quelle différence y a-t-il entre la mise à jour de la base et la mise à jour des règles de police. 
Vous modifiez un fichier de configuration d'une application qui existe déjà dans votre base, il va apparaître comme modifié dans les rapports,  afin que cette modification soit prise en compte et que vous ne receviez plus de messages d'erreurs il faut mettre la base à jour. 
Maintenant si vous installez une nouvelle application qui n'est pas prise en compte dans votre fichier de police (par exemple elle se place dans un nouveau répertoire ou si vous avez indiquez les fichiers individuellement), vous devez alors modifier le fichier de police, puis réinitialiser la base. 


TP 1 : 
- Installer tripwire à partir du RPM.
- Taper la commande suivante find / -perm +4000 Commentez cette commande. Que recherche-t-on.
- A partir d'un fichier twpol.txt existant modifier celui-ci afin de placer une régle pour surveiller les fichiers obtenus.
- Ajouter une régle pour le fichier test.txt que vous placez dans le répertoire /tmp.
- Créer les fichiers tw.pol et tw.cfg (utiliser twinstall.sh).
- Initialiser la base
- Générer le premier rapport.
- Modifier le fichier /tmp/test.txt
- Relancer un rapport. Lisez le. 
- Mettre à jour la base à partir de ce rapport.
- Relancer une nouvelle fois un rapport. Que constatez vous. 


© Philippe Chadefaux - 23/11/2001 -