Analyse technique des vulnérabilités protocolaires TCP/IP en contexte Red Team

Exploration des mécanismes profonds de la suite TCP/IP

La compréhension de la pile TCP/IP ne doit pas se limiter à son fonctionnement nominal. Pour un ingénieur en sécurité, chaque mécanisme de contrôle ou d'optimisation représente une surface d'attaque potentielle. Cette analyse se concentre sur le détournement des comportements standards des protocoles pour la reconnaissance, l'évasion et l'exploitation.

Gestion des flux TCP : Handshake et terminaison

Le protocole TCP (Transmission Control Protocol) repose sur un état de connexion établi via le "Three-way handshake". Ce processus, bien que robuste pour la fiabilité, présente des faiblesses structurelles.

Le Handshake à trois étapes

  1. SYN : Le client envoie un paquet avec le drapeau SYN et un numéro de séquence initial (ISN).
  2. SYN-ACK : Le serveur répond avec SYN et ACK, confirmant la réception et envoyant son propre ISN.
  3. ACK : Le client confirme la connexion.

Vecteurs d'exploitation :

  • SYN Flood (DoS) : En saturant la file d'attente des connexions semi-ouvertes (SYN backlog), un attaquant empêche les utilisateurs légitimes d'établir une connexion. Le serveur attend un ACK qui ne viendra jamais, consommant ses ressources mémoire.
  • Scan furtif (Half-open Scan) : En envoyant un SYN et en analysant la réponse (SYN-ACK pour ouvert, RST pour fermé) sans jamais envoyer le dernier ACK, un attaquant identifie les ports ouverts tout en évitant l'enregistrement de la session complète par certains services de logging applicatifs.

La terminaison en quatre étapes

TCP étant full-duplex, chaque direction de flux doit être fermée indépendamment via des paquets FIN et ACK. L'état TIME_WAIT, conçu pour s'assurer que les paquets retardés ne perturbent pas de nouvelles connexions, peut être exploité pour épuiser les ports éphémères d'un serveur via une attaque par "épuisement de sockets".

Mécanismes de la fenêtre glissante et manipulation de session

La fenêtre glissante régule le débit entre l'émetteur et le récepteur. Elle est intrinsèquement liée aux numéros de séquence.

  • Détournement de session (Hijacking) : Si un attaquant peut prédire le prochain numéro de séquence (ISN), il peut injecter des paquets malveillants dans une session TCP établie. Bien que les systèmes modernes utilisent des ISN aléatoires, des implémentations défectueuses dans certains équipements réseau ou objets connectés (IoT) restent vulnérables.
  • Canaux cachés via Windows Size : Le champ "Window Size" peut être détourné pour exfiltrer discrètement des données en encodant des informations dans les variations de la taille de la fenêtre, contournant ainsi les inspections DPI (Deep Packet Inspection) basées uniquement sur la charge utile (payload).

Fragmentation IP et contournement des systèmes de détection

Lorsque la taille d'un datagramme dépasse le MTU (Maximum Transmission Unit) du lien, le protocole IP fragmente le paquet. La réassemblage inccombe au destinataire final.

Techniques de contournement (Evasion) :

  • Fragmentation pour l'évasion IDS/WAF : En découpant une signature d'attaque (ex: une injection SQL) sur plusieurs fragments IP, un IDS qui n'effectue pas de réassemblage complet en mémoire ne verra que des segments inoffensifs.
  • Attaque Teardrop : Manipulation des décalages (offsets) de fragments pour qu'ils se chevauchent de manière anormale. Lors du réassemblage, certaines piles TCP/IP vulnérables calculent mal la taille du tampon, entraînant un crash système.
  • Chevauchement de fragments (Overlapping) : Envoyer des fragments qui se recouvrent avec des données contradictoires. Selon le système d'exploitation (Windows vs Linux), la méthode de réassemblage diffère (priorité au premier fragment ou au dernier), permettant de tromper un système de sécurité qui n'émule pas parfaitement la pile réseau de la cible.

