SYN cookie

LesSYN cookies(syncookies) sont des valeurs particulières des numéros de séquences initiales générés par unserveur(ISN: Initial Sequence Number) lors d'une demande de connexionTCP. La technique mise en œuvre permet notamment de se défendre contre les attaques parinondation de requêtes SYNet accessoirement parIP spoofing. Elle connaît cependant plusieurs inconvénients tels que la falsification et la perte d'informations du paquet SYN. Plusieurs améliorations ont été proposées afin de pallier ces inconvénients. Des extensions ont également été développées, notamment dans le cadre dumulti-homing.
Un SYN Cookie est un choix particulier de numéro de séquence Initial (ISN) effectué par unserveurlors d'une demande de connexionTCP. Il permet au serveur de sauvegarder l'état des connexions semi-ouvertes dans le numéro de séquence initial renvoyé au client lors de l'initialisation de la connexion. Ce mécanisme permet de se prémunir d'attaque parinondation de requêtes SYNqui cherche, à partir depaquetSYN falsifié avec desadresses sources aléatoires, à allouer la totalité de la mémoire du serveur afin qu'il se trouve dans l'incapacité de pouvoir répondre aux clients légitimes. Cette protection devient active uniquement lorsqu'il y a trop de connexions semi-ouvertes. Néanmoins, la génération et la vérification du SYN cookie consomment beaucoup de ressourcesCPU, ce qui rend cette méthode efficace uniquement en cas d'attaque par inondation de requêtes SYN de faible envergure.
Un SYN cookie est structuré de la manière suivante :
Ce choix de numéro de séquence a été motivé par le fait que le protocole TCP exige que les numéros de séquence augmentent lentement. Dans le cas présent, le numéro de séquence initial du serveur augmente légèrement plus rapidement que le numéro de séquence initial du client.
Le mécanisme exact d'encodage de l'état dans le numéro de séquence SYN+ACK peut dépendre de l'implémentation. SurLinux, les SYN cookies sont encodés de la manière suivante:
syncookie=H(s1,sa,sp,da,dp)+ISNc+(t×224)+(H(s2,sa,sp,da,dp,t)mod224)+MSSi{\displaystyle syncookie=H(s_{1},sa,sp,da,dp)+ISN_{c}+(t\times 2^{24})+(H(s_{2},sa,sp,da,dp,t){\bmod {2}}^{24})+MSS_{i}}
oùISNc{\displaystyle ISN_{c}}représente le numéro de séquence initial du paquet SYN choisi par le client,t{\displaystyle t}représente le compteur de temps de 5 bits augmentant toutes les 64 secondes,MSSi{\displaystyle MSS_{i}}représente une valeur codée duMSScomprise entre0et7,s1{\displaystyle s_{1}}ets2{\displaystyle s_{2}}représentent des clefs secrètes que seul le serveur connaît,H{\displaystyle H}représente une fonction de hachage cryptographique telle queMD5ouSHA-1,sa{\displaystyle sa},sp{\displaystyle sp},da{\displaystyle da}etdp{\displaystyle dp}représentent respectivement l'adressesource, leportsource, l'adresse de destination et le port de destination du paquet SYN.
Le déroulement d'une connexion TCP utilisant SYN Cookie est similaire au déroulement d'une connexion TCP classique. Elle s'effectue à l'aide d'unenégociation en 3 phases:
Le serveur vérifie alors la validité du numéro d'accusé de réception du paquet ACK. S'il est valide, le serveur alloue de la mémoire pour la connexion et passe son état en modeESTABLISHED. Dans le cas contraire, le paquet ACK est rejeté.
Le mécanisme de vérification du numéro de séquence SYN+ACK dépend de l'encodage de celui-ci. SurLinux, les SYN cookies sont vérifiés de la manière suivante:
MSSi2=acknum−seqnum−t×224−H(s1,sa,sp,da,dp)−(H(s2,sa,sp,da,dp,t)mod224){\displaystyle MSS_{i_{2}}=acknum-seqnum-t\times 2^{24}-H(s_{1},sa,sp,da,dp)-(H(s_{2},sa,sp,da,dp,t){\bmod {2}}^{24})}
oùacknum{\displaystyle acknum}etseqnum{\displaystyle seqnum}représentent respectivement le numéro d'accusé de réception et le numéro de séquence du paquet ACK,t{\displaystyle t}représente le compteur de temps de 5 bits augmentant toutes les 64 secondes,s1{\displaystyle s_{1}}ets2{\displaystyle s_{2}}représentent des clefs secrètes que seul le serveur connaît,H{\displaystyle H}représente une fonction de hachage cryptographique telle queMD5ouSHA-1,sa{\displaystyle sa},sp{\displaystyle sp},da{\displaystyle da}etdp{\displaystyle dp}représentent respectivement l'adressesource, leportsource, l'adresse de destination et le port de destination du paquet ACK.
SiMSSi2{\displaystyle MSS_{i_{2}}}est compris entre0et7, le paquet ACK est considéré comme légitime. Le serveur crée alors une connexion avec le MSS correspondant àMSSi2{\displaystyle MSS_{i_{2}}}. Dans le cas où un paquet est falsifié,MSSi2{\displaystyle MSS_{i_{2}}}tend à être très différent d'une valeur comprise entre0et7.
Il a été montré que les SYN Cookies dépendent uniquement dupaquetACK final. En effet, comme leserveurne sauvegarde pas l'état de la connexion, il ne peut savoir si le paquet SYN+ACK a été perdu et ne peut donc pas le retransmettre. Cela constitue une faille de sécurité: un attaquant peut essayer d'inonder le serveur de paquet SYN afin qu'il se décide d'utiliser SYN Cookie. Il peut ensuite inonder le serveur de paquet ACK falsifié, c'est-à-dire de paquet ACK contenant des numéros de séquence aléatoires, en espérant que l'un d'entre-eux soit un SYN Cookie considéré par le serveur comme étant valide.
Il a également été montré qu'il n'est pas nécessaire de deviner les 32bitsdu numéro de séquence initial et que deviner les 24 derniers bits est suffisant. Un attaquant peut donc espérer deviner une valeur correct de SYN Cookie avec une probabilité de1/224{\displaystyle 1/2^{24}}. En effet, puisque ses paquets sont falsifiés avec desadresses IPaléatoires, il ne peut pas savoir si une tentative de connexion a réussi. Si l'attaquant désire falsifier une connexion par minute, il doit envoyer en moyenne224{\displaystyle 2^{24}}paquets ACK, ce qui correspond à un débit de 85 Mb/s. Ce type d'attaque, à la différence d'une attaque parinondation de requêtes SYN, n'a pas pour objectif de consommer la mémoire du serveur. Elle cherche plutôt à consommer sonCPUen lui faisant valider la totalité des SYN Cookies qui, pour la plupart d'entre-eux, sont invalides puisque générés de manière aléatoire. En plus de consommer le CPU du serveur, cette attaque pénalise également sabande passante.
Un inconvénient de l'utilisation des SYN Cookies est qu'il réduit les performances duserveur. En effet, il ne prend pas en compte les paramètres contenus dans le champ « options » lorsque le client envoie son segment SYN. Ces paramètres, tels que la taille d'une fenêtre de réception, l'acquittement sélectif, leRound-Trip Time(RTT), leProtect Against Wrapped Sequences(PAWS)ou leMSSpermettent des communications plus efficaces. Néanmoins, cette perte n'est pas permanente puisque les SYN Cookies ne sont activés uniquement lorsque le serveur subit une attaque, c'est-à-dire lorsque toutes les ressources du serveur sont occupées par des connexions semi-ouvertes. Le reste du temps, les SYN Cookies sont désactivés.
Les autres inconvénients de l'utilisation des SYN Cookies sont :
SurWindows, il est possible d'activer une méthode similaire à SYN Cookie s'appelantSynAttackProtect. Pour ce faire, il faut assigner la valeur recommandée2à la clef de registreSynAttackProtectse trouvant dansHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters. Il est également possible de choisir à partir de quel seuil une attaque parinondation de requêtes SYNsera détectée en modifiant les clefs de registreTcpMaxHalfOpen,TcpMaxHalfOpenRetriedetTcpMaxPortsExhausted.
SurLinux, il est possible de vérifier que les SYN Cookies sont actuellement activés au niveau dunoyausoit en utilisant lacommandesysctl -n net.ipv4.tcp_syncookies, soit en utilisant la commandecat /proc/sys/net/ipv4/tcp_syncookies. Si la valeur retournée par l'une de ces deux commandes est égale à1, les SYN Cookies sont déjà activés. Sinon, il faut éditer le fichier/etc/sysctl.conf, passer la valeurnet.ipv4.tcp_syncookiesà1au lieu de0, et recharger la configuration à l'aide de la commandesysctl -pou redémarrer le serveur.
En 2006, KhakAbi a proposé une amélioration consistant à stocker dans unetable de hachageles informations dupaquetSYN telles que les optionsTCP, la taille des fenêtres et leMSS. Puisque cette méthode sauvegarde l'état des connexions, elle peut utiliser ces informations afin de proposer une connexion optimale. Cela implique également que les SYN Cookies peuvent être utilisés même lorsque leserveurne subit pas d'attaque parinondation de requête SYN. Il n'est plus nécessaire non plus pour le serveur d'avoir un dispositif de détection.
En 2007, plusieurs améliorations ont été proposées. Han Jianyinget al.ont proposé une amélioration consistant à stocker temporairement les informations de base du paquet SYN afin d'identifier leur légalité. Cette amélioration vise à lutter contre l'inondation par requêtes ACK. Bien qu'elle permette de réduire le taux d'occupation duCPU, elle nécessite une consommation d'espace de stockage supplémentaire. Peng Diet al.ont, quant à eux, proposé une amélioration consistant à modifier le processus de réponse du protocole TCP pour le paquet SYN au niveau du système de défense. Cette méthode permet de réduire le temps de vérification du cookie et d'améliorer l'efficacité du système de défense. Cependant, elle n'est applicable que dans le scénario où le système de défense est séparé du serveur.
En 2008, Jian Xiaochunet al.ont proposé une amélioration consistant à attendre la retransmission du paquet SYN du client. Cette méthode permet de réduire les aspects de calcul. Néanmoins, elle nécessite des ressources systèmes supplémentaires car elle implique de maintenir une table de hachage. Elle augmente également le temps de réponse pour une connexion TCP normale.
En 2009, Bo Hanget al.ont proposé une amélioration consistant à modifier l'algorithmeutilisé pour calculer les SYN Cookies. Leur méthode est basée sur 3 composants : le contrôleur, la détection d'attaque et la réponse à l'attaque. C'est en cas de détections d'attaque que le nouvel algorithme est utilisé. Cet algorithme redéfini le numéro de séquence initial de 32 bitsde la manière suivante : un seulbitpour l'horodatage du cookieet 31 bit  pour la valeur du cookie au lieu de 8 bits pour l'horodatage et 24 bits pour la valeur du cookie. Le nouvel algorithme utilise la méthode de chiffrementBlowfishavec une clef de 32 bitsqui est plus rapide que lesfonctions de hachage cryptographique. Cela a grandement réduit la complexité de calcul avec un gain d'environ 30 % sur le temps de calcul du cookie.
Les flow-cookies sont un mécanisme dans lequel unserveur webcoopère avec un intermédiaire, appelécookie box, connecté à un lienhaut débit. Ce mécanisme permet de tirer parti de labande passanteélevée de lacookie boxpour le filtrage depaquet. Tout letraficen provenance ou à destination du serveur Web protégé doit traverser lacookie box. Elle garantit que tous les paquets qui passent entre elle et le serveur appartiennent à un fluxTCPlégitime avec un expéditeur valide. Pour ce faire, lacookie boxva placer un SYN Cookie dans chaque paquet sortant du réseau du serveur. Le serveur web peut également demander à lacookie boxde filtrer l'IPd'un client ayant un comportement anormal.
Le M-SYN cookie est un SYN cookie modifié pour les environnementsmulti-homedincluant le numéro d'identification dupare-feu. Ce dernier est conçu pour partager les états de connexion entre les pare-feux via un choix particulier de numéro de séquenceTCP.
Le M-SYN Cookie utilise l'ID du pare-feu à la place l'index MSS du cookie SYN afin d'enregistrer en toute sécurité les informations de l'expéditeur du cookie. La vérification des paquets SYN+ACK s'effectue par une fonction de hachage par clef. Pour utiliser cette fonction, tous les pare-feux doivent partager la même clef secrète. Protocole d'échange d'état de connexion avec M-SYN Cookie :
Ce protocole permet au pare-feu 1 et au pare-feu 2 de partager les informations de connexion. Les paquets à venir, y compris le paquet ACK correspondant, peuvent passer directement à travers les deux pare-feu.
Une étude a été réalisée sur l'utilisation de SYN Cookie au niveau des systèmes de classe 2, c'est-à-dire des dispositifs de l'internet des objets(IoT) à ressources limitées disposant d'une mémoire de 50 à250 ko. Ces systèmes sont particulièrement vulnérables à ce type d'attaque à cause de la faible quantité de mémoire dont ils disposent. En effet, uneinondation de requêtes SYNà faibledébitou même une augmentation soudaine dutraficentrant peut perturber ce dispositif s'il agit en tant queserveur. Cette étude a montré que les SYN Cookies étaient plus efficace que le recyclage d'anciennes connexions semi-ouvertes pour contrer une attaque par inondation de requête SYN de faible envergure.
Il existe plusieurs alternatives à SYN cookie pour se prémunir d'attaques parinondation de requêtes SYN:
Phil Karn(en)est le premier à avoir conçu unprotocole Internetqui utilise lescookiesafin de se protéger contre lesattaques par déni de service. Le16 septembre 1996,D. J. Bernsteineu l'idée d'utiliser des SYN cookies afin de se prémunir des attaques parinondation de requêtes SYN, considérées jusque là comme un problème insoluble. D. J. Bernstein et Eric Schenk ont travaillé sur les détails d'implémentation au cours des semaines suivantes. Eric Schenk eu l'idée d'ajouter quelque chose au numéro de séquence initial du client afin d'être conforme aux exigences du protocoleTCP. Pour finir, D. J. Bernstein a proposé que les cookies dépendent du temps afin d'empêcher, dans un premier temps, qu'un attaquant puisse collecter des cookies valides sur un ordinateur public et, dans un second temps, les réutiliser depuis un autre endroit. Enoctobre 1996, Jeff Weisberg a publié une implémentation des SYN Cookies pourSunOS. Quelques mois plus tard, enfévrier 1997, Eric Schenk a publié, à son tour, une implémentation des SYN Cookies pourLinux.
: document utilisé comme source pour la rédaction de cet article.