
PacketWhisper: Esfiltrare furtivamente i dati e aggirare l'attribuzione utilizzando query DNS e steganografia testuale. Evita i problemi associati ai tipici metodi di esfiltrazione DNS. Trasferisci dati tra sistemi senza che i dispositivi comunicanti si connettano direttamente tra loro o a un endpoint comune. Nessuna necessità di controllare un server DNS.
PacketWhisper - Trasferisci furtivamente dati e sconfiggi l'attribuzione utilizzando query DNS e steganografia basata su testo, senza la necessità di server dei nomi o domini controllati dall'attaccante; Eludi i dispositivi DLP/MLS; Sconfiggi i controlli di whitelisting dei dati e dei server dei nomi DNS. Converti qualsiasi tipo di file (es. eseguibili, Office, Zip, immagini) in un elenco di Fully Qualified Domain Names (FQDNs), usa le query DNS per trasferire dati. Semplice ma estremamente efficace.
(Aggiornamento 27/05/2020: Sì, migrerò tutti i miei progetti Github a Python3 durante l'estate del 2020.)
Joe Gervais (TryCatchHCF)
L'esfiltrazione DNS tradizionale si basa su uno dei seguenti metodi: tunneling DNS; nascondere i dati nei campi delle query DNS; o payload codificati/cifrati che vengono suddivisi e utilizzati come sottodomini nella query DNS. Tutti questi metodi richiedono che l'attaccante controlli un dominio e/o un server dei nomi DNS associato per ricevere i dati, il che porta all'attribuzione. Questi approcci sono anche vulnerabili al blacklisting (comune) e al whitelisting (sempre più comune) dei server dei nomi DNS. Un altro problema è che gli analisti DFIR conoscono questi metodi e i sistemi SIEM spesso rilevano e segnalano la loro presenza.
PacketWhisper supera queste limitazioni.
E se i dati potessero essere trasferiti utilizzando i server DNS whitelistati del target, senza che i sistemi comunicanti si connettano mai direttamente tra loro o a un endpoint comune? Anche se il confine di rete impiegasse il whitelisting dei dati per bloccare l'esfiltrazione?
Per realizzare tutto ciò, PacketWhisper combina le query DNS con la steganografia basata su testo. Sfruttando il Cloakify Toolset, trasforma il payload in un elenco di stringhe FQDN. PacketWhisper utilizza quindi l'elenco di FQDN per creare query DNS sequenziali, trasferendo il payload attraverso (o all'interno) i confini di rete, con i dati nascosti in bella vista e senza che i due sistemi si connettano mai direttamente tra loro o a un endpoint comune. I cifrari utilizzati da PacketWhisper forniscono molteplici livelli di inganno per evitare di generare allarmi e per fuorviare i tentativi di analisi.
Per ricevere i dati, catturi il traffico di rete contenente le query DNS, utilizzando il metodo più conveniente per te. (Vedi "Catturare il file PCAP" più avanti per esempi di punti di cattura.) Quindi carichi il file PCAP catturato in PacketWhisper (in esecuzione su qualsiasi sistema sia conveniente), che estrae il payload dal file e lo Decloakifica nella sua forma originale.
DNS è un protocollo interessante da utilizzare perché, sebbene sia un mezzo relativamente lento per trasferire dati, il DNS è quasi sempre consentito attraverso i confini di rete, anche nelle reti più sensibili.
Nota importante: Stiamo usando le query DNS per trasferire i dati, non ricerche DNS riuscite. PacketWhisper non ha mai bisogno di risolvere con successo alcuna delle sue query DNS. In realtà PacketWhisper non guarda nemmeno le risposte DNS. Questo amplia i nostri casi d'uso e sottolinea il fatto che non abbiamo mai bisogno di controllare un dominio per cui stiamo eseguendo query, né di controllare un server dei nomi DNS che gestisce le richieste DNS.
Quindi usando PacketWhisper, trasformiamo un payload che assomiglia a questo:
In un elenco di FQDN come questo:
Che PacketWhisper trasforma in query DNS che appaiono nel traffico di rete come questo:
Che catturi come file PCAP in qualsiasi punto del percorso di risoluzione DNS, e poi carichi quel PCAP nella tua copia locale di PacketWhisper per recuperare il payload:
Vedi le slide del DEF CON 26 (incluse nel progetto) della mia presentazione al Packet Hacking Village. Le slide presentano il background sull'esfiltrazione DNS, la steganografia basata su testo / Cloakify Toolset, e come PacketWhisper li combina in un metodo per trasferire dati. Ho creato appositamente le slide per essere utili da sole, quindi il background e le informazioni dovrebbero essere complete. Tuttavia puoi anche guardare il video della mia presentazione al DC26 Packet Hacking Village che fornisce un contesto aggiuntivo.
Ho incluso un file PCAP di esempio nel progetto (chiamato intelligentemente "sample.pcap") che contiene payload separati per ciascuno dei cifrari. Avrebbero potuto essere qualsiasi tipo di file, ovviamente, ma in questo caso ho trasmesso solo file di testo nel PCAP. Caricalo in PacketWhisper e provalo!
Come test rapido nel tuo ambiente, esegui PacketWhisper da una VM, poi invia un file mentre effettui una cattura di pacchetti sull'interfaccia di rete della VM tramite il sistema host. Puoi quindi caricare il file PCAP in qualsiasi istanza di PacketWhisper sia conveniente per decodificare il file. Ricorda solo che non è un trasferimento veloce. File più piccoli e pazienza sono tuoi amici.
Domanda: "Perché non hai usato Scapy o il toolset dnspython?"
Risposta: Odio le dipendenze di progetto nei miei strumenti operativi. Mantengo i miei progetti il più atomici e autonomi possibile per la massima affidabilità, specialmente lato client dove potrei non controllare l'ambiente e/o avere privilegi minimi. Con la struttura di PacketWhisper, posso farlo funzionare su un host shell limitato semplicemente comprimendo il progetto ed estraendolo sull'host di destinazione.
Domanda: "Perché PacketWhisper non è un fork del Cloakify Toolset?"
Risposta: Stessa risposta di sopra. Abbiamo bisogno solo di un sottinsieme molto specifico delle capacità di Cloakify, e aggiungere tutto il resto a PacketWhisper porterebbe solo a una directory disordinata e strumenti/cifrari che PacketWhisper non può utilizzare. Poiché possiedo entrambi i progetti, prometto di sincronizzare eventuali modifiche tra i due.
$ python packetWhisper.py
I cifrari basati su FQDN consistono in 3 categorie:
Sottodomini FQDN unici e casuali
MODALITÀ DI CIFRATURA CONSIGLIATA PER LA MAGGIOR PARTE DEI CASI D'USO
Si tratta di FQDN con elementi casuali incorporati nei sottodomini. Questo aiuta a prevenire la memorizzazione nella cache DNS, consentendo anche di trasferire dati oltre i dispositivi di rete NAT che potrebbero trovarsi lungo il percorso della query DNS. Poiché l'indirizzo IP del sistema mittente non è disponibile oltre il dispositivo NAT, i sottodomini generati dal cifrario contengono elementi tag unici per aiutarci a identificare i payload di PacketWhisper nella cattura di pacchetti.
Questi cifrari imitano i formati di vari servizi che si affidano a sottodomini complessi come mezzo per identificare una sessione, un utente, contenuti memorizzati nella cache, ecc. Questo approccio aiuta le query DNS di PacketWhisper a mimetizzarsi con il resto del traffico di rete.