AvanzadoCAPEsandboxself-hostedautomatizadoconfiguraciónprivacidad

CAPEv2: Sandbox Automatizado Self-Hosted para Análisis de Malware

Guía de CAPEv2 (Cuckoo fork), el sandbox de malware self-hosted más potente. Instalación, configuración con KVM, extracción automática de configs de malware, YARA/Sigma integration, y por qué es la opción cuando la privacidad importa.

MalwareIntel Research··5 min lectura
Serie: Entornos de Análisis — Parte 12

CAPE: la sandbox privada que extrae configs

CAPEv2 se diferencia de otros sandboxes por su capacidad de extracción automática de configuraciones de malware. Cuando un RAT descifra su config en runtime (C2 IP, port, mutex, encryption key), CAPE captura esos datos descifrados. Cuando un loader desempaqueta su payload final, CAPE dumpa el payload limpio. Esto es posible porque CAPE hookea APIs criptográficas y de memoria para interceptar datos en el momento del descifrado.

Instalación

Requisitos

ComponenteEspecificación
OS HostUbuntu 22.04 LTS
CPU8+ cores con VT-x/AMD-V
RAM32+ GB
Disco500+ GB SSD/NVMe
VirtualizaciónKVM/QEMU
Guest VMsWindows 10, Windows 7, Linux

Instalación rápida

# 1. Clonar repositorio
git clone https://github.com/kevoreilly/CAPEv2
cd CAPEv2

# 2. Ejecutar installer
sudo ./installer/cape2.sh base
# Instala: Python, MongoDB, PostgreSQL, KVM, tcpdump, etc.
# Tarda 30-60 minutos

# 3. Configurar VM guest
# Crear VM Windows 10 con KVM (virt-manager)
# Instalar Python 3, agent.py de CAPE
# Deshabilitar Windows Update, Defender, firewall
# Tomar snapshot

# 4. Configurar CAPE
# Editar conf/cuckoo.conf, conf/kvm.conf, conf/reporting.conf
# Definir las VMs disponibles, red, almacenamiento

# 5. Iniciar
sudo systemctl start cape
sudo systemctl start cape-processor
sudo systemctl start cape-web

# Web UI: http://localhost:8000

Configuración de red

Host (Ubuntu)
├── virbr0 (bridge KVM): 192.168.122.0/24
│   └── Guest VMs: 192.168.122.100-200
├── Internet access: via NAT o INetSim
└── CAPE web: puerto 8000

Con INetSim (recomendado para malware):

# INetSim simula Internet
# El malware "cree" que tiene conexion
# Todo el trafico queda capturado
sudo inetsim --bind-address 192.168.122.1

Con acceso real a Internet (riesgoso):

# Solo si necesitas que el malware contacte C2 real
# Configurar NAT con iptables
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Uso: subir muestras

Web UI

1. Acceder a http://cape-host:8000
2. Submit > Upload file o paste URL
3. Opciones:
   - Package: exe, dll, doc, pdf, ps1 (auto-detecta)
   - Machine: win10, win7, linux
   - Timeout: 120-600 segundos
   - Network: none, inetsim, internet
   - Options: procmemdump, CAPE, force-sleepskip
4. Submit
5. Esperar 3-10 minutos
6. Ver informe en la web

API

import requests

# Subir muestra via API
response = requests.post(
    "http://cape-host:8000/apiv2/tasks/create/file/",
    files={"file": open("sample.exe", "rb")},
    data={"timeout": 300, "options": "procmemdump=1"}
)
task_id = response.json()["data"]["task_ids"][0]

# Obtener informe
report = requests.get(f"http://cape-host:8000/apiv2/tasks/get/report/{task_id}/")

CLI

# Desde el servidor CAPE
python3 utils/submit.py --url http://localhost:8000 sample.exe

Output: qué genera CAPE

Informe web

