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.
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
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.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
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é
:
/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.
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 :
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