di Matteo Chiodo
Nel breve LABORATORIO che segue verranno illustrati i principali passaggi manuali per poterlo verificare, senza la necessità di configurare un server DNS fake.
Il traffico DNS viene generalmente consentito sugli strumenti di sicurezza aziendali, eventualmente viene monitorato e controllato attraverso l’utilizzo di strumenti di DNS security presenti sulle diverse soluzioni (vedi Firewall, Secure Web Gatweway…).
Per questo motivo il protocollo DNS viene utilizzato dai criminali informatici per nascondere le comunicazioni malevole.

Alcune info in merito alle limitazioni del protocollo DNS di cui tenere conto:
- La lunghezza massima del nome di dominio Fully Qualified FQDN (compresi i separatori .) è di 255 caratteri.
- La lunghezza del nome di sottodominio (etichetta) non deve superare i 63 caratteri (esclusi .com, .net, ecc.).
Sulla base di queste limitazioni, possiamo utilizzare un numero limitato di caratteri, per query, per trasferire i dati.
Vediamo ora i prerequisiti e l’architettura necessaria per poter procedere con l’esfiltrazione dei dati da un host compromesso sfruttando il protocollo DNS:
- La registrazione di un nome di dominio (meteolabs.com).
- Un server con Ip pubblico (194.31.150.140).

Dove
- Local DNS server (DNS forwarder): 172.20.4.20
- FAKE Auth DNS for sub.moteolabs.com: 194.31.150.140
- Compromised local machine: 10.10.2.31
Dobbiamo ora fare in modo che tutte le richieste DNS verso moteolabs.com vengano instradate verso il nostro Ip pubblico.
Per farlo, dobbiamo delegare una zona (sub) aggiungendo un record NS nel DNS che serve il nostro dominio, come riportato di seguito:

È stato definito un record A per risolvere ns1.moteolabs.com nell’IP pubblico del server, è stato inoltre delegata l’intera zona sub.moteolabs.com al nameserver su ns1.moteolabs.com.
In questo modo, tutte le richieste al nome di dominio .sub.moteolabs.com arriveranno al nostro server.
LET’S START!
Verifichiamo ora che sia tutto corretto eseguendo una richiesta per ottenere l’Ip address del NS di sub.moteolabs.com:

creiamo ora il file che verrà utilizzato per il test di esfiltrazione: secret.txt.
Per esigenze di copione verrà utilizzato un file molto piccolo, che potrà essere esfiltrato con poche queries Dns.

Per inviare il contenuto del file, è necessario convertirlo utilizzando una qualsiasi codifica come Base64, Hex, ecc.
Abbiamo inoltre la necessità di divider il file in una o più richieste DNS a seconda della lunghezza dell’output (limitazioni DNS) e allegarlo come nome di sottodominio.

Pertanto, il comando precedente si occuperà di codificare Base64 il contenuto del file, suddividerlo in chunk (tenendo conto delle limitazioni del protocollo), appendere ad ogni chunk il suffisso .sub.moteolabs.com, salvare quindi il risultato nel file DNSQ.txt.
Di seguito l’output del comando:

Sul server remoto, senza la necessità di dover configurare un server DNS, eseguiamo il comando tcpdump in ascolto sulla porta 53

Verifichiamo ora come qualsiasi query DNS eseguita dal client compromesso verso .sub.moteolabs.com arrivi al nostro server DNS fake.

Sul server DNS fake possiamo verificare la query DNS norecord.sub.moteolabs.com, che sarà ovviamente rifiutata.

Procediamo ora con esfiltrare il contenuto del file secret.txt, utilizzando il comando dig con il file precedentemente creato contenente i diversi chunk che saranno utilizzati per eseguire queries DNS verso il nostro server fake.

Nel nostro esempio il comando eseguirà 11 queries DNS verso il nostro server DNS fake, ognuna contenente una parte (chunk) cifrata del file secret.txt.
Con wireshark otteniamo visualizzazione completa delle queries DNS generate dall’esecuzione del comando #dig -f DNSQ.txt.

Sul server remoto vengono visualizzate le queries DNS ricevute dall’host compromesso.

Sempre per esigenze di copione il contenuto del dump viene salvato in un file da dove saranno estratti e riassemblati i chunk, in modo da riottenere la stringa base64 originale che verrà quindi decodificata.

Come anticipato si tratta di un laboratorio basilare eseguito in maniera completamente manuale, tutto il processo può essere automatizzato con l’ausilio di appositi scripts.
Per testare gli strumenti di DNS Security presenti nel vostro ecosistema è possibile giocare con i diversi elementi che collaborano alla costruzione delle queries DNS, come ad esempio il tipo di codifica da utilizzare e\o il numero di volte in cui la codifica deve essere implementata, così come la frequenza delle queries stesse.
È inoltre possibile intervenire sulla lunghezza dei diversi chunk, di conseguenza sulla lunghezza delle queries DNS, in modo da non utilizzare queries DNS tutte della stessa lunghezza.
Domain Generation Alghoritm (DGA) è una ulteriore tecnica utilizzata dagli aggressori informatici per generare nuovi nomi di dominio e indirizzi IP per i server di comando e controllo del malware.
In rete sono presenti diversi strumenti free che permettono di effettuare diversi test in maniera più o meno approfondita con un minimo di effort:
- dnsteal
- dnsexfiltrator
- dnscat2
di Matteo Chiodo
BSG partner of EfficientIP