Système de détection d'intrusion : SNORT

17 Sep. 2006
Auteur : fbe
Responsable : TrustRobot
Score ( voter ) :
Connexes : Même auteur | Même responsable | Historique
S.N.O.R.T. est un NIDS (Network Intrusion Detection System ou Système de Détection d'Intrusion Réseau en français). Comme ses initiales le suggèrent, un NIDS sert à détecter les tentatives d'intrusion, pour ce faire, il compare le trafic réseau à une base de données des attaques connues. Le cas échéant, il exécute une action prédéfinie, qui va de vous prévenir à verrouiller le réseau. S.N.O.R.T. vous permettra donc basiquement, de détecter d'éventuels intrusions, de gérer vos logs et sniffer le réseau. Nous détaillerons ici, l'installation à partir des sources, bien que de nombreuses distributions soient livrées avec un paquetage snort. Ce choix est motivé par deux choses : d'abord le fait qu'il soit impossible d'étudier toutes les variations introduites par les distributions, mais surtout pour un logiciel aussi sensible, il est préférable d'en maîtriser tous les rouages. Néanmoins, la plus part des principes expliqués ici, sont translatables vers les paquets binaires de votre distribution, moyennant quelques adaptations.

1. Pré-requis pour Snort :

2. Installation de libpcap :

Libpcap est une dépendance nécessaire à snort, qui s'installe comme suite :
$ tar -xzvf /où_est/libpcap.tar.Z $ cd libpcap-0.4/ $ ./configure --prefix=/usr $ make $ su Password # make install # mkdir /usr/include/pcap # cp *.h /usr/include/pcap/ # mkdir /usr/include/pcap/net # cp bpf/net/*.h /usr/include/pcap/net/ # make install-man

3. Installation de Snort :

L'installation de ce logiciel est des plus classiques, tapez simplement les commandes suivantes dans un terminal, en root :
# tar -xzvf /où_est/snort-1.9.0.tar.gz # cd snort-1.9.0/ # ./configure --prefix=/usr --with-libpcap-includes=/usr/include/pcap --with-libpcap-libraries=/usr/lib # make # make install # mkdir /etc/snort/ # mkdir /etc/snort/rules/ # cp etc/snort.conf /etc/snort/ # cp etc/classification.config /etc/snort/ # cp etc/reference.config /etc/snort/ # cp rules/*.rules /etc/snort/rules/
Dans la suite nous utiliserons le répertoire /var/log/snort/, il est donc indispensable qu'il existe. Si ce n'est pas le cas chez vous, créez-le par :
# mkdir /var/log/snort # mkdir /var/log/snort/alert
A ce stade snort est correctement installé, une protection supplémentaire est d'exécuter snort avec les privilèges de l'utilisateur snort, c'est à dire aucun. Commencez par vérifier que vous avez un utilisateur snort :
# cat /etc/passwd | grep snort
Si vous n'avez aucun résultat, c'est qu'il n'existe pas, il vous suffit de le créer par :
# groupadd snort # useradd -g snort -d /var/log/snort snort
Qu'il existe déjà ou pas, ajustez les droits sur /var/log/snort par :
# chown -R snort /var/log/snort # chgrp -R snort /var/log/snort

4. Utilisation de Snort :

Comme précédemment indiqué, S.N.O.R.T. rempli globalement 3 tâches, qui sont ses modes de fonctionnement : Sniffer, Packet Logger et NIDS. Les 2 premiers sont relativement triviaux, le dernier requiert plus d'attention.

4.1 Utilisation de Snort en mode Sniffer :

Il s'agit d'écouter le réseau, en tapant une ou plusieurs lignes de commandes qui indiqueront à snort le type de résultat à afficher, en voici quelques-unes :

4.2 Utilisation de Snort en mode packet logger :

Ce mode est en tout point similaire au précédent, à ceci près que les logs ne s'affiche plus à l'écran, mais s'inscrivent directement dans un fichier de log. Le répertoire naturel de log de snort étant /var/log/snort/. La seule modification par rapport à précédemment est le v, remplacé par l, concrètement :
# snort -de -l /var/log/snort
correspond à snort -vde. En visitant le répertoire /var/log/snort/ vous constaterez l'existence de plusieurs répertoires. Chacun correspondant à une adresse source. Il est possible de faire plus fin, en ne loguant qu'une seule classe d'adresses par exemple :
# snort -de -l /var/log/snort -h 192.168.0.0/24
ou en enregistrant au format binaire :
# snort -l /var/log/snort -b
Notez enfin qu'il est possible d'interfacer snort avec une base de données (mysql, postgresql, dbc, oracle).

4.3 Utilisation de Snort en nids :

Vous l'aurez compris, le véritable intérêt des nids est encore l'utilisation en mode nids. S.N.O.R.T. utilise pour cela des règles pour détecter les intrusions. Il existe aujourd'hui environ 1500 règles différentes, chacune s'adaptant à un cas particulier. Vous pouvez créer des règles pour observer une activité particulière sur votre réseau : pings, scans, connexions par backdoors, faille dans un script, tentative de prise de contrôle à distance ... Les alertes peuvent être enregistrées dans un fichier particulier ou directement dans le syslog et être rajoutées aux messages système ou encore dans une base de données... Chaque règle se rajoute dans un fichier de configuration prévu à cet effet, vous pouvez soit utiliser celles qui existent déjà, soit en créer de nouvelle. Le fichier de configuration de snort est /etc/snort/snort.conf, les fichiers .rules contenus dans /etc/snort/rules/ sont des fichiers contenant, des règles pour un usage bien particulier. Le nom du fichier est, en général explicite, ainsi, ftp.rules contient des règles spécifiques au ftp et dos.rules s'utilise pour les tentatives de DoS (Denial Of Service ou Denie de Service en français). Commençons par mettre à jour le fichier /etc/snort/snort.conf : Si vous souhaitez utiliser syslog (/var/log/messages) , décommentez (enlevez le # devant) la ligne suivante :
output alert_syslog: LOG_AUTH LOG_ALERT 
Si vous souhaitez utiliser le répertoire /var/log/snort/, ne décommentez aucune ligne, vous fixerez cela directement au lancement avec comme option :
-l /var/log/snort
Si vous souhaitez afficher, le tout directement à l'écran, il faudra utiliser l'option verbose (-v). Ses quatre options sont :
include classification.config
include reference.config 
include $RULE_PATH/bad-traffic.rules
include $RULE_PATH/exploit.rules
include $RULE_PATH/scan.rules
include $RULE_PATH/finger.rules
include $RULE_PATH/ftp.rules
# include $RULE_PATH/telnet.rules
# include $RULE_PATH/rpc.rules
# include $RULE_PATH/rservices.rules
include $RULE_PATH/dos.rules
include $RULE_PATH/ddos.rules
include $RULE_PATH/dns.rules
include $RULE_PATH/tftp.rules
include $RULE_PATH/web-cgi.rules
# include $RULE_PATH/web-coldfusion.rules
# include $RULE_PATH/web-iis.rules
# include $RULE_PATH/web-frontpage.rules
include $RULE_PATH/web-misc.rules
include $RULE_PATH/web-client.rules
include $RULE_PATH/web-php.rules
include $RULE_PATH/sql.rules
include $RULE_PATH/x11.rules
include $RULE_PATH/icmp.rules
include $RULE_PATH/netbios.rules
include $RULE_PATH/misc.rules
include $RULE_PATH/attack-responses.rules
# include $RULE_PATH/oracle.rules
include $RULE_PATH/mysql.rules
include $RULE_PATH/snmp.rules
include $RULE_PATH/smtp.rules
include $RULE_PATH/imap.rules
include $RULE_PATH/pop3.rules
include $RULE_PATH/nntp.rules
include $RULE_PATH/other-ids.rules
include $RULE_PATH/web-attacks.rules
include $RULE_PATH/backdoor.rules
include $RULE_PATH/shellcode.rules
include $RULE_PATH/policy.rules
# include $RULE_PATH/porn.rules
include $RULE_PATH/info.rules
include $RULE_PATH/icmp-info.rules
include $RULE_PATH/virus.rules
include $RULE_PATH/chat.rules
include $RULE_PATH/multimedia.rules
include $RULE_PATH/p2p.rules
include $RULE_PATH/experimental.rules
include $RULE_PATH/local.rules 
Vous avez des mises à jour régulières ici # snort -u snort -g snort -A full -d -D -i eth0 -l /var/log/snort -c /etc/snort/snort.conf Cette ligne de commande indique que snort est lancé avec les privilèges de l'utilisateur "snort" appartenant au groupe "snort", type d'alerte : full. Snort sera lancé en tant que daemon (-D), il regardera l'interface réseau eth0. Selon votre configuration, vous indiquerez plutôt : ppp0, eth1... Snort utilisera le répertoire /var/log/snort/ et le fichier de configuration /etc/snort/snort.conf. Pour que snort, soit lancé à chaque démarrage, il vous suffit de rajouter la ligne précédente à la fin de votre /etc/init.d/rc.local.

5. Conclusion :

Ce document ne constitue qu'une entrée en matière à S.N.O.R.T. consultez la documentation officielle pour plus de détails. Je laisse quelques liens utiles : Le site officiel de snort SnarfSnort une interface graphique pour snort ACID une autre interface graphique pour snort