AvanzadoWindowsCobalt StrikeC2beacondetecciónred team

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.

MalwareIntel Research··8 min lectura
Serie: Malware en Windows — Parte 16

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

TipoProtocoloPuertoUso
HTTPHTTP80C2 via web, se mezcla con tráfico legítimo
HTTPSHTTPS443C2 cifrado, más sigiloso
DNSDNS53C2 via queries DNS. Muy lento pero difícil de bloquear
SMBNamed Pipes445Beacon interno que se comunica con otro beacon (no sale a Internet)
TCPTCP rawConfigurableComunicación directa entre beacons

SMB beacon: movimiento lateral sin salir a Internet

El SMB beacon es una pieza clave en ataques reales:

  1. Un beacon HTTP/HTTPS ya comprometió una máquina con acceso a Internet
  2. El operador inyecta un SMB beacon en una máquina interna (sin acceso a Internet)
  3. El SMB beacon se comunica con el beacon HTTP via named pipe
  4. 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

ComandoFunciónMITRE ATT&CK
execute-assemblyEjecutar .NET assembly en memoriaT1059
injectInyectar beacon en otro procesoT1055
mimikatzEjecutar Mimikatz en memoriaT1003
hashdumpDump de hashes SAMT1003.002
kerberos_ticket_useUsar ticket KerberosT1550.003
jump psexecMovimiento lateral via PsExecT1569.002
jump winrmMovimiento lateral via WinRMT1021.006
portscanEscaneo de puertosT1046
screenshotCaptura de pantallaT1113
keyloggerKeyloggerT1056.001
downloadDescargar archivo de la víctimaT1005
uploadSubir archivo a la víctimaT1105
shellEjecutar comando via cmd.exeT1059.003
powershellEjecutar PowerShellT1059.001
spawnCrear nuevo beacon en otro procesoT1055

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 nameUso en Cobalt Strike
\MSSE-XXXX-serverDefault SMB beacon (configurable)
\postex_XXXXPost-exploitation jobs
\status_XXXXStatus pipe
\msagent_XXXXOtro default

Process injection (Sysmon Event ID 8, 10):

  • Cobalt Strike inyecta beacons en procesos via CreateRemoteThread o 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

HerramientaTipoFunción
CobaltStrikeParserPythonParsea beacon configs de memoria dumps o binarios
BeaconEyeC#Escanea procesos en memoria buscando beacons
1768.py (SentinelOne)PythonExtrae configuración de beacons
JARMFingerprintFingerprint activo del Team Server TLS
RITAGoAnálisis de tráfico de red para detectar beaconing
Shodan/CensysOSINTBuscar 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

FrameworkLenguajeLicenciaVentajaAdopción en ataques
Brute Ratel C4C/C++ComercialDiseñado para evadir EDR. No usa hooks comunesCreciente (APTs, ransomware)
SliverGoOpen sourceCross-platform, implants en Go/C#/CCreciente
HavocCOpen sourceModular, extensibleEmergente
MythicPython/GoOpen sourceFramework modular, múltiples agentesMedia
NighthawkCComercialMDSec, diseñado para evasiónBaja (selectivo)
CovenantC#Open source (archivado).NET, integración con execute-assemblyBaja (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

Artículos relacionados

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.