ICMP : Diagnostic et exfiltration

ICMP est souvent perçu comme un simple outil de diagnostic (Ping). Pour une Red Team, c'est un vecteur de communication privilégié.

  • Tunnels ICMP : Comme ICMP est souvent autorisé par les pare-feu pour le monitoring, il est possible d'encapsuler du trafic TCP ou un Shell distant dans le champ "Data" des paquets Echo Request. Des outils comme icmpsh permettent de maintenir un accès persistant.
  • Redirection ICMP : Un attaquant peut envoyer un message de redirection (Type 5) pour informer une cible qu'un chemin plus court existe via la machine de l'attaquant, facilitant une attaque de type "Man-in-the-Middle" (MitM) sur le réseau local.

Pratique : Manipulation de paquets avec Scapy

Scapy est l'outil de référence pour la forge de paquets sur mesure. Voici comment implémenter les concepts théoriques.

Construction d'un Ping personnalisé

Ce script forge une requête ICMP Echo avec une charge utile spécifique.

from scapy.all import *

# Définition des couches
couche_ip = IP(dst="10.0.0.5")
couche_icmp = ICMP(type=8, code=0)
payload = "Données_sensibles_exfiltrées"

# Assemblage et envoi
paquet = couche_ip / couche_icmp / payload
reponse = sr1(paquet, timeout=2, verbose=False)

if reponse:
    print("Réponse reçue de : " + reponse.src)
    reponse.show()

Scan SYN minimaliste

L'exemple suivant montre comment détecter un port ouvert sans établir de connexion complète.

def scan_port_discret(cible, port):
    # Envoi d'un SYN
    syn_pkt = IP(dst=cible)/TCP(dport=port, flags="S")
    res = sr1(syn_pkt, timeout=1, verbose=0)
    
    if res and res.haslayer(TCP):
        flags = res.getlayer(TCP).flags
        if flags == 0x12: # SYN-ACK détecté
            print(f"Le port {port} est ouvert sur {cible}")
            # Fermeture immédiate par un RST pour rester discret
            send(IP(dst=cible)/TCP(dport=port, flags="R"), verbose=0)
        elif flags == 0x14: # RST/ACK détecté
            print(f"Le port {port} est fermé")

scan_port_discret("192.168.1.10", 443)

Tableau de synthèse : Attaques et Défenses

Mécanisme Vecteur d'attaque Objectif Contre-mesure
Handshake TCP SYN Flood Déni de service (DoS) SYN Cookies, Limitation du débit
Fragmentation IP Chevauchement / Offset Évasion IDS/WAF Inspection à état, Réassemblage strict
Numéro de séquence Prédiction d'ISN Détournement de session Randomisation forte des ISN (RFC 6528)
ICMP Tunneling / Exfiltration Contournement de firewall Filtrage des types ICMP, Analyse de payload

Analyse des files d'attente de connexion

Le Backlog SYN est une structure de données critique. Lorsqu'un serveur reçoit un SYN, il place la connexion dans cette file d'attente en attenadnt le ACK final. Si un attaquant sature cette file, le noyau du système d'exploitation rejette les nouvelles tentatives. La mise en œuvre des SYN Cookies permet de pallier ce problème en ne stockant pas l'état de la conneixon immédiatement, mais en encodant les informations nécessaires dans le numéro de séquence du paquet SYN-ACK.

Détection des anomalies avec Wireshark

Pour identifier ces attaques, l'analyse des flux est essentielle :

  • Un volume élevé de paquets avec l'indicateur tcp.flags.syn == 1 sans ack correspondant est un indicateur fort de SYN Flood.
  • Des paquets ICMP de taille inhabituelle (supérieure à 64-100 octets) peuvent trahir un tunnel de données.
  • L'utilisation de filtres comme ip.frag_offset > 0 permet d'isoler le trafic fragmenté pour une inspection manuelle des tentatives d'évasion.

Étiquettes: TCP-IP networking Scapy red-team Pentesting

Publié le 5 juillet à 00h38