SYN Flood
Un article de SeRoM - Wiki.
Sommaire |
[modifier] Introduction
Le SYN Flood est une attaque réseau de DoS (Deny of Service). Elle va innonder une cible de demande d'ouverture de session de communication avec elle. Cette attaque profite d'une faille du protocole TCP/IP.
L'attaque se base sur la construction de paquets. Vous pouvez aller consulter l'article parlant du packet forging.
[modifier] Rappel théorique du TCP
Pour commencer une communication TCP, le procole demande une ouverure de session. SYN est en faite la valeur du champ Flag d'un paquet TCP pour demande cette ouverture.
[modifier] Ouverture de session TCP
La procédure d'ouverture se déroule en trois points:
A ---------SYN--------> B
A <------SYN+ACK------- B
A ---------ACK--------> B
- Demande de A à B,
- Reponse de B et demande de confirmation,
- Confirmation de A.
[modifier] Déroulement de l'attaque
[modifier] Théorie
Évidement, le sénario précédent est ce qui ce passe dans le meilleur des cas. Admettons maintenant qu'une machine A se fait déconnectée après avoir envoyer un paquet SYN. La machine B après avoir reçu se paquet demande une confirmation, et va rester en attente de réponse. Tout les x temps (time-out) B va renvoyer son SYN+ACK.
A ---------SYN--------> B
A <------SYN+ACK------ B
A <------SYN+ACK------ B
A <------SYN+ACK------ B
A <------SYN+ACK------ B
Le principe de l'attaque est de demander à notre cible un maximum d'ouverture de sessions sans jamais donner confirmation. La machine cible va être submergée de session en cours d'ouverture. Ne pouvant plus ourvire de nouvelle sessions l'interface réseau de la machine est mise hors d'usage.
A noter aussi, pour que l'attaque fonctionne, il faudra envoyer chaque demande avec une adresse source différante. Effectivement, dans le cas contraire, la machine de destination pourrait facilement parrer l'attaque en n'acceptant qu'une ouverture de session par interloquteur. En plus cela permet que l'attaque soit anonyme.
Mais si l'on doit générer des adresses IP sources alléatoirement, il y a des chances que ces adresses existent et réponde! Ce n'est pas un problème en soit pour plusieurs raisons:
- Elles n'existent pas toutes,
- Elles ne sont pas toutes capables de répondre,
- Et pour celles qui répondent, la majorité mettront un certain temps à arriver (Elles doivent être routées à travers plusieurs réseaux avant de pravenir).
[modifier] Pratique
On va créer un petit script qui appel une fonction dans une boucle. Cette fonction sera soit un autre script qui forge le paquet (cfr packet forgering) soit une commande qui le fait pour nous (comme illustré ci-dessous): hping2.
[modifier] Usage d'hping2
hping2 <adresse_dest> -I <interface> -S --rand-source -p <port> -i <intervalle_temps>
Paramètres:
- -I: Interface Ethernet utilisé
- -S: Pour mettre le Flag à SYN
- -p: Port de destination
- -i: L'intervalle de temps (le plus petit permis étant 1micro seconde)
- -q: Pour quiet
- --rand-source: Pour que le champ d'adresse source soit rempli alléatoirement
[modifier] Illustration de SYN flood avec hping2
#! /bin/sh nbX=100 i=0 while test "$i" -lt "$nbX" do hping2 192.168.1.1 -I eth0 -q -i u1 -S --rand-source -p 80 & i=$[$i+1] done
[modifier] Démo en vidéo
Désolé la qualité est assez deg, ... mais bon c'est juste pour illustré un peu!
Dans la vidéo, on va s'attaquer à la machine 192.168.1.7 qui possède un serveur web.
- Je montre que le service web sur 192.168.1.7 est accèessible.
- Je vide le cache du navigateur.
- Je lance ma commande hping2
- Je montre que j'ai toujours accès au réseau et à internet.
- Mais plus moyen d'accéder à notre serveur web 192.168.1.7
- Tout reviens dans l'ordre lors que je tue ma commande hping2
[Demo-SYNFlood.mpeg] (1.9Mo)
[modifier] Conclusion
Cette attaque est très efficace, parce qu'elle ne fait que bloquer l'interface réseau de la machine cible. Le réseau reste très stable et fluide, laissant les mains libres à l'attaquant pour continuer son infiltration. De plus si le reseau reste stable, ça n'éveillera pas les soupsons.

