Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
secret_handshake — Um protótipo de canal C2 de malware usando certificados x509 sobre mTLS | Kitploit
Ferramentas/GitHubGitHub/jconwell/secret_handshake
Evasão de IDS/IPSExfiltração de DadosComando e ControleRed Teaming
GitHubjconwell/secret_handshake

secret_handshake

Um protótipo de canal C2 de malware usando certificados x509 sobre mTLS

Ver Repositório
153153há 2 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Secret Handshake - Um Canal C2 de Malware Usando Certificados x509 Sobre mTLS

Motivação

Em primeiro lugar, por que eu disponibilizaria isso como código aberto?

A MITRE ATT&CK fala apenas sobre certificados roubados ou autoassinados, e os NDRs (até onde eu sei) prestam muito pouca atenção ao conteúdo dos certificados x509 fora de quem é a CA emissora. Em geral, os certificados x509 são confiáveis e têm permissão para passar pelos nossos firewalls impunemente. Mas, na essência, são apenas arquivos que podem facilmente conter payloads maliciosos como qualquer outro. Nós os confiamos e ignoramos porque são um componente central de um processo de criptografia que passamos a considerar natural. O principal objetivo deste projeto é trazer maior conscientização para uma classe de indicador de segurança em que passamos a confiar, e destacar métodos que podem ser usados para detectar usos maliciosos dela.

Contexto

Sempre me perguntei se atores de ameaças já usaram certificados x509 como parte de sua comunicação C2, não para criptografar o tráfego de rede, mas para realmente embutir a comunicação C2 no certificado x509. Depois de procurar por algo assim no mundo real por 5 anos, finalmente decidi codificar eu mesmo para ver se é possível... e é.

Cada mensagem criptografada enviada por HTTPS/TLS é viabilizada pela transferência de um certificado x509. Ao estabelecer um handshake TLS (figura abaixo), durante o quarto passo o servidor envia seu certificado x509 ao cliente. O cliente verifica o certificado, compara os algoritmos de criptografia que o servidor suporta e escolhe qual algoritmo usar para toda comunicação posterior.

Figura 1

Como este diagrama mostra, esta é apenas uma transferência unidirecional do certificado x509 do servidor para o cliente. Isso não se presta bem à comunicação C2 porque não há como o cliente responder de volta ao servidor. Na melhor das hipóteses, só poderia ser usado como um mecanismo de transferência de dados unidirecional (veja a seção de trabalhos anteriores abaixo).

Mas existe outro tipo de sessão TLS chamado Autenticação TLS mútua (mTLS), em que tanto o cliente quanto o servidor trocam certificados x509 como forma de autenticar um ao outro.

Figura 2

Como a figura acima mostra, durante a autenticação mútua, o certificado x509 do servidor é enviado ao cliente para autenticação e, em seguida, o certificado x509 do cliente é enviado ao servidor para autenticação. Essa troca de artefatos representa uma oportunidade de criar um canal de comunicação bidirecional para servidores C2.

Criando um canal de comunicação bidirecional via certificados x509

Como os certificados do servidor e do cliente são trocados pela biblioteca SSL subjacente, não há oportunidade para o cliente extrair a mensagem do certificado do servidor, executar o comando e gerar um certificado de resposta tudo dentro de uma única conexão mTLS. Isso significa que o canal C2 precisa ser projetado de forma que a troca de solicitação-resposta ocorra em duas conexões TLS mútuas diferentes, algo como um modo de transmissão pseudo-half duplex.

Figura 3

O processo de solicitação/resposta segue as seguintes etapas:

  • Etapa 1: tanto o cliente quanto o servidor C2 geram seus respectivos certificados. O certificado do cliente contém uma mensagem genérica de “beacon”, e o certificado do servidor contém o comando que ele quer que o cliente execute. Se não houver nenhum comando para o cliente executar, o servidor gera um certificado genérico de “sleep” para dizer ao cliente por quanto tempo dormir antes do próximo beacon.
  • Etapa 2: tanto o cliente quanto o servidor C2 configuram um socket de rede com os certificados gerados na etapa 1.
  • Etapa 3: o cliente estabelece uma conexão com o servidor.
  • Etapa 4: os certificados do servidor e do cliente são trocados durante o handshake mTLS.
  • Etapa 5: tanto o servidor quanto o cliente fecham seus respectivos sockets.
  • Etapa 6: o cliente extrai o comando a ser executado do certificado do servidor. Como o certificado do cliente contém apenas uma mensagem genérica de “beacon”, o servidor o descarta.
  • Etapa 7: O cliente executa o comando e coleta a saída do comando.
  • Etapa 8: tanto o cliente quanto o servidor C2 geram seus respectivos certificados. O certificado do cliente contém a saída do comando que acabou de executar, e o servidor gera um certificado genérico de “sleep” para dizer ao cliente por quanto tempo dormir antes do próximo beacon.
  • Etapa 9: tanto o cliente quanto o servidor C2 configuram um socket de rede com os certificados gerados na etapa 8.
  • Etapa 10: o cliente estabelece uma conexão com o servidor.
  • Etapa 11: os certificados do servidor e do cliente são trocados durante o handshake mTLS.
  • Etapa 12: tanto o servidor quanto o cliente fecham seus respectivos sockets.
  • Etapa 13: o cliente extrai a duração do sleep do certificado do servidor, e o servidor extrai a saída do comando do certificado do cliente.
  • Etapa 14: o cliente dorme pelo intervalo especificado pelo servidor.

