Instalando Covenant Command and Control (C2) en Kali Linux

Introducción

Covenant es un framework de command and control (C2), proxy aware usado para actividades de redteam, postexplotacion y movimiento lateral.

El objetivo del proyecto es resaltar la superficie de ataque de .NET (como en su momento lo hizo Empire con Powershell). La principal ventaja frente a varios frameworks de código abierto es que esta plataforma es colaborativa.

Esta desarrollado en ASP.NET Core, como aplicación multi plataforma y cuenta con una interfaz web multi usuario.

Cuenta con funcionalidades para diferentes dispositivos y sistemas operativos, incluyendo Windows, Unix y OSX (en los últimos dos siempre que se cumplan ciertas dependencias).

La arquitectura es similar a otros Command and control, en su propia terminología consta de «Listeners» (puertos en escucha del servidor de C2), que escuchan conexiones recibidas desde «grunts» (agentes funcionando en equipos victima) y el backend de gestión.

Para iniciar la comunicación con el C2 se utilizan «Launchers» que son piezas que permiten lanzar la funcionalidad inicial para conectar los grunts con listeners.

Los grunts pueden comunicarse con listeners utilizando diferentes protocolos, entre ellos HTTP, HTTPs y SMB.

Instalacion

Pre requisitos

Instalar dotnet core SDK versión 2.2

Nota importante: si bien a la fecha de este post está disponible dot net core SDK version 3.1, covenant no soporta esa version de SDK.

Si en nuestro kali nunca instalamos ningún componente de Microsoft será necesario realizar ciertos pasos iniciales

wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget -q https://packages.microsoft.com/config/debian/10/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list

A partir de este punto podremos instalar la SDK sin problemas.

sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt install dotnet-sdk-2.2

 


Clonar el repositorio del proyecto con recursión de las referencias


git clone --recurse-submodules https://github.com/cobbr/Covenant

 

Luego de esto se puede hacer el build del proyecto

cd Covenant/Covenant
dotnet build
sudo dotnet run



Si todo funcionó correctamente ya podremos ingresar con el navegador a la interfaz web de covenant: https://localhost:7443

Puede que recibamos un mensaje de error de certificado. Esto es porque se usa un certificado auto firmado del proyecto. Inicialmente esto no es un problema, para usos más reales, sería conveniente reemplazar este certificado por uno cuyas claves hayan sido generadas por nosotros.


Continuando:


Desde esta consola se puede definir un usuario y una contraseña inicial para el usuario de máximo privilegio.

A partir de este punto será posible crear usuarios con acceso a la GUI



Desde el menú Dashboard se puede visualizar un estado global de situación:


Inicializando listeners

Para quienes estén familiarizados con metasploit u otros frameworks, los listeners son similares a los handlers que utiliza MSF.

Incluso la configuración tiene varias similitudes, solo que en el caso de covenant es completamente visual:

Dede el menú listeners se pueden ver y crear listeners



Los valores que debemos configurar son:

  • Name: Nombre con el que se identificara el listener
  • Bind Address: IPs a las que se vinculará el listener (0.0.0.0 para todas las IPs del equipo)
  • Connection port: puerto a utilizar por el listener
  • Connect Address: La o las IPs que estarán esperando conexiones
  • UseSSL: si el trafico será cifrado utilizando SSL
  • HttpProfile: Que perfil http se utilizara para el listener (mas sobre este punto en próximos posts).


Launchers

Los launchers se usan para generar, alojar y descargar binarios, scripts y one liners para lanzar nuevos grunts, son el análogo de los payloads en metasploit.

Una vez que contamos con un listener, se generan los launchers para inicializar los grunts.

Para generarlos debe ingresarse a la página de Launchers:


Si por ejemplo utilizamos el launcher powershell se generan one liners planos y encodeados:


Los launchers pueden ser de distinto tipo, es importante personalizar el ataque para conseguir una mayor efectividad, por ejemplo si el equipo donde queremos ejecutar el launcher es un Windows 10 deberemos ajustar la versión de dotNetFrameworkVersion.

Otro aspecto interesante es que podemos ver el código fuente del launcher clickeando sobre la solapa «code». Esto puede ser particularmente útil si queremos ofuscar o implementar técnicas de bypass y compilar por nuestra parte el launcher.

Estas versiones compiladas pueden luego ser alojadas y servidas por el servicio http de covenant.

Ejecutando los mismos en el equipo a controlar, veremos sesiones apareciendo (grunts), con las que podremos interactuar.

Si les pareció interesante y quieren aprender más sobre este framework, en siguientes posts podemos ahondar en cómo utilizar funciones del mismo.

¡Nos vemos la próxima!

Referencias

Post de lanzamiento del Proyecto: https://cobbr.io/Covenant.html

Github del proyecto: https://github.com/cobbr/Covenant/

 

1 comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Captcha 17 − = 9