Existen muchas soluciones orientadas a la implementación de entornos C2, algunas ya se han mencionado anteriormente en este blog, sin embargo una alternativa que resulta interesante para campañas de Red Ream es Merlin. Este programa se encuentra desarrollado en Go y tiene dos características que rápidamente llaman la atención: Es independiente de plataforma al estar escrito en dicho lenguaje y funciona sobre protocolo HTTP/2 y HTTP/3. Lo primero significa que es posible crear agentes que se desplegarán y funcionarán en cualquier sistema (ojo, otra cosa es la detección/evasión de los mecanismos de seguridad implementados en el sistema) y lo segundo que posiblemente aportará ciertas ventajas de cara a la evasión de soluciones de seguridad perimetral como los sistemas de detección de intrusos. El autor de esta herramienta ha escrito un par de artículos sobre esta herramienta hace algunos años en los que da una introducción a sus funcionalidades y las razones por las que el protocolo HTTP/2 es una buena alternativa a la hora de evadir mecanismos de inspección de tráfico. Aunque ambos artículos ya llevan tiempo publicados siguen siendo vigentes y el segundo, es especialmente interesante ya que además de explicar en detalle el funcionamiento de H2/H2C también menciona una de las características del protocolo que se encuentra definida en la RFC 7540 y es que se espera que todas las conexiones TLS entre cliente y servidor tengan habilitada una cipher suite que cumpla con el “PFS“, lo que a efectos prácticos dificulta la inspección de tráfico H2 (HTTP/2) y hace que las soluciones de seguridad perimetral que dependen del análisis de tráfico para su correcto funcionamiento (WAF, IDS o IPS) tengan problemas a la hora de detectar tráfico malicioso utilizando H2. De esto es precisamente de lo que intenta aprovecharse Merlin y la razón por la que su autor ha decidido crearla.
Llegados a este punto es interesante observar que esta herramienta, a la fecha de redactar este post, no solamente soporta HTTP/2, sino que también permite levantar un listener con HTTP/3 (QUIC) siguiendo la misma idea de usar un protocolo que no está del todo extendido y que muchas soluciones de seguridad perimetral no son capaces de procesar o interpretar adecuadamente.

Instalación del servidor de Merlin.

Tal como se indica en el fichero README disponible en el repositorio oficial del proyecto, existen 2 formas de instalar Merlin: Utilizando uno de los binarios preparados tanto para el servidor como para los agentes o instalar desde código fuente. La primera de ellas es la más sencilla y permite explorar la herramienta rápidamente sin tener que instalar GO y otras utilidades necesarias, será la alternativa para realizar las pruebas en este post.

Una vez lanzado el servidor por línea de comandos, lo primero que se debe hacer es iniciar un listener. Nuevamente, algo muy similar a herramientas que ya se han enseñado antes en este blog como es el caso de Empire Framework

Con el comando “listeners” se accede al menú principal, el cual permite listar y gestionar los listeners activos. En este menú se puede crear un nuevo listener fácilmente utilizando una de las plantillas disponibles con el comando “use”, el cual admite las opciones “http” y “https” para protocolo HTTP/1.1, “http2” y “h2c” para protocolo HTTP/2 y “http3” para QUIC. Dependiendo del tipo de listener seleccionado se deben establecer una serie de opciones que en algunos casos son obligatorias y ya vienen con valores por defecto. Finalmente, se puede ejecutar el comando “start” o “execute” para lanzar el Listener.

Con el listener levantado es el momento de ejecutar un agente, que no es más que el sistema en el que se debe ejecutar la muestra maliciosa para recibir una sesión. Esta conexión será recibida en por el listener levantado previamente y permitirá ejecutar comandos contra la víctima. Nuevamente, el agente puede ser un binario preconfigurado o se puede compilar desde código fuente. Si se ha levantado el servidor de Merlin utilizando el binario disponible en la sección de “releases”, al ejecutarlo se ha tenido que crear un directorio en <MERLIN_DIR>/data/bin en donde se encontrará el agente correspondiente a cada una de las arquitecturas soportadas por la herramienta.
Hay que tener el cuenta que el binario correspondiente al agente por defecto, está configurado para conectarse al servidor en la URL “https://127.0.0.1:443/&#8221; y utilizando “HTTP2”. Por lo tanto, si se desea utilizar otro protocolo y el servidor está en otra IP (que es lo más habitual obviamente) se deben indicar esto en las opciones con “–url” y “-proto” tal como se explica en la documentación de Merlin aquí

Si el binario se ha ejecutado correctamente, se recibirá la conexión en el servidor de Merlin, la cual permitirá ejecutar diferentes tipos de instrucciones y controlar el sistema remotamente.

Como se puede ver en la imagen anterior, los comandos son simples y se explican perfectamente en la columna de descripción. De hecho, se podría decir que no es una herramienta tan potente como el payload de Meterpreter,  los agentes de Empire Framework o Pupy pero el hecho de poder establecer conexiones con protocolos como HTTP/2 o HTTP/3 (QUIC) es una característica muy interesante por las razones que se indicaban anteriormente. Es una herramienta en la que si bien, el agente no resulta muy interesante es un muy buen complemento para campañas de RedTeam en las que se deben llevar a cabo labores de evasión o exfiltración. Es algo muy similar a lo que se ha visto en el post publicado en este blog sobre Torat, aunque evidentemente en el caso de dicha herramienta la comunicación con el C2 es por medio de TOR.

Como se puede apreciar los comandos se ejecutan directamente sobre el sistema comprometido y en este caso la comunicación se realiza utilizando protocolo HTTP/3. Simplemente funciona. No hay que realizar ajustes muy complejos ni nada parecido. Se puede iniciar una captura de tráfico entre el agente y el servidor de Merlin para poder apreciar un continuo flujo de paquetes en ambos sentidos.

Se trata de una herramienta interesante que merece la pena incluir en el extenso arsenal de herramientas para campañas de Red Team o incluso (si el cliente lo permite) para alguna auditoría de pentesting.

Un saludo y Happy Hack!
Adastra.