Upload
vodang
View
217
Download
2
Embed Size (px)
Citation preview
1
Snort
Rapport de stage
Eric Farman Cursus AFPA TSRIT 2011 – 2012 Lieu : Hôtel-de-Ville de Pertuis du 30/01/2012 au 16/02/2012
Responsables En entreprise : Laurent Garcia Afpa : Roland Martinet, Bernard Bienaimé, René Zinaeve
2
Remerciements Je tiens à remercier M. Roger Pellenc, Maire de pertuis qui a accepté ma demande de stage. Je
remercie pour leur aide Laurent Garcia (responsable informatique le la Mairie de Pertuis), et Cédric
Meysson (du service informatique) qui m’a plus particulièrement épaulé pendant ce stage.
Je remercie également l’Afpa qui a financé ce stage.
3
Sommaire Remerciements ....................................................................................................................................... 2
A propos de Snort .................................................................................................................................... 5
Que permet-il de faire exactement ? ...................................................................................................... 5
Périmètres du stage ................................................................................................................................ 5
Présentation de la Ville............................................................................................................................ 6
Présentation du réseau de la Ville ........................................................................................................... 6
Serveurs et interconnexion globale ................................................................................................. 7
Système de virtualisation ................................................................................................................ 7
Topologie communale ..................................................................................................................... 9
Architecture dans l’hôtel de ville................................................................................................... 10
Topologie de Snort ................................................................................................................................ 11
Modes d’utilisation de Snort ................................................................................................................. 12
Mode sniffer .................................................................................................................................. 12
Mode Packet logger ....................................................................................................................... 12
Mode NIDS (Network Intrusion Detection System) ...................................................................... 12
Mode IPS (IPS= Intrusion Prevention System) ou Snort inline ...................................................... 12
Installation Ubuntu et composants complémentaires .......................................................................... 12
Installation des fonctionnalités nécessaires ...................................................................................... 12
Mettre à jour la version d’Ubuntu .................................................................................................... 12
Composants pour Snort NIDS ................................................................................................................ 13
JpGraph.............................................................................................................................................. 13
Data acquisition API .......................................................................................................................... 13
Libnet ................................................................................................................................................. 13
Installation de Snort NIDS ..................................................................................................................... 14
Création de la base de données ........................................................................................................ 14
Snort rules ......................................................................................................................................... 14
Barnyard2 .......................................................................................................................................... 14
Interfaces réseau ................................................................................................................................... 15
Les règles ............................................................................................................................................... 16
Mise à jour des règles ............................................................................................................................ 18
Oinkmaster .................................................................................................................................... 18
1. Mise à jour du « ruleset » proposé par Snort : .......................................................................... 18
2. Mise à jour du « ruleset » proposé par Emerging : ................................................................... 19
3. Mise à jour du « ruleset » proposé par Bleeding Snort : ........................................................... 19
4
On peut à présent tester Snort en NIDS ............................................................................................ 20
Monitoring ............................................................................................................................................. 20
Acid (Analysis Console for Intrusion Databases) ............................................................................... 20
Snort report ....................................................................................................................................... 22
Analyse de l’interface ........................................................................................................................ 24
Attaques ............................................................................................................................................ 26
Quelques mots sur les techniques anti-Snort ................................................................................... 27
a. Attaque par déni de service ....................................................................................................... 27
b. Attaque par insertion ................................................................................................................ 27
c. Attaque par évasion ................................................................................................................... 27
Snort inline ............................................................................................................................................ 28
Les pré-requis : .................................................................................................................................. 28
Une installation d’Ubuntu mise à jour .......................................................................................... 28
Iptables .......................................................................................................................................... 28
Libnet ............................................................................................................................................. 28
Prce ................................................................................................................................................ 29
Libpcap .......................................................................................................................................... 29
Libdnet ........................................................................................................................................... 29
Installation de Snort inline ................................................................................................................ 29
Paramétrage ...................................................................................................................................... 30
Création des répertoires ............................................................................................................... 30
Fichiers de configuration ............................................................................................................... 30
Règles ............................................................................................................................................ 30
Paramétrage du fichier de configuration principal ....................................................................... 30
Activation du mode d'interception ................................................................................................... 31
Activation de ip_queue ................................................................................................................. 31
Paramétrage de iptables ................................................................................................................... 31
Oinkmaster sur Snort inline ............................................................................................................... 31
Test de Snort inline ................................................................................................................................ 32
Mise en œuvre à prévoir ............................................................................................................... 33
Conclusion ......................................................................................................................................... 34
Lexique .............................................................................................................................................. 35
Annexes ................................................................................................................................................. 36
Annexe 1. ....................................................................................................................................... 36
5
A propos de Snort En anglais, Snort signifie «renifler ». Snort est un système de détection
d'intrusion libre (ou NIDS) publié sous licence GNU GPL (Licence définissant le
mode d’utilisation et de distribution des logiciels libres). À l'origine écrit par Martin Roesch, il
appartient actuellement à Sourcefire. Des versions commerciales intégrant du matériel et des
services de supports sont vendues par Sourcefire. Snort est un des NIDS les plus performants. Il est
soutenu par une importante communauté qui contribue à son succès.
Que permet-il de faire exactement ? Snort capture des paquets sur un point d’un réseau IP, analyse le flux obtenu en temps réel, et compare le trafic réseau à une base de données d’attaques connues. Les attaques connues sont répertoriées dans des librairies de règles mises à jour par plusieurs communautés très actives.
Principe de l’analyse de Snort
Snort peut également être utilisé avec d'autres modules compatibles (tels que des interfaces
graphiques, des actualisateurs de librairies d’attaques indépendants, etc.)
Snort est compatible avec la plus part des OS. Windows, Mac, Linux Ubuntu, CentOS, OpenSuSE …
Périmètres du stage Pendant mon stage, je dois installer Snort, le paramétrer et le tester. Je dispose d’un PC avec le
logiciel de vitalisation VirtualBox. Je dois réaliser mon travail sur Linux Ubuntu.
En préambule : pour des raisons de sécurité évidente, je noterai dans ce rapport les adresses IP du
réseau de la Ville de pertuis comme xxx.xxx.xxx.xxx/xx
Analyse Capture Alerte
Signatures
6
Présentation de la Ville
J’effectue mon stage à la Ville de Pertuis. Deux mots de présentation :
Pertuis est une commune du sud Vaucluse, sur la Durance qui sert de limite avec les Bouches-du
Rhône. Une ville en développement qui compte près de 20 000 habitants. Son Maire est Roger
Pellenc dans son mandat actuel (2008-2014).
Présentation du réseau de la Ville Un petit descriptif sur l’infrastructure réseau de la ville. C’est une topologie dite en étoile étendue. Il
comprend à peu près 200 postes. Un réseau dont le cœur est en gigabit desservant les éléments du
réseau en FastEthernet.
Cinq plages d’adresses IP sont réservées pour :
- équipement réseau (statique)
- Serveurs (statique)
- Utilisateurs DHCP
- Directeurs DHCP
- Service informatique (statique)
Deux serveurs NAS (Network Attached Storage) desservent les équipements de la commune.
Un à l’hôtel de ville et l’autre (en cours de déménagement) au Centre de Gestion Urbain
7
Serveurs et interconnexion globale
Figure 1
Deux Serveurs de fichiers sur des sites distants (un à la Police municipale et l’autre au Centre
technique municipal). Ils garantissent une bande passante optimale. Ils sont également des
répliquats Active Directory, pour prévenir des coupures de liaison.
Un service applicatif pour le service éducation (en bas au centre sur la figure 1).
Serveur ESXI 4.1 hébergeant deux serveurs virtuels pour la sauvegarde et la supervision. La
sauvegarde effectuée par Veeam Backup (sauvegarde des machines virtuelles de la baie.)
Système de virtualisation
- Baie SAN Dell équallogic (Stockage des serveurs)
- 2 serveurs sous VMware
- 2 sous Hyper V (virtualisation version Windows)
8
Figure 2
Sous Hyper V :
- serveurs Citrix (Déport applicatif)
Sous VMware :
l’Active Directory, le serveur DHCP, le serveur DNS, le serveur de messagerie, le serveur de bases de
données, le serveur WSUS (serveur mises à jour), les serveurs applicatifs, les serveurs de fichiers.
9
Topologie communale
Figure 3
A l’hôtel de ville, quatre antennes wifi servent quatre sites distants, et une fibre optique reliant
l'annexe et le "donjon" (tour ancienne et point culminant au centre de Pertuis) sur lequel quatre
antennes servent quatre autres sites distants.
Les antennes sont des Alvarion (wimax) avec un cryptage de type AES 256 bits.
10
Architecture dans l’hôtel de ville
Figure 4
Un routeur SFR relie le réseau à l’internet.
Un Pare feu Fortigate (en fait, ils sont deux en cluster par sécurité),
Le Pare feu fait routeur vers la DMZ et le réseau mairie,
Un routeur en VPN relie le service Jeunesse.
Ma situation
sur le réseau
11
Topologie de Snort Où positionner Snort ? Une vraie guerre de religion !
Exemple de réseau
Position 1 : Sur cette position, Snort va pouvoir détecter l'ensemble des attaques frontales,
provenant de l'extérieur, en amont du firewall. Ainsi, beaucoup d'alertes seront remontées ce qui
rendra les logs difficilement consultables.
Position 2: Si Snort est placé sur la DMZ, il détectera les attaques qui n'ont pas été filtrées par le
firewall et qui relèvent d'un certain niveau de compétence. Les logs seront ici plus clairs à consulter
puisque les attaques bénignes ne seront pas recensées.
Position 3 : Snort peut ici rendre compte des attaques internes, provenant du réseau local de
l'entreprise. Il peut être judicieux d'en placer un à cet endroit étant donné le fait que 80% des
attaques proviennent de l'intérieur. De plus, si des trojans ont contaminé le parc informatique
(navigation peu méfiante sur internet) ils pourront être ici facilement identifiés pour être ensuite
éradiqués.
Ce dernier positionnement est celui que j’ai testé pendant mon stage. Pourquoi ? Le temps du stage
n’étant pas infini, j’ai choisi de m’intéresser à la détection des intrusions qui ont réussi à entrer dans
l’enceinte du réseau. Le web regorge d’activités malveillantes qui ne nous concernent pas forcément.
Donc la position 3 me parait de loin la plus pertinente. De plus les failles les plus répandues
proviennent généralement de l’intérieur de l’entreprise, et non de l’extérieur.
Dans l’idéal, il faudrait faire le mirroring du flux passant par un switch (manageables bien entendu) et
le soumettre à l’analyse de Snort.
12
Modes d’utilisation de Snort Il existe 4 modes d’exécutions de Snort :
Mode sniffer
C’est un snif de réseau classique. Inutile de s’y attarder, d’autres logiciels comme wireshark le font très bien, et la valeur réelle de Snort n’est pas là.
Mode Packet logger De même que le mode sniffer, sauf qu’il écrit le résultat de son observation dans un fichier log. Je ne m’y attarderai pas plus.
Mode NIDS (Network Intrusion Detection System)
Cela devient plus intéressant. Ce mode fait l’objet de mon stage. Il s’agit de l’utilisation de Snort avec analyse du trafic aux vues de règles de sécurités actualisées. Snort en NIDS a une valeur d’observation.
Mode IPS (IPS= Intrusion Prevention System) ou Snort inline
Le mode IPS n’est plus Snort a proprement parler. Il s’agit d’une autre version basée sur Snort 2.6 appelée Snort inline. Cette version permet de modifier ou de rejeter des paquets. Je décrirai rapidement sa mise en place en fin de rapport.
Installation Ubuntu et composants complémentaires Dans un premier temps, procéder à l’installation d’Ubuntu. Il sera nécessaire d’adjoindre quelques services à la configuration de base pour permettre le bon fonctionnement de Snort.
Installation des fonctionnalités nécessaires sudo apt-get install nmap
sudo apt-get install nbtscan
sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install php5-mysql
sudo apt-get install php5-gd
sudo apt-get install libpcap0.8-dev
sudo apt-get install libpcre3-dev
sudo apt-get install g++
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libpcap-ruby
sudo apt-get install mysql-server
sudo apt-get install libmysqlclient16-dev
Mettre à jour la version d’Ubuntu sudo apt-get update
sudo apt-get upgrade
13
Composants pour Snort NIDS
JpGraph Composant optionnel. Il permet de présenter des graphiques sur la page d’accueil de Snort.
Lien de téléchargement : http://hem.bredband.net/jpgraph/jpgraph-1.27.1.tar.gz
Téléchargement et installation :
sudo wget http://hem.bredband.net/jpgraph/jpgraph-1.27.1.tar.gz
sudo mkdir /var/www/jpgraph
sudo tar zxvf jpgraph-1.27.1.tar.gz
sudo cp -r jpgraph-1.27.1/src /var/www/jpgraph/
Data acquisition API
Indispensable pour les versions de Snort après la 2.9.0. Ce composant permet d’acquérir des paquets sur le réseau. Télécharger daq-0.6.2.tar.gz http://www.snort.org/downloads/1339
Installation:
sudo tar zxvf daq-0.6.2.tar.gz
cd daq-0.6.2
sudo ./configure
sudo make
sudo make install
Libnet Libnet, est une bibliothèque opensource. Elle permet de fabriquer et d'injecter facilement des
paquets sur un réseau.
Télécharger libnet-1.12
http://libnet.google.com/files/libnet-1.12.tgz
installation :
sudo tar zxvf libnet-1.12
cd libnet-1.12/
sudo make
sudo make install
sudo ln –s /usr/local/lib/libnet.1.0.1 /usr/lib/ libnet.1
14
Installation de Snort NIDS Télécharger la dernière version stable, sur http://www.snort.org/snort-downloads (j’utilise la version 2.9.2). Une fois le fichier téléchargé, ouvrir un terminal et exécuter les commandes suivantes :
sudo tar zxvf snort-2.9.2.tar.gz
cd snort-2.9.2
sudo ./configure --prefix=/usr/local/snort --enable-sourcefire
sudo make
sudo make install
sudo mkdir /var/log/snort
sudo mkdir /var/snort
sudo groupadd snort
sudo useradd -g snort snort
sudo chown snort:snort /var/log/snort
Création de la base de données L’installation de Snort nécessite la mise en place d’un serveur Mysql afin de permettre au NIDS de
stocker les alertes qu’il génère mais aussi à la console BASE ou Snort report de se connecter et
récupérer ces alertes.
echo "create database snort;" | mysql -u root -p
mysql -u root -p -D snort < ./schemas/create_mysql
Transférer les droits root de la base de donné sur l’utilisateur snort :
echo "grant create, insert, select, delete, update on snort.* to snort@localhost identified by
'mon-mdp'" | mysql -u root -p
Snort rules Afin de donner à Snort une bonne acquittée dans son observation, il faut intégrer des règles de détection, et les mises à jour de ces règles. Les règles « ruleset » officielles sont proposées par Snort à l’adresse suivante : http://www.snort.org/snort-rules/ Le principal inconvénient : ils sont payants. Il y a toute fois un « ruleset » disponible pour test lorsque l’on s’inscrit sur le site de Snort.
Barnyard2 Barnyard est une couche applicative qui exploite les événements générés par Snort. Barnyard permet de prendre en charge l’inscription des événements en base de données et libère donc des ressources à Snort qui peut davantage se concentrer sur la détection des intrusions.
15
Installation de la version courante:
sudo tar zxvf barnyard2-1.9.tar.gz
cd barnyard2-1.9
sudo ./configure --with-mysql
sudo make
sudo make install
sudo cp etc/barnyard2.conf /etc/snort
sudo mkdir /var/log/barnyard2
sudo chmod 666 /var/log/barnyard2
sudo touch /var/log/snort/barnyard2.waldo
sudo chown snort.snort /var/log/snort/barnyard2.waldo
Modifions le fichier /etc/snort/ barnyard2.conf
Remplacer :
#config hostname: snort
#config interface: eth1
#output database: log, mysql, user=root password=azerty dbname=db host=localhost
Par :
config hostname: localhost
config interface: eth1
output database: log, mysql, user=root password=azerty dbname=snort host=localhost
Interfaces réseau Afin d’utiliser Snort, il nous faut donc 2 interfaces réseau. La première reliée à la console de management, et la seconde au réseau à sniffer. Modification du fichier « interfaces »:
sudo vi /etc/network/interfaces
Et on remplace les lignes :
auto eth1
iface eth1 inet dhcp
Par :
auto eth1
iface eth1 inet static
address xxx.xxx.xxx.xxx
16
netmask xxx.xxx.xxx.xxx
network xxx.xxx.xxx.xxx
broadcast xxx.xxx.xxx.xxx
gateway xxx.xxx.xxx.xxx
On ajoute maintenant ces lignes qui permettront de démarrer l’interface avec son IP :
auto eth1
iface eth1 inet manual
ifconfig eth1 up
On enregistre et on relance :
sudo /etc/init.d/networking restart
Afin de lancer Snort automatiquement sur notre machine, on peut éditer le fichier rc.local :
sudo vi /etc/rc.local
On colle les lignes suivantes après « exit 0 » :
ifconfig eth1 up
/usr/local/snort/bin/snort -D -u snort -g snort \
-c /usr/local/snort/etc/snort.conf -i eth1
/usr/local/bin/barnyard2 -c /usr/local/snort/etc/barnyard2.conf \
-G /usr/local/snort/etc/gen-msg.map \
-S /usr/local/snort/etc/sid-msg.map \
-d /var/log/snort \
-f snort.u2 \
-w /var/log/snort/barnyard2.waldo \
-D
On enregistre et on quitte le fichier. Désormais, en redémarrant ou en utilisant la commande ci-dessous, on lance Snort :
sudo /etc/init.d/rc.local start
Les règles Une convention permet de normaliser l’écriture des règles. Une règle Snort est composée de deux
parties présentées sous le format suivant : Header (options).
action protocole adress1 port1 direction adresse2 port2 Options (msg, content ….etc)
La partie header décrit l’action, la direction et les adresses sources et destinations des échanges
réseau.
17
- Le champ « action » peut prendre plusieurs valeurs selon l’action à mener par Snort en détectant
des paquets réseau répondant au critère définie dans la règle. Ces valeurs sont les suivantes :
alert : génère une alerte et log le paquet
log : log le paquet
pass : ignore le paquet
activate : active une règle dynamique
dynamic : définie une règle dynamique
- Le champ « protocole » décrit le protocole utilisé pour la communication. Snort supporte les
protocoles IP (TCP, UDP), ICMP.
- Les champs « direction » renseignent Snort sur la direction des échanges réseau ( ->, <->, <- ).
- Les champs « adress/port » décrivent les adresses IP et les ports des machines qui échangent des
données sur le réseau.
- La partie options, elle renseigne Snort sur les caractéristiques des paquets à signaler et garantissent
une meilleure granularité pour définir et appliquer les règles mais aussi déclencher les actions
qu’elles décrivent.
- La partie options est constituée de plusieurs champs qui assurent l’analyse du contenu des paquets
réseau avec plus de finesse. Notons que la manipulation de ces champs nécessite une grande
maîtrise des protocoles réseau pour pouvoir décrire les signatures des attaques à détecter.
Pour chaque option le format est nom option : valeur1 [, valeur2,…] ci-dessous quelques options
utilisées dans la création des règles.
msg : spécifie le message qui sera affiché dans le log et dans l’alerte
reference : fait référence aux sites expliquant l’attaque détectée (bugtraq , CVE, …etc.)
classtype : définit la classe de l’attaque (troyen, shellcode …etc)
ttl : spécifie la valeur du TTL du paquet
flags : spécifie la présence d’un flag TCP dans le paquet (SYN, Fin, …etc)
..etc
Notons que ces options sont intéressantes pour décrire avec précision les attaques. Donc plus vous
maîtrisez le formalisme de description des attaques par le biais de ces règles plus vous aurez des
alertes précises et vous évitez les faux positifs (flux sain comme analysé comme étant une attaque).
18
Analyse de règle:
alert tcp $EXTERNAL_NET any -> HTTP_SERVERS 80 (msg : ‘’web attack code execution ‘’ ;
uricontent :’’/bin/sh’’ ; nocase ; classtype : ‘’ web-application-attacks ‘’ ; sid :1518 ; rev :1 ; )
action protocole adress1 port1 direction adresse2 port2 Options (msg, content ….etc)
alert tcp $EXTERNAL_NET any -> HTTP_SERVERS 80 web attack
code execution
Cette règle permet de détecter des attaques du réseau externe qui consiste à exécuter une
commande sur le serveur web.
Mise à jour des règles Snort est une coquille vide sans les librairies de définitions « règles » d’objets malveillants. Ce sont un
peu comme les définitions à mettre à jour d’un antivirus. Un script Pearl conseillé par Snort pour
cette mise à jour est Oinkmaster. A son lancement, il va télécharger le « ruleset » (paquet de règles),
indique les répertoires de décompression et de déploiement de ces règles. Oinkmaster peut donc
aller chercher les règles officielles de Snort (actualisées et performantes mais payantes) ou des règles
alternatives (par ex. Bleedingsnort, offert gratuitement par une communauté active et vitaminée.)
Oinkmaster
Installation :
sudo apt-get install oinkmaster
Création des emplacements et des droits pour les téléchargement/déploiement du ruleset : sudo mkdir /var/log/snortrules/backup
sudo mkdir /var/log/snortrules/rules
sudo chmod 777 /usr/local/snort /etc/snort.conf
1. Mise à jour du « ruleset » proposé par Snort : En s’inscrivant sur le site de Snort, on peut obtenir un Oinkcode qui permet à Oinkmaster de demander des règles de façon identifiée. Cela prend la forme dans oinkmaster.conf: url = http://www.snort.org/pub-bin/oinkmaster.cgi/*************/snortrules-snapshot-2900.tar.gz (Le Oinkcode étant représenté par les **********)
En lançant Oinkmaster par la ligne suivante, la mise à jour du ruleset s’effectue correctement :
oinkmaster.pl -o /etc/snort/rules -b /etc/snort/backup 2>&1
19
La dernière instruction ci-dessus signifie que nous lançons le script perl oinkmaster, les règles sont placées dans le dossier /etc/snort/rules et si il y a des changements dans les nouvelles règles, les règles courantes vont être sauvegardées dans le dossier /etc/snort/backup. Par défaut, certains fichiers de Snort (règles, …) sont conservés, et protégés de toute nouvelle mise à
jour. Ainsi, par exemple, snort.conf est exclu de la mise à jour, ce qui permet de conserver
notamment les paramètres du fichier de configuration. Si jamais une nouvelle version du fichier était
téléchargée, toutes les données seraient perdues, car réécrites par le nouveau. Pour éviter cela, il
faut éditer le fichier de configuration de Oinkmaster :
skipfile local.rules
2. Mise à jour du « ruleset » proposé par Emerging : Ouvrir comme ci-dessus oinkmaster.conf et ajouter le lien de téléchargement suivant : http://emergingthreats.net/rules/emerging.rules.tar.gz
Pas besoin de s’enregistrer 3. Mise à jour du « ruleset » proposé par Bleeding Snort : Ouvrir comme ci-dessus oinkmaster.conf et mettre le lien de téléchargement suivant : url = http://www.bleedingsnort.com/downloads/bleeding.rules.tar.gz Ajouter ensuite les lignes suivantes au fichier /usr/local/snort /etc/snort.conf
include $RULE_PATH/bleeding.rules
include $RULE_PATH/bleeding-attack_response.rules
include $RULE_PATH/bleeding-dos.rules
include $RULE_PATH/bleeding-drop.rules
include $RULE_PATH/bleeding-dshield.rules
include $RULE_PATH/bleeding-exploit.rules
include $RULE_PATH/bleeding-game.rules
include $RULE_PATH/bleeding-inappropriate.rules
include $RULE_PATH/bleeding-malware.rules
include $RULE_PATH/bleeding-p2p.rules
include $RULE_PATH/bleeding-scan.rules
include $RULE_PATH/bleeding-virus.rules
include $RULE_PATH/bleeding-web.rules
En lançant Oinkmaster par la ligne suivante, la mise à jour du ruleset s’effectue correctement :
sudo oinkmaster -o /usr/local/snort/rules -b /usr/local/snort/backup 2>&1
20
On peut à présent tester Snort en NIDS En entrant la commande :
sudo /usr/local/snort/bin/snort -u snort -g snort -c /usr/local/snort/etc/snort.conf -i eth1
ou sudo /etc/init.d/rc.local start
Snort s’initialise correctement
On obtient notre premier rapport (visible en Annexe 1) Mais ceci est un peu austère. Nous pouvons donc observer les rapports de Snort sur des interfaces graphiques telles que ACID ou Snort report.
Monitoring
Acid (Analysis Console for Intrusion Databases) Cette application permet de synthétiser les alertes générées par Snort. Elle possède quelques
options confortables telles que l’envoi par email de rapports.
21
Installation :
sudo apt-get -y install acidbase
Pendant l’installation, une fenêtre s’ouvre et demande les références de la base de donnée (nom de
la base de donnée, Login, mot de passe)
Interface graphique de l’installation
Lancement :
sudo sed -i "s#allow\ from\ 127.0.0.0/255.0.0.0#allow\ from\ 127.0.0.0/255.0.0.0\
xxx.xxx.xxx.xxx/255.255.xxx.xxx#" /etc/acidbase/apache.conf
sudo /etc/init.d/apache2 restart
Accès à l’interface par le navigateur web : http://localhost/acidbase
22
Nous obtenons :
Un résumé des alertes est également disponible. Mais il est plus parlant sur Snort report.
Snort report Télécharger la dernière version stable sur : http://www.symmetrixtech.com Actuellement la version 1.3.3 Décompresser dans /var/www/
sudo tar zxvf snortreport-1.3.3.tar.gz -C /var/www/
Configurer l’accès à la base de données dans le fichier snortreport/srconf.php en configurant les variables suivantes (Snortreport est déployé dans le répertoire /var/www/snortreport) : $pass : Précisez le mot de passe d’accès à la base Spécifier le chemin de jpgraph : JPGRAPH_PATH : ../../../usr/share/jpgraph
23
On peut désormais avoir une interface graphique en ouvrant le navigateur web à l’adresse : http:// xxx.xxx.xxx.xxx/snortreport-1.3.3/alerts.php
J’ai eu un bug à ce niveau : Un message d’erreur bloquait l’affichage de ma page : ERROR: snort_stream5_tcp.c(906) Could not initialize tcp session memory pool.Fatal Error, Quitting..
Résolution du problème : - Ma version d’Ubuntu fonctionnait avec 256 Mo de Ram, je l’ai passé à 1024. - J’ai réduit le nombre maximum de connexions TCP dans le paramétrage de Snort :
vi /usr/local/snort/etc/snort.conf
preprocessor stream5_global: track_tcp yes, \
track_udp yes, \
track_icmp no, \
max_tcp 262144, \ ----------> Modifié en max_tcp 162144, \
max_udp 131072, \
Je reprends donc En tapant l’URL : http:// xxx.xxx.xxx.xxx/snortreport-1.3.3/alerts.php, on obtient l’interface graphique présentée sur la page suivante.
24
Analyse de l’interface
(Rapport obtenu à l’emplacement très sécurisé de ma situation sur le réseau)
On observe sur ce résultat que l’on peut focaliser la plage de temps que l’on désire analyser. Ici :
- une alerte « ICMP Destination Unreachable Port Unreachable ». Renseignement pris, cette alerte
prévient d’une attaque par déni de service (ou, attaque ayant pour but de rendre indisponible un
service, d'empêcher les utilisateurs légitimes d'un service de l'utiliser.)
- une alerte ICMP Ping : Peut prévenir une attaque par saturation du réseau (Une machine A usurpe
une IP et envoie une requête à un serveur Broadcast. Celui-ci inonde le réseau de requêtes. Si cette
opération se renouvelle fréquemment, le réseau se voit bridé)
- une alerte ICMP Echo Reply : Un attaquant distant peut utiliser une requête de ce type pour
déterminer des hôtes actifs en prélude à une attaque.
25
En cliquant sur « Summary », on obtient le détail :
On précise en cliquant sur une adresse IP (Dest IP que je masque ici), pour obtenir le détail :
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
26
Attaques J’allais dire « Ah, enfin »
Malgré ma situation relativement protégée, au bout de 3 jours d’exploitation, une bonne alerte :
Rapport d’activité par Snort report
Les attaques sont répertoriées en quatre niveaux de 1 (alerte sérieuse) à 4 (alerte bénigne)
Donc, ici plusieurs attaques niveau 1 et 2 ont été détectées.
SHELLCODE NOOP : Il s’agit là d’une attaque visant à permettre un attaquant de prendre la main sur
des données ou usurper une identité. Ce qui lui permet d’exécuter des codes de son choix.
27
Par exemple SHELLCODE Sun Sparc setupid :
(Setupid = set up user ID) L’attaquant peut le loguer en root et prendre donc tous les privilèges. Cette
attaque cible souvent le service DNS, le service mail,
SHELLCODE Digital UNIX NOOP :
L'attaquant peut être en mesure d'accéder à distance au système ou avoir la possibilité d'exécuter du
code arbitraire avec les privilèges d'un utilisateur du système.
Quelques mots sur les techniques anti-Snort Snort constitue un moyen sécuritaire qui rend plus difficile le piratage. Ainsi les
pirates ont compris la nécessité de trouver des moyens d’outrepasser les
mécanismes de sécurité assurés par Snort afin d’attaquer sans se faire
remarquer. En effet, il existe des techniques qui visent à contourner Snort. Ces techniques se
présentent sous trois catégories :
a. Attaque par déni de service
permet de rendre Snort inopérant en le saturant.
b. Attaque par insertion
Insertion de trafic afin de déjouer Snort en lui faisant croire à un trafic légitime. Le principe de ces
techniques est d’injecter une attaque parmi beaucoup d’informations sans incidences. Les signes de
l’attaque n’apparaissent donc pas à Snort mais quand les données atteignent la cible, seule
l’information malintentionnée est acceptée par le système.
c. Attaque par évasion
cette technique est l’inverse de l’attaque par insertion. Ici le principe est de faire passer des données
superflues qui sont ignorées par Snort mais prises en compte par les systèmes ciblés.
Bien évidement, avant de commencer à lancer des attaques anti-Snort, il faut détecter au préalable
son existence sur le réseau ciblé. Pour ceci les pirates utilisent certaines techniques qui révèlent
l’existence d’un IDS en observant certains comportements sur le réseau ciblé, notamment l’existence
d’une interface en mode promiscuité, la mesure du temps de latence etc..
28
Snort inline Rappel : Le mode IPS (Système de prévention d'intrusion) n’est plus Snort a proprement parler. Il s’agit d’une autre version basée sur Snort 2.6. Cette version permet de modifier ou de rejeter des paquets. Je résume ici les étapes de l’installation.
Cette version ne se base plus sur la librairie libpcap comme Snort, mais sur iptables. Iptables est un
logiciel libre sous Linux grâce auquel l'administrateur système peut configurer les chaînes et règles
dans le pare-feu Netfilter.
Afin de tester cette version, il faut donc repartir sur une nouvelle installation d’Ubuntu.
Les pré-requis :
Une installation d’Ubuntu mise à jour
(Ainsi qu’elle est décrite précédemment pour Snort)
Iptables
Désinstallation préalable de la version de base iptables
# apt-get --purge remove iptables
Installation à partir des sources
# cd /usr/local/src/
# wget http://www.netfilter.org/projects/iptables/files/iptables-1.4.3.2.tar.bz2
# bzip2 -cd iptables-1.4.3.2.tar.bz2 | tar xvf -
# cd iptables-1.4.3.2/
# make install-devel
Attention : Compiler avec l'option --enable-libipq permet d'assurer l'installation de libipq sur laquelle
Snort inline se base.
Libnet
# cd /usr/local/src/
# wget http://freefr.dl.sourceforge.net/sourceforge/libnet-dev/libnet-1.1.3.tar.gz
# tar xzvf libnet-1.1.3.tar.gz
# cd libnet-1.1.3/
# ./configure
# make
# make install
29
Prce
Pcre (Perl-Compatible Regular Expressions) correspond à la bibliothèque d'expressions régulières
compatible avec Perl. Pour l'installer :
# cd /usr/local/src/
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.9.tar.gz
# tar xzvf pcre-7.9.tar.gz
# cd pcre-7.9/
# ./configure
# make
# make install
Libpcap
# cd /usr/local/src/
# wget http://www.tcpdump.org/release/libpcap-1.0.0.tar.gz
# tar xzvf libpcap-1.0.0.tar.gz
# cd libpcap-1.0.0/
# ./configure
# make
# make install
Libdnet
# cd /usr/local/src/
# wget http://prdownloads.sourceforge.net/libdnet/libdnet-1.11.tar.gz?download
# tar xzvf libdnet-1.11.tar.gz
# cd libdnet-1.11/
# ./configure
# make
# make install
Installation de Snort inline # cd /usr/local/src/
# wget http://prdownloads.sourceforge.net/snort-inline/snort_inline-2.6.1.5.tar.gz?download
# mv “snort_inline-2.6.1.5.tar.gz?download” “snort_inline-2.6.1.5.tar.gz”
# tar xzvf snort_inline-2.6.1.5.tar.gz
# cd snort_inline-2.6.1.5/
# ./configure
# make
# make install
30
Paramétrage
Création des répertoires
# mkdir -p /etc/snort_inline/rules/
# mkdir /var/log/snort_inline/
Fichiers de configuration
# cp /usr/local/src/snort_inline-2.6.1.5/etc/* /etc/snort_inline/
Règles
# cd /usr/local/src/snort_inline-2.6.1.5/etc/
# cp classification.config reference.config /etc/snort_inline/rules/
Paramétrage du fichier de configuration principal
# cd /etc/snort_inline/
# vim snort_inline.conf
Modifications à apporter :
Remplacer :
# var HOME_NET any
# var EXTERNAL_NET any
Par :
# var HOME_NET xxx.xxx.xxx.xxx/xx
# var EXTERNAL_NET !$HOME_NET
Et
Remplacer :
# var RULE_PATH /etc/snort_inline/drop-rules
par :
# var RULE_PATH /etc/snort_inline/rules
31
Activation du mode d'interception
Activation de ip_queue
Afin que snort_inline intercepte tout le trafic, il est nécessaire d'activer ip_queue comme suit :
# modprobe ip_queue
Vérifier que ip_queue est actif :
# lsmod | grep ip_queue
ip_queue 13268 0
L’obtention d’un résultat montre que ip_queue est actif.
Paramétrage de iptables Afin que iptables envoie le trafic web (port tcp/80) à ip_queue, on utilise la commande suivante :
# iptables -I INPUT -p tcp --dport 80 -j QUEUE
Oinkmaster sur Snort inline Nous avons vu dans la configuration de Snort à quoi correspondait Oinkmaster. Il s’agit donc d’un
module qui va nous permettre de mettre à jour les bibliothèques d’attaques référencées. En
s’inscrivant sur snort.org, on peut demander un oinkcode dont je vais me servir ci-dessous pour
pouvoir obtenir une bibliothèque de définitions d’attaques. Dans Snort inline j’intègre Oinkmaster
de la façon suivante :
# cd /etc/snort_inline/
# wget http://www.snort.org/pub-bin/oinkmaster.cgi/<mon oinkcode perso>/snortrules-snapshot-
2.6.tar.gz
# tar xvzf snortrules-snapshot-2900.tar.gz
32
Test de Snort inline En lançant Snort inline avec la commande :
# snort_inline -c /etc/snort_inline/snort_inline.conf -Q -N -l /var/log/snort_inline/ -t
/var/log/snort_inline/ -v
J’obtiens quelques erreurs provenant des fichiers de règles. Une cinquantaine sur plus de mille trois
cent. J’ai commenté ces règles car elles ne sont vraiment modifiables que par les experts qui les ont
écrites. Je peux ainsi poursuivre mon test de Snort inline.
Snort inline s’initialise correctement
Et il commence son analyse
33
Mise en œuvre à prévoir
Snort Inline doit vérifier les paquets avant de décider s’il faut les accepter ou les refuser. Il doit être
placé idéalement après le firewall le long du brin réseau. Voir ci-dessous la différence entre le
positionnement de Snort et Snort inline.
Snort NIDS Snort inline IPS
Internet Internet
Je poursuivrai cette installation par intérêt personnel.
34
Conclusion Snort est un outil très intéressant dans la mise en place d'une sécurité réseau. Grâce aux
communautés très actives qui créent les librairies d’attaques. Snort permet de voir avec une bonne
acuité de quoi il faut se protéger. Il est à souligner l’importance d’une bonne mise à jour de ces
librairies. De plus Snort placé dans l’enceinte d’un réseau permet de détecter les failles les plus
répandues qui proviennent généralement de l’intérieur de l’entreprise, et non de l’extérieur. Ce
système de détection multiplateforme est en perpétuelle évolution et semble un des meilleurs outils
dans la connaissance des vulnérabilités auxquelles on est exposé.
A un niveau plus personnel, j’ai énormément apprécié ce stage. Il m’a déjà permis de me familiariser
un peu plus avec le monde Linux. Il m’a également permit d’observer le fonctionnement du service
informatique de la ville de Pertuis. Cela m’a réellement enthousiasmé et m’a conforté dans mon
envie de poursuivre dans cette direction. Mon seul regret est de n’avoir pas pu m’immerger plus
dans l’activité du service.
35
Lexique
Terme Définition
Citrix Entreprise américaine qui propose des technologies de virtualisation de postes
de travail, d'applications et de serveurs, des technologies d'infrastructure
réseau.
Déport applicatif Désigne le fait de confier l’exécution des applications et le stockage de données côté serveur et non plus sur un poste informatique final. Ce dernier aura pour tâche principal l’affichage de l’espace de travail.
DHCP Système d’attribution d’adresses IP dans une plage définie sur un réseau. Ces
adresses sont dites dynamiques et son opposé aux adresses statiques.
DMZ En informatique, une zone démilitarisée (de l'anglais demilitarized zone) est un
sous-réseau séparé du réseau local et isolé de celui-ci et d'Internet par un pare-
feu. Ce sous-réseau contient les machines étant susceptibles d'être accédées
depuis Internet.
ICMP Internet Control Message Protocol est un protocole est utilisé pour véhiculer
des messages de contrôle et d'erreur.
IPS Intrusion Prevention System.
Mirroring Réplication des données en temps réel. Il peut être appliqué par exemple au
flux transitant par un switch, ou aux données un disque dur ou un volume…
NAS (Network Attached Storage) ou serveur de stockage en réseau est un serveur de
fichiers autonome, relié à un réseau dont la principale fonction est le stockage
de données en un volume centralisé pour des clients réseau hétérogènes.
NIDS Network Intrusion Detection System. Système de détection d’intrusion dans un
réseau local.
Règle En anglais Rule. Ici, elle est l’écriture codifiée d’une attaque définie. Le ruleset
étant un ensemble de ces règles.
Sniffer Ou renifler. Captation de paquets qui transitent sur un réseau local.
topologie en
étoile étendue
Structure de réseau constituée d'une topologie en étoile principale dont chacun
des nœuds d'extrémité, correspondant à un poste de travail, est aussi le centre
de sa propre topologie en étoile.
Ubuntu Fondé sur la distribution Linux Debian, est un système d’exploitation libre.
Virtualisation La virtualisation consiste à faire fonctionner un ou plusieurs systèmes
d'exploitation sur un ordinateur ou sur un serveur, au lieu d'en installer un seul
par machine.
VMware,
VirtualBox,
Hyper V
Logiciels de virtualisation. Hyper V est un produit Microsoft.
36
Annexes
Annexe 1. ============================ Run time for packet processing was 952.603434 seconds Snort processed 24227 packets. Snort ran for 0 days 0 hours 15 minutes 52 seconds
Pkts/min: 1615 Pkts/sec: 25
Packet I/O Totals: Received: 24227 Analyzed: 24227 (100.000%)
Dropped: 0 ( 0.000%) Filtered: 0 ( 0.000%) Outstanding: 0 ( 0.000%) Injected: 0
============================ Breakdown by protocol (includes rebuilt packets): Eth: 24227 (100.000%) VLAN: 0 ( 0.000%) IP4: 3908 ( 16.131%) Frag: 0 ( 0.000%) ICMP: 0 ( 0.000%) UDP: 2763 ( 11.405%) TCP: 814 ( 3.360%) IP6: 520 ( 2.146%) IP6 Ext: 546 ( 2.254%) IP6 Opts: 26 ( 0.107%) Frag6: 0 ( 0.000%) ICMP6: 47 ( 0.194%) UDP6: 473 ( 1.952%) TCP6: 0 ( 0.000%) Teredo: 0 ( 0.000%) ICMP-IP: 0 ( 0.000%) EAPOL: 0 ( 0.000%) IP4/IP4: 0 ( 0.000%) IP4/IP6: 0 ( 0.000%) IP6/IP4: 0 ( 0.000%) IP6/IP6: 0 ( 0.000%) GRE: 0 ( 0.000%) GRE Eth: 0 ( 0.000%) GRE VLAN: 0 ( 0.000%) GRE IP4: 0 ( 0.000%) GRE IP6: 0 ( 0.000%) GRE IP6 Ext: 0 ( 0.000%) GRE PPTP: 0 ( 0.000%) GRE ARP: 0 ( 0.000%) GRE IPX: 0 ( 0.000%) GRE Loop: 0 ( 0.000%) MPLS: 0 ( 0.000%) ARP: 19033 ( 78.561%) IPX: 0 ( 0.000%) Eth Loop: 0 ( 0.000%) Eth Disc: 0 ( 0.000%) IP4 Disc: 92 ( 0.380%) IP6 Disc: 0 ( 0.000%) TCP Disc: 0 ( 0.000%) UDP Disc: 0 ( 0.000%) ICMP Disc: 0 ( 0.000%) All Discard: 92 ( 0.380%) Other: 1005 ( 4.148%) Bad Chk Sum: 470 ( 1.940%) Bad TTL: 0 ( 0.000%) S5 G 1: 0 ( 0.000%) S5 G 2: 0 ( 0.000%) Total: 24227 ============================ Action Stats:
Alerts: 717 ( 2.960%) Logged: 717 ( 2.960%) Passed: 0 ( 0.000%) Limits: Match: 0 Queue: 0 Log: 0 Event: 0 Alert: 0 Verdicts: Allow: 24227 (100.000%) Block: 0 ( 0.000%) Replace: 0 ( 0.000%) Whitelist: 0 ( 0.000%) Blacklist: 0 ( 0.000%) Ignore: 0 ( 0.000%) ============================ Frag3 statistics: Total Fragments: 0 Frags Reassembled: 0 Discards: 0 Memory Faults: 0 Timeouts: 0 Overlaps: 0 Anomalies: 0 Alerts: 0 Drops: 0 FragTrackers Added: 0 FragTrackers Dumped: 0 FragTrackers Auto Freed: 0 Frag Nodes Inserted: 0 Frag Nodes Deleted: 0 =========================== Stream5 statistics: Total sessions: 40 TCP sessions: 0 UDP sessions: 40 ICMP sessions: 0 IP sessions: 0 TCP Prunes: 0 UDP Prunes: 0 ICMP Prunes: 0 IP Prunes: 0 TCP StreamTrackers Created: 0 TCP StreamTrackers Deleted: 0 TCP Timeouts: 0 TCP Overlaps: 0 TCP Segments Queued: 0 TCP Segments Released: 0 TCP Rebuilt Packets: 0 TCP Segments Used: 0 TCP Discards: 0 TCP Gaps: 0
UDP Sessions Created: 40 UDP Sessions Deleted: 40 UDP Timeouts: 0 UDP Discards: 0 Events: 0 Internal Events: 0 TCP Port Filter Dropped: 0 Inspected: 0 Tracked: 392 UDP Port Filter Dropped: 0 Inspected: 3148 Tracked: 40 ============================ HTTP Inspect - encodings (Note: stream-reassembled packets included): POST methods: 0 GET methods: 0 HTTP Request Headers extracted: 0 HTTP Request Cookies extracted: 0 Post parameters extracted: 0 HTTP response Headers extracted: 0 HTTP Response Cookies extracted: 0 Unicode: 0 Double unicode: 0 Non-ASCII representable: 0 Directory traversals: 0 Extra slashes ("//"): 0 Self-referencing paths ("./"): 0 HTTP Response Gzip packets extracted: 0 Gzip Compressed Data Processed: n/a Gzip Decompressed Data Processed: n/a Total packets processed: 250 ============================ dcerpc2 Preprocessor Statistics Total sessions: 0 ============================ Snort exiting