CAPE Sandbox: Guía Completa Self-Hosted (2026)
Instala CAPE Sandbox en tu infra con KVM y extrae configs de +100 familias de malware. Guía paso a paso con ejemplos reales de análisis.
CAPE: la sandbox privada que extrae configs
TL;DR: CAPEv2 es un sandbox de malware de código abierto que permite el análisis dinámico y la extracción automática de configuraciones. Supera a herramientas tradicionales al interceptar APIs en tiempo real y requiere un hardware robusto de al menos 32 GB de RAM. Se recomienda su uso para equipos de seguridad que busquen automatizar el desempaquetado de payloads y la identificación de C2.
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
| Componente | Especificación |
|---|---|
| OS Host | Ubuntu 22.04 LTS |
| CPU | 8+ cores con VT-x/AMD-V |
| RAM | 32+ GB |
| Disco | 500+ GB SSD/NVMe |
| Virtualización | KVM/QEMU |
| Guest VMs | Windows 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ón | Contenido |
|---|---|
| Summary | Score, clasificación, familia detectada |
| Behavioral | Procesos, archivos, registro, mutex, servicios |
| Network | DNS, HTTP, TCP/UDP, IPs contactadas, PCAP descargable |
| Dropped files | Archivos creados por el malware (payloads, configs) |
| CAPE extractions | Payloads desempaquetados, configs descifradas |
| Process Memory | Dumps de memoria de procesos del malware |
| Screenshots | Capturas de pantalla durante ejecución |
| YARA | Reglas YARA que coincidieron |
| Sigma | Reglas Sigma que coincidieron |
| MITRE ATT&CK | Técnicas detectadas mapeadas a ATT&CK |
| Signatures | Firmas 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": "exfil@evil-server.com",
"password": "P@ssw0rd123",
"to": "collector@evil-server.com",
"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:
| Familia | Datos extraídos |
|---|---|
| Cobalt Strike | C2, port, sleep, jitter, watermark, pipe name |
| Agent Tesla | SMTP/FTP/Telegram config, credentials |
| Emotet | C2 list, RSA public key |
| QakBot | Campaign ID, C2 list, bot ID |
| Remcos | C2, port, mutex, keylog path |
| AsyncRAT | C2, port, mutex, AES key |
| NanoCore | C2, port, mutex, plugins |
| RedLine | C2, build ID |
| FormBook/XLoader | C2 list, decoy URLs |
| IcedID | Campaign 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
| Aspecto | CAPE (self-hosted) | ANY.RUN | Joe Sandbox |
|---|---|---|---|
| Privacidad | Total (tu infra) | Community = público | Community = público |
| Límites | Sin límite (tu hardware) | 1/día free | 5/mes free |
| Config extraction | 100+ familias | Limitado | Bueno |
| Personalización | Total (código abierto) | No | No |
| Interactividad | No (automatizado) | Sí (tiempo real) | No |
| Coste | Hardware + mantenimiento | Suscripción | Suscripción |
| Setup | Complejo (Linux, KVM) | Ninguno (cloud) | Ninguno (cloud) |
Fuentes y referencias
- kevoreilly. "CAPEv2: Malware Configuration and Payload Extraction." https://github.com/kevoreilly/CAPEv2
- CAPE Documentation. https://capev2.readthedocs.io/
- Cuckoo Foundation. "Cuckoo Sandbox." https://cuckoosandbox.org/
- KVM. "Kernel-based Virtual Machine." https://www.linux-kvm.org/
Preguntas frecuentes
Libros recomendados
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.