Cobalt Strike: Anatomía del Framework C2 Más Usado en Ataques Reales
Análisis técnico de Cobalt Strike desde la perspectiva defensiva. Beacons, Malleable C2 profiles, execute-assembly, named pipes, detección de beacons en memoria y red, y por qué sigue siendo el framework C2 dominante en ataques de ransomware y APTs.
El framework que define la post-explotación moderna
Cobalt Strike no es malware en el sentido tradicional. Es una herramienta comercial de adversary simulation creada por Raphael Mudge (Strategic Cyber LLC) en 2012, adquirida por HelpSystems (ahora Fortra) en 2020. Su propósito legítimo es que los red teams simulen ataques realistas para testear las defensas de sus clientes.
En la práctica, Cobalt Strike es el C2 framework más usado en ataques reales. Versiones crackeadas circulan en foros underground desde hace años. Según Proofpoint, Cobalt Strike aparece en más del 60% de los incidentes de ransomware que investigan. CrowdStrike lo detecta más que cualquier otra herramienta de post-explotación.
Entenderlo es obligatorio para cualquier defensor.
Arquitectura
Componentes
┌───────────────┐ ┌──────────────┐ ┌────────────────┐
│ Operador │──────────│ Team Server │──────────│ Beacon │
│ (Cobalt │ GUI/ │ (Java, │ C2 │ (agente en │
│ Strike │ aggress │ puerto 50050│ traffic │ el endpoint │
│ client) │ or) │ por defecto)│ │ comprometido)│
└───────────────┘ └──────────────┘ └────────────────┘
│
┌──────▼──────┐
│ Redirectors │ (opcional)
│ (Apache, │
│ nginx, │
│ CDN) │
└─────────────┘
Team Server: servidor Java que gestiona beacons, recibe conexiones de operadores y sirve payloads. Puerto 50050 por defecto para la GUI del operador.
Beacon: agente ligero que se ejecuta en el sistema comprometido. Se comunica con el Team Server periódicamente (configurable: cada 60 segundos por defecto, con jitter).
Operador: usa la GUI de Cobalt Strike (o aggressor scripts) para interactuar con los beacons.
Redirectors: servidores intermedios que redirigen tráfico C2 para ocultar la IP real del Team Server.
Tipos de beacon
| Tipo | Protocolo | Puerto | Uso |
|---|---|---|---|
| HTTP | HTTP | 80 | C2 via web, se mezcla con tráfico legítimo |
| HTTPS | HTTPS | 443 | C2 cifrado, más sigiloso |
| DNS | DNS | 53 | C2 via queries DNS. Muy lento pero difícil de bloquear |
| SMB | Named Pipes | 445 | Beacon interno que se comunica con otro beacon (no sale a Internet) |
| TCP | TCP raw | Configurable | Comunicación directa entre beacons |
SMB beacon: movimiento lateral sin salir a Internet
El SMB beacon es una pieza clave en ataques reales:
- Un beacon HTTP/HTTPS ya comprometió una máquina con acceso a Internet
- El operador inyecta un SMB beacon en una máquina interna (sin acceso a Internet)
- El SMB beacon se comunica con el beacon HTTP via named pipe
- El beacon HTTP reenvía los datos al Team Server
[Internet] ←→ [Beacon HTTP en DMZ] ←→ [SMB Beacon en red interna]
Named pipe: \\.\pipe\msagent_xx
Esto permite controlar máquinas internas sin generar tráfico de red saliente desde ellas.
Malleable C2 Profiles
Concepto
Los Malleable C2 profiles son la característica más potente de Cobalt Strike para evasión. Permiten personalizar completamente el tráfico HTTP/HTTPS del beacon para mimetizar tráfico legítimo.
Un profile define:
- URIs: qué paths usa el beacon (ej.
/api/v2/updates,/cdn/content) - Headers: qué headers HTTP envía y recibe
- Body: cómo se codifica el payload en el cuerpo HTTP
- Metadata: cómo se envían los metadatos del beacon
- User-Agent: qué user-agent usa
- Certificado TLS: qué certificado usa para HTTPS
- Sleep/Jitter: frecuencia y variación de comunicación
Ejemplo: profile que imita tráfico de Microsoft Teams
# Malleable C2 profile (fragmento simplificado)
set sleeptime "60000"; # 60 segundos entre check-ins
set jitter "20"; # 20% de variacion
set useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36";
http-get {
set uri "/api/v1/teams/users/presence";
client {
header "Host" "teams.microsoft.com";
header "Accept" "application/json";
metadata {
base64url;
header "Authorization";
}
}
server {
header "Content-Type" "application/json";
output {
base64url;
print;
}
}
}
Con este profile, el tráfico C2 parece consultas de presencia de Microsoft Teams. Para un analista mirando logs de proxy, parece tráfico legítimo.
Capacidades de post-explotación
Comandos del operador
| Comando | Función | MITRE ATT&CK |
|---|---|---|
execute-assembly | Ejecutar .NET assembly en memoria | T1059 |
inject | Inyectar beacon en otro proceso | T1055 |
mimikatz | Ejecutar Mimikatz en memoria | T1003 |
hashdump | Dump de hashes SAM | T1003.002 |
kerberos_ticket_use | Usar ticket Kerberos | T1550.003 |
jump psexec | Movimiento lateral via PsExec | T1569.002 |
jump winrm | Movimiento lateral via WinRM | T1021.006 |
portscan | Escaneo de puertos | T1046 |
screenshot | Captura de pantalla | T1113 |
keylogger | Keylogger | T1056.001 |
download | Descargar archivo de la víctima | T1005 |
upload | Subir archivo a la víctima | T1105 |
shell | Ejecutar comando via cmd.exe | T1059.003 |
powershell | Ejecutar PowerShell | T1059.001 |
spawn | Crear nuevo beacon en otro proceso | T1055 |
Execute-Assembly: herramientas .NET en memoria
La capacidad más usada en ataques reales. Permite ejecutar cualquier herramienta .NET (SharpHound, Rubeus, Seatbelt, SharpDPAPI) directamente en memoria del beacon sin tocar disco:
beacon> execute-assembly /path/to/SharpHound.exe --CollectionMethod All
beacon> execute-assembly /path/to/Rubeus.exe kerberoast
beacon> execute-assembly /path/to/Seatbelt.exe -group=all
El assembly se transfiere al beacon, se carga via Assembly.Load(byte[]) en un proceso sacrificial, se ejecuta, y los resultados se envían de vuelta al operador.
Detección de Cobalt Strike
Capa 1: detección en red
Beaconing pattern: el beacon se comunica periódicamente con el C2. Incluso con jitter, el patrón de comunicación regular (cada ~60s con variación) es detectable con análisis estadístico:
Tráfico normal: aleatorio en timing y volumen
Tráfico de beacon: periódico con jitter, tamaño similar en cada check-in
Herramientas: RITA (Real Intelligence Threat Analytics), JA3/JA3S fingerprinting.
JA3/JA3S fingerprints: el handshake TLS del beacon de Cobalt Strike tiene fingerprints conocidos. Aunque los profiles pueden modificar headers HTTP, el fingerprint TLS es más difícil de cambiar:
JA3 hash conocido de Cobalt Strike (ejemplo):
72a589da586844d7f0818ce684948eea
Default URIs: si el profile no se personaliza, los URIs por defecto son reconocibles:
GET /submit.php?id=XXXXX
POST /submit.php?id=XXXXX
GET /__utm.gif
GET /pixel
Capa 2: detección en endpoint
Named pipes (Sysmon Event ID 17/18):
| Pipe name | Uso en Cobalt Strike |
|---|---|
\MSSE-XXXX-server | Default SMB beacon (configurable) |
\postex_XXXX | Post-exploitation jobs |
\status_XXXX | Status pipe |
\msagent_XXXX | Otro default |
Process injection (Sysmon Event ID 8, 10):
- Cobalt Strike inyecta beacons en procesos via
CreateRemoteThreado APC injection - Procesos objetivo por defecto:
rundll32.exe,dllhost.exe(configurables)
Memory signatures:
- Los beacons desempaquetados en memoria contienen strings y estructuras reconocibles
- Herramientas como BeaconEye y CobaltStrikeParser pueden escanear memoria buscando beacon configs
Capa 3: herramientas especializadas
| Herramienta | Tipo | Función |
|---|---|---|
| CobaltStrikeParser | Python | Parsea beacon configs de memoria dumps o binarios |
| BeaconEye | C# | Escanea procesos en memoria buscando beacons |
| 1768.py (SentinelOne) | Python | Extrae configuración de beacons |
| JARM | Fingerprint | Fingerprint activo del Team Server TLS |
| RITA | Go | Análisis de tráfico de red para detectar beaconing |
| Shodan/Censys | OSINT | Buscar Team Servers expuestos en Internet |
YARA rule para beacon en memoria
rule CobaltStrike_Beacon_Config {
meta:
description = "Detects Cobalt Strike beacon configuration in memory"
author = "MalwareIntel Research"
strings:
$config_start = { 00 01 00 01 00 02 ?? ?? 00 01 00 02 }
$sleep_mask = "ReflectiveLoader"
$default_pipe = "MSSE-" ascii
$default_pipe2 = "postex_" ascii
$default_pipe3 = "status_" ascii
$watermark = { 00 03 00 02 00 00 } // Watermark field in config
condition:
$config_start or
($sleep_mask and 1 of ($default_pipe*)) or
($watermark and $sleep_mask)
}
Regla Sigma: named pipes de Cobalt Strike
title: Cobalt Strike Named Pipe Detection
id: b5678901-c2d3-e4f5-a678-9bcdef012345
status: stable
logsource:
category: pipe_created
product: windows
detection:
selection:
PipeName|startswith:
- '\MSSE-'
- '\postex_'
- '\status_'
- '\msagent_'
- '\DserNamePipe'
- '\srvsvc_'
- '\mojo.5688.8052'
condition: selection
level: critical
tags:
- attack.command_and_control
- attack.lateral_movement
Alternativas a Cobalt Strike
| Framework | Lenguaje | Licencia | Ventaja | Adopción en ataques |
|---|---|---|---|---|
| Brute Ratel C4 | C/C++ | Comercial | Diseñado para evadir EDR. No usa hooks comunes | Creciente (APTs, ransomware) |
| Sliver | Go | Open source | Cross-platform, implants en Go/C#/C | Creciente |
| Havoc | C | Open source | Modular, extensible | Emergente |
| Mythic | Python/Go | Open source | Framework modular, múltiples agentes | Media |
| Nighthawk | C | Comercial | MDSec, diseñado para evasión | Baja (selectivo) |
| Covenant | C# | Open source (archivado) | .NET, integración con execute-assembly | Baja (legacy) |
Fuentes y referencias
- Fortra. "Cobalt Strike: Adversary Simulation Software." https://www.cobaltstrike.com/
- Mudge, R. "Malleable Command and Control." Cobalt Strike Blog.
- CrowdStrike. "Cobalt Strike Usage in Threat Landscape." 2024 Global Threat Report.
- Proofpoint. "Cobalt Strike in Ransomware Operations." 2024.
- SentinelOne. "CobaltStrikeParser (1768.py)." SentinelLabs.
- Elastic Security Labs. "Cobalt Strike Beacon Detection." 2023.
- MITRE ATT&CK. "Cobalt Strike (S0154)." https://attack.mitre.org/software/S0154/
- Salesforce. "JARM: Active TLS Fingerprinting." https://github.com/salesforce/jarm
- Active Countermeasures. "RITA: Real Intelligence Threat Analytics." https://github.com/activecm/rita
- Red Canary. "Cobalt Strike Detection Guide." 2024.
Preguntas frecuentes
Libros recomendados
Artículos relacionados
DLL Injection en Windows: Técnicas, Variantes y Detección
EDR Internals: Cómo Funcionan y Cómo se Evaden
Cadena de Infección de Ransomware: Del Acceso Inicial al Cifrado
Detectar Cobalt Strike Beacon en Red: Guía de Threat Hunting
Conti: De Cobalt Strike a Exfiltración y Cifrado en 72 Horas
Phishing con Macro Office a Cobalt Strike: Walkthrough Completo
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.