SYN Flood

De SeRoM - Wiki
Aller à : navigation, rechercher

Introduction

Le SYN Flood est une attaque réseau de DoS (Deny of Service). Elle va inonder 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.

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.

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.

Déroulement de l'attaque

Théorie

Évidement, le sénario précédent est ce qui ce passe dans le meilleur des cas. Admettons maintenant que la machine A se fasse déconnecter après avoir envoyer un paquet SYN. La machine B demande une confirmation après avoir reçu se paquet, 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 ourvir de nouvelle sessions l'interface réseau de la machine est mise hors d'usage.

À noter aussi, pour que l'attaque fonctionne, il faudra envoyer chaque demande avec une adresse source différente. Effectivement, dans le cas contraire, la machine de destination pourrait facilement parer l'attaque en n'acceptant qu'une ouverture de session par interlocuteur. En plus cela permet que l'attaque soit anonyme.

Mais si l'on doit générer des adresses IP sources alé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:

  1. Elles n'existent pas toutes,
  2. Elles ne sont pas toutes capables de répondre,
  3. Et pour celles qui répondent, la majorité mettront un certain temps à arriver (Elles doivent être routées à travers plusieurs réseaux avant de parvenir).

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 forging) soit une commande qui le fait pour nous (comme illustré ci-dessous): hping2.

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

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

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.

  1. Je montre que le service web sur 192.168.1.7 est accessible.
  2. Je vide le cache du navigateur.
  3. Je lance ma commande hping2
  4. Je montre que j'ai toujours accès au réseau et à internet.
  5. Mais plus moyen d'accéder à notre serveur web 192.168.1.7
  6. Tout revient dans l'ordre lors que je tue ma commande hping2

[Demo-SYNFlood.mpeg] (1.9Mo)

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 réseau reste stable, ça n'éveillera pas les soupçons.