
PacketWhisper : Exfiltrez furtivement des données et déjouez l'attribution en utilisant des requêtes DNS et de la stéganographie textuelle. Évitez les problèmes associés aux méthodes d'exfiltration DNS typiques. Transférez des données entre des systèmes sans que les appareils communicants se connectent directement entre eux ou à un point de terminaison commun. Pas besoin de contrôler un serveur de noms DNS.
PacketWhisper - Transférez discrètement des données et évitez l'attribution en utilisant des requêtes DNS et la stéganographie basée sur du texte, sans nécessiter de serveurs de noms ou de domaines contrôlés par l'attaquant ; contournez les dispositifs DLP/MLS ; déjouez les contrôles de listes blanches de données et de serveurs de noms DNS. Convertissez tout type de fichier (exécutables, Office, Zip, images) en une liste de noms de domaine pleinement qualifiés (FQDN), utilisez les requêtes DNS pour transférer les données. Simple mais extrêmement efficace.
(Mise à jour du 27/05/2020 : Oui, je vais migrer tous mes projets Github vers Python3 au cours de l'été 2020.)
Joe Gervais (TryCatchHCF)
L'exfiltration DNS traditionnelle repose sur l'une des méthodes suivantes : le tunneling DNS ; le masquage de données dans les champs de requête DNS ; ou des charges utiles encodées/chiffrées qui sont divisées et utilisées comme sous-domaines dans la requête DNS. Toutes ces méthodes nécessitent que l'attaquant contrôle un domaine et/ou un serveur de noms DNS associé pour recevoir les données, ce qui conduit à l'attribution. Ces approches sont également vulnérables à la liste noire (courante) et à la liste blanche (de plus en plus courante) des serveurs de noms DNS. Un autre problème est que les analystes DFIR connaissent ces méthodes, et les systèmes SIEM les détectent et émettent souvent des alertes lorsqu'ils les voient.
PacketWhisper surmonte ces limitations.
Et si les données pouvaient être transférées en utilisant les propres serveurs DNS mis en liste blanche de la cible, sans que les systèmes communicants ne se connectent jamais directement les uns aux autres ou à un point de terminaison commun ? Même si la frontière réseau employait une liste blanche de données pour bloquer l'exfiltration ?
Pour y parvenir, PacketWhisper combine les requêtes DNS avec la stéganographie textuelle. En s'appuyant sur le Cloakify Toolset, il transforme la charge utile en une liste de chaînes FQDN. PacketWhisper utilise ensuite cette liste de FQDNs pour créer des requêtes DNS séquentielles, transférant la charge utile à travers (ou à l'intérieur) les frontières réseau, avec les données cachées à la vue de tous, et sans que les deux systèmes ne se connectent jamais directement l'un à l'autre ou à un point de terminaison commun. Les chiffrements utilisés par PacketWhisper offrent plusieurs niveaux de tromperie pour éviter de générer des alertes ainsi que pour induire en erreur les tentatives d'analyse.
Pour recevoir les données, vous capturez le trafic réseau contenant les requêtes DNS, en utilisant la méthode la plus pratique pour vous. (Voir 'Capturer le fichier PCAP' ci-dessous pour des exemples de points de capture.) Vous chargez ensuite le fichier PCAP capturé dans PacketWhisper (fonctionnant sur le système de votre choix), qui extrait la charge utile du fichier et la Décloakifie pour la retrouver dans sa forme originale.
DNS est un protocole intéressant à utiliser car, même s'il s'agit d'un moyen relativement lent de transférer des données, DNS est presque toujours autorisé à travers les frontières réseau, même sur les réseaux les plus sensibles.
Note importante : Nous utilisons les requêtes DNS pour transférer les données, pas les résolutions DNS réussies. PacketWhisper n'a jamais besoin de résoudre avec succès l'une de ses requêtes DNS. En fait, PacketWhisper ne regarde même pas les réponses DNS. Cela élargit nos cas d'utilisation et souligne le fait que nous n'avons jamais besoin de contrôler un domaine pour lequel nous faisons une requête, ni de contrôler un serveur de noms DNS traitant les requêtes DNS.
Ainsi, avec PacketWhisper, nous transformons une charge utile qui ressemble à ceci :
En une liste de FQDNs comme ceci :
Ce que PacketWhisper transforme en requêtes DNS qui apparaissent dans le trafic réseau comme ceci :
Que vous capturez sous forme de fichier PCAP n'importe où sur le chemin de résolution DNS, puis chargez ce PCAP dans votre copie locale de PacketWhisper pour récupérer la charge utile :
Voir les diapositives DEF CON 26 (incluses dans le projet) de ma présentation Packet Hacking Village. Les diapositives présentent le contexte de l'exfiltration DNS, la stéganographie textuelle / Cloakify Toolset, et comment PacketWhisper les combine pour créer une méthode de transfert de données. J'ai spécifiquement conçu les diapositives pour être utiles seules, donc le contexte et les informations devraient être complets. Cependant, vous pouvez également regarder la vidéo de ma présentation DC26 Packet Hacking Village qui fournit un contexte supplémentaire.
J'ai inclus un fichier PCAP d'exemple dans le projet (astucieusement nommé 'sample.pcap') qui contient des charges utiles distinctes pour chacun des chiffrements. Ils auraient pu être n'importe quel type de fichier, bien sûr, mais dans ce cas, j'ai simplement transmis des fichiers texte dans le PCAP. Chargez-le dans PacketWhisper et essayez-le !
Pour un test rapide dans votre propre environnement, exécutez PacketWhisper depuis une VM, puis envoyez un fichier tout en effectuant une capture de paquets sur l'interface réseau de la VM via le système hôte. Vous pouvez ensuite charger le fichier PCAP dans l'instance PacketWhisper qui vous convient pour décoder le fichier. Souvenez-vous que ce n'est pas un transfert rapide. Les fichiers plus petits et la patience sont vos alliés.
Question : 'Pourquoi n'avez-vous pas utilisé Scapy ou la bibliothèque dnspython ?'
Réponse : Je déteste les dépendances de projet dans mes outils opérationnels. Je garde mes projets aussi atomiques et autonomes que possible pour une fiabilité maximale, surtout côté client où je peux ne pas contrôler l'environnement et/ou avoir des privilèges minimaux. Grâce à la structure de PacketWhisper, je peux le faire fonctionner sur un hôte shell limité simplement en tarant le projet et en l'extrayant sur l'hôte cible.
Question : 'Pourquoi PacketWhisper n'est-il pas un fork du projet Cloakify Toolset ?'
Réponse : Même réponse que ci-dessus. Nous n'avons besoin que d'un sous-ensemble très spécifique des capacités de Cloakify, et ajouter tout le reste à PacketWhisper ne ferait qu'encombrer le répertoire et ajouter des outils/chiffrements qui ne peuvent pas être utilisés par PacketWhisper. Comme je possède les deux projets, je promets de synchroniser les changements entre les deux.
$ python packetWhisper.py
Les chiffrements basés sur les FQDN comprennent 3 catégories :
FQDNs à sous-domaines aléatoires uniques
MODE DE CHIFFREMENT RECOMMANDÉ POUR LA PLUPART DES CAS D'UTILISATION