
Esfiltrare surrettiziamente dati dal browser tramite DNS
Browsertunnel è uno strumento per esfiltrare dati dal browser utilizzando il protocollo DNS. Ciò viene ottenuto abusando di dns-prefetch, una funzionalità intesa a ridurre la latenza percepita dei siti web eseguendo ricerche DNS in background per domini specificati. Il traffico DNS non appare negli strumenti di debug del browser, non viene bloccato dalla Content Security Policy (CSP) di una pagina e spesso non viene ispezionato dai firewall o proxy aziendali, rendendolo un mezzo ideale per contrabbandare dati in scenari vincolati.
È una tecnica vecchia: il tunneling DNS stesso risale agli anni '90, e Patrick Vananti ha scritto sull'uso di dns-prefetch per questo nel 2016, ma per quanto ne so, browsertunnel è il primo client/server open source pronto per la produzione che ne dimostra l'uso. Poiché dns-prefetch non restituisce alcun dato al javascript del client, la comunicazione tramite browsertunnel è solo unidirezionale. Inoltre, alcuni browser disabilitano dns-prefetch per impostazione predefinita, e in quei casi, browsertunnel fallirà silenziosamente.
Il progetto è composto da due parti:
html/, codifica e invia messaggi dal lato client.Browsertunnel può inviare stringhe arbitrarie tramite DNS codificando la stringa in un sottodominio, che viene inoltrato al server browsertunnel quando il browser tenta di risolvere ricorsivamente il dominio.
I messaggi più lunghi che non possono essere contenuti in un singolo dominio (253 byte) vengono automaticamente suddivisi in più query, che vengono riassemblate e decodificate dal server.
Per prima cosa, configura i record DNS per delegare un sottodominio al tuo server. Ad esempio, se l'IP del tuo server è 192.0.2.123 e vuoi fare tunneling attraverso il sottodominio t1.example.com, la tua configurazione DNS sarà simile a questa:
t1 IN NS t1ns.example.com.
t1ns IN A 192.0.2.123
Sul tuo server, installa browsertunnel usando go get. In alternativa, compila browsertunnel sulla tua macchina e copia il binario sul tuo server.
go get github.com/veggiedefender/browsertunnel
Successivamente, esegui browsertunnel, specificando il sottodominio attraverso cui vuoi fare tunneling.
browsertunnel t1.example.com
Per l'uso completo, esegui browsertunnel -help:
$ 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)
Per descrizioni più dettagliate e la logica di questi parametri, puoi consultare anche la godoc.
Infine, testa il tuo tunnel! Puoi usare la mia pagina demo qui o clonare questo repository e caricare html/index.html localmente. Se tutto funziona, dovresti vedere i messaggi registrati su stdout.
Per applicazioni reali di questo progetto, potresti voler fare un fork e modificare il codice come preferisci. Qualche ispirazione: