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. ;-)

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.

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/?]

L’utilisation est simple :

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

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 ;-)

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.