Havoc C2: Instalación, uso y características

En los últimos años hemos presenciado la publicación de un gran número de C2s en distintos lenguajes: Covenant en .NET, Merlin y Sliver en Go o Mythic en Python son algunos ejemplos. Todos ellos se suman a las herramientas más clásicas y establecidas en años anteriores (Cobalt, Empire, …) creando un gran ecosistema donde en ocasiones se hace complicado elegir entre todos ellos.

Entre toda esta marabunta de C2 se publica en github en septiembre de 2022 Havoc, un C2 escrito en múltiples lenguajes (C++, Golang, C y ASM) que ha conseguido desde entonces gran notoriedad en el mundo de la ciberseguridad ofensiva gracias a su modularidad y su eficacia, y se ha convertido en uno de los go-to dentro de los C2 gratuitos.

En este post vamos a ver su proceso de instalación, así como su funcionamiento y sus capacidades.

Instalación

La instalación de Havoc es simple y la podemos encontrar en la documentación de la herramienta, para ello lo primero que vamos a hacer es clonar el repositorio:

Instalamos las dependencias necesarias:

Para configurar el teamserver tenemos que instalar un par de dependencias para Go:

Montamos el servidor (este paso puede tardar):

Una vez hecho esto ya podemos correr el servidor cargándole un perfil básico:

Por último, vamos a montar el cliente del mismo modo que hemos hecho con el servidor (esto también tardará):

Ya con esto podemos lanzar el cliente y conectarnos al teamserver:

Por defecto contamos con dos usuarios (Neo y 5pider), podemos añadir más o modificar estos actualizando el perfil que hemos cargado.

Listeners

Ahora que ya estamos conectados a nuestro C2 podemos crear un listener al que llegará toda la información y con el que se comunicará nuestro payload más adelante.

Las opciones del listener son sencillas, destaca la posibilidad de crearlo de distintos modos: Https, Http, SMB o usando otro C2 externo como comunicación.

Agents

A la hora de crear payloads nos encontramos con una gran cantidad de opciones para ajustar el agente a lo que buscamos y a nuestra forma de trabajar.

Las primeras tres opciones sirven para escoger el listener con el que se comunicará, la arquitectura para la que estamos preparando el payload y el formato del mismo (a escoger entre .exe, .dll, shellcode o server .dll).

También es posible configurar el tiempo entre requests (Sleep y Jitter) así como usar llamadas indirectas al sistema o duplicación del stack para evitar la detección; a su vez tenemos distintas técnicas para llevar a cabo los tiempos de espera y para encriptar dichas técnicas.

Por otro lado, tenemos Proxy Loading, esto también nos servirá para lograr mayor índice de evasión en nuestro payload.

En último lugar encontramos todas las opciones de inyección:

Dentro de Alloc y Execute podemos escoger entre Native/Syscall o Win32, de modo que use el método que consideremos conveniente. Si seleccionamos la primera de las opciones, el payload hará uso de NtAllocateVirtualMemory y NtCreateThreadEx, por otro lado, si optamos por Win32 se utilizará VirtualAllocEx y CreateRemoteThread.

En los dos Spawn escogeremos el objetivo de la inyección.

Como podemos ver, los agentes de Havoc son altamente personalizables y es donde destaca este C2 que, como comentábamos al inicio, ha crecido en popularidad debido a esta modularidad.

Es importante remarcar que los payloads por defecto, a pesar de las distintas opciones con las que cuentan, no presentan un alto grado de evasión de antivirus y EDRs. Sin embargo, gracias a esta personalización que venimos mencionando es posible usarlos en conjunto a técnicas más avanzadas, logrando así alcanzar una detección mucho menor.

El agente por su parte cuenta con comandos típicos de un C2, así como con otros interesantes y más particulares, algunos ejemplos de qué tipo de acciones podremos hacer con nuestro agente pueden ser: “shell/powershell” para ejecutar comandos en cmd o en powershell, “download/upload” si buscamos descargar o subir ficheros, “screenshot” toma una captura de pantalla, “shellcode” y “dll” permiten el uso de técnicas de inyección, por otro lado, podemos jugar con tokens con el comando “token”.

 Por último, tenemos el comando “config” que entre otras cosas nos puede ser útil para definir en qué horas nuestro agente va a estar funcionando haciendo uso de “config workinghours”, así como una fecha donde este agente deje de funcionar con “config killdate”.

Extentions

Sumado a todo lo anterior Havoc también tiene integrada una sección con algunas extensiones hechas por la comunidad y preparadas para la instalación.

Algunas de ellas resultan muy interesantes. Con “havoc-privkit” podemos integrar “privkit”, una herramienta para la detección de vulnerabilidades de escalada de privilegios, dentro de nuestro C2. Por otro lado, extensiones como “havoc-bloodhound” nos ayudan a ahorrar tiempo facilitando el proceso de añadir los archivos necesarios a Bloodhound.

Otros

Para terminar este recorrido de la herramienta cabe mencionar otras de sus funciones como son una ventana de chat donde se pueden comunicar los distintos usuarios del C2.

También tenemos una pestaña Loot donde se recopilarán algunos de los datos que vayamos extrayendo con nuestro payload (capturas de pantalla, descargas, …).

Conclusiones

Como podemos ver, Havoc es una herramienta versátil y personalizable, sencilla de instalar y utilizar, que cuenta con muchas opciones y hace uso de técnicas actuales.

Destaca también visualmente frente a otras herramientas asentadas en el mercado como podría ser Cobalt Strike.

Si bien ya no cuenta con un grado de detección tan bajo como tiempo atrás, es posible configurarlo tanto como queramos (o sepamos), pudiendo llegar a alcanzar índices de evasión considerablemente altos.

Ver también en:

Speak Your Mind

*