Auteur : Didier Misson
• 12 novembre 2007

Maintenant que la configuration de base de mon serveur est faite, je voudrais le sécuriser.

Je ne parle pas ici de sécurisation du serveur Web, que j’aborderai dans un prochain article ;-)

Concernant la sécurisation de votre serveur, en particulier sous Ubuntu, je vous conseille de lire l’article Sécuriser son Ubuntu-server du blog Prendre un café :-)

J’utilise ici une machine en Ubuntu server Gutsy 7.10, mais vous pouvez faire le même genre d’installation sur pratiquement toutes les distributions Linux. ;-)

Édit : Cet article a été mis à jour le 9 novembre 2009 pour une installation en Debian 5 Lenny.

Bien que Linux soit en général moins sujet aux failles et aux attaques, rien n’est parfait, et par exemple, une faille dans un script PHP peut très bien être la porte d’entrée d’une attaque.

La sécurisation PHP et Web, ce sera donc pour un prochain billet.

Mais au niveau système, que faire pour détecter une intrusion ?

Typiquement, un serveur compromis l’est souvent par un rootkit, càd un module, un programme, une méthode permettant à l’attaquant extérieur d’accéder à votre serveur, et d’y acquérir les droits « root » d’administration.

C’est un cas réellement grave, et quand il arrive, il faut essayer de comprendre par où est rentré l’attaquant, et non seulement appliquer la correction pour combler cette faille, mais d’abord réinstaller tout le serveur ! :-(
Il est en effet très difficile d’être sûr d’avoir vraiment nettoyer toutes les saletés installées par l’attaquant.

Un article intéressant à ce sujet se trouve sur le site d’ Ubuntu-fr.org : Que faire en cas de soupçons d’un serveur compromis ?

Avant d’en arriver là, il est intéressant de savoir si oui ou non le serveur a un rootkit installé.

2 programmes principaux existent :

Chkrootkit fonctionne un peu comme un anti-virus, en scannant le serveur pour y détecter d’éventuels rootkit sur base de signatures de rootkits connus. Il fait également d’autres vérifications. Par exemple, il vérifie que votre interface réseau n’est pas en mode sniffing.

En Ubuntu 7.10 (français)

$ sudo aptitude install chkrootkit

Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Lecture de l'information d'état étendu
Initialisation de l'état des paquets... Fait
Construction de la base de données des étiquettes... Fait
Les NOUVEAUX paquets suivants vont être automatiquement installés : binutils
Les NOUVEAUX paquets suivants vont être installés :
binutils chkrootkit

0 paquets mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 1732ko d'archives. Après dépaquetage, 8430ko seront utilisés.
Voulez-vous continuer ? [Y/n/?]

En Debian 5 Lenny (Anglais)

$ su -
Password:
aptitude install chkrootkit
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
The following NEW packages will be installed:
   chkrootkit 
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 308kB of archives. After unpacking 872kB will be used.
...

L’utilisation est simple :

En Ubuntu 7.10 (l’utilitaire chkrootkit est en anglais)

$ sudo chkrootkit
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `crontab'... not infected
Checking `date'... not infected
Checking `du'... not infected
 ...
Searching for sniffer's logs, it may take a while... nothing found
Searching for HiDrootkit's default dir... nothing found
Searching for t0rn's default files and dirs... nothing found
Searching for t0rn's v8 defaults... nothing found
Searching for Lion Worm default files and dirs... nothing found
Searching for RSHA's default files and dir... nothing found
Searching for RH-Sharpe's default files... nothing found
Searching for Ambient's rootkit (ark) default files and dirs... nothing found
Searching for suspicious files and dirs, it may take a while... nothing found
 ...
Checking `slapper'... not infected
Checking `z2'... chklastlog: nothing deleted

En Debian 5 Lenny (Anglais)

$ chkrootkit
ROOTDIR is `/'
Checking `amd'...                                           not found
Checking `basename'...                                      not infected
Checking `biff'...                                          not found
Checking `chfn'...                                          not infected
Checking `chsh'...                                          not infected
Checking `cron'...                                          not infected
Checking `crontab'...                                       not infected
Checking `date'...                                          not infected
 ...
Checking `write'...                                         not infected
Checking `aliens'...                                        no suspect files
Searching for sniffer's logs, it may take a while...        nothing found
Searching for HiDrootkit's default dir...                   nothing found
Searching for t0rn's default files and dirs...              nothing found
Searching for t0rn's v8 defaults...                         nothing found
Searching for Lion Worm default files and dirs...           nothing found
Searching for RSHA's default files and dir...               nothing found
 ...
Searching for anomalies in shell history files...           nothing found
Checking `asp'...                                           not infected
Checking `bindshell'...                                     not infected
Checking `lkm'...                                           chkproc: nothing detected
chkdirs: nothing detected
Checking `rexedcs'...                                       not found
Checking `sniffer'...                                       lo: not promisc and no packet sniffer sockets
eth0: not promisc and no packet sniffer sockets
Checking `w55808'...                                        not infected
Checking `wted'...                                          chkwtmp: nothing deleted
Checking `scalper'...                                       not infected
Checking `slapper'...                                       not infected
Checking `z2'...                                            chklastlog: nothing deleted

Ouf, rien de dangereux n’est détecté ;-)
Ce serait dommage… Le serveur vient d’être installé et n’est pas encore accessible sur le net. ;-)

