Menu Fermer

SYN Flood : Explications et Protections

Une attaque par déni de service distribué SYN est un type d’attaque DDoS qui affecte le protocole TCP à la couche 4 du modèle OSI et tente de mettre hors ligne la cible.
Connue sous le nom d'”attaque semi-ouverte”, l’attaque SYN flood exploite une vulnérabilité courante dans la poignée de main TCP/IP pour submerger un serveur de connexions TCP, l’empêchant ainsi de fournir un service au trafic légitime et aux connexions légitimes.
Ce type de cyberattaque peut mettre hors service des dispositifs capables de maintenir des dizaines de millions de connexions.

Dans ce tutoriel, je vous explique comment fonctionne le SYN Flood et comment s’en protéger.

SYN Flood : Explications et Protections

Qu’est-ce qu’un SYN Flood

C’est une attaque de type DOS (Deni de service) qui vise à saturer la couche réseau ou ressources de la cible.

Les attaques SYN flood fonctionnent en exploitant le processus de poignée de main d’une connexion TCP.
Il convient donc de connaître le principe en lisant ce tutoriel :

Les connexions TCP sont établies au moyen d’une poignée de main à trois voies.
Les attaquants souhaitant lancer une inondation SYN usurpent leur adresse IP dans l’en-tête du paquet SYN envoyé au serveur, de sorte que lorsque le serveur répond avec son paquet SYN/ACK, celui-ci n’atteint jamais sa destination (d’où un ACK serait envoyé et la connexion établie).
Le serveur laisse ces connexions non établies dans une file d’attente pendant une période de temps prédéterminée, après quoi elles sont tout simplement rejetées. Cependant, si un nombre suffisant de ces “fausses” connexions encombrent la file d’attente (backlog), cela peut empêcher le traitement de nouvelles demandes légitimes.

L’attaque SYN Flood : comment ça marche

L’attaquant envoie un volume élevé de paquets SYN au serveur ciblé, souvent avec des adresses IP usurpées (Spoofing IP).
Le serveur répond ensuite à chacune des demandes de connexion par un SYN/ACK à la fausse adresse.
Pendant que le serveur attend le dernier paquet ACK, qui n’arrive jamais, l’attaquant continue à envoyer d’autres paquets SYN.
Le paquet ACK final n’arrive jamais, et le serveur maintient un nombre croissant de connexions par port ouvert. Une fois que tous les ports disponibles ont été ouverts, le serveur ne peut plus fonctionner normalement et il devient extrêmement difficile de gérer le numéro de séquence TCP pour les utilisateurs réels.

L'attaque du Syn Flood : comment ça marche

Lorsqu’une attaque SYN Flood a lieu, netstat ou ss affiche un grand nombre de connexion avec l’état SYN_RECV.

Syn flood : SYN_RECV important dans netstat

En résumé, pour créer une attaque DoS de type SYN Flood, un attaquant exploite le fait qu’après avoir reçu un paquet SYN initial, le serveur répondra avec un ou plusieurs paquets SYN/ACK et attendra la dernière étape de la poignée de main qui n’arrivera jamais.
Cela peut saturer la couche réseau de l’OS qui ne pourra plus gérer de nouvelles connexions.
Pire encore, si le serveur est trop surchargé, les ressources systèmes (CPU, mémoire) seront totalement saturés.

Quels sont les types de SYN Flood

Voici les trois principaux types de Syn Flood :

  • Adresses IP non usurpées. L’attaque provient d’une même source et adresse IP. Elle est plus facile à bloquer puisqu’il suffit de la filtrer avec un firewall
  • Adresses IP usurpées. Dans cette approche, les attaquants usurpent l’adresse IP source d’un serveur ou d’un appareil connecté à Internet de confiance, ce qui rend plus difficile le traçage des paquets et la prévention de l’attaque
  • Adresses IP distribuées. Cette forme d’attaque SYN flood utilise un botnet pour envoyer des paquets malveillants à partir d’un réseau distribué de dispositifs infectés qui peuvent utiliser leur propre adresse IP ou une adresse usurpée pour lancer une attaque plus complexe, de plus grande envergure et plus difficile à limiter

Pour rendre l’attaque encore plus dévastatrice, l’attaquant peut utiliser une usurpation d’adresse IP (spoofed IP Adresses).
Pour cela, il utilise des outils qui permet de forger des paquets IP avec des adresses IP aléatoires dans l’en-tête.
Lorsque cela se produit, les paquets SYN/ACK du serveur vont à un tiers non impliqué.
Lorsque la machine tiers reçoit un paquet SYN/ACK d’un serveur sans avoir auparavant envoyé un paquet SYN à ce serveur, la machine envoie un paquet RST (RST = “reset”), mettant ainsi fin à la connexion.
Un attaquant malin veut aussi empêcher cela afin de garder le plus grand nombre possible de connexions semi-ouvertes sur le serveur cible.

Blocage Syn Flood (Spoofed IP) par iptables

Comment se protéger des attaques SYN Flood ?

Vous pouvez mitiger des attaques DOS du type SynFlood en jouant sur les éléments suivants :

  • Limiter le nombre de demandes SYN ou de paquets SYN par seconde pouvant être envoyés à un serveur à un moment donné. Iptables le fait très bien
  • Configurer d’une file d’attente plus importante pour augmenter le nombre de connexions “semi-ouvertes” autorisées. Sur Linux, par exemple avec net.ipv4.tcp_max_syn_backlog
  • Les cookies SYN qui utilisent un hachage cryptographique dans le paquet ACK pour vérifier les connexions avant d’allouer des ressources mémoire, c’est-à-dire des méthodes anti-spoofing
  • RST Cookies : Pour la première demande du client, le serveur envoie intentionnellement un SYN-ACK invalide. Le client génère alors un paquet RST, qui indique au serveur que quelque chose ne va pas. Si ce paquet est reçu, le serveur sait que la demande est légitime, enregistre le client et accepte les connexions entrantes suivantes
  • Recycler connexion semi-ouverte la plus ancienne pour créer de l’espace pour les nouvelles connexions et garantir que les systèmes restent accessibles pendant les attaques par inondation
  • Vous pouvez aussi placer votre serveur dans un environnement Cloud ou derrière un CDN du type Cloudflare, Sucuri ou Imperva

De nos jours, la plupart des hébergeurs intègrent des protections DDoS (Arbor, etc). C’est le cas d’OVHCloud ou Scaleway : Attaques DoS et Anti-DoS OVH

Enfin vous pouvez aussi mettre en place des règles Iptables pour atténuer ce type d’attaque :