
PacketWhisper: Heimlich Daten exfiltrieren und die Zuordnung mittels DNS-Abfragen und textbasierter Steganographie umgehen. Vermeiden Sie die Probleme, die mit typischen DNS-Exfiltrationsmethoden verbunden sind. Übertragen Sie Daten zwischen Systemen, ohne dass die kommunizierenden Geräte direkt miteinander oder mit einem gemeinsamen Endpunkt verbunden sind. Kein Bedarf, einen DNS-Nameserver zu kontrollieren.
PacketWhisper – Daten unauffällig übertragen und Attribuierung umgehen mithilfe von DNS-Abfragen und textbasierter Steganographie, ohne dass angreiferkontrollierte Nameserver oder Domains benötigt werden; DLP/MLS-Geräte umgehen; Daten- und DNS-Nameserver-Whitelisting-Kontrollen überlisten. Konvertieren Sie jeden Dateityp (z. B. ausführbare Dateien, Office-Dokumente, ZIP-Archive, Bilder) in eine Liste von vollqualifizierten Domainnamen (FQDNs) und übertragen Sie die Daten mittels DNS-Abfragen. Einfach und dennoch äußerst effektiv.
(Update 27.05.2020: Ja, ich werde im Sommer 2020 alle meine Github-Projekte auf Python3 migrieren.)
Joe Gervais (TryCatchHCF)
Herkömmliche DNS-Exfiltration basiert auf einer der folgenden Methoden: DNS-Tunneling; Verstecken von Daten in DNS-Abfragefeldern; oder kodierte/verschlüsselte Nutzdaten, die aufgeteilt und als Subdomains in der DNS-Abfrage verwendet werden. Alle diese Methoden erfordern, dass der Angreifer eine Domain und/oder einen zugehörigen DNS-Nameserver kontrolliert, um die Daten zu empfangen, was zur Attribuierung führt. Diese Ansätze sind auch anfällig für DNS-Nameserver-Blacklisting (üblich) und Whitelisting (zunehmend üblich). Ein weiteres Problem ist, dass DFIR-Analysten mit diesen Methoden vertraut sind und SIEM-Systeme sie häufig erkennen und Alarm schlagen.
PacketWhisper überwindet diese Einschränkungen.
Was wäre, wenn Daten mithilfe der eigenen whitelisteten DNS-Server des Ziels übertragen werden könnten, ohne dass die kommunizierenden Systeme jemals direkt miteinander oder mit einem gemeinsamen Endpunkt verbunden sind? Selbst wenn die Netzwerkgrenze Daten-Whitelisting einsetzt, um Datenexfiltration zu blockieren?
Um dies zu ermöglichen, kombiniert PacketWhisper DNS-Abfragen mit textbasierter Steganographie. Unter Verwendung des Cloakify-Toolsets wird die Nutzlast in eine Liste von FQDN-Strings umgewandelt. PacketWhisper erstellt dann aus der Liste der FQDNs sequenzielle DNS-Abfragen, überträgt die Nutzlast über (oder innerhalb von) Netzwerkgrenzen hinweg, wobei die Daten im Klartext verborgen sind, und ohne dass die beiden Systeme jemals direkt miteinander oder mit einem gemeinsamen Endpunkt verbunden sind. Die von PacketWhisper verwendeten Cipher bieten mehrere Täuschungsebenen, um Warnmeldungen zu vermeiden und Analyseversuche in die Irre zu führen.
Um die Daten zu empfangen, erfassen Sie den Netzwerkverkehr, der die DNS-Abfragen enthält, mit der für Sie bequemsten Methode. (Siehe „Erfassen der PCAP-Datei“ weiter unten für Beispiele von Erfassungspunkten.) Anschließend laden Sie die erfasste PCAP-Datei in PacketWhisper (das auf einem beliebigen System ausgeführt wird), das die Nutzlast aus der Datei extrahiert und in ihre ursprüngliche Form enttarnt (Decloakify).
DNS ist ein attraktives Protokoll, da es – obwohl es eine relativ langsame Methode zur Datenübertragung ist – fast immer über Netzwerkgrenzen hinweg erlaubt ist, selbst in den sensibelsten Netzwerken.
Wichtiger Hinweis: Wir verwenden DNS-Abfragen zur Datenübertragung, nicht erfolgreiche DNS-Auflösungen. PacketWhisper muss niemals eine seiner DNS-Abfragen erfolgreich auflösen. Tatsächlich betrachtet PacketWhisper nicht einmal die DNS-Antworten. Dies erweitert unsere Anwendungsfälle und unterstreicht die Tatsache, dass wir niemals eine Domain, für die wir abfragen, kontrollieren müssen und niemals einen DNS-Nameserver kontrollieren müssen, der DNS-Anfragen bearbeitet.
Mit PacketWhisper verwandeln wir also eine Nutzlast, die so aussieht:
In eine Liste von FQDNs wie diese:
Die PacketWhisper in DNS-Abfragen umwandelt, die im Netzwerkverkehr so erscheinen:
Die Sie als PCAP-Datei an einem beliebigen Punkt entlang des DNS-Auflösungspfads erfassen und dann diese PCAP in Ihre lokale Kopie von PacketWhisper laden, um die Nutzlast wiederherzustellen:
Siehe die DEF CON 26-Folien (im Projekt enthalten) aus meinem Vortrag im Packet Hacking Village. Die Folien bieten Hintergrundinformationen zu DNS-Exfiltration, textbasierter Steganographie / dem Cloakify-Toolset und wie PacketWhisper diese zu einer Methode zur Datenübertragung kombiniert. Ich habe die Folien bewusst so erstellt, dass sie für sich allein nützlich sind, daher sollten die Hintergrundinformationen vollständig sein. Sie können sich jedoch auch das Video meines DC26-Packet-Hacking-Village-Vortrags ansehen, das zusätzlichen Kontext bietet.
Ich habe eine Beispiel-PCAP-Datei in das Projekt aufgenommen (passenderweise „sample.pcap“ genannt), die separate Nutzlasten für jeden der Cipher enthält. Sie hätten natürlich jeder Dateityp sein können, aber in diesem Fall habe ich lediglich Textdateien in die PCAP übertragen. Laden Sie sie in PacketWhisper und probieren Sie es aus!
Als schnellen Test in Ihrer eigenen Umgebung führen Sie PacketWhisper von einer VM aus aus, senden Sie dann eine Datei und führen dabei eine Paketerfassung auf dem Netzwerkinterface der VM über das Hostsystem durch. Anschließend können Sie die PCAP-Datei in eine beliebige PacketWhisper-Instanz laden, um die Datei zu dekodieren. Denken Sie daran, dass es sich nicht um eine schnelle Übertragung handelt. Kleinere Dateien und Geduld sind Ihre Freunde.
Frage: „Warum hast du nicht Scapy oder das dnspython-Toolset verwendet?“
Antwort: Ich hasse Projektabhängigkeiten in meinen operativen Tools. Ich halte meine Projekte so atomar und in sich geschlossen wie möglich, um maximale Zuverlässigkeit zu gewährleisten, insbesondere auf der Client-Seite, wo ich möglicherweise keine Kontrolle über die Umgebung habe und/oder nur minimale Rechte besitze. Durch die Struktur von PacketWhisper kann ich es auf einem eingeschränkten Shell-Host zum Laufen bringen, indem ich das Projekt einfach als Tar-Archiv packe und auf dem Zielhost extrahiere.
Frage: „Warum ist PacketWhisper kein Fork des Cloakify-Toolsets?“
Antwort: Gleiche Antwort wie oben. Wir benötigen nur eine sehr spezifische Teilmenge der Fähigkeiten von Cloakify, und alles andere zu PacketWhisper hinzuzufügen würde nur zu einem überladenen Verzeichnis und Tools/Ciphern führen, die von PacketWhisper nicht verwendet werden können. Da ich beide Projekte betreibe, verspreche ich, alle Änderungen zwischen beiden zu synchronisieren.
$ python packetWhisper.py
FQDN-basierte Cipher bestehen aus 3 Kategorien:
Einzigartige zufällige Subdomain-FQDNs
EMPFOHLENER CIPHER-MODUS FÜR DIE MEISTEN ANWENDUNGSFÄLLE
Hierbei handelt es sich um FQDNs mit randomisierten Elementen, die in die Subdomains eingebaut sind. Dies hilft, DNS-Caching zu verhindern, und ermöglicht gleichzeitig die Übertragung von Daten über NAT-fähige Netzwerkgeräte hinweg, die sich entlang des DNS-Abfragepfads befinden könnten. Da die IP-Adresse des sendenden Systems jenseits des NAT-Geräts nicht verfügbar ist, enthalten die vom Cipher generierten Subdomains eindeutige Tag-Elemente, um uns bei der Identifizierung von PacketWhisper-Nutzlasten im Paketmitschnitt zu helfen.