Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
secret_handshake — Un canal C2 prototipo de malware que utiliza certificados x509 sobre mTLS | Kitploit
Herramientas/GitHubGitHub/jconwell/secret_handshake
Evasión de IDS/IPSExfiltración de DatosComando y ControlRed Teaming
GitHubjconwell/secret_handshake

secret_handshake

Un canal C2 prototipo de malware que utiliza certificados x509 sobre mTLS

Ver Repositorio
153153hace 2 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Secret Handshake - Un canal C2 de malware que utiliza certificados x509 sobre mTLS

Motivación

En primer lugar, ¿por qué liberaría esto como código abierto?

MITRE ATT&CK solo habla de certificados robados o autofirmados, y los NDR (por lo que sé) prestan muy poca atención al contenido de los certificados x509 más allá de quién es la CA emisora. En general, los certificados x509 son de confianza y se les permite atravesar nuestros firewalls con impunidad. Pero en esencia son solo archivos que pueden contener payloads maliciosos con la misma facilidad que cualquier otro. Confiamos en ellos y los ignoramos porque son un componente central de un proceso de cifrado que damos por sentado. El objetivo principal de este proyecto es generar una mayor conciencia sobre una clase de indicador de seguridad en la que hemos llegado a confiar, y resaltar métodos que se pueden utilizar para detectar usos maliciosos de esta.

Antecedentes

Siempre me pregunté si los actores de amenazas han utilizado alguna vez certificados x509 como parte de su comunicación C2, no para cifrar el tráfico de red, sino para incrustar realmente la comunicación C2 en el certificado x509. Después de buscar algo así en la naturaleza durante 5 años, finalmente decidí programarlo yo mismo para ver si es posible... y lo es.

Cada mensaje cifrado enviado a través de HTTPS/TLS es posible gracias a la transferencia de un certificado x509. Cuando se establece un handshake TLS (figura siguiente), durante el cuarto paso el servidor envía su certificado x509 al cliente. El cliente verifica el certificado, compara los algoritmos de cifrado que soporta el servidor y elige qué algoritmo utilizar para toda la comunicación posterior.

Figure 1

Como muestra este diagrama, esto es solo una transferencia unidireccional del certificado x509 del servidor al cliente. Esto no se presta bien para la comunicación C2 porque no hay forma de que el cliente responda al servidor. En el mejor de los casos, solo podría utilizarse como un mecanismo de transferencia de datos unidireccional (consulta la sección de trabajos previos más abajo).

Pero existe otro tipo de sesión TLS llamada autenticación TLS mutua (mTLS), en la que tanto el cliente como el servidor intercambian certificados x509 como forma de autenticarse mutuamente.

Figure 2

Como muestra la figura anterior, durante la autenticación mutua el certificado x509 del servidor se envía al cliente para su autenticación, y luego el certificado x509 del cliente se envía al servidor para su autenticación. Este intercambio de artefactos representa una oportunidad para crear un canal de comunicación bidireccional para servidores C2.

Creación de un canal de comunicación bidireccional mediante certificados x509

Dado que la biblioteca SSL subyacente intercambia los certificados del servidor y del cliente, no existe la oportunidad de que el cliente extraiga el mensaje del certificado del servidor, ejecute el comando y genere un certificado de respuesta, todo dentro de una sola conexión mTLS. Esto significa que el canal C2 debe diseñarse de modo que el intercambio de solicitud-respuesta se realice a través de dos conexiones TLS mutuas diferentes, algo así como un modo de transmisión semidúplex.

Figure 3

El proceso de solicitud/respuesta sigue los siguientes pasos:

  • Paso 1: tanto el cliente como el servidor C2 generan sus respectivos certificados. El certificado del cliente contiene un mensaje genérico de "beacon", y el certificado del servidor contiene el comando que quiere que el cliente ejecute. Si no hay ningún comando para que el cliente ejecute, el servidor genera un certificado genérico de "sleep" para indicarle al cliente cuánto tiempo debe dormir antes del siguiente beacon.
  • Paso 2: tanto el cliente como el servidor C2 configuran un socket de red con los certificados generados en el paso 1.
  • Paso 3: el cliente establece una conexión con el servidor.
  • Paso 4: los certificados del servidor y del cliente se intercambian durante el handshake mTLS.
  • Paso 5: tanto el servidor como el cliente cierran sus respectivos sockets.
  • Paso 6: el cliente extrae el comando a ejecutar del certificado del servidor. Dado que el certificado del cliente solo contiene un mensaje genérico de "beacon", el servidor lo descarta.
  • Paso 7: el cliente ejecuta el comando y recopila la salida del comando.
  • Paso 8: tanto el cliente como el servidor C2 generan sus respectivos certificados. El certificado del cliente contiene la salida del comando que acaba de ejecutar, y el servidor genera un certificado genérico de "sleep" para indicarle al cliente cuánto tiempo debe dormir antes del siguiente beacon.
  • Paso 9: tanto el cliente como el servidor C2 configuran un socket de red con los certificados generados en el paso 8.
  • Paso 10: el cliente establece una conexión con el servidor.
  • Paso 11: los certificados del servidor y del cliente se intercambian durante el handshake mTLS.
  • Paso 12: tanto el servidor como el cliente cierran sus respectivos sockets.
  • Paso 13: el cliente extrae la duración del sleep del certificado del servidor, y el servidor extrae la salida del comando del certificado del cliente.
  • Paso 14: el cliente duerme durante el intervalo especificado por el servidor.

