MISE EN PLACE DE LA MACHINE IDS SECURE SOUS FreeBSD

 

I. INSTALLATION DE L'OS

Nous avons choisi le système FreeBSD comme système d'exploitation pour le serveur IDS sécurisé, en effet ce système jouit d’une très grande stabilité, et est très sécurisé par défaut. Nous avons choisi FreeBSD dans sa version 5.2. Nous avons lancer l’installation sur une partition de 6go découpée comme suit :

/

256mo

swap

512mo

/var

256mo

/tmp

256mo

/user

4,5go

 

Nous avons procédé à l’installation de base du système, ainsi qu’au serveur X (XFree86 4.3) et à un navigateur pour permettre la récupération des mises à jours des logiciels, ainsi que pour trouver de la documentation pour la configuration. Une fois le système installé, nous nous sommes documentés sur les vulnérabilités de ce système sur securityfocus (www.securityfocus.com) et nous avons installé les 3 patchs suivants.

  • FreeBSD Unauthorized Jailed Process Attaching Vulnerability
    ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-04:03/jail.patch
  • FreeBSD IPv6 Socket Options Handling Local Memory Disclosure Vulnerability
    ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-04:06/ipv6.patch
  • BSD Out Of Sequence Packets Remote Denial Of Service Vulnerability
    ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-04:04/tcp52.patch

Ces patchs ne sont pas indispensables, mais il est quand même très important d’avoir le système le plus secure possible. Une fois ces patchs appliqués de la façon suivante

 

cd /usr/src/sys && zcat patch.gz | patch -p1

 

Nous avons recompilé le noyau sans toucher d’autres options :

 

cd /usr/src/sys/i386/conf
config GENERIC (GENERIC est la configuration du noyau par défaut)
cd ../compile/GENERIC
make depend
make
make install
reboot

 

Le système est alors à jour, et exempt de tout bug connu. Ensuite nous avons apporté quelques modifications sur la configuration. Arrêt du serveur SSH qui offrait un point d’entrer sur notre système. Désormais seul un accès physique est possible. Dans la réalité, ce n'est peut être pas tout le temps possible, mais nous avons opté pour cette solution ici. Ensuite nous avons modifié quelques paramètres au niveau du réseau. Si un éventuel attaquant s'intéresse a notre machine, il voudra en connaître les caractéristiques, comme par exemple la version du système d’exploitation présent. Pour brouiller les pistes et améliorer un peu notre sécurité, nous avons modifié quelques variables comme le TTL des paquets envoyés. Les modifications apportées sont les suivantes : Modification de la valeur du TTL, passage de 64 a 128

 

net.inet.ip.ttl=128

 

Modification du backhole des ports TCP empêchant de répondre par un RST lors de scans

 

net.inet.tcp.blackhole=2

 

Modification du backhole des ports UDP empêchant de répondre par un ICMP port unreachable sur les ports fermés

 

net.inet.udp.blackhole=1

 

Ces 2 modifications permettent donc de transformer notre système en trou noir. De cette façon, notre système d exploitation sera difficilement détectable par un outil de "fingerprinting" puisque nous avons laissé de fausses empreintes.

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------

II. Ies Logiciels

Snort

Snort est un IDS open source, très puissant qui permet d'écouter le réseau, de générer des logs, et de détecter d'éventuelles intrusions. En complément de ce logiciel, nous avons patches les sources avec une petite amélioration appelée "Alert Verification". Cette amélioration permet a snort de réduire le nombre de faux positif, c'est a dire de réduire le nombre de fausses alertes.
Commande pour patcher et compiler snort :

zcat patch.gz | patch -p1
./configure --démarrage=/usr/local
make
make install

 

Une fois patchées nous avons compilé les sources avec l'option --with-mysql. Cette option permet de prendre en charge l'enregistrement des logs dans une base mysql, et permet un traitement plus efficace de ceux ci.

Pour que snort puisse sauver les informations, nous avons donc installé une base de données mysql. Pourquoi mysql ? Car il s'agit d'une des meilleures bases de données en open source. MySQL est très rapide et très stable, ce qui nous permettra d’enregistrer une très grande quantité de logs sans problèmes. Nous avons choisi la version 4.0.18 qui est la dernière version stable à ce jour. Nous avons fait l’installation par défaut, puis nous avons fait quelques modifications pour améliorer la sécurité :

  • La donnée qui sert de point de connexion à la base a été bindée sur l’interface loopback et non sur l'interface réseau comme elle le fait par défaut. De cette façon, seules les connexions sur 127.0.0.1 sont autorisées. De cette façon, le port par défaut (3306) pour la connexion n'est visible que de " l'intérieur". De l’extérieur, aucune connexion à la base n'est possible. Nous avons fait cette modification dans le fichier :