voilà, c’est bien…
Mais si vous ne lancez pas manuellement le chkrootkit, aucune vérification ne sera faite !

Le mieux est d’automatiser le processus en le lançant, par exemple, chaque nuit à l’aide de Crontab et de s’envoyer le résultat par mail.

Editez votre Crontab

sudo crontab -e

et ajouter une ligne du genre :

15 3    *   *   *   /usr/sbin/chkrootkit 2>&1 | mail didier@mondomaine.be -s "serveur 3 : Rapport de chkrootkit"

Avec cette ligne, Chkrootkit tournera toutes les nuits à 3h15 du matin et enverra le rapport à votre adresse mail. :-)

Une autre façon de faire est d’utiliser le script que l’installation a mis dans la Crontab « daily » :

sudo vi /etc/cron.daily/chkrootkit
#!/bin/sh -e

CHKROOTKIT=/usr/sbin/chkrootkit
CF=/etc/chkrootkit.conf
LOG_DIR=/var/cache/chkrootkit

if [ ! -x $CHKROOTKIT ]; then
 exit 0
fi

if [ -f $CF ]; then
 . $CF
fi

if [ "$RUN_DAILY" = "true" ]; then
 if [ "$DIFF_MODE" = "true" ]; then
    $CHKROOTKIT $RUN_DAILY_OPTS > $LOG_DIR/log.new 2>&1
 if [ ! -f $LOG_DIR/log.old ] \
    || ! diff -q $LOG_DIR/log.old $LOG_DIR/log.new > /dev/null 2>&1; then
 cat $LOG_DIR/log.new
 fi
 mv $LOG_DIR/log.new $LOG_DIR/log.old
 else
 $CHKROOTKIT $RUN_DAILY_OPTS
 fi
fi

Il faut avoir "$RUN_DAILY" = "true" pour que chkrootkit s'exécute toutes les nuits.

ATTENTION : ce script, tel qu’il est, n’envoie PAS de mail.

Les paramètres sont dans /etc/chkrootkit.conf

sudo vi /etc/chkrootkit.conf
RUN_DAILY="false"
RUN_DAILY_OPTS="-q"
DIFF_MODE="false"

Si la variable « RUN_DAILY » n’est pas à « true« , modifiez la ligne en conséquence. ;-)

Voilà, avec « true », chkrootkit devrait tourner toutes les nuits automatiquement.

Essayons le :

$ sudo /etc/cron.daily/chkrootkit
 eth0: PACKET SNIFFER(/sbin/dhclient3[3496])

La détection d’une tâche DHCP monitorant l’interface eth0 est normale.
En tout cas, c’est installé par défaut sur Ubuntu.

Essayons de modifier le paramètre DIFF_MODE :

sudo vi /etc/chkrootkit.conf
 RUN_DAILY="true"
 RUN_DAILY_OPTS="-q"
 DIFF_MODE="true"
sudo /etc/cron.daily/chkrootkit
 eth0: PACKET SNIFFER(/sbin/dhclient3[3496])

Mais en mode « différence », il crée maintenant des fichiers contenant les erreurs détectées :

ls -l /var/cache/chkrootkit/ total 4 -rw-r--r-- 1 root root 44 2007-11-18 03:52 log.old

Au second essais (en automatique, ce serait la nuit suivante) :

sudo /etc/cron.daily/chkrootkit

Au 2ème passage (la 2ème nuit), il ne donne plus de message d’erreur !
En effet, le rapport d’erreur qu’il génère contient exactement le ou les mêmes messages que ce qu’il y a dans /var/cache/chkrootkit/log.old !

C’est une façon de faire…
Par mail, ça éviterait d’avoir un mail tous les jours, par exemple, pour ce dhclient3 ;-)

Mais il ne faudrait pas rater le mail en cas de problème ! Car ce mail avec ce message ne passerait qu’une seule fois !

Les mails, justement !
Ce serait bien d’envoyer tout ça par mail… ;-)

Je compléterai ce billet prochainement pour l’envoie des mails.
En mode « différentiel », il faudrait évidemment ne pas envoyer de mail vide quand il n’y a pas de messages. ;-)

Evidemment, n’utilisez pas les 2 moyens d’automatisation en même temps.
Pas besoin de cumuler une exécution avec une commande crontab, et une autre dans cron.daily ;-)

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Identi.ca
  • MySpace
  • Netvibes
  • Technorati
  • Twitter
  • email
  • Wikio FR
  • LinkedIn
  • RSS
  • Add to favorites
Vous pouvez suivre toutes les réponses à à ce billet via le flux RSS 2.0. Les commentaires et la notification par ping sont désactivés.

Les commentaires sont désactivés.