Trabajos previos

Después de que esto funcionara, me sentí bastante orgulloso de mí mismo por ser tan creativo y todo eso.

Luego me topé con esta charla de BSides de 2018 de Jason Reaves, quien escribió un dropper de binarios de malware utilizando certificados x509 sobre TLS. Un año después, Jason publicó este artículo en el que detalla un canal de comunicación bidireccional completo mediante mTLS.

Instrucciones para ejecutar

mTLS requiere que tanto los certificados del cliente como los del servidor estén firmados por el mismo certificado CA, por lo que el primer paso es generar tu propio par de clave privada / certificado de CA.

Crea la clave privada de la CA raíz:

openssl genrsa -des3 -out hmCA.key 2048

nota: la frase de contraseña evitará que cualquiera que obtenga tu clave privada genere su propio certificado raíz.

Crea el certificado de la CA raíz:

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

Copia los archivos de clave y certificado generados en la carpeta certs/ca_certs. El proyecto incluye un par de clave/certificado de demostración, por lo que puedes omitir este paso si quieres.

Inicia el cliente:

python client.py

Inicia el servidor:

python server.py

Detecciones

Nunca quiero publicar algo potencialmente malicioso sin detallar también cómo detectarlo en los registros de tu red.

Uno pensaría que detectar este tipo de patrón TLS sería fácil, pero no es tan simple. Una de las principales señales de este canal C2 es su estilo de comunicación semidúplex; se necesitan dos flujos de autenticación mutua para completar una solicitud/respuesta completa entre el servidor y el cliente. Esto sucederá varias veces, ya que el servidor envía diferentes comandos al cliente.

Esto significa que debes buscar:

  • Múltiples sesiones mTLS entre la misma IP de origen y destino, probablemente en el mismo puerto, aunque no sería difícil configurar esto para usar diferentes puertos por conexión mTLS.
  • Dado que el patrón de solicitud-respuesta requiere dos sesiones mTLS por comando del servidor, busca 2 sesiones mTLS bastante cercanas entre sí, con una pausa más larga entre el siguiente par de sesiones mTLS.
  • Busca tiempos de sleep y jitter entre pares de sesiones mTLS, igual que harías con cualquier otro canal C2.
  • Los hash de los certificados deben ser diferentes para cada sesión mTLS, ya que se generan nuevos certificados por sesión.
  • Los certificados no serán emitidos por autoridades certificadoras de confianza.
  • Los tamaños en bytes de los certificados x509 también variarán según la sesión. Los certificados pequeños del servidor deberían indicar que se están enviando comandos al cliente, pero los certificados más grandes probablemente indicarían la descarga de un binario malicioso. Los certificados del cliente probablemente variarán más en tamaño que los certificados de comando del servidor, ya que incrustan la salida de los comandos. Los certificados grandes del cliente indicarían exfiltración de datos.
  • Si hay múltiples sesiones mTLS entre las mismas IP de origen y destino en un período corto de tiempo, verifica si a veces se envían certificados con el mismo hash. Esto podría indicar la reutilización de certificados de comando / respuesta, como un certificado de cliente "beacon" o un certificado de servidor "sleep".

Esto parece un conjunto de reglas de detección infalible, pero como dije antes, no es tan fácil. Resulta que hay un conjunto de servicios empresariales que también tienen un patrón de tráfico mTLS similar, entre ellos:

  • 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

Varios de estos parecen ser servicios de gestión de activos/dispositivos, por lo que en teoría deberían enviar el mismo conjunto de certificados cada vez que recorren todos sus dispositivos. Podrías ver si hay conjuntos de múltiples sesiones mTLS que se repiten cada N horas, y luego comprobar si los hash de los certificados entre dos conjuntos diferentes de sesiones mTLS coinciden, o coinciden en su mayoría. También podrías buscar que los certificados del cliente sean diferentes en cada sesión mTLS, pero el mismo certificado del servidor en todas las sesiones.

Mitigación potencial

La inspección SSL es una forma de bloquear potencialmente este tipo de canal de comunicación C2, ya que el servidor de inspección SSL no tendría el certificado CA malicioso necesario para autenticar el certificado del cliente.

Descargar herramienta