/usr/local/etc/rc.d/mysql-server.sh

qui est exécuté au démarrage du système, en ajoutant l'option

--bind-address=127.0.0.1

dans la ligne de lancement de mysql.

  • Nous avons restreint la base à 2 utilisateurs seulement : root avec les permissions intégrales et snort, uniquement capable d'effectuer les commandes INSERT et SELECT dans la base "snort". Ces 2 utilisateurs ne peuvent se loguer qu’a partir de cet ordinateur (la première modification imposait déjà cette contrainte) et avec un mot de passe.

L'accès au serveur mysql est maintenant très restreint. Le dumps des tables nécessaires est dans le fichier

 

/etc/défaut/snort.sql.

 

Il permet de régénérer la base après un effacement des logs. En complément de snort, nous avons installé un outil de visualisation des logs :

  • ACID : c'est un script php permettant d'exploiter les résultats de la base de données, de faire quelques graphiques, de classifier les informations, et de faire des recherches multicritères.

L'utilisation d'un tel script nécessite l'installation d'un serveur web ainsi que le support PHP pour exécuter ACID. Nous avons installé PHP 4.3.5, avec le module GD qui permet de générer des images dynamiquement, à partir port tree de FreeBSD. Notre choix pour le serveur s'est porte sur apache. Il s agit du meilleur serveur web open source actuel, il est très stable et sécurisé, et aussi très simple a paramétrer. Nous avons fait l installation par défaut de la version 1.3.29 et ensuite modifie le fichier de configuration :

 

/usr/local/etc/apache/httpd.conf

 

Et nous avons modifie de la variable suivante :

 

BindAdress 127.0.0.1;

 

ce qui signifie que le serveur web ne sera accessible qu’en local, de la même façon que le serveur mysql installé précédemment. La consultation des pages de logs ne devrait pas poser de problèmes de sécurité puisque tout accès non local est interdit, et les serveurs sont tous bindés sur l interface loopback.

Nmap

Nous avons installé snort version 3.48 à partir de l’arbre des ports de Freebsd. Nmap est le meilleur outil qui nous permet de faire des scans de toute sorte. Il nous a servi à vérifier notre installation lors de sa configuration.

Ettercap

Ettercap est un très puissant sniffer de réseau, il permet de trouver toutes les machines up sur le réseau local, et même si celui ci est switché. On peut ainsi écouter toutes les communications entres 2 machines choisies sur le réseau et analyser tous les paquets. Il est doté de plusieurs plugins permettant de diffuser de faux paquets ou de fausses requêtes arp, d'isoler une machine particulière sur le réseau, et diverses autres possibilités. Nous l’avons installé à partir du port tree de Freebsd, dans sa version 0.6.b

Dsniff

Dsniff est un utilitaire de sniff permettant de trouver les mots de passes circulants par notre carte réseau Il est capable de détecter les mots de passes des protocoles suivants : FTP, Telnet, SMTP, HTTP, POP, poppass, NNTP, IMAP, SNMP, LDAP, Rlogin, RIP, OSPF, PPTP MS-CHAP, NFS, VRRP, YP/NIS, SOCKS, X11, CVS, IRC, AIM, ICQ, Napster, PostgreSQL, Meeting Maker, Citrix ICA, Symantec pcAnywhere, NAI Sniffer, Microsoft SMB, Oracle SQL*Net, Sybase et Microsoft SQL protocols
Nous avons installé ce logiciel dans sa version 2.3. Il peut nous servir a détecter les attaques de type brute force par exemple.

 

---------------------------------------------

divers :

Script de lancement de snort au démarrage :

 

Remarque : On a introduit un sleep de 10 secondes pour permettre a mysql d’avoir le temps de s'initialiser afin que snort ne génère pas d’erreurs.

 

 

 
#! /bin/sh
 
 
case "$1" in 
 start)
 if [ -x /usr/local/bin/force ]; then
     sleep 10
     /usr/local/bin/force -D -a mark -c /etc/snort/snort.conf -u nobody -g nogroup & echo -n ' snort'
     
     echo ""
 fi
 ;;
    stop)
    /usr/bin/killall snort > /dev/null 2>&1 && echo -n ' snort'
    echo ""
    ;;
    *)
    echo ""
    echo "Usage: `basename $0` { start | stop }"
    echo ""
    exit 64
    ;;
esac