Outils personnels

RKHunter installation : Différence entre versions

De wikiGite

 
(7 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
<span style="color:green">Procédure validée sur CentOS</span><br>
 
<span style="color:green">Procédure validée sur CentOS</span><br>
 
 
<!-- # ARCHIVE
 
<!-- # ARCHIVE
 
'''NOTE''' : Le paquet .deb est trop ancien (1.2.9). La 1.3.0 apporte beaucoup de chose (notamment suspscan)
 
'''NOTE''' : Le paquet .deb est trop ancien (1.2.9). La 1.3.0 apporte beaucoup de chose (notamment suspscan)
Ligne 21 : Ligne 20 :
 
Reconnecter root (ou "su -" pour les tests).
 
Reconnecter root (ou "su -" pour les tests).
 
# END ARCHIVE -->
 
# END ARCHIVE -->
 
+
= Installation =
 
  yum install --enablerepo=rpmforge rkhunter
 
  yum install --enablerepo=rpmforge rkhunter
 
Déplacer la config dans un sous-répertoire de /etc pour plus de clarté
 
Déplacer la config dans un sous-répertoire de /etc pour plus de clarté
Ligne 28 : Ligne 27 :
 
Il faudra juste penser à appeler systématiquement rkhunter par "rkhunter --configfile /etc/rkhunter/rkhunter.conf".
 
Il faudra juste penser à appeler systématiquement rkhunter par "rkhunter --configfile /etc/rkhunter/rkhunter.conf".
  
'''CentOS''': créer les scripts d'automatisation /etc/rkhunter/rkhunter-cron.conf (ATTENTION au '''REPORT_EMAIL''') :
+
= Configuration =
 +
Editer /etc/rkhunter/rkhunter.conf. Fichier standard pour une CentOS (uniquement les lignes décommentées) :
 +
ROTATE_MIRRORS=1
 +
UPDATE_MIRRORS=1
 +
MIRRORS_MODE=0
 +
MAIL-ON-WARNING=""
 +
MAIL_CMD=mail -s "[rkhunter] Warnings found for ${HOST_NAME}"
 +
UPDATE_LANG=""
 +
LOGFILE=/var/log/rkhunter.log
 +
APPEND_LOG=0
 +
COPY_LOG_ON_ERROR=0
 +
COLOR_SET2=0
 +
AUTO_X_DETECT=1
 +
WHITELISTED_IS_WHITE=0
 +
ALLOW_SSH_ROOT_USER=without-password
 +
ALLOW_SSH_PROT_V1=0
 +
ENABLE_TESTS="all"
 +
DISABLE_TESTS="suspscan hidden_ports hidden_procs deleted_files packet_cap_apps"
 +
 +
SCRIPTWHITELIST="/sbin/ifup /sbin/ifdown"
 +
SCRIPTWHITELIST="/usr/bin/groups"
 +
SCRIPTWHITELIST="/usr/bin/GET"
 +
SCRIPTWHITELIST="/usr/bin/ldd"
 +
SCRIPTWHITELIST="/usr/bin/whatis"
 +
 +
IMMUTABLE_SET=0
 +
 +
ALLOWHIDDENDIR="/etc/.java"
 +
ALLOWHIDDENDIR="/dev/.udev /dev/.udevdb /dev/.udev.tdb"
 +
ALLOWHIDDENDIR="/dev/.static"
 +
ALLOWHIDDENDIR="/dev/.initramfs"
 +
ALLOWHIDDENDIR="/dev/.SRC-unix"
 +
ALLOWHIDDENDIR="/dev/.mdadm"
 +
ALLOWHIDDENFILE="/usr/share/man/man1/..1.gz"
 +
ALLOWHIDDENFILE="/etc/.pwd.lock"
 +
ALLOWHIDDENFILE="/etc/.passwd.pre-uid-fix"
 +
ALLOWHIDDENFILE="/usr/bin/.fipscheck.hmac"
 +
ALLOWHIDDENFILE="/usr/bin/.ssh.hmac"
 +
ALLOWHIDDENFILE="/usr/sbin/.sshd.hmac"
 +
 +
PHALANX2_DIRTEST=0
 +
 +
ALLOWDEVFILE="/dev/.udev/db/*"
 +
ALLOWDEVFILE="/dev/.udev/uevent_seqnum"
 +
 +
'''XINETD_ALLOWED_SVC=/etc/xinetd.d/proftpd'''
 +
'''UID0_ACCOUNTS="root-admin"'''
 +
ALLOW_SYSLOG_REMOTE_LOGGING=0
 +
'''APP_WHITELIST="httpd openssl sshd"'''
 +
 +
SUSPSCAN_TEMP=/dev/shm
 +
SUSPSCAN_MAXSIZE=10240000
 +
SUSPSCAN_THRESH=200
 +
USE_LOCKING=0
 +
LOCK_TIMEOUT=300
 +
SHOW_LOCK_MSGS=1
 +
INSTALLDIR=/usr
 +
DBDIR=/var/lib/rkhunter/db
 +
SCRIPTDIR=/usr/lib64/rkhunter/scripts
 +
TMPDIR=/var/lib/rkhunter/tmp
 +
USER_FILEPROP_FILES_DIRS=/etc/rkhunter/rkhunter.conf
 +
 
 +
= Scripts d'automatisation =
 +
== rkhunter-cron.conf ==
 +
D'abord un fichier /etc/rkhunter/rkhunter-cron.conf (ATTENTION au '''REPORT_EMAIL''') qui permettra de piloter le fonctionnement de rkhunter lancé par cron :
 
  # Defaults for rkhunter cron jobs
 
  # Defaults for rkhunter cron jobs
 
  # sourced by /etc/cron.*/rkhunter
 
  # sourced by /etc/cron.*/rkhunter
Ligne 43 : Ligne 106 :
 
  CRON_DAILY_RUN="y"
 
  CRON_DAILY_RUN="y"
  
rkhunter-daily.sh (scan journalier) :
+
== rkhunter.sh ==
  #!/bin/sh
+
Le script principal effectue des tâches différentes selon le nom qu'on lui donne.
 +
 
 +
# Pour le scan journalier, créer un lien symbolique /etc/cron.daily/rkhunter_'''scan'''.
 +
 
 +
# Pour vérifier une fois par semaine si le programme nécessite une mise à jour (envoi d'un message à l'administrateur), et/ou s'il y a de nouvelles bases de règles (/var/lib/rkhunter - mise à jour automatique), créer un lien symbolique /etc/cron.daily/rkhunter_'''update'''.
 +
 
 +
  #!/bin/bash
 
  CONFDIR=/etc/rkhunter
 
  CONFDIR=/etc/rkhunter
 
  RKHUNTER="/usr/bin/rkhunter --configfile $CONFDIR/rkhunter.conf"
 
  RKHUNTER="/usr/bin/rkhunter --configfile $CONFDIR/rkhunter.conf"
EXCLUDE=$CONFDIR/rkhunter.exclude
 
 
   
 
   
 
  # source our config
 
  # source our config
 
  . $CONFDIR/rkhunter-cron.conf
 
  . $CONFDIR/rkhunter-cron.conf
 
   
 
   
  case "$CRON_DAILY_RUN" in
+
  case $0 in
    [Yy]*)
+
  *scan)
 +
      if [ "$CRON_DAILY_RUN" == "y" -o "$CRON_DAILY_RUN" == "Y" ]
 +
      then
 
         OUTFILE=`mktemp` || exit 1
 
         OUTFILE=`mktemp` || exit 1
 
         $RKHUNTER --cronjob --report-warnings-only --createlogfile /var/log/rkhunter.log > $OUTFILE
 
         $RKHUNTER --cronjob --report-warnings-only --createlogfile /var/log/rkhunter.log > $OUTFILE
         if [ $(stat -c %s $OUTFILE) -ne 0 ]; then
+
         if [ $(stat -c %s $OUTFILE) -ne 0 ]
          cat $OUTFILE | grep -v -e '^$' > /tmp/rkhunter.a1
+
        then
          while read LINE
+
          (
          do
+
            echo "Subject: [rkhunter] Daily run"
            cat /tmp/rkhunter.a1 | grep -v "$LINE" > /tmp/rkhunter.a2
+
            echo ""
            mv /tmp/rkhunter.a2 /tmp/rkhunter.a1
+
            cat $OUTFILE
          done < $EXCLUDE
+
          ) | /usr/sbin/sendmail $REPORT_EMAIL
          if [ -s /tmp/rkhunter.a1 ]
 
          then
 
            (
 
              echo "Subject: [rkhunter] Daily run"
 
              echo ""
 
              cat $OUTFILE
 
            ) | /usr/sbin/sendmail $REPORT_EMAIL
 
          fi
 
 
         fi
 
         fi
 
         rm -f $OUTFILE
 
         rm -f $OUTFILE
        rm -f /tmp/rkhunter.a1
+
      fi
        ;;
+
      ;;
      *)
+
  *update)
      exit 0
+
      if [ "$CRON_DB_UPDATE" == "y" -o "$CRON_DAILY_RUN" == "Y" ]
      ;;
+
       then
esac
+
        OUTFILE=`mktemp` || exit 1
 
+
        if [ "$DB_UPDATE_EMAIL" = "y" -o "$DB_UPDATE_EMAIL" = "Y" ]
NE PAS OUBLIER
+
        then
chmod 700 rkhunter-daily.sh
+
          (
et
 
ln -s /<REPERTOIRE DU SCRIPT>/rkhunter-daily.sh /etc/cron.daily/rkhunter_daily
 
 
 
Le fichier EXCLUDE sert à supprimer des faux-positif sans toucher au script rkhunter. On met sur chaque ligne un mot/une phrase à filtrer.<br/>
 
Exemple : /etc/rkhunter/rkhunter.exclude
 
Warning: Package manager verification has failed:
 
File: /bin/grep
 
File: /usr/bin/less
 
Try running the command 'prelink
 
The file modification time has changed
 
The file hash value has changed
 
The file size has changed
 
One or more warnings have been found while checking the system.
 
Please check the log file (/var/log/rkhunter.log)
 
'''Note''' : Lister les "File:..." en fonction du résultat d'un premier lancement de /etc/cron.daily/rkhunter_daily, afin de bien coller aux faux-positifs de cette configuration, et être sûr qu'il avertisse si d'autres binaires étaient modifiés un jour (hack ou upgrade).
 
 
 
Si le script continue à envoyer le mail, vérifier les phrases qu'il ne filtre pas en commentant les deux lignes "rm -f /tmp/..." et en relançant le script. Voir /tmp/rkhunter.a1. Penser à décommenter après debug.
 
 
 
rkhunter-weekly.sh (update des bases) :
 
#!/bin/sh
 
CONFDIR=/etc/rkhunter
 
RKHUNTER="/usr/bin/rkhunter --configfile $CONFDIR/rkhunter.conf"
 
 
# source our config
 
. $CONFDIR/rkhunter-cron.conf
 
 
case "$CRON_DB_UPDATE" in
 
       [Yy]*)
 
        OUTFILE=`mktemp` || exit 1
 
        if [ "$DB_UPDATE_EMAIL" = "no" ]
 
        then
 
            $RKHUNTER --versioncheck 1>/dev/null 2>$OUTFILE
 
            $RKHUNTER --update 1>/dev/null 2>$OUTFILE
 
        else
 
            (
 
 
           echo "Subject: [rkhunter] Weekly database update"
 
           echo "Subject: [rkhunter] Weekly database update"
 
           echo ""
 
           echo ""
           $RKHUNTER --versioncheck  
+
           $RKHUNTER --nocolors --versioncheck 2>&1
              $RKHUNTER --update
+
          $RKHUNTER --nocolors --update 2>&1
            ) | /usr/sbin/sendmail $REPORT_EMAIL
 
        fi
 
        if [ $(stat -c %s $OUTFILE) -ne 0 ]; then
 
          (
 
            echo "Subject: [rkhunter] Weekly database update"
 
            echo ""
 
            cat $OUTFILE
 
 
           ) | /usr/sbin/sendmail $REPORT_EMAIL
 
           ) | /usr/sbin/sendmail $REPORT_EMAIL
        fi
+
        else
        rm -f $OUTFILE
+
          $RKHUNTER --nocolors --versioncheck 1>/dev/null 2>$OUTFILE
        ;;
+
          if [ $? -eq 2 ]
      *)
+
          then
        exit 0
+
              echo "Une nouvelle version de RKHUNTER est disponible !" >> $OUTFILE
        ;;
+
          fi
 +
          $RKHUNTER --nocolors --update 1>/dev/null 2>>$OUTFILE
 +
          if [ $? -eq 2 ]
 +
          then
 +
              echo "Une nouvelle version des bases de RKHUNTER a été installée." >> $OUTFILE
 +
          fi
 +
        fi
 +
        if [ $(stat -c %s $OUTFILE) -ne 0 ]; then
 +
          (
 +
          echo "Subject: [rkhunter] Weekly database update"
 +
          echo ""
 +
          cat $OUTFILE
 +
          ) | /usr/sbin/sendmail $REPORT_EMAIL
 +
        fi
 +
        rm -f $OUTFILE
 +
      fi
 +
      ;;
 +
  *)
 +
      exit 0
 +
      ;;
 
  esac
 
  esac
  
 
NE PAS OUBLIER
 
NE PAS OUBLIER
  chmod 700 rkhunter-weekly.sh
+
  chmod 700 rkhunter.sh
 
et
 
et
  ln -s /<REPERTOIRE DU SCRIPT>/rkhunter-weekly.sh /etc/cron.weekly/rkhunter_weekly
+
  ln -s /<REPERTOIRE DU SCRIPT>/rkhunter.sh /etc/cron.daily/rkhunter_scan
 
+
  ln -s /<REPERTOIRE DU SCRIPT>/rkhunter.sh /etc/cron.weekly/rkhunter_update
Editer /etc/rkhunter/rkhunter.conf :
 
  # MAIL-ON-WARNING=<mail_admin>@example.net # Pas nécessaire si on utilise le script /etc/cron.daily/rkhunter
 
# ALLOW_SSH_ROOT_USER DOIT ETRE à la même valeur que PermitRootLogin de sshd_config
 
ALLOW_SSH_ROOT_USER=without-password
 
PKGMGR=DPKG # (ou RPM)
 
ALLOWHIDDENDIR=/dev/.udev
 
ALLOWHIDDENDIR=/dev/.static
 
ALLOWHIDDENDIR=/dev/.initramfs
 
ALLOWHIDDENDIR=/dev/.initramfs-tools
 
 
ALLOWHIDDENFILE=/usr/share/man/man1/..1.gz
 
ALLOWHIDDENFILE=/etc/.pwd.lock
 
 
 
En plus sur '''CentOS''' :
 
SCRIPTWHITELIST=/sbin/ifup
 
SCRIPTWHITELIST=/sbin/ifdown
 
SCRIPTWHITELIST=/usr/bin/groups
 
 
XINETD_ALLOWED_SVC=/etc/xinetd.d/proftpd
 
UID0_ACCOUNTS="root-admin"
 
Et si certaines version de logiciels ne sont pas à jour :
 
APP_WHITELIST="openssl:0.9.7a php:4.3.9"
 
  
 +
= Initialisation =
 
Pour initialiser la base, lancer une première fois :
 
Pour initialiser la base, lancer une première fois :
 
  su -
 
  su -
 
  rkhunter --propupd
 
  rkhunter --propupd
 +
Et relancer cette commande à chaque fois que nécessaire (fichiers ajoutés ou supprimés, par exemple).
  
Lancer /etc/cron.daily/rkhunter_daily sur la ligne de commande pour voir les faux-positifs et ajuster la configuration (résultat dans /var/log/rkhunter.log, chercher "Warning", et par mail)
+
Lancer /etc/cron.daily/rkhunter_scan sur la ligne de commande pour voir les faux-positifs et ajuster la configuration (résultat dans /var/log/rkhunter.log, chercher "Warning", et par mail)
  
=== SUSPSCAN ===
+
= SUSPSCAN =
 
rkhunter peut scanner des répertoire pour des "suspicious contents". Suspscan est gourmand en CPU, il est désactivé par défaut dans rkhunter.conf (DISABLE_TESTS).
 
rkhunter peut scanner des répertoire pour des "suspicious contents". Suspscan est gourmand en CPU, il est désactivé par défaut dans rkhunter.conf (DISABLE_TESTS).
  

Version actuelle datée du 8 août 2013 à 10:06

Procédure validée sur CentOS

Installation

yum install --enablerepo=rpmforge rkhunter

Déplacer la config dans un sous-répertoire de /etc pour plus de clarté

mkdir /etc/rkhunter
mv /etc/rkhunter.conf /etc/rkhunter

Il faudra juste penser à appeler systématiquement rkhunter par "rkhunter --configfile /etc/rkhunter/rkhunter.conf".

Configuration

Editer /etc/rkhunter/rkhunter.conf. Fichier standard pour une CentOS (uniquement les lignes décommentées) :

ROTATE_MIRRORS=1
UPDATE_MIRRORS=1
MIRRORS_MODE=0
MAIL-ON-WARNING=""
MAIL_CMD=mail -s "[rkhunter] Warnings found for ${HOST_NAME}"
UPDATE_LANG=""
LOGFILE=/var/log/rkhunter.log
APPEND_LOG=0
COPY_LOG_ON_ERROR=0
COLOR_SET2=0
AUTO_X_DETECT=1
WHITELISTED_IS_WHITE=0
ALLOW_SSH_ROOT_USER=without-password
ALLOW_SSH_PROT_V1=0
ENABLE_TESTS="all"
DISABLE_TESTS="suspscan hidden_ports hidden_procs deleted_files packet_cap_apps"

SCRIPTWHITELIST="/sbin/ifup /sbin/ifdown"
SCRIPTWHITELIST="/usr/bin/groups"
SCRIPTWHITELIST="/usr/bin/GET"
SCRIPTWHITELIST="/usr/bin/ldd"
SCRIPTWHITELIST="/usr/bin/whatis"

IMMUTABLE_SET=0

ALLOWHIDDENDIR="/etc/.java"
ALLOWHIDDENDIR="/dev/.udev /dev/.udevdb /dev/.udev.tdb"
ALLOWHIDDENDIR="/dev/.static"
ALLOWHIDDENDIR="/dev/.initramfs"
ALLOWHIDDENDIR="/dev/.SRC-unix"
ALLOWHIDDENDIR="/dev/.mdadm"
ALLOWHIDDENFILE="/usr/share/man/man1/..1.gz"
ALLOWHIDDENFILE="/etc/.pwd.lock"
ALLOWHIDDENFILE="/etc/.passwd.pre-uid-fix"
ALLOWHIDDENFILE="/usr/bin/.fipscheck.hmac"
ALLOWHIDDENFILE="/usr/bin/.ssh.hmac"
ALLOWHIDDENFILE="/usr/sbin/.sshd.hmac"

PHALANX2_DIRTEST=0

ALLOWDEVFILE="/dev/.udev/db/*"
ALLOWDEVFILE="/dev/.udev/uevent_seqnum"

XINETD_ALLOWED_SVC=/etc/xinetd.d/proftpd
UID0_ACCOUNTS="root-admin"
ALLOW_SYSLOG_REMOTE_LOGGING=0
APP_WHITELIST="httpd openssl sshd"

SUSPSCAN_TEMP=/dev/shm
SUSPSCAN_MAXSIZE=10240000
SUSPSCAN_THRESH=200
USE_LOCKING=0
LOCK_TIMEOUT=300
SHOW_LOCK_MSGS=1
INSTALLDIR=/usr
DBDIR=/var/lib/rkhunter/db
SCRIPTDIR=/usr/lib64/rkhunter/scripts
TMPDIR=/var/lib/rkhunter/tmp
USER_FILEPROP_FILES_DIRS=/etc/rkhunter/rkhunter.conf

Scripts d'automatisation

rkhunter-cron.conf

D'abord un fichier /etc/rkhunter/rkhunter-cron.conf (ATTENTION au REPORT_EMAIL) qui permettra de piloter le fonctionnement de rkhunter lancé par cron :

# Defaults for rkhunter cron jobs
# sourced by /etc/cron.*/rkhunter
#
# This is a POSIX shell fragment
#
# Set this to the email address where reports and run output should be sent
REPORT_EMAIL="<mail_admin>@example.net"
# Set this to yes to enable rkhunter weekly database updates
CRON_DB_UPDATE="y"
# Set this to yes to enable reports of weekly database updates
DB_UPDATE_EMAIL="y"
# Set this to yes to enable rkhunter daily runs
CRON_DAILY_RUN="y"

rkhunter.sh

Le script principal effectue des tâches différentes selon le nom qu'on lui donne.

  1. Pour le scan journalier, créer un lien symbolique /etc/cron.daily/rkhunter_scan.
  1. Pour vérifier une fois par semaine si le programme nécessite une mise à jour (envoi d'un message à l'administrateur), et/ou s'il y a de nouvelles bases de règles (/var/lib/rkhunter - mise à jour automatique), créer un lien symbolique /etc/cron.daily/rkhunter_update.
#!/bin/bash
CONFDIR=/etc/rkhunter
RKHUNTER="/usr/bin/rkhunter --configfile $CONFDIR/rkhunter.conf"

# source our config
. $CONFDIR/rkhunter-cron.conf

case $0 in
  *scan)
     if [ "$CRON_DAILY_RUN" == "y" -o "$CRON_DAILY_RUN" == "Y" ]
     then
       OUTFILE=`mktemp` || exit 1
       $RKHUNTER --cronjob --report-warnings-only --createlogfile /var/log/rkhunter.log > $OUTFILE
       if [ $(stat -c %s $OUTFILE) -ne 0 ]
       then
          (
           echo "Subject: [rkhunter] Daily run"
           echo ""
           cat $OUTFILE
          ) | /usr/sbin/sendmail $REPORT_EMAIL
       fi
       rm -f $OUTFILE
     fi
     ;;
  *update)
     if [ "$CRON_DB_UPDATE" == "y" -o "$CRON_DAILY_RUN" == "Y" ]
     then
       OUTFILE=`mktemp` || exit 1
       if [ "$DB_UPDATE_EMAIL" = "y" -o "$DB_UPDATE_EMAIL" = "Y" ]
       then
         (
          echo "Subject: [rkhunter] Weekly database update"
          echo ""
          $RKHUNTER --nocolors --versioncheck 2>&1
          $RKHUNTER --nocolors --update 2>&1
          ) | /usr/sbin/sendmail $REPORT_EMAIL
       else
         $RKHUNTER --nocolors --versioncheck 1>/dev/null 2>$OUTFILE
         if [ $? -eq 2 ]
         then
             echo "Une nouvelle version de RKHUNTER est disponible !" >> $OUTFILE
         fi
         $RKHUNTER --nocolors --update 1>/dev/null 2>>$OUTFILE
         if [ $? -eq 2 ]
         then
             echo "Une nouvelle version des bases de RKHUNTER a été installée." >> $OUTFILE
         fi
       fi
       if [ $(stat -c %s $OUTFILE) -ne 0 ]; then
         (
          echo "Subject: [rkhunter] Weekly database update"
          echo ""
          cat $OUTFILE
         ) | /usr/sbin/sendmail $REPORT_EMAIL
       fi
       rm -f $OUTFILE
     fi
     ;;
  *)
     exit 0
     ;;
esac

NE PAS OUBLIER

chmod 700 rkhunter.sh

et

ln -s /<REPERTOIRE DU SCRIPT>/rkhunter.sh /etc/cron.daily/rkhunter_scan
ln -s /<REPERTOIRE DU SCRIPT>/rkhunter.sh /etc/cron.weekly/rkhunter_update

Initialisation

Pour initialiser la base, lancer une première fois :

su -
rkhunter --propupd

Et relancer cette commande à chaque fois que nécessaire (fichiers ajoutés ou supprimés, par exemple).

Lancer /etc/cron.daily/rkhunter_scan sur la ligne de commande pour voir les faux-positifs et ajuster la configuration (résultat dans /var/log/rkhunter.log, chercher "Warning", et par mail)

SUSPSCAN

rkhunter peut scanner des répertoire pour des "suspicious contents". Suspscan est gourmand en CPU, il est désactivé par défaut dans rkhunter.conf (DISABLE_TESTS).

suspscan désactivé 14/03/08 : vraiment trop gourmand... Et trop de faux positifs.