CHKRootkit installation : Différence entre versions
De wikiGite
(→Sur CentOS) |
|||
(41 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
+ | __TOC__ | ||
= Sur DEBIAN = | = Sur DEBIAN = | ||
+ | <span style="color:green">Procédure validée</span> | ||
apt-get install chkrootkit | apt-get install chkrootkit | ||
− | Créer /etc/chkrootkit et y | + | mkdir /etc/chkrootkit |
− | + | mv /etc/chkrootkit.conf /etc/chkrootkit | |
+ | |||
+ | Créer /etc/chkrootkit/chkrootkit.conf (cf [[#chkrootkit.conf|chkrootkit.conf]]) | ||
+ | |||
+ | Créer /etc/chkrootkit/exclude.list et y ajouter les phrases à exclure du mail d'alerte, exemple POUR DEBIAN : | ||
+ | The following suspicious files and directories were found: | ||
+ | /lib/init/rw/.ramfs | ||
+ | INFECTED (PORTS: 465) | ||
+ | eth0: PACKET SNIFFER(/usr/sbin/snort | ||
+ | |||
+ | Editer /opt/systools/chkrootkit.sh (cf [[#chkrootkit.sh|chkrootkit.sh]]) | ||
+ | |||
+ | '''Pour finir''' | ||
+ | |||
+ | Lancer /etc/cron.daily/chkrootkit pour vérifier qu'il fonctionne et récupérer les messages.<br> | ||
+ | (/var/cache/chkrootkit/log.old contient tous les messages, log.alert doit être vide si exclude.list est ok) | ||
+ | |||
+ | = Sur CentOS = | ||
+ | <span style="color:green">Procédure validée</span> | ||
+ | yum install chkrootkit --enablerepo=epel | ||
+ | mkdir /etc/chkrootkit | ||
+ | <!-- | ||
+ | = Sur CentOS4/BQ = | ||
+ | <span style="color:green">Procédure validée</span> | ||
+ | |||
+ | wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz | ||
+ | tar -xvzf chkrootkit.tar.gz | ||
+ | cd chkrootkit-0.49/ | ||
+ | make sense | ||
+ | |||
+ | Si gcc non trouvé : | ||
+ | yum install gcc | ||
+ | |||
+ | Dans le répertoire d'install courant, éditer le fichier "chkrootkit",<br> | ||
+ | ajouter entre "unalias dirname > /dev/null 2>&1" et "# Workaround for recent GNU coreutils" la ligne : | ||
+ | cd /usr/lib/chkrootkit | ||
+ | |||
+ | Puis installer les binaires : | ||
+ | cp chkrootkit /usr/sbin | ||
+ | mkdir /usr/lib/chkrootkit | ||
+ | |||
+ | cp chkdirs /usr/lib/chkrootkit | ||
+ | cp ifpromisc /usr/lib/chkrootkit | ||
+ | cp chkwtmp /usr/lib/chkrootkit | ||
+ | cp chklastlog /usr/lib/chkrootkit | ||
+ | cp chkutmp /usr/lib/chkrootkit | ||
+ | cp check_wtmpx /usr/lib/chkrootkit | ||
+ | cp chkproc /usr/lib/chkrootkit | ||
+ | cp strings-static /usr/lib/chkrootkit | ||
+ | |||
+ | mkdir /var/cache/chkrootkit | ||
+ | mkdir /etc/chkrootkit | ||
+ | cd /etc/chkrootkit | ||
+ | --> | ||
+ | Créer /etc/chkrootkit/exclude.list et y ajouter les phrases à exclure du mail d'alerte, exemple POUR CENTOS : | ||
+ | Warning: '/' is not an ordinary file | ||
+ | .packlist | ||
+ | The tty of the following user process(es) were not found | ||
+ | in /var/run/utmp | ||
+ | RUID | ||
+ | /sbin/mingetty | ||
+ | redirectUrl: /base/vsite/vsiteList.php | ||
+ | |||
+ | '''NOTE''' : on peut ajouter une tache cron.daily pour éviter des faux-positifs dans /tmp. Exemple :<br> | ||
+ | /opt/before-chkrootkit.sh (chmod 700 et créer un lien dans /etc/cron.daily): | ||
+ | #!/bin/bash | ||
+ | # faux-positifs sur fichiers /tmp/php_writeexcel* | ||
+ | find /tmp -name "php_writeexcel*" -ctime +1 -exec rm {} \; | ||
+ | |||
+ | <!-- | ||
+ | = Sur CentOS5/BlueOnyx = | ||
+ | Erreur à la compilation : | ||
+ | chkwtmp.c: In function ‘main’: | ||
+ | chkwtmp.c:95: warning: incompatible implicit declaration of built-in function ‘exit’ | ||
+ | mais chkrootkit fonctionne quand même | ||
+ | --> | ||
+ | === chkrootkit.sh === | ||
+ | Créer /opt/chkrootkit.sh, pour qu'il ressemble à ça : | ||
#!/bin/bash | #!/bin/bash | ||
− | |||
CHKROOTKIT=/usr/sbin/chkrootkit | CHKROOTKIT=/usr/sbin/chkrootkit | ||
− | + | CONF=/etc/chkrootkit/chkrootkit.conf | |
− | + | EXCLUDE=/etc/chkrootkit/chkrootkit.exclude | |
− | MAIL= | + | MAIL=$(which mail) |
LOG_DIR=/var/cache/chkrootkit | LOG_DIR=/var/cache/chkrootkit | ||
Ligne 15 : | Ligne 93 : | ||
fi | fi | ||
− | if [ -f $ | + | if [ -f $CONF ]; then |
− | . $ | + | . $CONF |
fi | fi | ||
if [ "$RUN_DAILY" = "true" ]; then | if [ "$RUN_DAILY" = "true" ]; then | ||
if [ "$DIFF_MODE" = "true" ]; then | if [ "$DIFF_MODE" = "true" ]; then | ||
− | $CHKROOTKIT $RUN_DAILY_OPTS > | + | $CHKROOTKIT $RUN_DAILY_OPTS > $LOG_DIR/log.old 2>&1 |
− | |||
− | |||
− | |||
− | |||
− | |||
else | else | ||
$CHKROOTKIT $RUN_DAILY_OPTS | $CHKROOTKIT $RUN_DAILY_OPTS | ||
Ligne 37 : | Ligne 110 : | ||
while read LINE | while read LINE | ||
do | do | ||
− | cat $LOG_DIR/log.alert | grep -v "$LINE" > $LOG_DIR/log.alert | + | # unlike Debian, writing the cat output to the same file does'nt seem to work on CentOS |
− | done < | + | # We use a temporary file a2 |
+ | cat $LOG_DIR/log.alert | grep -v "$LINE" > $LOG_DIR/log.a2 | ||
+ | mv $LOG_DIR/log.a2 $LOG_DIR/log.alert | ||
+ | done < $EXCLUDE | ||
# If some alerts stay in file, we cry | # If some alerts stay in file, we cry | ||
if [ -s $LOG_DIR/log.alert ] | if [ -s $LOG_DIR/log.alert ] | ||
Ligne 46 : | Ligne 122 : | ||
) | $MAIL -s 'chkrootkit Daily Run' $REPORT_MAIL | ) | $MAIL -s 'chkrootkit Daily Run' $REPORT_MAIL | ||
fi | fi | ||
+ | Ne pas oublier | ||
+ | chmod 700 /opt/systools/chkrootkit.sh | ||
+ | Créer un lien dans /etc/cron.daily | ||
+ | ln -s /opt/systools/chkrootkit.sh /etc/cron.daily/chkrootkit | ||
− | Editer /etc/chkrootkit/chkrootkit.conf, modifier : | + | === chkrootkit.conf === |
+ | Editer /etc/chkrootkit/chkrootkit.conf, modifier (Attention au mail de l'admin !): | ||
RUN_DAILY="true" | RUN_DAILY="true" | ||
RUN_DAILY_OPTS="-q" # -q=quiet mode | RUN_DAILY_OPTS="-q" # -q=quiet mode | ||
DIFF_MODE="true" # garde un /var/cache/chkrootkit/log.old pour comparer la prochaine fois | DIFF_MODE="true" # garde un /var/cache/chkrootkit/log.old pour comparer la prochaine fois | ||
− | + | REPORT_MAIL=<mail_admin>@example.net | |
− | REPORT_MAIL= | ||
− | + | = Pour finir = | |
− | + | ||
− | + | Lancer /etc/cron.daily/chkrootkit pour vérifier qu'il fonctionne et récupérer les messages.<br> | |
− | + | (/var/cache/chkrootkit/log.old contient tous les messages, log.alert doit être vide si exclude.list est ok) | |
− |
Version actuelle datée du 13 août 2013 à 16:29
Sur DEBIAN
Procédure validée
apt-get install chkrootkit mkdir /etc/chkrootkit mv /etc/chkrootkit.conf /etc/chkrootkit
Créer /etc/chkrootkit/chkrootkit.conf (cf chkrootkit.conf)
Créer /etc/chkrootkit/exclude.list et y ajouter les phrases à exclure du mail d'alerte, exemple POUR DEBIAN :
The following suspicious files and directories were found: /lib/init/rw/.ramfs INFECTED (PORTS: 465) eth0: PACKET SNIFFER(/usr/sbin/snort
Editer /opt/systools/chkrootkit.sh (cf chkrootkit.sh)
Pour finir
Lancer /etc/cron.daily/chkrootkit pour vérifier qu'il fonctionne et récupérer les messages.
(/var/cache/chkrootkit/log.old contient tous les messages, log.alert doit être vide si exclude.list est ok)
Sur CentOS
Procédure validée
yum install chkrootkit --enablerepo=epel mkdir /etc/chkrootkit
Créer /etc/chkrootkit/exclude.list et y ajouter les phrases à exclure du mail d'alerte, exemple POUR CENTOS :
Warning: '/' is not an ordinary file .packlist The tty of the following user process(es) were not found in /var/run/utmp RUID /sbin/mingetty redirectUrl: /base/vsite/vsiteList.php
NOTE : on peut ajouter une tache cron.daily pour éviter des faux-positifs dans /tmp. Exemple :
/opt/before-chkrootkit.sh (chmod 700 et créer un lien dans /etc/cron.daily):
#!/bin/bash # faux-positifs sur fichiers /tmp/php_writeexcel* find /tmp -name "php_writeexcel*" -ctime +1 -exec rm {} \;
chkrootkit.sh
Créer /opt/chkrootkit.sh, pour qu'il ressemble à ça :
#!/bin/bash CHKROOTKIT=/usr/sbin/chkrootkit CONF=/etc/chkrootkit/chkrootkit.conf EXCLUDE=/etc/chkrootkit/chkrootkit.exclude MAIL=$(which mail) LOG_DIR=/var/cache/chkrootkit if [ ! -x $CHKROOTKIT ]; then exit 0 fi if [ -f $CONF ]; then . $CONF fi if [ "$RUN_DAILY" = "true" ]; then if [ "$DIFF_MODE" = "true" ]; then $CHKROOTKIT $RUN_DAILY_OPTS > $LOG_DIR/log.old 2>&1 else $CHKROOTKIT $RUN_DAILY_OPTS fi fi # Mail alert # No future for empty lines cat $LOG_DIR/log.old | grep -v -e '^$' > $LOG_DIR/log.alert # We drop lines listed in $EXCLUDEF by suppress them line by line while read LINE do # unlike Debian, writing the cat output to the same file does'nt seem to work on CentOS # We use a temporary file a2 cat $LOG_DIR/log.alert | grep -v "$LINE" > $LOG_DIR/log.a2 mv $LOG_DIR/log.a2 $LOG_DIR/log.alert done < $EXCLUDE # If some alerts stay in file, we cry if [ -s $LOG_DIR/log.alert ] then (echo "CHKROOTKIT Alert :" cat $LOG_DIR/log.alert ) | $MAIL -s 'chkrootkit Daily Run' $REPORT_MAIL fi
Ne pas oublier
chmod 700 /opt/systools/chkrootkit.sh
Créer un lien dans /etc/cron.daily
ln -s /opt/systools/chkrootkit.sh /etc/cron.daily/chkrootkit
chkrootkit.conf
Editer /etc/chkrootkit/chkrootkit.conf, modifier (Attention au mail de l'admin !):
RUN_DAILY="true" RUN_DAILY_OPTS="-q" # -q=quiet mode DIFF_MODE="true" # garde un /var/cache/chkrootkit/log.old pour comparer la prochaine fois REPORT_MAIL=<mail_admin>@example.net
Pour finir
Lancer /etc/cron.daily/chkrootkit pour vérifier qu'il fonctionne et récupérer les messages.
(/var/cache/chkrootkit/log.old contient tous les messages, log.alert doit être vide si exclude.list est ok)