Vous êtes sur la page 1sur 6

Systme IPS bas sur Snort

Prattique
Micha Piotrowski

Degr de difficult

Pour se protger contre les attaques sur les systmes informatiques, le plus souvent on utilise les pare-feux ; et pour surveiller les attaques les systmes de dtection d'intrusions. Pourtant, la dtection des intrus ne suffit point. Cela ne servira rien de dtecter une attaque, si l'on n'est pas capable de la faire chouer. La solution est de construire un systme de prvention des attaques cet article explique comment construire un tel systme et comment le maintenir.

es outils les plus populaires servant protger les rseaux informatiques contre les attaques des cyberpirates sont les pare-feux et les systmes de dtection d'intrusions (IDS, en anglais Intrusion Detection Systems). Tandis que le fonctionnement des pare-feux consiste contrler les paquets arrivants vers le rseau, les systmes de dtection d'intrusions analysent le contenu de ces paquets et au moment o une irrgularit ou une information caractristique pour l'attaque est dtecte, ils donnent l'alerte. Pourtant, le niveau de scurit atteint par le biais de cette technique n'est pas satisfaisant. Tout d'abord, le pare-feu doit laisser passer une partie du trafic si non, la connexion d'un rseau protg avec le reste du monde n'a aucun sens, et l'attaque peut avoir lieu justement sur le service qui est accessible. videmment, le systme IDS est capable de dtecter une attaque quun pare-feu a laiss pass par, mais tout en tant un simple observateur, il n'est pas capable de la faire chouer, donc sa prsence n'aura qu'une valeur informative. Bien sr, il est possible de coupler le systme IDS avec un pare-feu pour bloquer en temps rel les tentatives de pntration ou le configurer de

faon ce qu'il interrompe les connexions suspectes. Hlas, une telle solution a beaucoup de dfauts. Premirement, beaucoup d'attaques consistent envoyer seulement un ou quelques paquets. Dans la plupart des cas, les attaques de type DoS sur un programme ou un systme plantant aprs la rception des donnes spcialement prpares cet effet, ou les attaques de dbordement de tampon contraignant le systme attaqu tablir une connexion de retour avec l'ordinateur de l'intrus russiront, mme si le systme IDS envoie au pare-feu l'information

Cet article explique...


ce-quest un systme de prvention des attaques, comment installer, configurer et maintenir un systme IPS bas sur le programme Snort.

Ce qu'il faut savoir...


notions de base de l'administration du systme Linux, notions de base du fonctionnement du rseau TCP/IP.

48

hakin9 N 1/2006

www.hakin9.org

Construisez un systme de prvention d'intrusions

Netfilter

Le mcanisme netfilter est un soussystme du noyau de Linux permettant le filtrage, la modification des paquets et la traduction des adresses rseau (en anglais Network Address Translation NAT). Il est apparu dans les noyaux de la srie 2.4 et est toujours dvelopp dans la srie 2.6. Pour configurer les rgles de filtrage ou de traduction, on utilise le programme fonctionnant dans l'espace utilisateur appel iptables. Mais il faut savoir que ce n'est pas un seul moyen de contrler les rgles de filtrage du trafic rseau dans le noyau du systme.

Figure 1. La place du systme IPS dans le rseau essentielle. Ce qui est important, c'est que cela soit une installation assez simple, dpourvue de Xwindow, d'applications multimdias et d'autres outils de ce type. Le cur de notre IPS sera le programme open source Snort IDS en version 2.4.0. C'est un programme trs avanc, utilis dans quelques systmes IDS/IPS commerciaux. Quant vous, servirez-vous de la version 2.4.0 parce qu'elle est intgre au projet snort_inline permettant de tlcharger les paquets non via la librairie libpcap, comme cela a lieu dans la configuration standard de Snort, mais via le mcanisme netfilter et le programme iptables. De plus, vous aurez besoin de quelques bibliothques et outils. Avant tout, ce sont les bibliothques libnet 1.0.x, LIBIPQ et le programme bridge-utils. La bibliothque LIBIPQ appartient au paquet iptables et vous la trouverez dans les modules supplmentaires de dveloppement ou installerez partir des sources, en installant iptables par la commande make install-devel. Utiliserez aussi le programme Oinkmaster qui permettra la mise jour automatique de la base de signatures. L'ordinateur sur lequel vous lancerez l'IPS, est muni de trois cartes rseaux. Seulement une d'elles aura l'adresse IP affecte et elle servira la gestion de la machine. Deux autres seront configures uniquement jusqu' la couche 2 du modle OSI et les paquets envoys sur le rseau seront transfrs entre elles. Ainsi, votre IPS constituera un pont, transparent pour les autres priphriques et ordinateurs. Le schma d'un rseau aprs la connexion de l'IPS de ce type est prsent sur la Figure 1. Dans cet article, on ne construit pas tout le rseau prsent on se concentrera la cration du priphrique IPS.

