
Unbemerkt Daten über DNS aus dem Browser exfiltrieren
Browsertunnel ist ein Werkzeug zum Exfiltrieren von Daten aus dem Browser mithilfe des DNS-Protokolls. Dies wird erreicht, indem dns-prefetch missbraucht wird, eine Funktion, die die wahrgenommene Latenz von Webseiten reduzieren soll, indem sie DNS‑Lookups für bestimmte Domains im Hintergrund durchführt. DNS‑Verkehr erscheint nicht in den Debugging‑Werkzeugen des Browsers, wird nicht durch die Content Security Policy (CSP) einer Seite blockiert und wird oft nicht von Unternehmensfirewalls oder Proxys überprüft – ein ideales Medium, um Daten in eingeschränkten Szenarien zu schmuggeln.
Es ist eine alte Technik – DNS‑Tunneling selbst stammt aus den 90er Jahren, und Patrick Vananti schrieb 2016 über die Verwendung von dns-prefetch dafür, aber soweit ich weiß ist browsertunnel die erste quelloffene, produktionsreife Client/Server‑Implementierung, die dies demonstriert. Da dns-prefetch keine Daten an das clientseitige JavaScript zurückgibt, ist die Kommunikation über browsertunnel nur unidirektional. Außerdem deaktivieren manche Browser dns-prefetch standardmäßig, und in diesen Fällen schlägt browsertunnel stillschweigend fehl.
Das Projekt besteht aus zwei Teilen:
html/, die Nachrichten clientseitig kodiert und sendet.Browsertunnel kann beliebige Zeichenketten über DNS senden, indem die Zeichenkette in einer Subdomain kodiert wird, die an den browsertunnel‑Server weitergeleitet wird, wenn der Browser versucht, die Domain rekursiv aufzulösen.
Längere Nachrichten, die nicht in eine einzelne Domain (253 Bytes) passen, werden automatisch in mehrere Abfragen aufgeteilt, die vom Server wieder zusammengesetzt und dekodiert werden.
Richten Sie zunächst DNS‑Einträge ein, um eine Subdomain an Ihren Server zu delegieren. Wenn Ihre Server‑IP beispielsweise 192.0.2.123 lautet und Sie die Subdomain t1.example.com tunneln möchten, sieht Ihre DNS‑Konfiguration wie folgt aus:
t1 IN NS t1ns.example.com.
t1ns IN A 192.0.2.123
Installieren Sie browsertunnel auf Ihrem Server mit go get. Alternativ können Sie browsertunnel auf Ihrem eigenen Rechner kompilieren und die Binärdatei auf Ihren Server kopieren.
go get github.com/veggiedefender/browsertunnel
Führen Sie als Nächstes browsertunnel aus und geben Sie die Subdomain an, durch die getunnelt werden soll.
browsertunnel t1.example.com
Für die vollständige Verwendung führen Sie browsertunnel -help aus:
$ browsertunnel -help
Usage of browsertunnel:
-deletionInterval int
seconds in between checks for expired messages (default 5)
-expiration int
seconds an incomplete message is retained before it is deleted (default 60)
-maxMessageSize int
maximum encoded size (in bytes) of a message (default 5000)
-port int
port to run on (default 53)
Ausführlichere Beschreibungen und die Begründung dieser Parameter finden Sie auch im godoc.
Testen Sie abschließend Ihren Tunnel! Sie können meine Demo‑Seite hier verwenden oder dieses Repository klonen und html/index.html lokal laden. Wenn alles funktioniert, sollten Sie Nachrichten auf stdout sehen.
Für reale Anwendungen dieses Projekts können Sie den Code nach Belieben forken und anpassen. Einige Anregungen: