Tripwire installation : Différence entre versions
De wikiGite
(→Modifs du twpol.txt) |
(→Install) |
||
(3 révisions intermédiaires par un autre utilisateur non affichées) | |||
Ligne 59 : | Ligne 59 : | ||
if [ $TRIP -gt 0 ] | if [ $TRIP -gt 0 ] | ||
then | then | ||
− | cat /root/tripwire.log | mail -s 'Tripwire daily report' | + | cat /root/tripwire.log | mail -s 'Tripwire daily report' <mail_admin>@example.net |
fi | fi | ||
fi | fi | ||
Ligne 101 : | Ligne 101 : | ||
'''NOTE''' : g++ doit être installé (yum install gcc-c++) | '''NOTE''' : g++ doit être installé (yum install gcc-c++) | ||
+ | |||
+ | La ligne suivante remplace {prefix} (/usr par défaut) par /var pour l'emplacement de la database | ||
sed -i -e 's@TWDB="${prefix}@TWDB="/var@' install/install.cfg | sed -i -e 's@TWDB="${prefix}@TWDB="/var@' install/install.cfg | ||
− | + | Puis | |
− | ./configure --prefix=/usr --sysconfdir=/etc/tripwire | + | ./configure --prefix=/usr --sysconfdir=/etc/tripwire && make && make install |
− | |||
− | |||
Entrer les mots de passe local et site | Entrer les mots de passe local et site | ||
Version actuelle datée du 16 juin 2009 à 10:14
Sommaire
Tripwire sur Debian
Install
apt-get install tripwire répondre OK pour le mot de passe des clés de site et locale et en donner un.
Première chose à faire : chattr +i /usr/sbin/tripwire
Le fichier de config twpol.txt est à adapter au système. Le plus simple est de générer la base (voir ci-dessous) et de voir quels fichiers il cherche et ne trouve pas. Log sur Etch :
Filename: /etc/rc.boot Filename: /root/mail Filename: /root/Mail Filename: /root/.xsession-errors Filename: /root/.xauth Filename: /root/.tcshrc Filename: /root/.sawfish Filename: /root/.pinerc Filename: /root/.mc Filename: /root/.gnome_private Filename: /root/.gnome-desktop Filename: /root/.gnome Filename: /root/.esd_auth Filename: /root/.elm Filename: /root/.cshrc Filename: /root/.bash_profile Filename: /root/.bash_logout Filename: /root/.amandahosts Filename: /root/.addressbook.lu Filename: /root/.addressbook Filename: /root/.Xresources Filename: /root/.Xauthority Filename: /root/.ICEauthority
On édite ensuite twpol.cfg, et on ajoute "!" devant ces fichiers pour qu'il les oublie.
Voir en fin de paragraphe les autres modifs notées au fur et à mesure.
Initialisation du fichier de policy :
twadmin -m P /etc/tripwire/twpol.txt (demande la passphrase) -> crée /etc/tripwire/tw.pol
Initialisation de la database :
tripwire -m i (demande aussi la passphrase)
Check régulier :
tripwire -m c (ou --check)
ça génère une sortie à l'écran (récupérable et mailable) et dans un log /var/lib/tripwire/report/*
Lancement en cron : vi /etc/cron.daily/tripwire
#!/bin/bash # Le fichier /root/tripwire.log est lisible # le rapport /var/lib/tripwire/report/ ne l'est pas mais necessaire pour # reconstruire la base /usr/sbin/tripwire --check > /root/tripwire.log while read LINE do echo "$LINE" | grep "Total violations found" > /dev/null if [ $? -eq 0 ] then TRIP=$(echo "$LINE" | awk 'BEGIN { FS = ":" }{ print $2 }') if [ $TRIP -gt 0 ] then cat /root/tripwire.log | mail -s 'Tripwire daily report' <mail_admin>@example.net fi fi done < /root/tripwire.log find /var/lib/tripwire/report/ -ctime 1 -exec rm {} \;
Et ne pas oublier :
chmod 700 /etc/cron.daily/tripwire
Si des fichiers ont changés, il faut mettre à jour la base :
repérer le dernier fichier /var/lib/tripwire/report/* (qui contient les infos à jour), puis
tripwire --update -r /var/lib/tripwire/report/xxxxxxxxxxxxxx.twr
Plus simple : créer un script /root/bin/tripwire-update-db :
#!/bin/bash # update database Tripwire after file changes # Just verify in the editor if the files modified are marqued with a [x] # then quit. The tripwire site key passphrase is required. LAST=$(find /var/lib/tripwire/report/ -amin -1440 -exec basename {} \; | grep -v report) # LC_ALL=C avoid an error on report file format LC_ALL=C tripwire --update -r /var/lib/tripwire/report/$LAST
Dans l'éditeur qui se lance, vérifier que les infos de fichiers à mettre à jour sont précédés d'un [x].
Quitter (avec sauvegarde si vous avez enlevé des "x" pour qu'il continue à alerter sur certains fichiers).
Donner la passphrase.
Modifs du twpol.txt
Si on modifie les policy (/etc/tripwire/twpol.txt) il faut regénérer le fichier binaire, puis regénérer la base. Créer un script tripwire-update-policy.sh qui fera les 2 :
#!/bin/bash echo Recreation du fichier policy twadmin -m P /etc/tripwire/twpol.txt echo Regeneration de la db tripwire -m i
Tripwire sur CentOS
Il n'y a pas de paquet rpm pour tripwire. D'ailleurs, l'outils a clairement été développé pour Debian, le fichier de police est beaucoup moins adapté à une RedHat like.
Install
Vérifier la dernière version des sources sur http://sourceforge.net/projects/tripwire/, et charger :
wget http://downloads.sourceforge.net/tripwire/tripwire-2.4.1.2-src.tar.bz2 # enlever "?modtime=1176898244&big_mirror=0" à la fin tar -xvjf tripwire-2.4.1.2-src.tar.bz2 cd tripwire-2.4.1.2-src
NOTE : g++ doit être installé (yum install gcc-c++)
La ligne suivante remplace {prefix} (/usr par défaut) par /var pour l'emplacement de la database
sed -i -e 's@TWDB="${prefix}@TWDB="/var@' install/install.cfg
Puis
./configure --prefix=/usr --sysconfdir=/etc/tripwire && make && make install
Entrer les mots de passe local et site
/etc/tripwire/twpol.txt, fichier par défaut, est le fichier de policy pour RedHat. D'autres pour d'autres unix sont dispos dans tripwire-2.4.1.2-src/policy.
LOG sur CentOS4/BlueQuartz :
The object: "/selinux" is on a different file system...ignoring. The object: "/sys" is on a different file system...ignoring. The object: "/var/named/chroot/proc" is on a different file system...ignoring. ### Filename: /usr/local/doc ### Filename: /usr/local/sysinfo ### Filename: /var/lost+found ### Filename: /etc/aliases.db ### Filename: /etc/mail/statistics ### Filename: /cdrom ### Filename: /floppy ### Filename: /home/lost+found
sur une autre BQ il ne trouve pas :
### Filename: /usr/local/man
Enlever (avec !...):
!/usr/sausalito; !/var/lib/php/session; !/var/cache; #(du coup commenter /var/cache/man/whatis) !/var/lib/munin; !/var/lib/ntp; !/var/lock; !/var/spool; !/var/www; !/var/state; !/var/log; !/opt/ossec/logs; !/opt/ossec/stats; !/home/.sites; !/home/solarspeed; !/home/.tmp; !/home/mysql;
A partir de là se reporter à la procédure APT (ci-dessus)
La génération de la première base est EXTREMEMENT longue sur BQ !
Les suivantes, avec juste la mise à jour des fichiers marqués, sont plus raisonnables.
Par contre il y a ENORMEMENT de faux-positifs ! A tel point que le cron de tripwire doit être mis dans cron.daily, pas possible dans hourly... L'adaptation du twpol.cfg devra être faite petit à petit. Les modifs sont listées ici au fur et à mesure
Modifs du twpol.cfg
- Changer le HOSTNAME (Note : je n'ai pas trouvé où il était initialisé sur Debian, mais il l'est automatiquement sans modif)
Spécifique BlueQuartz
- Ajout de (recurse=0) sur /usr,/tmp et /home
- Ajout de -m à /bin, /sbin, /lib, /usr/bin, /usr/sbin, /usr/lib, /etc, /root
- Ajout de !/root/.monit.state
- Ajout de !/var/db
- Ajout de " -m (recurse=0)" sur "/"
- Ajout de "/etc/mail/popip.db -> $(Dynamic) ;"
- ajout de !/usr/local/bfd;
- ajout de " -i" à /var/spool/mail
Affichage du rapport détaillé
Le rapport que produit tripwire au moment de son scan n'affiche que les répertoires et fichiers modifiés. Pour connaitre les règles qui ont déclenché ces alertes, 2 solutions :
- Lorsqu'on met à jour la base, par tripwire --update, le rapport à valider donne les règles en fin de fichier
- Si on ne veut que voir le détail sans mettre à jour la base, on peut lancer
twprint -m r --twfile /var/lib/tripwire/report/<fichier_a_examiner>.twr > tripwire.log
Le fichier tripwire.log est alors l'équivalent du rapport à valider du point 1, sans les [x].
Créer un script twprint-report.sh qui ira chercher le dernier rapport généré :
#!/bin/bash # Print last Tripwire report LAST=$(find /var/lib/tripwire/report/ -amin -1440 -exec basename {} \; | grep -v report) /usr/sbin/twprint -m r -r /var/lib/tripwire/report/$LAST | less