sur le blocage de l'adresse IP donne. Deuximement, l'intrus peut exploiter cette proprit de l'IDS pour bloquer un groupe d'adresses donn en simulant les attaques provenant de celles-ci. La solution trs efficace de ces problmes sont les systmes de prvention d'intrusions IPS (en anglais Intrusion Prevention System) qui intgrent les pare-feux et les systmes de dtection d'intrusion (IDS). Les systmes IPS sont implants dans le rseau de la mme faon que les pare-feux sur le chemin des paquets, de faon ce que toutes les donnes envoyes sur le rseau passent par celui. L'IPS analyse ces donnes du point de vue des proprits caractristiques aux types des attaques connus et en fonction de leur classification, il les laissent passer ou les bloquent. Il existe beaucoup de solutions IPS sur le march. Leurs prix sont diffrents : de quelques jusqu' quelques milles dollars. Essayez de construire votre propre systme IPS bas sur les programmes disponibles gnralement sur Internet.

Construction d'un pont

Le pont rseau (en anglais bridge) est un quipement qui fonctionne dans la couche de liaison des donnes du modle OSI et sert relier diffrents segments du rseau informatique. Il existe deux principaux avantages d'utilisation du pont comme IPS ou pare-feu : Configuration simple elle est due au fait que le pont ne possde pas d'adresses IP et peut tre plac l'intrieur du rseau sans changement de l'adressage ou du routage sur d'autres priphriques. La connection de l'IPS de ce type est similaire la connexion d'un commutateur ordinaire. Scurit consiste ce que le priphrique soit transparent, alors pratiquement indtectable par diffrents types de scanneurs. Il n'a pas d'adresse IP, alors il est impossible de s'y connecter et de l'attaquer. Il est vrai qu'on peut exploiter la faille dans les programmes IPS qui, par exemple, plante au moment du traitement du paquet spciale-

Outils

Dans cet article le systme sera bas sur Linux avec le noyau en version 2.6.12.6. C'est important car les noyaux de la srie 2.6 supportent la cration des ponts rseau, tandis que les noyaux 2.4 exigent pour cela des correctifs appropris. La distribution de Linux n'est pas ici

www.hakin9.org

hakin9 N 1/2006

49

Pratique

ment conu cet effet, mais heureusement, les problmes de ce type n'arrivent pas trop souvent. Commencez la transformation de votre ordinateur en pont par configurer deux interfaces rseau de l'IPS de faon ce qu'elles changent les paquets entre elles. Pour ce faire, vous devez compiler le noyau avec les options prsentes dans le Listing 1. Aprs le redmarrage du systme, ajoutez une nouvelle interface virtuelle br0 et lui affectez les interfaces relles eth0 et eth1, en tapant les commandes suivantes :
# ifconfig eth0 0.0.0.0 up # ifconfig eth1 0.0.0.0 up # brctl addbr br0 # brctl addif br0 eth0 # brctl addif br0 eth1 # ifconfig br0 0.0.0.0 up

Types de systmes IPS

