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/
Empire 3.1 project en kali linux - BlackMantiSecurity
[…] Circula un rumor (actualizaremos el post si esto se concreta) de que pronto habrá una interfaz web de administración al estilo de Covenant. […]