Trabalhos Anteriores

Depois que consegui fazer isso funcionar, fiquei muito orgulhoso de mim por ser todo criativo e tal.

Então me deparei com esta palestra da BSides em 2018 por Jason Reaves, que escreveu um dropper de binário de malware usando certificados x509 sobre TLS. Um ano depois, Jason publicou este artigo detalhando um canal de comunicação bidirecional completo usando mTLS.

Instruções Para Executar

O mTLS exige que tanto os certificados do cliente quanto os do servidor sejam assinados pelo mesmo certificado CA, então o primeiro passo é gerar seu próprio par de chave privada / certificado CA

Crie a chave privada da CA raiz:

openssl genrsa -des3 -out hmCA.key 2048

nota: A frase secreta impedirá que qualquer pessoa que obtenha sua chave privada gere um certificado raiz próprio.

Crie o certificado da CA raiz

openssl req -x509 -new -nodes -key hmCA.key -sha256 -days 1825 -out hmCA.pem

Copie os arquivos de chave e certificado gerados para a pasta certs/ca_certs. O projeto vem com um par de chave/certificado de demonstração, então você pode pular esta etapa se quiser.

Inicie o cliente:

python client.py

Inicie o servidor:

python server.py

Detecções

Nunca quero lançar algo potencialmente malicioso sem também detalhar como detectá-lo em seus logs de rede.

Você pensaria que detectar esse tipo de padrão TLS seria fácil, mas não é tão simples assim. Um dos principais indícios desse canal C2 é seu estilo de comunicação half-duplex; são necessários dois fluxos de autenticação mútua para completar uma solicitação/resposta completa entre o servidor e o cliente. Isso então acontecerá várias vezes, conforme o servidor envia diferentes comandos ao cliente.

Isso significa que você deve procurar por:

  • Múltiplas sessões mTLS entre o mesmo IP de origem e destino, provavelmente na mesma porta, embora não seja difícil configurar isso para usar portas diferentes por conexão mTLS.
  • Como o padrão de solicitação-resposta exige duas sessões mTLS por comando do servidor, procure por 2 sessões mTLS relativamente próximas, com uma pausa mais longa entre o próximo par de sessões mTLS.
  • Procure por tempos de sleep e jitter entre pares de sessões mTLS da mesma forma que você faria em qualquer outro canal C2
  • Os hashes dos certificados devem ser diferentes para cada sessão mTLS, pois novos certificados são gerados por sessão
  • Os certificados não serão emitidos por autoridades certificadoras confiáveis
  • Os tamanhos em bytes dos certificados x509 também variarão por sessão. Certificados pequenos do servidor devem indicar comandos sendo enviados ao cliente, mas certificados maiores provavelmente indicariam o download de um binário malicioso. Os certificados do cliente provavelmente variarão mais de tamanho do que os certificados de comando do servidor, já que eles embutem a saída do comando. Certificados grandes do cliente indicariam exfiltração de dados.
  • Se houver múltiplas sessões mTLS entre os mesmos IPs de origem e destino em um curto período de tempo, verifique se às vezes certificados com o mesmo hash são enviados. Isso pode indicar reutilização de certificados de comando/resposta, como um certificado de cliente “beacon” ou um certificado de servidor “sleep”.

Isso parece um conjunto de regras de detecção infalíveis, mas como eu disse antes, não é tão fácil. Acontece que há um conjunto de serviços empresariais que também têm um padrão de tráfego mTLS semelhante, incluindo

  • Tanium
  • Microsoft System Center Configuration Manager (SCCM)
  • Microsoft Monitoring Agent
  • Azure Hybrid Runbook Worker
  • Palo Alto Networks
  • MuleSoft
  • TrustedSource
  • Cohesity Helios
  • EMC's Global Security Organization
  • Alert Logic

Vários desses parecem ser serviços de gerenciamento de ativos/dispositivos, então, em teoria, eles deveriam enviar o mesmo conjunto de certificados toda vez que passam por todos os seus dispositivos. Você poderia verificar se há conjuntos de múltiplas sessões mTLS se repetindo a cada N horas e, em seguida, ver se os hashes dos certificados entre dois conjuntos diferentes de sessões mTLS correspondem, ou correspondem em sua maioria. Além disso, procure potencialmente por certificados de cliente diferentes para cada sessão mTLS, mas o mesmo certificado de servidor em todas as sessões.

Mitigação Potencial

A inspeção SSL é uma forma de potencialmente bloquear esse tipo de canal de comunicação C2, pois o servidor de inspeção SSL não teria o certificado CA malicioso necessário para autenticar o certificado do cliente.

Baixar ferramenta