TheHive y Cortex: Gestion de Incidentes y Enrichment Automatizado
TheHive como plataforma de gestion de incidentes y Cortex como motor de enrichment automatizado. Arquitectura, analyzers, responders, integracion con MISP y flujos de respuesta.
TheHive y Cortex forman el tandem open source de referencia para gestion de incidentes con enrichment automatizado de indicadores
Responder a un incidente de seguridad implica gestionar casos, enriquecer indicadores, coordinar tareas entre analistas y documentar acciones. TheHive resuelve la gestion de casos. Cortex resuelve el enrichment automatizado. Juntos, con MISP como tercer pilar, forman la trilogia open source mas desplegada en SOCs y equipos CERT.
TheHive: gestion de incidentes centrada en observables
TheHive es una plataforma de Security Incident Response (SIRP) disenada para equipos SOC y CERT. Su modelo de datos gira en torno a tres conceptos: alertas, casos y observables.
Modelo de datos
Alertas: entradas automaticas desde SIEMs, feeds o herramientas de deteccion. Una alerta es un evento que requiere atencion pero todavia no es un incidente confirmado. TheHive recibe alertas via API y las presenta al analista para triaje.
Casos: cuando una alerta se confirma como incidente, se promueve a caso. Un caso contiene:
- Titulo, descripcion y severidad (1 a 4)
- TLP (Traffic Light Protocol) y PAP (Permissible Actions Protocol)
- Tareas asignables a analistas con SLA de resolucion
- Observables (los IOCs del incidente)
- Logs de investigacion
- Metricas de tiempo (TTD, TTR, TTC)
Observables: los indicadores asociados a un caso. IPs, dominios, hashes, URLs, emails, nombres de archivo. Cada observable tiene tipo, valor, TLP y estado de analisis. Los observables son el punto de conexion con Cortex: se envian a Cortex para enrichment automatizado.
Gestion de tareas y SLA
TheHive permite definir plantillas de caso con tareas predefinidas. Para un incidente de tipo "Phishing", la plantilla puede incluir:
Caso: Phishing Campaign
Severidad: 2 (Medium)
TLP: AMBER
Tareas:
1. Analisis de cabeceras del email → Analista N1 → SLA: 1h
2. Extraccion y analisis de adjuntos → Analista N2 → SLA: 2h
3. Verificacion de URLs en sandbox → Analista N2 → SLA: 2h
4. Busqueda de otros destinatarios → Analista N1 → SLA: 1h
5. Bloqueo de remitente y URLs → Analista N3 → SLA: 30min
6. Notificacion a usuarios afectados → Coordinador → SLA: 4h
7. Documentacion y cierre → Analista N1 → SLA: 1h
Cada tarea tiene un log donde el analista documenta sus hallazgos. Los SLAs se monitorizan automaticamente, generando alertas cuando se aproxima el vencimiento.
API REST
TheHive expone una API REST completa que permite automatizar todas las operaciones:
# Crear una alerta desde un SIEM
curl -XPOST https://thehive.local/api/alert \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Conexion a C2 conocido",
"description": "Host 10.0.1.45 conectando a 198.51.100.23 (Emotet C2)",
"type": "siem_alert",
"source": "QRadar",
"severity": 3,
"tlp": 2,
"artifacts": [
{"dataType": "ip", "data": "198.51.100.23", "message": "C2 IP"},
{"dataType": "ip", "data": "10.0.1.45", "message": "Host interno"}
]
}'
Cortex: motor de enrichment con 150+ analyzers
Cortex es el companion de TheHive para analisis automatizado de observables. Recibe un observable (IP, hash, dominio) y lo envia a multiples fuentes de inteligencia en paralelo, devolviendo un informe consolidado.
Conceptos: analyzers y responders
Analyzers: consultan fuentes externas y devuelven informacion. Son de solo lectura: no modifican nada, solo enriquecen. Ejemplos:
| Analyzer | Funcion | Tipo de observable |
|---|---|---|
| VirusTotal_GetReport | Reputacion y detecciones | Hash, IP, dominio, URL |
| AbuseIPDB_1_0 | Reportes de abuso de IP | IP |
| Shodan_Host | Puertos abiertos, banners | IP |
| MISP_2_1 | Busqueda en instancia MISP | Cualquiera |
| OTX_Query | Pulsos de AlienVault | IP, dominio, hash |
| DomainTools_ReverseIP | Dominios en la misma IP | IP |
| CRTsh_Transparency | Certificados SSL | Dominio |
| Censys_1_0 | Hosts y certificados | IP, dominio |
| PassiveTotal | DNS historico, WHOIS | IP, dominio |
| MalwareBazaar_1_0 | Muestras de malware | Hash |
| Yara_2_0 | Escaneo con reglas YARA | Archivo |
Responders: ejecutan acciones. A diferencia de los analyzers, los responders modifican estado: bloquean IPs en firewalls, desactivan usuarios en Active Directory, envian notificaciones. Ejemplos:
| Responder | Accion |
|---|---|
| Mailer_1_0 | Envia email de notificacion |
| Wazuh_1_0 | Crea regla de bloqueo en Wazuh |
| MISP_2_1 | Crea evento en MISP con los observables |
| Velociraptor_1_0 | Ejecuta hunt en endpoints |
| TheHive_1_0 | Actualiza caso en TheHive |
Ejecucion de analyzers
Cuando un analista anade un observable a un caso en TheHive, puede ejecutar analyzers de Cortex con un clic. Cortex lanza los analyzers en paralelo y devuelve los resultados a TheHive, donde se muestran como informes del observable.
El flujo tecnico:
TheHive Observable → Cortex API → Analyzer 1 (VirusTotal) → Resultado
→ Analyzer 2 (AbuseIPDB) → Resultado
→ Analyzer 3 (Shodan) → Resultado
→ Analyzer 4 (MISP) → Resultado
← Resultados consolidados ← TheHive
Creacion de analyzers personalizados
Cortex permite escribir analyzers en Python. Un analyzer basico tiene esta estructura:
#!/usr/bin/env python3
from cortexutils.analyzer import Analyzer
class MalwareIntelAnalyzer(Analyzer):
def __init__(self):
Analyzer.__init__(self)
self.api_url = self.get_param(
'config.api_url', None, 'API URL is missing'
)
self.api_key = self.get_param(
'config.api_key', None, 'API key is missing'
)
def run(self):
data = self.get_data() # El observable (IP, hash, dominio)
data_type = self.data_type # "ip", "hash", "domain", etc.
# Consultar la API
response = requests.get(
f"{self.api_url}/api/v1/iocs/search",
params={"value": data},
headers={"X-API-Key": self.api_key}
)
if response.status_code == 200:
result = response.json()
self.report({
'found': True,
'family': result.get('malware_family'),
'confidence': result.get('confidence'),
'first_seen': result.get('first_seen'),
'tags': result.get('tags', [])
})
else:
self.report({'found': False})
def summary(self, raw):
"""Resumen para la miniatura en TheHive"""
taxonomies = []
if raw.get('found'):
taxonomies.append(self.build_taxonomy(
'malicious', 'MalwareIntel', 'Family',
raw.get('family', 'Unknown')
))
return {'taxonomies': taxonomies}
Arquitectura: la trilogia TheHive + Cortex + MISP
La combinacion de estas tres herramientas cubre el ciclo completo de respuesta a incidentes:
Fuentes de alertas Fuentes de inteligencia
(SIEM, IDS, EDR, email) (feeds, reports, IOCs)
│ │
▼ ▼
┌─────────┐ observables ┌──────────┐
│ TheHive │ ───────────────► │ Cortex │
│ (SIRP) │ ◄─────────────── │(analyzers│
│ │ resultados │responders│
└────┬─────┘ └──────────┘
│ │
│ IOCs confirmados │ analyzers MISP
▼ ▼
┌─────────┐ ┌──────────┐
│ MISP │ ◄────────────────│ Fuentes │
│ (TIP) │ sharing │ externas │
└─────────┘ └──────────┘
TheHive gestiona el incidente: alertas, casos, tareas, observables, metricas.
Cortex enriquece los observables: consulta 150+ fuentes y ejecuta responders.
MISP almacena y comparte inteligencia: los IOCs confirmados se publican como eventos MISP para consumo de la comunidad o de otras organizaciones.
Flujo de datos entre los tres
- Un SIEM envia una alerta a TheHive via API
- El analista revisa la alerta y la promueve a caso
- Los observables del caso se envian a Cortex para enrichment
- Cortex ejecuta analyzers (VirusTotal, Shodan, AbuseIPDB, MISP lookup)
- Los resultados se muestran en TheHive junto al observable
- El analista confirma que los IOCs son maliciosos
- Los IOCs confirmados se exportan a MISP como evento
- MISP los comparte con la comunidad via feeds STIX/TAXII
- Los responders de Cortex ejecutan acciones: bloqueo en firewall, aislamiento de host
Instalacion con Docker Compose
El despliegue de la trilogia completa se simplifica con Docker Compose:
version: "3.8"
services:
thehive:
image: strangebee/thehive:5.3
ports:
- "9000:9000"
environment:
- TH_CORTEX_URL=http://cortex:9001
- TH_CORTEX_KEY=${CORTEX_API_KEY}
volumes:
- thehive-data:/opt/thp/thehive/data
depends_on:
- elasticsearch
- cortex
cortex:
image: thehiveproject/cortex:3.1
ports:
- "9001:9001"
volumes:
- cortex-data:/opt/cortex/data
depends_on:
- elasticsearch
elasticsearch:
image: elasticsearch:7.17.18
environment:
- discovery.type=single-node
- xpack.security.enabled=false
volumes:
- es-data:/usr/share/elasticsearch/data
misp:
image: coolacid/misp-docker:core-latest
ports:
- "443:443"
environment:
- [email protected]
volumes:
- misp-data:/var/www/MISP
volumes:
thehive-data:
cortex-data:
es-data:
misp-data:
Despues del despliegue, la configuracion inicial incluye:
- Crear organizacion y usuario administrador en TheHive
- Configurar analyzers en Cortex con las API keys de servicios externos
- Conectar TheHive con Cortex (URL + API key)
- Conectar Cortex con MISP (analyzer MISP_2_1)
- Configurar feeds de alertas desde el SIEM
Workflow completo: de alerta a respuesta
Un ejemplo concreto de flujo de trabajo con las tres herramientas:
Fase 1: Deteccion y triaje
El SIEM detecta trafico hacia una IP conocida como C2 de Emotet. Envia alerta automatica a TheHive con la IP del C2 y la IP del host interno como observables.
El analista N1 revisa la alerta en TheHive. Ve que la IP del C2 coincide con indicadores de Emotet. Promueve la alerta a caso con severidad 3 (High) y TLP:AMBER.
Fase 2: Enrichment
El analista ejecuta los analyzers de Cortex sobre la IP del C2:
- VirusTotal: 45/90 motores la detectan como maliciosa
- AbuseIPDB: 127 reportes de abuso en los ultimos 30 dias
- Shodan: puerto 443 abierto, certificado autofirmado, ASN sospechoso
- MISP: coincide con evento MISP de campana Emotet Q1 2026
- MalwareBazaar: 12 muestras asociadas a esta IP
Cortex consolida todos los resultados y los presenta en TheHive junto al observable.
Fase 3: Analisis y contencion
El analista N2 revisa los resultados de enrichment. Confirma que es un C2 de Emotet activo. Ejecuta tareas:
- Aislar el host comprometido (responder: EDR isolate)
- Bloquear la IP en el firewall perimetral (responder: firewall block)
- Buscar otros hosts que contactaron la misma IP (tarea manual en SIEM)
Fase 4: Documentacion y comparticion
Los IOCs confirmados (IP del C2, hash del dropper, URL del payload) se exportan a MISP como evento "Emotet C2 activo". MISP lo comparte con las comunidades configuradas.
El caso se cierra en TheHive con metricas: TTD 15 min, TTR 2h, TTC 4h.
Comparativa con alternativas comerciales
| Caracteristica | TheHive + Cortex | IBM SOAR (QRadar) | Palo Alto XSOAR | Splunk SOAR |
|---|---|---|---|---|
| Coste | Open source (Enterprise opcional) | Licencia comercial alta | Licencia comercial alta | Licencia comercial alta |
| Analyzers/Enrichment | 150+ (Cortex) | Integrado en QRadar | 700+ integraciones | 300+ apps |
| Gestion de casos | Completa | Completa | Completa | Completa |
| Playbooks | Basicos (webhooks) | Avanzados (visual) | Avanzados (visual) | Avanzados (visual) |
| Multi-tenancy | Enterprise | Si | Si | Si |
| Integracion MISP | Nativa | Via plugin | Via plugin | Via plugin |
| On-premise | Si (por defecto) | Si | Si/Cloud | Si/Cloud |
| Comunidad | Activa (StrangeBee) | Soporte comercial | Soporte comercial | Soporte comercial |
| Curva aprendizaje | Media | Alta | Alta | Alta |
La ventaja principal de TheHive + Cortex: coste cero de licencias con funcionalidad comparable. La desventaja: los playbooks visuales de las alternativas comerciales son mas sofisticados. Para equipos con presupuesto limitado o que priorizan soberania de datos (on-premise), la trilogia open source es la opcion natural.
Integracion con SIEM
TheHive se integra con los principales SIEMs para recibir alertas automaticas:
QRadar: via Offense Forwarding Rules que envian alertas a la API de TheHive.
Splunk: via Splunk Alert Actions que llaman al endpoint de alertas de TheHive.
Elastic SIEM: via Watcher o acciones de reglas de deteccion que envian webhooks.
Wazuh: via integracion nativa (modulo wazuh-thehive) que envia alertas de nivel configurable.
La clave de la integracion es mapear correctamente los campos del SIEM a los observables de TheHive. IPs, hashes, dominios y URLs del evento SIEM se convierten en observables del caso, listos para enrichment con Cortex.
Recursos
- TheHive Project (documentacion oficial y descargas)
- Cortex Analyzers (repositorio de analyzers y responders)
- StrangeBee (empresa detras de TheHive, soporte Enterprise)
- TheHive4py (cliente Python para la API)
- MISP Project (plataforma de comparticion de inteligencia)
- Cortex4py (cliente Python para Cortex API)
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.