- SYN cookie
-
Les SYN cookies (syncookies) sont des valeurs particulières des numéros de séquences initiales générés par un serveur (ISN: Initial Sequence Number) lors d'une demande de connexion TCP. La technique mise en œuvre permet notamment de se défendre contre les attaques par inondation de requêtes
SYN
et accessoirement par IP spoofing.Sommaire
Principe
Une demande de session TCP se fait en trois étapes:
- le client envoie au serveur un paquet
SYN
avec un numéro de séquence initial et un numéro d'acquittement nul - le serveur place alors cette requête dans sa file d'attente de connexion et renvoie au client un paquet
SYN|ACK
de numéro de séquence et un numéro d'acquittement égal à - le client répond par un paquet
ACK
de numéro de séquence et un numéro d'acquittement
La connexion est alors établie et le client et le serveur peuvent commencer à échanger des données.
client serveur | flags: SYN=1,ACK=0 SN:56 | |----------------->>-------------------| | flags: SYN=1,ACK=1 SN:90 ACK:57 | création d'un contexte |-------------------<<-----------------| | flags: SYN=0,ACK=1 SN:57 ACK:91 | |-------------------->>----------------| | | connexion établie | |
Même si la procédure de connexion n'est pas encore terminée, le serveur a quand même alloué une ressource pour enregistrer la demande de session du client. Cette propriété est justement exploitée dans les attaques par SYN flooding. En utilisant un SYN cookie, le serveur va se servir du réseau comme zone mémoire. Au lieu de créer directement un contexte localement, 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 enfin un contexte et établir la connexion. La procédure de demande de session se passe alors comme suit.
client serveur | SYN:56 ACK:0 | |------------->>-----------| | SYN:syncookie ACK:57 | |------------<<------------| | SYN:57 ACK:syncookie+1 | |------------>>------------| | |création d'un contexte | |connexion établie
Valeur de syncookie
Étant donné que le champ d'acquittement ne contient que 32 bits[1], les informations envoyées au client sont restreintes, les informations conseillées sont les suivantes[2] :
- les cinq premiers bits contiennent la valeur modulo 32 d'un compteur incrémenté toutes les 64 secondes. Ce champ permet de garantir que la valeur contenue dans le champ
SYN
sera croissante - les trois bits suivant contiennent la valeur codée du MSS[3] négocié (aucun contexte n'a été créé chez le serveur donc le réseau est utilisé pour stocker cette valeur)
- les 24 derniers bits contiennent la valeur d'une fonction gardée secrète par le serveur et qui prend en compte les adresses des deux sites, les numéros de ports utilisés et la valeur du compteur de temps précédent. Ce champ est donc une sorte de signature cryptographique qui permet d'authentifier chaque demande de connexion.
Inconvénients
L'utilisation des syncookies présente quelques désavantages. En effet, comme les options de TCP ne sont pas sauvegardées lors de la demande de connexion, certaines ne seront pas prises en compte. Par exemple, dans l'exemple ci-dessus, la taille de la fenêtre d'émission et le temps de temporisation ne sont pas traités. Ce qui peut entraîner un faible rendement du réseau.
D'un autre côté, les administrateurs soucieux de la sécurité de leur réseau doivent tenir compte de quelques risques qui peuvent subvenir. Étant donné que l'authentification de la connexion est basée uniquement sur la valeur du champ d'acquittement du paquet
ACK
envoyé par le client, si un attaquant arrive à deviner le protocole d'authentification utilisé par le serveur, il peut se faire passer pour n'importe qui. De plus il peut également inonder de paquetsACK
le serveur pour tenter de créer une connexion. Et enfin, un serveur utilisant des syncookies ne pourra pas effectuer un filtrage de paquetsACK
, ce qui peut permettre éventuellement à un attaquant de passer à travers un pare-feu qui filtre les paquetsSYN
de demande de connexion.Paramétrage sous Linux
Sous linux, le paramétrage de ce mécanisme de protection est fait par le paramètre
tcp_syncookies
du fichier sysctl.conf.Notes
Articles connexes
Lien externe
- (en) référence
Catégories :- Sécurité du réseau informatique
- TCP/IP
- le client envoie au serveur un paquet
Wikimedia Foundation. 2010.