Bien que le protocole TCP soit un protocole orienté connexion et fiable, il existe néanmoins diverses failles qui peuvent être exploitées. Ces trous de boucle sont principalement expliqués en termes d'attaques.
Dans l'article précédent sur la série des attaques TCP/IP, nous avons expliqué l'empoisonnement du cache ARP.
Cet article explique les deux attaques suivantes :
- Attaque par prédiction de séquence TCP
- Attaques de réinitialisation TCP
Un aperçu de TCP
Avant de se lancer dans les explications des attaques. Permet de développer une compréhension de base du fonctionnement de TCP.
Un en-tête TCP ressemble à ceci :
L'explication ci-dessous explique comment une connexion est établie entre deux hôtes au niveau TCP. C'est ce qu'on appelle la poignée de main à trois. Cette poignée de main est nécessaire avant que tout type de données puisse être envoyé dans chaque direction. Une fois la connexion établie, les données peuvent circuler de manière bidirectionnelle, chaque paquet contenant le numéro de séquence de l'octet de début de données qu'il contient et l'accusé de réception des données reçues.
- Supposons que deux hôtes (A et B) souhaitent communiquer entre eux. Supposons que l'hôte A démarre la communication. Du point de vue TCP, l'hôte A envoie un paquet SYN à l'hôte B.
- Un paquet SYN est un paquet TCP avec l'indicateur SYN activé.
- Sont également mentionnés dans ce paquet le numéro de séquence initial (qui est une valeur générée par le TCP de l'hôte A), le port source, le port de destination, etc.
- Lorsque ce paquet est reçu au niveau de la couche TCP de l'hôte B, cet hôte répond par un paquet TCP avec les indicateurs SYN et ACK activés, le numéro de séquence initial et d'autres informations.
- Lorsque l'hôte A reçoit ce paquet, il vérifie certaines informations telles que l'indicateur SYN, le numéro d'accusé de réception (qui doit être le numéro de séquence initial de l'hôte A + 1), etc., pour vérifier qu'il s'agit d'un paquet attendu de l'hôte B.
- En réponse, l'hôte A envoie un paquet avec l'indicateur ACK activé et le numéro d'accusé de réception défini sur le numéro de séquence initial de l'hôte B + 1.
Nous voyons donc que les numéros de séquence jouent un rôle important dans la communication TCP. Un numéro de séquence est un numéro que TCP associe à l'octet de départ des données dans un paquet particulier. De cette façon, le TCP récepteur garde une trace des données reçues et accuse réception en conséquence. Le numéro d'accusé de réception est toujours le prochain numéro de séquence attendu.
Attaque par prédiction de séquence TCP
Supposons que l'hôte A et l'hôte B communiquent entre eux. Maintenant, disons qu'un attaquant assis entre les deux est en quelque sorte capable de surveiller les paquets entre A et B.
Voyons ce que fait l'attaquant :
- L'attaquant veut attaquer l'Hôte A.
- Il inonde l'Hôte B de nouvelles requêtes provoquant une attaque par déni de service pour empêcher l'Hôte B de communiquer avec A.
- Maintenant, l'attaquant peut prédire le numéro de séquence du paquet que A attend de B.
- L'attaquant prépare ce type de paquet et l'envoie à l'hôte A.
- Comme il s'agit d'un faux emballage, l'hôte A pense qu'il vient de B.
- Maintenant, ce paquet peut être un paquet mettant fin à la connexion ou demandant à l'hôte A d'exécuter des commandes/scripts malveillants, etc.
Ainsi, une connexion peut être piratée par un attaquant.
Une autre façon pourrait être la prédiction de l'ISN (numéro de séquence initial).
Voyons un extrait de la RFC-793 :
Lorsque de nouvelles connexions sont créées, un générateur de numéro de séquence initial (ISN) est utilisé pour sélectionner un nouvel ISN de 32 bits. Le générateur est lié à une horloge 32 bits (éventuellement fictive) dont le bit de poids faible est incrémenté environ toutes les 4 microsecondes. Ainsi, l'ISN effectue un cycle environ toutes les 4,55 heures. Étant donné que nous supposons que les segments ne resteront pas plus longtemps dans le réseau que la durée de vie maximale du segment (MSL) et que la MSL est inférieure à 4,55 heures, nous pouvons raisonnablement supposer que les ISN seront uniques.
Les piles TCP/IP BSD s'éloignent du mécanisme ci-dessus. Les piles TCP/IP BSD augmentent le numéro de séquence de 128 000 chaque seconde et de 64 000 pour chaque nouvelle connexion TCP. Comme vous pouvez l'imaginer, ceci est plus prévisible et peut donc être facilement exploité.
Attaques de réinitialisation TCP
Cette attaque est assez simple à comprendre une fois que l'attaque ci-dessus est claire pour vous. Dans cette attaque :
- Une fois que l'attaquant est capable de détourner une session TCP (comme indiqué ci-dessus), cette attaque peut être lancée.
- L'attaquant envoie des paquets avec l'indicateur RST activé à la fois à A et à B ou à l'un des hôtes.
- Étant donné que A et B ne savent pas qu'un attaquant a envoyé ces paquets, ils traitent ces paquets normalement.
- Puisqu'il s'agit de paquets réinitialisés, la connexion entre A et B est interrompue.
Nous pouvons donc voir que les attaques de réinitialisation TCP visent à mettre fin à une connexion TCP valide entre deux hôtes.