
Beaconing HTTPS de Cobalt Strike sobre Microsoft Graph API

Publicación del lanzamiento: GraphStrike: Usando Microsoft Graph API para hacer que el tráfico Beacon desaparezca
Blog del desarrollador: GraphStrike: Anatomía del desarrollo de herramientas ofensivas
GraphStrike es un conjunto de herramientas que permite que el Beacon HTTPS de Cobalt Strike utilice Microsoft Graph API para comunicaciones C2. Todo el tráfico del Beacon se transmitirá a través de dos archivos creados en el sitio SharePoint del atacante, y todas las comunicaciones desde el Beacon se enrutarán a https://graph.microsoft.com:

GraphStrike incluye un provisionador para crear los activos de Azure necesarios para Cobalt Strike HTTPS sobre Graph API:

GraphStrike no crea ningún activo de pago en Azure, por lo que no se incurre en costos adicionales por el uso de GraphStrike o su provisionador.
Se ha publicado inteligencia de amenazas sobre varios APT diferentes que aprovechan Microsoft Graph API y otros servicios de Microsoft para campañas ofensivas:
Los actores de amenazas continúan utilizando servicios legítimos con fines ilegítimos. Utilizar un dominio de alta reputación como graph.microsoft.com para comunicaciones C2 es extremadamente efectivo y deseable, pero a menudo complicado y prohibitivo desde el punto de vista de tiempo y esfuerzo. La mayoría de los frameworks C2 no admiten métodos para obtener o rotar tokens de acceso, lo que les impide usar Graph API. Esto puede dificultar que los equipos rojos repliquen estas técnicas y priva a los defensores de la oportunidad de observar y desarrollar firmas para este tipo de actividad. GraphStrike busca aliviar esa carga y proporcionar un proceso confiable y repetible para aprovechar Microsoft Graph API mientras se mantiene la familiaridad y confiabilidad de la experiencia de usuario de Cobalt Strike.
Técnicamente no. Habiendo construido previamente un verdadero External C2 usando Graph API (que enviaba tráfico Beacon como mensajes de Microsoft Teams), la carga de tener que desarrollar, mantener e integrar un implante personalizado que cumpla con la especificación External C2 y haga el trabajo es demasiado familiar. GraphStrike, en cambio, aprovecha un User Defined Reflective Loader (UDRL) de código abierto llamado AceLdr de Kyle Avery (adaptado como 'GraphLdr' en este proyecto) para enganchar las llamadas a la biblioteca WinINet que Beacon realiza normalmente y manipularlas según sea necesario para usar Graph API. No hay un implante personalizado ni un proceso adicional que mencionar, solo el proceso Beacon con un par de API de Windows enganchadas. Del lado del servidor, hay un programa Python3 que traduce el tráfico del Team Server de Cobalt Strike a tráfico de Graph API y viceversa.
GraphStrike admite casi todas las actividades normales de Cobalt Strike, incluyendo:
Esto también incluye la integración de GraphStrike con los comandos sleep, exit y remove para que los tiempos de suspensión del GraphStrike Server coincidan con los del Beacon, así como la eliminación de archivos en SharePoint cuando un Beacon se cierra o elimina.
GraphStrike también incorpora todas las características y funcionalidades del AceLdr original, con algunas API adicionales hechas para utilizar también spoofing de pila de llamadas.
GraphStrike requiere lo siguiente antes de comenzar:
Tome nota de lo siguiente antes de proceder con el proceso de configuración:
1. Ciertos componentes utilizan rutas relativas para localizar otros activos. Cambie de directorio según se indica a continuación.
2. El perfil de Cobalt Strike solo puede editarse ANTES del paso 5 del proceso de configuración siguienteNota #1.
sudo setup/install_dependencies.sh para instalar las dependencias del sistema requeridas.python3 -m venv virtual y luego source virtual/bin/activate para crear y luego ingresar al entorno virtual.pip3 install -r requirements.txt../provisioner.py new y complete el proceso de configuración.graph.microsoft.com en los campos HTTPS Hosts y HTTPS Host(Stager)../GraphStrike.py.Debido al tamaño de GraphLdr, los usuarios del Artifact Kit deberán recompilarlo con opciones específicas para que GraphStrike sea compatible con los payloads generados por Artifact Kit. Específicamente, los campos 'Stage Size' y 'RDLL Size' deben especificarse para usar el tamaño RDLL de 100K. A continuación se proporcionan dos ejemplos de sintaxis funcional:
./build.sh pipe VirtualAlloc 505029 100 false false none /opt/cobaltstrike/artifacts
./build.sh peek HeapAlloc 492376 100 false true indirect /opt/cobaltstrike/artifacts