Protection contre les attaques DoS/DDoS
Protection contre les attaques DoS/DDoS
SOMMAIRE
Introduction
I. Historique
II. Algorithmes d‟attaques existants
A. Différentes attaques
1. Attaques du type DoS
2. Attaques du type DDoS
3. ARP Spoofing / ARP Poisoning
B. SYN Flooding
C. UDP Flooding
D. Attaque par fragmentation
E. Ping of death
F. Smurffing
III. Logiciels et algorithmes de défense
A. IDS / IPS
1. Les IDS
2. Les IPS
3. SYN Cookie / SYN Cache / SYN Proxy
B. NETFILTER
C. CUSUM
D. ALGORITHME ADAPTATIF DE SEUIL
IV. Conclusion
V. Index
Ce cours est tiré du rapport effectué par Osman SALEM, HOTTE Marion, LUTUN Quentin-Edouard et ASCOET Thomas
Introduction
Définition Dos, DDoS : attaque d’un pirate, sur un serveur informatique, de façon à
l’empêcher d’offrir le service pour lequel il est destiné.
Qui, où, support : les victimes du déni de service ne sont pas uniquement celles qui le
subissent, les postes compromis (daemons et masters) et les postes clients qui n’arrivent pas à
accéder aux services désirés sont également les victimes des pirates qui effectuent le Dos. De
nos jours, le piratage peut être acquis aisément, l’attaquant peut donc être un utilisateur
lambda tant que son poste est relié au réseau mondial.
Pourquoi (but) : but principal : que l’accès au serveur d’une entreprise devienne impossible
aux clients, le but n’étant pas d’altérer les données contenues et échangées ni de voler des
informations, mais plutôt de nuire à la réputation de l’entreprise en empêchant l’accès aux
divers services fournis aux clients en provoquant un ralentissement significatif ou une
saturation du système voire le crash du système. A l’origine, les pirates n’étaient intéressés
que par la renommée d’avoir réussi à faire tomber un réseau. Aujourd’hui, la raison de ces
attaques est le chantage, en effet ces criminels sont principalement motivés par l’argent.
Deux types de DoS :
Déni de service par saturation : submerger une machine d’un grand nombre de
requête afin qu‟elle ne soit plus apte à répondre aux demandes des clients.
Déni de service par exploitation de vulnérabilités : exploiter une faille du
système dans le but de le rendre inutilisable.
Comment (principe) : envoyer une très grande quantité de paquets, dont la taille est
relativement importante, en même temps, voire sur une longue période. Le principe du
Distributed Denial of Service (DDoS) consiste à utiliser une grande quantité de
postes « Zombies », préalablement infectées par des « backdoors » ou « troyens », dans
l’intention de paralyser la réponse du serveur attaqué. Les maîtres sont eux-mêmes reliés aux
postes « daemons ». Le pirate se sert des postes maîtres pour contrôler les postes daemons qui
effectueront l’attaque, sans cela, le pirate devrait se connecter lui-même à chaque daemons ce
qui serait plus long à mettre en place, et plus facilement repérable. Pour utiliser les masters et
daemons, il est nécessaire d’exploiter des failles connues (FTP…). Le pirate se connecte aux
masters en TCP pour préparer l’attaque, ces derniers envoient les
commandes aux daemons en UDP.
I. Historique
Les attaques par déni de service ont commencé dans les années 1980, ce n’est qu’en Aout
1992 qu’aurait eu lieu la première attaque de déni de service distribué dirigée contre les serveurs
de l’Université du Minnesota, à la suite de quoi l’accès Internet de l’Université est
resté bloqué pendant plus de 2 jours.
Historique des attaques de déni de service :
En décembre 1996 a eu lieu l'attaque Ping de la mort (Ping Of Death).
En juillet 1997, a eu lieu l'attaque Smurf qui, grâce à un serveur de diffusion (« broadcast »),
duplique et envoie sur l’ensemble du réseau le message qu’il aura reçu de la machine
attaquante. Par la suite, les machines du réseau répondent au serveur de diffusion qui
redirigera ces réponses sur la machine cible.
Cette attaque fut suivie par l’attaque WinNuke qui provoquait un « blue screen » ou un
« reboot » sur les postes Windows 95 et NT.
En octobre de la même année a eu lieu l'attaque Land dont le principe est l’usurpation
d’adresse IP dans le but d’exploiter une faille du protocole TCP/IP dans les systèmes visés.
Cette attaque consiste donc à envoyer dans les champs sources et destination des paquets IP
exactement la même adresse et le même numéro de port ce qui avait pour conséquence de
déstabiliser ou de faire tomber les systèmes vulnérables tels que les systèmes Windows 95,
98, NT 4.O, FreeBSD etc ...
Enfin, en décembre 1997, a été appliquée l’attaque Teardrop / Overdrop dont le principe est
d’exploiter la fragmentation effectuée par le protocole IP (fragmentation des paquets, de taille
trop importante, en plus petits paquets possédant tous un numéro d’identification et de
séquence, à la réception, ils sont réassemblés grâce aux valeurs de décalage). On insère dans
les paquets fragmentés de fausses informations de décalage qui, lors du réassemblage
provoquaient des vides ou recoupements qui avaient pour conséquence une instabilité sur les
stations Linux, Windows NT et 95. En janvier 1998, l'attaque Bonk/Boink qui visait les stations
Windows 95 et NT 4.0. Le principe est d’émettre une grande quantité de paquets UDP
corrompus provoquant des blocages ou des plantages du système d'exploitation qui a été visé,
suivie par l'attaque Fraggle qui inondait la cible de paquets UDP en utilisant une variante
amplifiée de l‟attaque Smurf. Suivit en juin 1998 de l’attaque Syndrop basée sur le Teardrop
en TCP avec le bit SYN et possédant des champs invalides tels que le numéro de séquence par
exemple. L'impact de cette attaque est le blocage les postes Windows NT4 SP3 par un Freeze
(gelés, blocage). Le lundi 21 octobre 2002, une attaque de type Ping Flood bloque 9 des 13
serveurs DNS qui
ont pour but le routage des requêtes de résolution de nom de domaine, rendant ainsi
impossible l’accès à leurs ressources pendant trois heures. Les pirates ont pu grâce à un parc
important de machines de générer un nombre de requêtes entre deux et trois fois supérieur à la
capacité des treize serveurs visés.
Historique des attaques de déni de service distribué :
La première attaque DDOS qui fut médiatisée dans la presse s’est produite le 7 février 2000
contre Yahoo! L’attaque a empêché l’accès à son portail Internet pendant trois heures. Durant
ces heures Yahoo aurait subi une perte d’environ 500 00$. Le lendemain, ce sont Amazon.com,
Buy.com, CNN et eBay ont été attaqués au moyen du
déni de service distribué provoquant ainsi soit l'arrêt total, soit un fort ralentissement du
fonctionnement de leur serveur. Sur les dix heures pendant lesquelles l’attaque a duré,
Amazone aurait subi une perte de 600 000$, eBay est passé de 100 à 9.4% de disponibilité et
CNN en dessous de 5% de la capacité habituelle. Le 9 février suivant, E Trade et ZDNet ont à
leur tour été victimes de ce type d’attaques dont la conséquence fut l’inaccessibilité de leur
portail.
En septembre 2001, un virus nommé Code Red infecte des milliers de systèmes, suivit par une
seconde version, Code Red II, qui installait un agent effectuant le DDOS. Il paraîtrait que
cette attaque aurait été lancée contre la Maison Blanche, cette dernière a, par la suite annoncée
que les mesures nécessaires à la sécurité seraient entreprises. Dès l'été de l’année suivante, c'est
Internet qui subit une attaque DDOS à l'encontre de ses 13 serveurs racines. Cette attaque n’a
duré qu'une heure mais elle aurait pu paralyser la totalité du réseau Internet. En septembre 2002
est apparue la première version de Slapper qui, en seulement deux semaines, a contaminé plus
de 13 000 serveurs Linux. Slapper utilise une faille de sécurité présente dans le module
OpenSSL1, et y transfert un agent DDOS. Le 25 janvier 2003, le ver SQL Slammer infecte des
serveurs de bases de données MySQL de Microsoft qui étaient alors mal configurés. Seuls 4
des 13 serveurs racines ont été affectés ne provoquant qu’une réduction de 15% de la
performance globale du réseau.
A. Différentes attaques
Contexte :
La réalisation d'un déni de service n'est pas très compliquée, mais pas moins efficace. Nous
avons vu précédemment que la plupart du temps, elles sont réalisées avec succès car la plupart
des dénis de service exploitent des failles liées au protocole TCP/IP. Les contre-mesures sont
compliquées à mettre en place, d’autant plus que ce type d’attaque utilise les services et
protocoles normaux d'Internet. La seule façon de s’en protéger est de détecter les
comportements anormaux, ce qui implique notamment la vérification de l'intégrité des
paquets, la surveillance du trafic, l’établissement de profils types et de seuils. Commençons
tout d’abord par comprendre comment fonctionnent ces attaques afin de mieux les détecter ou
de les contrer. Il existe de nombreux outils pour réaliser des attaques du type DoS et DDoS.
La plupart d’entre eux sont conçus pour fonctionner avec les systèmes d'exploitation Unix et
Linux, mais de plus en plus sont développés sous les systèmes Windows.
1. Attaques du type DoS
Logiciel Type d’attaques
Hping UDP/TCP/ICMP flooding,
Smurf
Slowloris, NKiller SYN-Flood over HTTP
LetDown TCP/TCP SYN flooding
Sockstress TCP Session flooding
Pour simuler les attaques du type Déni de Service, nous utiliserons l‟outil « Hping ». Celui-ci
permet de réaliser l'envoi de paquets via les protocoles TCP, UDP ou ICMP en modifiant
leurs en-têtes. Il est disponible sous Unix, Linux, MacOS X et Windows.
Fonctionnement :
Dans ce type d’attaque, le hacker lance seul son attaque contre la victime. La plupart du
temps, le hacker cache son identité réseau (adresse IP et ports UDP/TCP) en se faisant passer
pour une, voire plusieurs autres machines (IP Spoofing). Ainsi, il ne peut pas être reconnu par
la victime. L'IP Spoofing peut être également utilisé pour faire du DNS Spoofing.
Utilisation de l’outil « Hping » : Attaque du type SYN FLOOD :
# hping –S –i u10 –p 80 –a @IP_MACHINE_USURPEE @IP_MACHINE_CIBLE
L’argument „S‟ demande le positionnement du flag. Le second argument ‟i‟ précise
l’intervalle entre deux envois (ici en micro secondes). Le troisième „p‟ spécifie le port
destination. Le quatrième „a‟ désigne une adresse source. Le dernier, enfin, donne l’adresse
destination.
Attaque du type PING FLOOD (ICMP FLOODING) :
# hping -1 –i u10 @IP_MACHINE_CIBLE
L’argument -1 précise que les paquets se font en ICMP, ceux-ci sont par défaut des « echo
request ».
Attaque du type SMURFING :
# hping -1 –i u10 –a @ IP_MACHINE_CIBLE @IP_BROADCAST
Avantages : Il permet de générer des paquets TCP, UDP, ICMP et Raw IP contrairement à
l'utilitaire ping(8) d'Unix, qui ne permet lui que d'envoyer des paquets ICMP. « Hping » est
principalement utilisé comme un outil de sécurité, mais il peut être utilisé sous diverses
formes comme :
- Test de firewall et du réseau
- Traceroute avancé
- Outil d'illustration, lors d'une formation à TCP/IP
Inconvénients :
Les attaques ne proviennent que d’une seule machine, de ce faite les attaques du type PING
Flood (ICMP flooding) ralentissent la machine mais pas suffisamment pour l'empêcher
d'émettre les RST qui mettent fin à la connexion (la connexion est réinitialisée).
2. Attaques du type DDoS
Logiciel Type d’attaques
Trinoo UDP flooding
Tribe Flood Network (TFN) UDP/TCP/TCP SYN
et TFN2k flooding, Smurf
Stacheldraht UDP/TCP/TCP SYN
flooding, Smurf
Schaft UDP/TCP/ICMP flooding
MStreamT ACK flooding
Compte tenu des performances actuelles des serveurs et de la généralisation des techniques de
répartition de charge et de haute disponibilité, il devient de plus en plus difficile de réaliser
une simple attaque DoS. De ce fait, les attaques du type Déni de service distribué sont de plus
en plus prisées par les pirates informatiques car elles permettent de décupler les effets d’une
attaque initiale. Malgré tout, elles restent complexes à mettre en œuvre. L'efficacité du déni de
service étant liée au nombre de machines compromises, de telles attaques nécessitent donc au
préalable une phase de corruption de machines sur Internet, afin d’y installer des agents, et de
pouvoir plus tard utiliser cette armée d’attaquants.
Fonctionnement :
L’architecture ci-dessus comporte 4 types d'hôtes différents : le(s) client(s) (Hacker), le(s)
serveur(s) (Master), les agents (Zombies) et enfin la cible (Victime). Le client, utilisé par
l'attaquant, contrôle un ou plusieurs Serveurs, lesquels communiquent avec les Agents
chargés de la mise en œuvre du déni de service. Pour éviter que les Agents et les Serveurs ne
puissent être utilisés par autrui (administrateur légitime de l'hôte, autres pirates) toutes les
commandes vers ces programmes nécessitent des mots de passe ou des informations
supplémentaires. De plus, afin d’éviter le blocage des commandes par un outil de détection ou
de filtrage, les communications peuvent être cryptées. Nous utiliserons l’outil Stacheldraht (fil
de fer barbelé en allemand), c'est un outil partiellement basé sur TFN (dont il reprend le code
de l'Agent) mais qui a comme caractéristique de chiffrer toutes ses communications TCP. De
plus, il comporte des instructions de compilation pour Linux et Solaris.
61111/tcp 65512/tcp et echo_reply/icmp
Ou 65512/tcp ou 65513/tcp
Client --------------> Serveur -----------------------------> Agent
<-----------------------------
echo_reply/icmp
L'Agent, lorsqu'il démarre, cherche à contacter un certain nombre de serveurs sur le port TCP
65512 ou 65513 en envoyant un message ICMP echo_reply en clair avec comme identifiant
« 666 » en décimal et « skillz » dans le champ de données. Si un Serveur est à l'écoute, il
répond par un echo_reply avec un identifiant « 667 » et « ficken » en données. L'Agent
procède alors à un test pour savoir s’il peut émettre des adresses sources complètement
aléatoire en envoyant vers un Serveur un paquet ICMP echo_reply d'adresse source 3.3.3.3
avec son adresse réelle dans les données (identifiant 666). Si le message arrive au Serveur, il
répond via echo_reply avec un identifiant à « 1000 » et « spoofworks » (l'usurpation
fonctionne !) dans les données. En cas de succès, l'Agent fabriquera des adresses sources
quelconques, sinon il se limitera à modifier l'octet de poids le plus faible (ce qui permet au
moins à la cible d'identifier le réseau ou sous-réseau émetteur). Le Serveur stocke les Agents
identifiés dans un fichier « .bc » chiffré à l'aide de l'algorithme symétrique BlowFish. De
même, les Agents possèdent un fichier avec une liste de Serveurs (.ms par défaut) chiffré avec
BlowFish ou bien se réfèrent à 2 Serveurs par défaut codés dans le binaire.
Le Client se connecte sur le port TCP 61111 ou 65512 d'un Serveur, s'authentifie avec un mot
de passe et peut alors envoyer un certain nombre de commandes pouvant être transmises aux
Agents via echo_reply/icmp (la commande est un code dans l'identifiant) :
- gestion de la liste de Serveurs des Agents (ajout, retrait)
- liste des Agents présents et morts après un test de la connexion TCP ;
- changement de la taille, des ports cibles, pour les paquets d'attaque ;
- attaques par saturation de requêtes UDP, TCP, ICMP sur plusieurs adresses ;
- ouverture d'un shell distant sur un port donné par les hôtes des Agents ;
- mise à jour de chaque Agent en utilisant le programme rcp sur la machine hôte.
Chaque Agent a la possibilité de créer un certain nombre de processus fils (1 par défaut et 15
maximums) pour attaquer séquentiellement l'ensemble des cibles.
Pour plus d’informations, cf. stacheldraht.analysis de D. Dittrich.
Utilisation de l’outil « Stacheldraht »: Démarrage du Serveur(MASTER) :
# ./mserv
- forking in the
[*]-stacheldraht-[*] background...
1 bcasts were successfully read in.
Démarrage de l’agent :
# ./td
Connexion au Serveur(MASTER) :
./client @IP_MASTER
[*] stacheldraht [*]
(c) in 1999 by ...
trying to connect...
connection established.
--------------------------------------
enter the passphrase : sicken
--------------------------------------
entering interactive session.
******************************
welcome to stacheldraht
******************************
type .help if you are lame
stacheldraht(status: a!1 d!0)>
Exemple:
send_arp 192.168.0.1 00:e2:20:03:3f:d5 192.168.0.12 00:e0:30:9e:08:9a
Il devient donc très simple de rajouter une boucle afin qu'il envoie un tel paquet à interval
régulier.
Il existe également d’autres alternatives au programme « send_arp » comme « Dsniff » ou
encore « Ettercap » qui constituent une suite d’outils destinée à réaliser l'audit d'un réseau et
divers tests de pénétration et qui permettent entre autres de mettre en pratique l’ARP Spoofing
/ ARP Poisoning. Malgré tout, cette attaque est très limitée car elle se restreint au réseau local
de la cible.
B. SYN Flooding
Principe :
Cette attaque utilise une faiblesse du protocole TCP en se basant sur l'envoi massif de
demande d'ouverture de session SYN. L'objectif étant de saturer le nombre maximum de
sessions TCP en cours. Ainsi, lorsque cette limite est atteinte, la cible ne pourra plus établir
aucune session TCP causant une indisponibilité de toutes ces applications en écoute de port
TCP.
Fonctionnement général :
Remarque :
- Les numéros de séquence initiaux x et y sont choisis “aléatoirement”.
- Un timer est déclanché après l‟envoi d‟un SYN.
- Si une réponse tarde trop à arriver (>75s), la connexion est abandonnée.
Se protéger :
- une bonne configuration des firewalls permet de détecter/limiter ce type d‟attaque. Par
exemple, on peut limiter le nombre de connexions TCP par seconde.
Fonctionnement :
Les SynCookies représentent une solution technique relativement efficace présentée dans le
chapitre III, A. 3
C. UDP Flooding
Principe :
Cette attaque exploite le mode non connecté du protocole UDP. Elle consiste à générer une
grande quantité de paquets UDP soit à destination d‟une machine soit entre deux machines
(Ex : Chargen Denial of Service Attack).
Conséquences :
- DoS : congestion du réseau et saturation des ressources des deux hôtes victimes ;
- Congestion généralement plus importante qu‟avec le TCP Flooding car l‟UDP ne
possède pas de mécanisme de contrôle de congestion ;
- Les paquets UDP sont prioritaires sur les paquets TCP ;
- La totalité de la bande passante peut être saturée : effondrement de la totalité du
réseau.
Se protéger :
- Configurer les firewalls pour limiter le trafic UDP.
- Désactiver si possible certains services comme echo et chargen.
Rappel sur UDP :
- C’est un protocole de la couche transport.
- C’est un service sans connexion et non fiable : les paquets UDP peuvent se doubler ou
se perdre.
- Aucun service supplémentaire n’est ajouté par rapport à IP.
En-tête d‟un paquet UDP :
Faiblesse d‟UDP :
- Aucun champ n’est chiffré dans une en-tête UDP
- Il n’y a pas de service d’authentification
Fonctionnement d‟UDP Flooding :
Conséquences :
Certains cas de réassemblage non prévus entraînent un crash de la machine et donc un déni de
service.
Se protéger :
Installer si possible une implémentation de la pile TCP/IP résistant à cette faille.
Fonctionnement :
L'astuce est de modifier les numéros de séquence afin de générer des blancs ou des
recouvrements lors du réassemblage par la pile IP cible. Aujourd'hui, comme pour le ping de la
mort, cette technique n'est plus viable du fait que les piles IP ont toutes évoluées.
E. Pind of death
Cette technique d'attaque est dépassée, mais elle a fait ses preuves à l'époque. Elle exploitait
une faiblesse dans l'implémentation de la plupart des piles IP en envoyant un paquet ICMP
d'une taille non conforme (supérieur à 64 octets). Ceci avait pour effet de planter directement
la pile IP attaquée.
Cependant, comme pour l'attaque par fragmentation, cette technique n'est plus viable du faite
que les piles IP ont toutes évoluées. Nous pouvons donc discuter en datagramme ICMP de
grande taille sans aucun souci. L'attaque Ping de la mort est souvent confondue en pensant
qu'elle est basée sur le fait de saturer une bande passante en ICMP. Ce n'est pas le cas, car ce
principe est appliqué par l'attaque Ping Flood et non pas par le Ping de la mort.
F. Smurffing
Principe : Cette attaque utilise
- Le protocole ICMP,
- De l‟IP spoofing,
- Parfois le broadcast.
Conséquences :
- Denis de service (dans le cas de smurfing par exemple).
- Interception de paquets.
Se protéger :
- Configurer les firewalls pour limiter le trafic ICMP par seconde ;
- Configurer les firewalls pour bloquer les ping ;
- Interdire le broadcast.
Fonctionnement :
Quelques types d’erreur :
- type 8 (Echo Request) : test si la machine cible est opérationnelle
- type 0 (Echo Reply) : en réponse au paquet ICMP de type 8
- type 11 (Time Exceeded) : exploité par traceroute
Les messages ICMP “Time exceeded” ou “Destination unreachable” peuvent forcer un
ordinateur à casser ses connexions en cours (celles concernées par le message). Si un
attaquant envoie de manière répétée de faux messages de ce type, il peut causer un DoS.
Les messages ICMP "Redirect" (normalement utilisés par les routeurs) permettent de
détourner un flux de données en spécifiant la route que doit emprunter les paquets. Deux
restrictions : l’attaquant doit être sur le même réseau local, et d’autre part, une connexion
entre l’attaquant et la victime doit déjà exister.
Avantages :
- Facilité d’installation.
- Aucun matériel supplémentaire.
- Solution peu chère.
Inconvénients :
- Connexion Half duplex.
- Débit mauvais.
NIDS - Emplacement solution n°3
- Tap : Similaire au Hub. Sépare le flux selon la direction (entrant ou sortant).
Avantages :
- Résiste aux coupures de courant.
- Pas de changement de topologie.
- Prise en charge de plusieurs ports (12).
Inconvénients:
- Prix.
En Résumé :
Le NIDS permet donc de surveiller tout le flux réseau d’une société sans impacter sur la
charge du réseau. En effet, celui constitue un élément passif du réseau écoutant le trafic, ce
qui ne perturbe pas le réseau. De plus, il est mono-tâche et apparaît invisible aux yeux des
pirates. Malgré tout, il demande des ressources nécessaires importantes notamment aux
niveaux du CPU et de la mémoire en traitant un grand nombre d’informations à la fois. De
plus, certains paquets ne seront pas analysés, c’est pourquoi on préférera plutôt une solution
Hardware (plus rapide) que Software. Ainsi, les solutions du type VPN et SSL (par
exemple),
compliquent l’analyse. En effet le NIDS est incapable d’analyser le trafic chiffré. Enfin, il
est également nécessaire de tenir à jour la base de données des signatures pour que le NIDS
soit efficace aux attaques.
b) Les HIDS (HostBased Intrusion Detection System)
Les HIDS analyse et contrôle des informations contenues sur un équipement précis (ex: un
serveur). Ainsi, contrairement à un NIDS, le HIDS récupère les informations qui lui sont
données par le matériel ou le système d'exploitation. Il y a pour cela plusieurs approches :
signatures, comportement (statistiques) ou délimitation du périmètre avec un système
d'ACL.
Concept HIDS :
Avantages :
- Permet de traiter des événements locaux au système qu‟un NIDS ne peut pas voir.
- Peut analyser le trafic chiffré (ex: ssh).
- Pas d’impact sur l’utilisation d’un réseau « switché ».
- Permet de détecter les Rootkit (chevaux de Troie).
Inconvénients :
- Difficulté d’administration (exemple avec Tripwire et Aide, fichier de politique à
configurer…).
- Risque en cas de compromission locale.
- Les attaques de type DoS (Déni de service) et DDoS (déni de service distribué) peuvent
gêner l’analyse locale d’un HIDS.
- CPU de la sonde = CPU du serveur !
c) Les IDS hybrides à la fois NIDS et HIDS
Les IDS hybrides sont basés sur une architecture distribuée, où chaque composant unifie
son format d'envoi d'alerte (typiquement IDMEF) permettant à des composants divers de
communiquer et d'extraire des alertes plus pertinentes.
Les avantages des IDS hybrides sont multiples :
- Moins de faux positifs
- Meilleure corrélation
- Possibilité de réaction sur les analyseurs
2. Les IPS
Les IPS, contrairement aux IDS (sécurité passive) classiques, constituent une sécurité active
pour filtrer et bloquer les flux, ajoutant à cela la défense proactive et la prévention des
intrusions sur le réseau/hôte. Avant toute action, une décision en temps réel est exécutée
(l’activité est comparée à un ensemble de règles). Si l'action est conforme à l'ensemble de
règles, la permission de l’exécuter sera accordée et l'action sera exécutée. Si l'action est
illégale (c'est-à-dire si le programme demande des données ou veut les changer alors que
cette action ne lui est pas permise), une alarme est donnée. Dans la plupart des cas, les autres
détecteurs du réseau (ou une console centrale) en seront aussi informés dans le but
d’empêcher les autres ordinateurs d'ouvrir ou d'exécuter des fichiers spécifiques. Le
diagramme ci-dessous illustre le fonctionnement d’un IPS.
Concept IPS :
Fonctionnalités IPS:
- Le comportement de l'application est analysé et noté (quelles données sont
normalement demandées, avec quels programmes elle interagit, quelles ressources
sont requises, etc.).
- L’interception d'appels au système : avant qu'un appel au système (rootkit) soit
accepté, il doit être complètement vérifié (par exemple, quel programme a demandé
l'appel au système, sous quelles autorisations d'utilisateur tourne le processus -root...-,
à quoi l'appel système essaie-t-il d'accéder, etc.). Cette fonctionnalité permet la
surveillance des essais de modification d'importants fichiers du système ou de la
configuration.
- Lorsqu’une attaque est détectée, l’alerte peut aller d’une simple entrée dans un journal à
un blocage de ressources.
- L’interaction avec les équipements réseaux tels que : firewall, IDS, VPN, anti-virus,
anti-spam, etc.
- D’autres fonctionnalités sont possibles, comme la compréhension des réseaux IP
(architecture, protocoles, etc.), la maîtrise des sondes réseau/analyse des logs, la
défense des fonctions vitales du réseau, la vitesse d'analyse et un mode “stateful
inspection”.
Limites IPS :
Les principales limites et contraintes des IPS à ce jour semblent être leur mise en place
délicate, leur administration rebutante, la possibilité de bloquer tout le réseau en cas de
fausse
alerte, ainsi que l’inexistence d’un standard actuel. Il est également capable de stopper des
attaques réseau et applicatives les plus courantes aujourd’hui. C'est pour toutes ces raisons,
que les IDS sont beaucoup plus utilisées que les IPS, bien que certains IDS soient
maintenant dotées de fonction permettant de réagir et donc débloquer certaines attaques.
Malgré tout, pour les entreprises, un IPS constitue, un investissement pour la sécurité plus
judicieux qu’un simple IDS.
Les différents types IDS/IPS connus :
Voici un lien d‟un tableau résumant les différents types d‟IDS/IPS :
Cf. Tableau
A l'origine écrit par Martin Roesch, Snort est la solution la plus répandue pour les parties
IDS
et IPS. C‟est d‟une part le fait qu‟il soit libre (publié sous licence GNU GPL) et donc que
le fonctionnement soit accessible au plus grand nombre et d'autre part sa modularité qui
permet à tous de participer à l'augmentation du nombre de pré-processeurs, de règles et de
modules de sortie disponibles. Cependant, la recherche de trames qui circulent sur le réseau
peut être longue et fastidieuse, mais si l'effort est récompensé, cela vaut sûrement la peine.
Snort fonctionne en 4 modes :
- Sniffer (snort -vde) : Comme tcpdump et WireShark, permettant d’écouter le trafic
réseau en des points stratégiques.
- Générateur de log (snort -vde -l ./log) : Permettant le débogage des attaques en cours
ou passées.
- NIDS (Intrusion Detection System) : Détecteur d’anomalies permettant de capter des
intrusions (Sécurité Passive).
- IPS (Intrusion Prevention System) : Permettant la prévention des intrusions sur le
réseau (Sécurité Active) Snort_Inline.
L’architecture de Snort est composée comme suit :
- Noyau de base : au démarrage, ce noyau charge un ensemble de règles, compile,
optimise et classe celles-ci. Durant l’exécution, le rôle principal du noyau est la
capture de paquets.
- Une série de préprocesseurs, ceux-ci améliorent les possibilités de SNORT en matière
d’analyse et de recomposition du trafic capturé. Ils reçoivent les paquets directement
capturés, éventuellement les retravaillent puis les fournissent au moteur de recherche
de signatures.
- Une série d’analyses est ensuite appliquée aux paquets. Ces analyses se composent
principalement de comparaisons de différents champs des headers des protocoles (IP,
ICMP, TCP et UDP) par rapport à des valeurs précises.
- Après la détection d’intrusion, une série de « output plugins » permet de traiter cette
intrusion de plusieurs manières : envoie vers un fichier log, envoie d’un message
d’alerte vers un serveur Syslog ou encore stocker cette intrusion dans une base de
données SQL.
Réglages de Snort :
Tous les paramètres à régler de Snort se trouvent dans le fichier "snort.conf" situé dans le
répertoire "/etc/snort". Dans ce fichier, une quantité importante d'information est fournie en
commentaire "#" pour permettre à l'utilisateur de connaître l'utilité de chaque section, de
chaque variable et être capable de faire une configuration correcte. Nous allons maintenant
décrire les sections les plus importantes du fichier « snort.conf ».
Réglage des variables réseau
La configuration d'un Système de Détection d'Intrusion sur un réseau dépend naturellement
de la topologie de ce réseau, de ses plages d'adresses, des serveurs dont il est équipé, etc.
Par défaut, Snort va analyser tous les paquets de toutes les adresses IP du réseau. Ce choix
de réglage se fait en utilisant la variable HOME_NET réglée comme suit : var HOME_NET
any. Si l'utilisateur, ne veut analyser que les paquets de certaines adresses IP, il peut rentrer
des intervalles d'adresses (ex : 192.168.2.0/24), des IP particulières, etc.
alert tcp any any -> 192.168.0.1 80 (msg:"RST"; flow:stateless; flags:R; threshold: type
both,
track by_dst, count 100, seconds 20; sid:1000003;)
De même, si le pirate emploie une adresse qui ne soit pas présente sur le réseau, certains
routeurs sont configurés pour répondre par un paquet ICMP de type « host unreachable »
(il se peut que le routeur réponde aussi avec des RST, ce qui empêche la bonne réalisation
de l’attaque, néanmoins il peut être intéressant de détecter cette tentative) :
alert icmp any any -> any any (msg:"Host unreachable"; itype: 3; icode: 1; threshold: type
both, track by_dst, count 100, seconds 20; sid:1000002;)
#oinkmaster -o
/etc/snort/rules -b
/etc/snort/backup 2>&1
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 courante vont être sauvegardées dans le dossier /etc/snort/backup.
A Noter que le téléchargement des règles de signature Snort nécessite un abonnement
payant, néanmoins il existe une alternative proposé par une communauté libre et dynamique:
http://www.bleedingsnort.com
La différence par rapport aux règles officielles Snort fournit par la société Sourcefire est que,
avec les règles bleedingsnort, les règles sont disponibles gratuitement immédiatement après
leur création.
Pour faciliter la lecture des rapports générés par Snort, il existe des solutions front-end
web comme SnortSnarf, ACID ou encore BASE qui sont des interfaces graphiques écrites en
PHP utilisée pour afficher les logs générés par l'IDS Snort et envoyés dans la base de
données.
3. SYN Cookie / SYN Cache / SYN Proxy
Les « SynCookies » :
La technique de détection des connexions semi-ouvertes peut s’avérer difficilement
applicable, il faut donc chercher d’autres alternatives pour contrer les attaques SYN
FLOODING. Le problème est qu’à chaque fois qu'un paquet SYN est reçu, les
informations concernant la connexion sont stockées dans une file. Une fois que l'attaquant
à envoyer un nombre suffisant de paquets SYN la file se rempli complètement et de
nouvelles connexions ne sont plus possibles, ce qui engendre l'indisponibilité du service.
Il faudrait donc supprimer cette file d'attente. Le serveur n'a en fait pas besoin de stocker
les informations de la connexion, contenues dans le paquet SYN (adresse IP et port du
client et du serveur), vu qu'elles sont également présentes dans le paquet ACK envoyé par
le client. La solution revient donc à utiliser les « SynCookies ». En effet, afin d’éviter de
stocker les informations de la connexion dans une file d’attente, le serveur va se servir du
réseau comme zone mémoire. Ainsi, il va envoyer au client les informations dont il a
besoin pour établir la connexion. Le client les lui retournera, puis il vérifiera si le numéro
d'acquittement du paquet envoyé par le client passe un test de sécurité spécifique pour
créer et établir la connexion.
Pour activer les SYN-cookies sous Linux :
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
Pour les désactiver :
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
Les SynCookies présentent quelques désavantages :
Tout d’abord comme les options de TCP ne sont pas sauvegardées lors de la demande de
connexion, certaines ne seront pas prises en compte. De plus, ils peuvent également poser
des problèmes de sécurité, ainsi un attaquant peut ainsi tenter un ACK flood en espérant
tomber sur quelques cookies, complétant ainsi une connexion et consommant tout de
même des ressources. Enfin, les SynCookies utilisent un peu plus le CPU qu'une
connexion ne les utilisant pas, vu qu’ils doivent générer un numéro de séquence en
utilisant certaines informations du paquet SYN (adresses IP, ports). Mais cela reste
négligeable.
Le « SynCache » :
Contrairement à Linux qui utilise très classiquement les SynCookies comme une solution
de secours suite à un flood détecté sur des queues classiques, les systèmes comme
FreeBSD ont décidé de modifier leur système stockant les états afin de le rendre plus
résistant avant de passer en dernier recours à un mécanisme de SynCookies. FreeBSD
utilise désormais un SynCache pour conserver l'état d'une connexion jusqu'à sa
complétion. Il a donc été décidé de limiter fortement les données conservées en utilisant
une table de hashage, en lieu et place de la classique liste linéaire par sockets, avec les
sockets indexées par bucket via des listes chaînées. Ainsi, en cas de détection de flood, la
plus ancienne entrée (par bucket ou sur la totalité du cache) est supprimée, avant de
basculer sur les SynCookies. Ce mécanisme permet à la fois de diminuer l'occupation
mémoire et d'accélérer le parcours de la structure de données.
N.B : En jargon informatique, on appelle "bucket" ("boîte à confettis"), la "boîte" dans
laquelle les bits disparaissent lorsqu'ils se perdent durant la transmission de données.
Le « SynProxy » :
Normalement, lorsqu’un client ouvre une connexion TCP vers un serveur, le pare-feu relaie
les paquets d'ouverture au fur et à mesure qu'ils arrivent. Ce dernier peut également agir
en tant que mandataire (proxy). Dans ce cas, aucun paquet n'est transmis au serveur avant
que le client n'ait terminé l'échange initial. Ainsi, grâce à cette méthode, le serveur est
protégé contre les attaques SYN FLOOD.
Toutes les connexions à destination du serveur HTTP seront mandatées par le pare-feu.
Malheureusement, l'option synproxy state n’est disponible (par défaut) uniquement sous
Paketfilter (FreeBSD) et non sur Netfilter (Linux); Néanmoins, il est possible de
bénéficier de l’option sous Netfilter en ajoutant des extensions à ce dernier.
B. NETFILTER
Définition :
Netfilter est un module du noyau Linux qui offre la possibilité de contrôler, modifier et filtrer
les paquets IP, et de suivre les connexions. Il fournit ainsi les fonctions de pare-feu, de partage
de connexions internet et d'autorisation du trafic réseau. Iptables est l'interface en "ligne de
commande" permettant de configurer Netfilter.
Fonctionnalité :
Netfilter se présente comme une série de 5 "hooks" (points d'accrochage), sur lesquels des
modules de traitement des paquets vont se greffer. Ces points sont:
NF_IP_PRE_ROUTING
NF_IP_LOCAL_IN
NF_IP_FORWARD
NF_IP_POSTROUTING
NF_IP_LOCAL_OUT
La branche gauche représente le trajet des paquets qui entrent et qui sortent vers et depuis un
processus local (SMB, FTP, HTTP etc.)
La branche de droite représente le trajet des paquets qui traversent notre passerelle dans sa
fonction de routeur.
A travers ces cinq points d'insertion, Netfilter être capable :
D'effectuer des filtrages de paquets, principalement pour assurer des fonctions de
Firewall. Nous pourrons, par exemple, interdire à tous les paquets venant de l'Internet
et s'adressant au port 80 (HTTP) de passer. Notre serveur APACHE est un serveur
Intranet et ne doit pas être accessible depuis l'extérieur. D'effectuer des opérations de NAT
(Network Address Translation). Ces fonctions sont particulièrement utiles lorsque l'on veut
faire communiquer tout ou partie d'un réseau privé, monté avec des adresses IP privées
(192.168.x.x par exemple) avec l'Internet. D'effectuer des opérations de marquage des paquets,
pour leur appliquer un traitement spécial. Ces fonctionnalités sont particulièrement
intéressantes sur une passerelle de réseau d'entreprise, un peu moins pour notre réseau
domestique.
IV. Conclusion
Le Déni de Service est en augmentation, il est donc nécessaire d'investir dans la sécurité
interne en créant un poste ou service dédié au sein de l'entreprise. Leurs deux objectifs
principaux devront être la prévention et le curatif. Le premier sera de mener une veille active
sur les nouvelles attaques et vulnérabilités. Le second objectif, le curatif, devra procéder à un
suivi régulier des différentes mises à jour et être très réactif sur la surveillance des événements
relatés en supervision de l'architecture sécurité.
La réalité du risque est donc évidente, dans ce cas, il peut être intéressant de contracter une
police d'assurances couvrant les pertes éventuelles engendrées par une attaque de ce type.
Tout comme les virus, pour pouvoir contrer les différentes attaques, il faut d’abord que
celle-ci soit créée. On ne combat pas quelque chose qui n’a pas encore été créé. Il faut
avoir été « infecté » une première fois pour pouvoir analyser et stopper ces attaques.
C’est le rôle de plusieurs logiciels décrits dans les précédents chapitres.
V. Index
http://fr.wikipedia.org/wiki/Attaque_par_d%C3%A9ni_de_service#Programmes_disponibles
_sur_Internet
http://www.authsecu.com/dos-attaque-deny-of-service/dos-attaque-deny-
ofservice.php#Les_principales_attaques
http://www.securiteinfo.com/attaques/hacking/ddos.shtml
http://www.securiteinfo.com/attaques/hacking/dos.shtml
http://cr.yp.to/syncookies.html
http://gd.tuwien.ac.at/www.hping.org/manpage.html
http://en.wikipedia.org/wiki/Stacheldraht