Outils personnels

Tripwire installation : Différence entre versions

De wikiGite

(Modifs du twpol.cfg)
(Install)
 
(22 révisions intermédiaires par un autre utilisateur non affichées)
Ligne 45 : Ligne 45 :
 
ça génère une sortie à l'écran (récupérable et mailable) et dans un log /var/lib/tripwire/report/*
 
ça génère une sortie à l'écran (récupérable et mailable) et dans un log /var/lib/tripwire/report/*
  
Lancement en cron : cron.hourly/tripwire
+
Lancement en cron : vi /etc/cron.daily/tripwire
 
  #!/bin/bash
 
  #!/bin/bash
 
  # Le fichier /root/tripwire.log est lisible
 
  # Le fichier /root/tripwire.log est lisible
Ligne 59 : Ligne 59 :
 
       if [ $TRIP -gt 0 ]
 
       if [ $TRIP -gt 0 ]
 
       then
 
       then
         cat /root/tripwire.log | mail -s 'Tripwire hourly report' fsoyer@systea.net
+
         cat /root/tripwire.log | mail -s 'Tripwire daily report' <mail_admin>@example.net
 
       fi
 
       fi
 
   fi
 
   fi
 
  done < /root/tripwire.log
 
  done < /root/tripwire.log
 
  find /var/lib/tripwire/report/ -ctime 1 -exec rm {} \;
 
  find /var/lib/tripwire/report/ -ctime 1 -exec rm {} \;
Si des fichiers ont changés, il faut mettre à jour la base :
+
Et ne pas oublier :
* repérer le dernier fichier /var/lib/tripwire/report/* (qui contient les infos à jour), puis
+
chmod 700 /etc/cron.daily/tripwire
 +
Si des fichiers ont changés, il faut mettre à jour la base :<br/>
 +
repérer le dernier fichier /var/lib/tripwire/report/* (qui contient les infos à jour), puis
 
  tripwire --update -r /var/lib/tripwire/report/xxxxxxxxxxxxxx.twr
 
  tripwire --update -r /var/lib/tripwire/report/xxxxxxxxxxxxxx.twr
 
Plus simple : créer un script /root/bin/tripwire-update-db :
 
Plus simple : créer un script /root/bin/tripwire-update-db :
Ligne 72 : Ligne 74 :
 
  # Just verify in the editor if the files modified are marqued with a [x]
 
  # Just verify in the editor if the files modified are marqued with a [x]
 
  # then quit. The tripwire site key passphrase is required.
 
  # then quit. The tripwire site key passphrase is required.
  LAST=$(find /var/lib/tripwire/report/ -amin -60 -exec basename {} \; | grep -v report)
+
  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 avoid an error on report file format
 
  LC_ALL=C tripwire --update -r /var/lib/tripwire/report/$LAST
 
  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].<br/>
 
Dans l'éditeur qui se lance, vérifier que les infos de fichiers à mettre à jour sont précédés d'un [x].<br/>
 
Quitter (avec sauvegarde si vous avez enlevé des "x" pour qu'il continue à alerter sur certains fichiers).<br/>
 
Quitter (avec sauvegarde si vous avez enlevé des "x" pour qu'il continue à alerter sur certains fichiers).<br/>
 
Donner la passphrase.
 
Donner la passphrase.
  
=== Modifs du twpol.cfg ===
+
=== Modifs du twpol.txt ===
* A voir : le problème de /proc qui bouge sans arrêt :<br/>
+
Si on modifie les policy (/etc/tripwire/twpol.txt) il faut regénérer le fichier binaire, puis regénérer la base.
Pour l'instant on enlève /proc aussi de la liste des scans
+
Créer un script tripwire-update-policy.sh qui fera les 2 :
* enlever /root. Par contre on laisse /root/.bashrc
+
#!/bin/bash
* enlever /var/run ?
+
echo Recreation du fichier policy
* enlever /var/log car ça réagit à chaque logrotate...
+
twadmin -m P /etc/tripwire/twpol.txt
* mettre /etc et les fichiers modifiés par les interfaces ISP en SEC_CONFIG
+
echo Regeneration de la db
 
+
tripwire -m i
'''Spécifique ISPConfig :'''<br/>
 
* Ajout de -i pour /etc/group et /etc/gshadow (ISPConfig reecrit entierement les fichiers)
 
  
 
= Tripwire sur CentOS =
 
= Tripwire sur CentOS =
Ligne 95 : Ligne 94 :
  
 
=== Install ===
 
=== Install ===
Charger les sources sur http://sourceforge.net/projects/tripwire/, décomprésser :
+
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
 
  tar -xvjf tripwire-2.4.1.2-src.tar.bz2
 
  cd tripwire-2.4.1.2-src
 
  cd tripwire-2.4.1.2-src
  
 
'''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
remplace {prefix} (/usr par défaut) par /var pour l'emplacement de la database
+
Puis
  ./configure --prefix=/usr --sysconfdir=/etc/tripwire
+
  ./configure --prefix=/usr --sysconfdir=/etc/tripwire && make && make install
make
 
make install
 
 
Entrer les mots de passe local et site
 
Entrer les mots de passe local et site
  
Ligne 144 : Ligne 145 :
 
   !/home/mysql;
 
   !/home/mysql;
  
A partir de là se reporter à la procédure APT
+
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 !<br/>
 
La génération de la première base est EXTREMEMENT longue sur BQ !<br/>
Ligne 151 : Ligne 152 :
 
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...
 
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
 
L'adaptation du twpol.cfg devra être faite petit à petit. Les modifs sont listées ici au fur et à mesure
 +
 
=== Modifs du twpol.cfg ===
 
=== 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)
+
* 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'''
 
'''Spécifique BlueQuartz'''
# Ajout de (recurse=0) pour /tmp et /home
+
* Ajout de (recurse=0) sur /usr,/tmp et /home
# Ajout de !/var/db
+
* Ajout de -m à /bin, /sbin, /lib, /usr/bin, /usr/sbin, /usr/lib, /etc, /root
# sur / ajout de " -m (recurse=0)"
+
* Ajout de !/root/.monit.state
# ajout de  !/usr/local/bfd;
+
* Ajout de !/var/db
# ajout de " -i" à /var/spool/mail
+
* 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
 +
 
 +
= Voir aussi [[Variables Tripwire]] =

Version actuelle datée du 16 juin 2009 à 10:14

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 :

  1. Lorsqu'on met à jour la base, par tripwire --update, le rapport à valider donne les règles en fin de fichier
  2. 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

Voir aussi Variables Tripwire