SecciónContenido
SummaryScore, clasificación, familia detectada
BehavioralProcesos, archivos, registro, mutex, servicios
NetworkDNS, HTTP, TCP/UDP, IPs contactadas, PCAP descargable
Dropped filesArchivos creados por el malware (payloads, configs)
CAPE extractionsPayloads desempaquetados, configs descifradas
Process MemoryDumps de memoria de procesos del malware
ScreenshotsCapturas de pantalla durante ejecución
YARAReglas YARA que coincidieron
SigmaReglas Sigma que coincidieron
MITRE ATT&CKTécnicas detectadas mapeadas a ATT&CK
SignaturesFirmas behavioral de CAPE (200+ signatures)

Config extraction (la killer feature)

Ejemplo de output para Agent Tesla:

{
  "cape_type": "AgentTesla",
  "config": {
    "protocol": "smtp",
    "host": "mail.evil-server.com",
    "port": 587,
    "username": "[email protected]",
    "password": "P@ssw0rd123",
    "to": "[email protected]",
    "persistence": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run",
    "mutex": "AgentTesla_MUTEX_xxx"
  }
}

Ejemplo para Cobalt Strike:

{
  "cape_type": "CobaltStrike",
  "config": {
    "BeaconType": "HTTPS",
    "C2Server": "192.168.1.100,/api/v2/updates",
    "Port": 443,
    "SleepTime": 60000,
    "Jitter": 20,
    "PublicKey": "...",
    "UserAgent": "Mozilla/5.0 ...",
    "Watermark": 123456789,
    "PipeName": "\\MSSE-1234-server"
  }
}

Estos datos extraídos automáticamente son IOCs de alta calidad: C2 servers, credenciales del operador, configuración del beacon.

Familias con extracción automática

CAPE soporta extracción de configs para 100+ familias. Las más comunes:

FamiliaDatos extraídos
Cobalt StrikeC2, port, sleep, jitter, watermark, pipe name
Agent TeslaSMTP/FTP/Telegram config, credentials
EmotetC2 list, RSA public key
QakBotCampaign ID, C2 list, bot ID
RemcosC2, port, mutex, keylog path
AsyncRATC2, port, mutex, AES key
NanoCoreC2, port, mutex, plugins
RedLineC2, build ID
FormBook/XLoaderC2 list, decoy URLs
IcedIDCampaign ID, C2

Integración con pipeline

Automatización

# Pipeline: muestra llega → CAPE analiza → IOCs a SIEM

import requests
import json

def analyze_and_extract(filepath):
    # 1. Submit a CAPE
    r = requests.post(
        "http://cape:8000/apiv2/tasks/create/file/",
        files={"file": open(filepath, "rb")}
    )
    task_id = r.json()["data"]["task_ids"][0]
    
    # 2. Esperar resultado (polling)
    import time
    while True:
        status = requests.get(f"http://cape:8000/apiv2/tasks/get/status/{task_id}/")
        if status.json()["data"] == "reported":
            break
        time.sleep(30)
    
    # 3. Obtener informe
    report = requests.get(f"http://cape:8000/apiv2/tasks/get/report/{task_id}/")
    data = report.json()
    
    # 4. Extraer IOCs
    iocs = {
        "c2_servers": [],
        "dropped_files": [],
        "yara_matches": [],
        "cape_configs": data.get("CAPE", {}).get("configs", [])
    }
    
    # 5. Enviar IOCs al SIEM/TIP
    send_to_siem(iocs)
    
    return iocs

YARA rules custom en CAPE

# Añadir reglas YARA propias
cp my_rules.yar /opt/CAPEv2/data/yara/CAPE/
# CAPE escanea automaticamente con tus reglas

Comparativa: CAPE vs sandboxes online

AspectoCAPE (self-hosted)ANY.RUNJoe Sandbox
PrivacidadTotal (tu infra)Community = públicoCommunity = público
LímitesSin límite (tu hardware)1/día free5/mes free
Config extraction100+ familiasLimitadoBueno
PersonalizaciónTotal (código abierto)NoNo
InteractividadNo (automatizado)Sí (tiempo real)No
CosteHardware + mantenimientoSuscripciónSuscripción
SetupComplejo (Linux, KVM)Ninguno (cloud)Ninguno (cloud)

Fuentes y referencias

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.