Le priphrique prsent est un systme rseau de dtection des intrusions (NIPS, en anglais Network Intrusion Prevention System). Actuellement, c'est le type de systmes IPS le plus populaire. D'autres systmes de ce type sont : Commutateurs de septime couche (de l'anglais Layer Seven Switches) ce sont les priphriques trs similaires l'IPS prsent. En gnral, ils servent rpartir les charges sur plusieurs dispositifs, mais sont aussi capables d'arrter les paquets slectionns partir d'une base de rgles. IPS d'application (HIPS, en anglais Host Intrusion Prevention System) ce sont des solutions logicielles, installes localement sur chaque station protge qui sont intgres au systme d'exploitation et surveillent le fonctionnement des autres applications. Ils permettent de protger le systme contre les dangers les plus connus, comme les dbordement de tampon, les virus, les chevaux de Troie ou les logiciels espions.

au programme de travailler en mode inline. Ainsi, Snort pourra tre situ sur le chemin des paquets. La configuration, la compilation et l'installation du programme sont effectues au moyen des commandes suivantes :
$ ./configure --enable-inline $ make # make install

Configurez galement l'interface eth2, servant grer le priphrique :


# ifconfig eth2 10.0.0.1 \ netmask 255.255.255.0 up

Ds ce moment, tous les paquets vus par l'interface eth0 seront envoys vers les segments du rseau de l'autre ct de l'IPS travers l'interface eth1 et vice-versa. La carte eth2 a une adresse IP affecte et elle permet de se loguer distance sur le priphrique.

Ensuite, il faut crer le rpertoire /etc/snort et y metter tous les fichiers de configuration ncessaires :
# cp classification.config \ gen-msg.map \ generators \ reference.config \ sid sid-msg.map \ snort.conf \ threshold.conf \ unicode.map \ /etc/snort

Avant tout, vous ne disposez pas encore de signatures d'attaques, commentez donc toutes les lignes ajoutant les fichiers de signatures qui se trouvent la fin du fichier et qui ont la forme include $RULE _ PATH/ *.rules (le dbut de la ligne est prcd du caractre #). Changez aussi la valeur de la variable dfinissant le rpertoire comprenant ces fichiers de var RULE _ PATH ../rules en var RULE _ PATH /etc/snort/rules.

Vrification des signatures

Installation de Snort

L'installation de Snort est une installation standard. Pourtant, pendant la configuration du paquet, il faut ajouter l'option --enable-inline, qui permettra

la fin, il faut modifier le fichier de configuration principal snort.conf.

Listing 1. La configuration du noyau du systme


Device Drivers Networking support Networking options <*> 802.1d Ethernet Bridging Network packet filtering (replaces ipchains) <*> Bridged IP/ARP packets filtering IP: Netfilter Configuration <*> Userspace queueing via NETLINK <*> IP tables support (required for filtering/masq/NAT) Bridge: Netfilter Configuration <*> Ethernet Bridge tables (ebtables) support

Les rgles d'attaques que l'on peut tlcharger partir du site de Snort sont divises en trois groupes : les signatures payables (subscription rules), les signatures ncessitant l'enregistrement (registration rules) et les signatures universellement disponibles (unregistered rules). Vu que les rgles universellement disponibles ne sont mises jour qu'au moment de l'dition de la version successive de Snort et l'accs aux rgles payables doit tre rgulirement acquitt il est prfrable d'utiliser les rgles disponibles aprs l'enregistrement. Mais avant de tlcharger et d'installer les rgles, testez tout ce que vous avez russi construire jusqu'alors. Vous crerez quelques exemples de signature qui vous permettront de connatre les possibilits de votre IPS. Pour cela, vous exploiterez trois nouvelles types de rgles disponibles uniquement en version inline dfinissant les

50

hakin9 N 1/2006

www.hakin9.org

Construisez un systme de prvention d'intrusions

actions entreprises par Snort au moment du lancement de la signature. Ce sont : drop Snort enregistrera le fait de l'apparition du paquet qui correspond la signature et enverra l'iptables le signal de refus. sdrop le paquet sera refus, mais l'information sur ce fait ne sera pas enregistre. reject le paquet sera refus et enregistr et la connexion interrompue (RST en cas du protocole TCP) ou le paquet ICMP Port Unreachable sera envoy (en cas du protocole UDP).

Listing 2. La raction de Snort la premire signature


[**] [1:0:0] Port 22 Connection Initiated [**] [Classification: Attempted User Privilege Gain] [Priority: 1] 09/19-20:19:07.436667 192.168.0.2:1049 -> 193.219.28.2:22 TCP TTL:128 TOS:0x0 ID:702 IpLen:20 DgmLen:48 DF ******S* Seq: 0x29821EB9 Ack: 0x0 Win: 0xFAF0 TcpLen: 28 TCP Options (4) => MSS: 1460 NOP NOP SackOK

Listing 3. La raction de Snort la deuxime signature


[**] [1:0:0] ICMP Echo Request [**] [Classification: Attempted User Privilege Gain] [Priority: 1] 09/19-20:12:57.194560 192.168.0.2 -> 212.76.32.1 ICMP TTL:128 TOS:0x0 ID:420 IpLen:20 DgmLen:60 Type:8 Code:0 ID:512 Seq:256 ECHO

Pour que les rgles de type reject soient capables de rinitialiser les connexions, il faut ajouter au fichier de configuration l'option config layer2resets, grce laquelle l'IPS enverra les paquets de rinitialisation partir des interfaces ne possdant pas d'adresse IP. Par dfaut, l'adresse MAC source dans ces paquets est l'adresse de la carte rseau d'entre, mais vous pouvez la modifier au moyen de l'option config layer2resets: 00:01:02:03:04:05. La premire signature se prsente ainsi : drop tcp any any -> any
22 (classtype:attempted-user; msg: "Port 22 Connection Initiated";). C'est une rgle trs simple qui reconnat, bloque et enregistre tous les paquets TCP passant par l'IPS qui sont destins au port 22. En rsultat, l'IPS empchera l'tablissement des connexions aux serveurs SSH. Le Listing 2 prsente la notation dans le journal d'vnements qui sera cre par Snort aprs avoir intercept les paquets correspondant la signature. Comme vous pouvez voir, c'est le paquet SYN qui commence le processus d'tablissement de la connexion du protocole TCP. La seconde rgle : alert icmp any any <> any any (classtype: Echo itype:8;) attempted-user; Request"; msg:"ICMP

Listing 4. La raction de Snort la troisime signature


[**] [1:0:0] DNS Request [**] [Classification: Attempted User Privilege Gain] [Priority: 1] 09/19-20:21:12.989775 192.168.0.2:1041 -> 212.76.39.45:53 UDP TTL:128 TOS:0x0 ID:818 IpLen:20 DgmLen:59 Len: 31

similaire celle prsente dans le Listing 3. La dernire signature de test est la plus intressante : alert udp any
any <> any 53 (classtype:attempteduser;

reconnatra et enregistrera tous les paquets ICMP de type Echo Request. Les fichiers journaux de Snort contiendront la notation

icode:0;

Cette rgle dtectera et enregistrera tous les paquets UDP destination du port 53, c'est--dire du serveur DNS qui contiennent la chane de caractres yahoo. Les paquets seront laisss passs par l'IPS, mais le mot yahoo sera chang en lycos. C'est le champ replace dans la signature qui en est responsable ; il dfinit en quoi sera chang le contenu du champ content. En rsultat, quand une requte concernera l'adresse www.yahoo.com, le serveur DNS rpondra par l'adresse IP du serveur www.lycos.com, et les journaux contiendront l'information prsente dans le Listing 4. Cette proprit de Snort inline est fort utile dans la protection des systmes honeypot, quand vous voulez que l'intrus y pntre, mais ne soit pas capables d'effectuer une attaque efficace contre un ordinateur du rseau. Il suffit de modifier dans le systme IPS la
"yahoo";

msg:"DNS

replace:"lycos";).

Request";

content:

signature reconnaissant le shellcode de faon affiche dans le Listing 5 et toutes les attaques qui lui ressemblent ne russiront pas. Toutes les rgles ci-dessus doivent tre places dans le rpertoire /etc/snort/rules dans le fichier test.rules, et la fin du fichier /etc/snort/snort.conf, ajoutez la ligne include $RULE _ PATH/test.rules. Configurez l'iptables de faon ce que les paquets passent travers Snort et lancez ce dernier :
# iptables -P FORWARD DROP # iptables -A FORWARD -j QUEUE # snort -Q \ -c /etc/snort/snort.conf \ -l /var/log/snort -v

La dernire commande lance Snort en mode inline (option -Q). La configuration est tlcharge partir du fichier /etc/snort/snort.conf (-c), et les journaux sont sauvegards dans le rpertoire /var/log/snort (-l). Pendant les tests, servez-vous aussi de l'option -v, grce laquelle l'IPS fonctionne en mode information et affiche beaucoup de messages qui permettent de vous faire une ide prcise des erreurs commises.

www.hakin9.org

hakin9 N 1/2006

51

Pratique

Listing 5. Une simple modification de la signature corrompra le shellcode et empchera l'attaque efficace Avant la modification :
alert ip $EXTERNAL_NET $SHELLCODE_PORTS -> $HOME_NET any (msg:"SHELLCODE Linux shellcode"; content:"|90 90 90 E8 C0 FF FF FF|/bin/sh"; reference:arachnids,343; classtype:shellcode-detect; sid:652; rev:9;)

Configuration de l'iptables

Aprs la modification :
alert ip $EXTERNAL_NET $SHELLCODE_PORTS -> $HOME_NET any (msg:"SHELLCODE Linux shellcode"; content:"|90 90 90 E8 C0 FF FF FF|/bin/sh"; replace:"|90 90 90 E8 C0 FF FF FF|/ben/sh"; reference:arachnids,343; classtype:shellcode-detect; sid:652; rev:9;)

Pour diriger les donnes envoyes via le rseau vers un programme dans l'espace utilisateur, vous avez utilis la commande iptables -A FORWARD -j QUEUE qui embrasse le flux de donnes entier. En rsultat, tous les paquets passant par l'IPS seront analyss. Mais vous pouvez observer seulement les connexions choisies. Par exemple, si vous voulez que Snort n'effectue la recherche que dans les paquets envoys vers les serveurs Web, vous pouvez utiliser la commande iptables
-A FORWARD -p tcp --dport 80 -j QUEUE.

L'option -v sera remplace par -D, ainsi, Snort fonctionnera en tche de fond comme dmon.

# snort -Q -D \ -c /etc/snort/snort.conf \ -l /var/log/snort

Installation des rgles officielles

Il est temps de munir votre systme de prvention d'attaques de signatures officielles des attaques. Vu que vous allez vous servir des signatures disponibles pour les utilisateurs enregistrs, vous devez crer un compte utilisateur sur le site de Snort. Une fois ce compte cr, vous tlchargerez les signatures rcentes, les dplacerez vers le rpertoire /etc/snort et les dcompacterez. L'action par dfaut entreprise par Snort pour toutes les rgles consiste enregistrer l'attaque dtecte (directive alert). tant donn que vous avez l'intention de bloquer ces attaques, vous devez modifier toutes les rgles, en changeant l'action alert en drop. Pour ce faire, tapez la commande :
$ for f in `ls *.rules` ;\ do sed s/^alert/drop/g \ $f > ${f}.new ; \ mv ${f}.new $f ; \ done

Mais il ne faut pas oublier que l'installation d'un nouveau systme IPS dans l'environnement rseau et l'activation du blocage pour toutes les rgles n'est pas recommande. Tous les priphriques IDS/IPS doivent tre ajusts un rseau concret pour liminer de fausses alarmes qui apparaissent toujours au dbut de leur fonctionnement. Si vous forcez le systme bloquer tout ce qui lui parat suspect sans lui apprendre la spcificit de votre rseau, il se peut qu'une partie des services ne fonctionnent pas ou bien manifestent des perturbations car l'IPS ne laissera passer que certains paquets. Il est donc prfrable de vrifier comment les procdures ragissent au trafic typique de votre rseau en enregistrant les attaques dtectes et exclure ces rgles qui suscitent de fausses alarmes. C'est ce moment qu'on peut permettre au priphrique de bloquer les attaques.

essayez donc de les automatiser l'aide de l'outil Oinkmaster version 1.2. Pour cela, outre le programme en tant que tel, vous aurez besoin de ce qu'on appelle OinkCode qui vous permettra d'accder aux rgles destines aux utilisateurs enregistrs de Snort. Vous pouvez gnrer le code aprs vous tre logus sur votre compte sur le site de Snort. Oinkmaster est un script en Perl, donc son installation est assez simple :
$ tar zxvf oinkmaster-1.2.tar.gz $ cd oinkmaster-1.2 # cp oinkmaster.pl /usr/local/bin/ # cp oinkmaster.conf /etc/

La configuration qui consiste diter le fichier oinkmaster.conf ne doit pas poser de problme. Tout d'abord, il faut dcider quelles signatures l'on veut tlcharger. Vu que vous tenez aux rgles les plus rcentes, vous modifierez donc la ligne # url = http://www.snort.org/
pub-bin/oinkmaster.cgi/<oinkcode>/ snortrules-snapshot-CURRENT.tar.gz

Mises jour automatiques

Il faut aussi corriger la partie finale du fichier snort.conf de faon ce que les signatures soient charges lors du dmarrage du programme (on a comment toutes les lignes activant les fichiers de signature). la fin, vous lancez Snort :

Chaque systme IDS/IPS, mme s'il utilise les rgles rcentes, devient trs vite inactuel. De nouveaux dangers apparaissent aussi rapidement que les systmes typiques pour rester efficaces doivent tre rgulirement mis jour. Les mises jour manuelles sont assez fastidieuses,

de faon ter le caractre # du dbut de la ligne, et au lieu de <oinkcode>, saisissez le code gnr par vous l'aide du script du site de Snort. Si vous laissez la configuration de l'Oinkmaster comme a, de nouvelles signatures auront une forme standard, c'est--dire, elles informeront sur les attaques dtec-

52

hakin9 N 1/2006

www.hakin9.org

Construisez un systme de prvention d'intrusions

propos de l'auteur

la signature>).

