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) |
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. |
twpol.txt |
Fichier dans lequel se trouve les règles de police à
appliquer. |
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 :
© Philippe Chadefaux - 23/11/2001 -