Micha Piotrowski, titulaire de la matrise d'informatique, a plusieurs d'annes d'exprience dans l'administration des rseaux et des systmes. Pendant plus de trois annes, il travaillait comme inspecteur de scurit dans une institution supportant l'autorit de certification suprieure dans l'infrastructure polonaise de PKI. Actuellement, il est spcialiste en scurit tlinformatique dans l'une des plus grandes institutions financires en Pologne. Dans ses moments libres, il s'occupe de la programmation et de la cryptographie.

C'est trs utile quand votre IPS est bien ajust et vous ne voulez pas que la mise jour des signatures compromette tout, par exemple active les rgles que vous avez dcid dsactiver. Le programme est dmarr par la commande :
# oinkmaster.pl -o /etc/snort/rules/

Sur Internet
http://www.snort.org le site du projet Snort, http://bridge.sourceforge.net le site du jeu d'outils bridge-utils, http://www.netfilter.org le site du projet netfilter et du programme iptables, http://www.packetfactory.net/libnet/ le site de la bibliothque libnet, http://oinkmaster.sourceforge.net/ le site du programme Oinkmaster.

tes. Quant vous, vous voulez que les attaques soient bloques, vous devez donc ajouter au fichier oinkmaster.conf une notation grce laquelle toutes les rgles tlcharges seront modifies par le chanP U

gement de l'action standard alert en drop : modifysid * "^alert" | "drop" . De la mme manire, vous pouvez dterminer dans le programme quelles rgles seront dsactives par dfaut (directive disablesid <n de B L I C I

o le paramtre -o dfinit le rpertoire avec de nouvelles rgles. Le paramtre -b est aussi trs utile car il indique le rpertoire dans lequel les fichiers de signatures prcdents seront dplacs. Pour que tout fonctionne correctement, aprs chaque mise jour des rgles, Snort doit tre recharg. Alors, la dernire chose faire est de crer un simple script qui automatisera tout le processus et l'ajouter /etc/crontab ou un fichier d'un autre gestionnaire de tches. l T

www.hakin9.org

hakin9 N 1/2006

53

Vous aimerez peut-être aussi