IntermedioOpenCTICTIherramientasknowledge graphopen source

OpenCTI: Plataforma CTI Open Source con Knowledge Graph

Guía completa de OpenCTI (Filigran): arquitectura (ElasticSearch, Redis, MinIO, RabbitMQ), modelo de datos STIX 2.1 nativo, knowledge graph, ecosistema de 80+ conectores, dashboards, workspaces de investigación, API GraphQL y comparativa con MISP.

MalwareIntel Research··13 min lectura
Serie: Cyber Threat Intelligence — Parte 24

OpenCTI modela la inteligencia de amenazas como un knowledge graph navegable con STIX 2.1 nativo

OpenCTI es la plataforma CTI open source que más ha evolucionado en los últimos años. Desarrollada por Filigran (empresa francesa, anteriormente Luatix), resuelve un problema fundamental de la inteligencia de amenazas: las relaciones entre entidades son tan importantes como las entidades mismas.

Un IOC aislado es un dato. Un IOC conectado a un malware, atribuido a un actor, usado en una campaña contra un sector específico, con TTPs mapeadas a MITRE ATT&CK y mitigaciones documentadas, es inteligencia. OpenCTI modela todo esto como un grafo de conocimiento.

Arquitectura de OpenCTI

OpenCTI no es un monolito. Es un sistema distribuido con múltiples componentes:

                    ┌─────────────┐
                    │   Frontend   │
                    │   (React)    │
                    └──────┬──────┘
                           │
                    ┌──────▼──────┐
                    │   API       │
                    │  (GraphQL)  │
                    └──┬────┬────┘
                       │    │
            ┌──────────▼┐  ┌▼──────────┐
            │ ElasticSearch│ │   Redis    │
            │ (datos +    │ │ (cache +   │
            │  búsqueda)  │ │  colas)    │
            └─────────────┘ └────────────┘
                       │    │
            ┌──────────▼┐  ┌▼──────────┐
            │   MinIO    │  │ RabbitMQ   │
            │ (ficheros) │  │ (mensajes  │
            │            │  │  conectores)│
            └────────────┘  └────────────┘
                                │
                    ┌───────────▼──────────┐
                    │     Conectores       │
                    │  (workers Python)    │
                    └──────────────────────┘

Componentes

ComponenteFunciónTecnología
PlatformAPI GraphQL + interfaz webNode.js (backend), React (frontend)
ElasticSearch/OpenSearchAlmacenamiento de datos y búsqueda full-textES 8.x / OpenSearch 2.x
RedisCache, sesiones y cola de mensajes internaRedis 7.x
MinIOAlmacenamiento de ficheros (reports PDF, imágenes, exports)S3-compatible
RabbitMQBus de mensajes para conectoresAMQP
WorkersProcesamiento asíncrono de datosPython
ConectoresImportación/exportación de inteligenciaPython (cada conector es independiente)

Esta arquitectura permite escalar cada componente de forma independiente. Una organización con muchos conectores puede escalar RabbitMQ y los workers sin afectar a la UI.

Modelo de datos: STIX 2.1 nativo

La diferencia fundamental de OpenCTI con otras plataformas CTI es que usa STIX 2.1 como modelo de datos nativo. No hay un modelo propietario que se convierte a STIX para exportar: los datos viven en STIX desde el momento de la ingesta.

STIX Domain Objects (SDO)

Los SDOs son las entidades principales del grafo:

SDOUso en OpenCTIEjemplo
Threat ActorGrupos o individuos que realizan actividades maliciosasAPT28 (G0007)
Intrusion SetConjunto de comportamientos y recursos atribuidos a un actorFancy Bear operations
MalwareFamilias de malwareEmotet, LockBit 3.0
ToolHerramientas legítimas usadas por adversariosCobalt Strike, Mimikatz
Attack PatternTécnicas y tácticas (mapeo a MITRE ATT&CK)T1566 Phishing
CampaignCampañas con atribución temporalOp. SolarNight
VulnerabilityCVEs con CVSS y contexto de explotaciónCVE-2023-34362
IndicatorIOCs con patrón STIX[file:hashes.SHA-256 = 'abc...']
InfrastructureInfraestructura usada por adversariosC2 server, botnet
Course of ActionMitigaciones y respuestasD3-NM Network Monitoring
ReportInformes de inteligencia"APT28 Q1 2026 Activity Report"
NoteAnotaciones de analistasHipótesis, observaciones
OpinionValoraciones de confianza"Estoy de acuerdo con la atribución"

STIX Cyber Observables (SCO)

Los SCOs son los datos técnicos observables:

SCOEjemplo
IPv4/IPv6 Address203.0.113.50
Domain Namemalicious-example.com
URLhttps://malicious-example.com/payload
File (hash)SHA-256: a1b2c3d4...
Email Address[email protected]
Processcmd.exe con argumentos sospechosos
Network TrafficJA3 fingerprint
SoftwareWindows 10, Apache 2.4

STIX Relationship Objects (SRO)

Las relaciones conectan SDOs y SCOs:

Threat Actor ──[uses]──────────→ Malware
Malware ──────[uses]──────────→ Attack Pattern
Campaign ─────[attributed-to]─→ Threat Actor
Indicator ────[indicates]─────→ Malware
Malware ──────[exploits]──────→ Vulnerability
Course of Action ─[mitigates]─→ Attack Pattern
Infrastructure ──[used-by]────→ Threat Actor

Cada relación tiene metadatos propios: confianza, fecha de inicio y fin, fuente, descripción. Esto permite modelar atribuciones probabilísticas y evolución temporal de campañas.

Knowledge Graph: visualización de relaciones

El knowledge graph es la funcionalidad central de OpenCTI. Permite navegar las relaciones entre entidades de forma visual e interactiva.

Al abrir cualquier entidad (por ejemplo, APT28), OpenCTI muestra:

  • Overview: resumen con metadatos, descripción, aliases, confianza
  • Knowledge: grafo de relaciones con otras entidades (malware, TTPs, campañas, infraestructura, víctimas)
  • Analysis: informes y notas vinculados
  • Indicators: IOCs asociados con patrón STIX
  • Data: observables técnicos

El grafo de conocimiento se puede expandir interactivamente: click en un nodo para ver sus relaciones, expandir vecinos, filtrar por tipo de relación, ajustar la profundidad.

Vistas del grafo

OpenCTI ofrece múltiples formas de visualizar el mismo grafo:

VistaUso
GraphGrafo de fuerzas interactivo (la vista principal)
TimelineLínea temporal de actividad
CorrelationMatriz de correlaciones entre entidades
MapGeolocalización de infraestructura y víctimas
MatrixVista tipo MITRE ATT&CK Navigator

Ecosistema de conectores

OpenCTI tiene más de 80 conectores mantenidos por la comunidad y por Filigran. Los conectores se dividen en tres categorías:

Conectores de importación externa

Traen datos de fuentes externas a OpenCTI:

ConectorFuenteDatos
MITRE ATT&CKmitre-attack.github.ioTécnicas, tácticas, grupos, software
MITRE D3FENDd3fend.mitre.orgMitigaciones defensivas
MISP FeedInstancia MISPEventos, atributos, galaxias
AlienVault OTXotx.alienvault.comPulsos, IOCs
abuse.ch (MalwareBazaar, ThreatFox, URLhaus)abuse.chHashes, C2, URLs
CISA KEVcisa.govCVEs explotadas activamente
CVE (NVD)nvd.nist.govVulnerabilidades con CVSS
Malpediamalpedia.caad.fkie.fraunhofer.deFamilias de malware, actores
VirusTotalvirustotal.comEnriquecimiento de hashes, IPs, dominios
Shodanshodan.ioEnriquecimiento de infraestructura
AbuseIPDBabuseipdb.comReputación de IPs
Mandiant (Google)advantage.mandiant.comActores, campañas, malware
CrowdStrikefalcon.crowdstrike.comInteligencia de actores
ESETeset.comIOCs y campañas
Sekoia.iosekoia.ioInteligencia de amenazas
OpenCTI Datasetsgithub.com/OpenCTI-PlatformSectores, países, regiones

Conectores de enriquecimiento interno

Procesan datos ya existentes en OpenCTI para añadir contexto:

ConectorFunción
ImportDocumentExtrae IOCs de documentos (PDF, DOCX, texto)
HygieneLimpia datos: elimina IPs privadas, dominios legítimos, hashes inválidos
IpInfoGeolocalización y ASN de IPs
DomainToolsWHOIS y DNS de dominios
AbuseIPDB EnrichmentScore de abuso de IPs

Conectores de exportación

Envían datos desde OpenCTI a otras plataformas:

ConectorDestino
MISPInstancia MISP (sincronización bidireccional)
SplunkSIEM Splunk (IOCs como listas de watchlist)
ElasticSIEM Elastic Security
TheHivePlataforma de respuesta a incidentes
CortexMotor de análisis y respuesta
TAXII ServerServidor TAXII 2.1 para distribución estándar

Instalación de conectores

Cada conector es un contenedor Docker independiente que se añade al docker-compose.yml:

connector-mitre:
  image: opencti/connector-mitre:6.4.2
  environment:
    - OPENCTI_URL=http://opencti:8080
    - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN}
    - CONNECTOR_ID=connector-mitre-id
    - CONNECTOR_NAME=MITRE ATT&CK
    - CONNECTOR_SCOPE=attack-pattern,course-of-action,intrusion-set,malware,tool
    - CONNECTOR_RUN_AND_TERMINATE=false
    - CONNECTOR_LOG_LEVEL=info
    - MITRE_INTERVAL=7 # días entre actualizaciones
  restart: always

Dashboards y analytics

OpenCTI incluye un sistema de dashboards configurable que permite crear vistas analíticas personalizadas.

Dashboards predefinidos

  • Global Dashboard: resumen de entidades, indicadores activos, últimos informes
  • Threat Landscape: actores activos, campañas en curso, sectores afectados
  • Indicators of Compromise: IOCs por tipo, fuente, confianza, fecha
  • Vulnerability Management: CVEs por severidad, explotación activa

Widgets disponibles

WidgetVisualización
NumberContador (total de entidades)
DistributionPie/Donut chart (distribución por tipo)
ListTabla con entidades filtradas
TimelineLínea temporal de actividad
HeatmapMapa de calor (ATT&CK matrix, actividad temporal)
MapMapa geográfico
TreeJerarquía de relaciones
BookmarkEntidades marcadas para seguimiento

Los dashboards se pueden exportar como JSON y compartir entre instancias.

Workspaces e investigaciones

Los workspaces son espacios de trabajo colaborativos para investigaciones en curso. Permiten a los analistas:

  1. Crear una investigación: seleccionar entidades de interés, agruparlas en un workspace
  2. Construir el grafo: añadir entidades, crear relaciones, anotar con notas
  3. Colaborar: múltiples analistas trabajando en el mismo workspace con historial de cambios
  4. Documentar: añadir notas, opiniones y referencias a fuentes
  5. Exportar: generar informes PDF/STIX con los hallazgos

Los workspaces son el mecanismo principal para investigaciones que requieren más de una sesión o más de un analista.

Flujo de investigación típico

1. Alerta del SOC: IP sospechosa 203.0.113.50
   ↓
2. Crear workspace "Investigación IP 203.0.113.50"
   ↓
3. Buscar la IP en OpenCTI → encontrar indicador existente
   ↓
4. Expandir relaciones: ¿a qué malware está asociada? ¿qué actor la usa?
   ↓
5. Añadir entidades relacionadas al workspace
   ↓
6. Buscar otros IOCs del mismo actor/campaña en la organización
   ↓
7. Documentar hallazgos con notas
   ↓
8. Exportar informe para el SOC lead

API GraphQL y automatización

OpenCTI expone toda su funcionalidad a través de una API GraphQL. Esto permite automatizar cualquier operación que se puede hacer desde la UI.

Autenticación

# Obtener token: Settings → API Access → Token
# Header: Authorization: Bearer <token>

Consultas básicas

# Buscar actores de amenaza
query {
  threatActors(
    filters: {
      mode: and
      filters: [
        { key: "entity_type", values: ["Threat-Actor-Group"] }
      ]
    }
    first: 10
    orderBy: created_at
    orderMode: desc
  ) {
    edges {
      node {
        id
        name
        aliases
        first_seen
        last_seen
        sophistication
        primary_motivation
      }
    }
  }
}
# Buscar indicadores por tipo
query {
  indicators(
    filters: {
      mode: and
      filters: [
        { key: "pattern_type", values: ["stix"] }
        { key: "valid_until", values: ["2026-01-01"], operator: gt }
      ]
    }
    first: 50
  ) {
    edges {
      node {
        id
        name
        pattern
        valid_from
        valid_until
        x_opencti_score
      }
    }
  }
}

Cliente Python

from pycti import OpenCTIApiClient

# Conexión
api = OpenCTIApiClient(
    url="http://opencti:8080",
    token="your-api-token"
)

# Buscar malware
malware_list = api.malware.list(
    first=20,
    orderBy="created_at",
    orderMode="desc"
)

# Crear indicador
indicator = api.indicator.create(
    name="Malicious IP",
    pattern="[ipv4-addr:value = '203.0.113.50']",
    pattern_type="stix",
    x_opencti_score=80,
    valid_from="2026-06-01T00:00:00Z"
)

# Crear relación
api.stix_core_relationship.create(
    fromId=indicator["id"],
    toId=malware_id,
    relationship_type="indicates",
    confidence=85
)

OpenCTI vs MISP: comparativa

Ambas plataformas son complementarias. La elección depende del caso de uso principal:

AspectoMISPOpenCTI
Foco principalSharing de IOCs entre organizacionesAnálisis y modelización de relaciones
Modelo de datosPropietario (con export STIX)STIX 2.1 nativo
Knowledge graphNo (correlaciones básicas)Sí (grafo completo navegable)
Sharing groupsExcelente (modelo maduro)Básico (marking definitions)
SincronizaciónDirecta entre instancias MISPVia conectores (MISP, TAXII)
UI/UXFuncional, orientada a operacionesModerna, orientada a análisis
ConectoresLimitados (feeds y export)80+ (importación, enriquecimiento, export)
APIREST (PyMISP)GraphQL (pycti)
ComunidadMuy grande, CERTs europeosCreciendo rápido, enterprises
Curva de aprendizajeMediaMedia-alta (STIX + arquitectura)
Recursos necesariosBajos (puede correr en 4GB RAM)Altos (ElasticSearch + todos los componentes)
LicenciaAGPLApache 2.0 (community)

Cuándo elegir cada uno

MISP es mejor cuando:

  • El objetivo principal es compartir IOCs con otras organizaciones
  • Se necesita interoperar con CERTs y CSIRTs que ya usan MISP
  • Los recursos de infraestructura son limitados
  • El equipo CTI es pequeño y necesita empezar rápido

OpenCTI es mejor cuando:

  • El objetivo es análisis profundo de relaciones entre entidades
  • Se necesita un knowledge graph navegable
  • Hay múltiples fuentes de inteligencia que integrar
  • El equipo CTI necesita workspaces colaborativos para investigaciones

Ambos cuando:

  • La organización tiene madurez CTI media-alta
  • Se necesita sharing (MISP) y análisis (OpenCTI)
  • Hay equipo para operar ambas plataformas

Despliegue con Docker Compose

La instalación recomendada de OpenCTI es con Docker Compose:

# Clonar repositorio oficial
git clone https://github.com/OpenCTI-Platform/docker.git
cd docker

# Configurar variables de entorno
cp .env.sample .env
# Editar .env: configurar tokens, contraseñas, puertos

Variables clave en .env:

[email protected]
OPENCTI_ADMIN_PASSWORD=ChangeMeNow!
OPENCTI_ADMIN_TOKEN=<uuid-generado>
OPENCTI_BASE_URL=http://localhost:8080
OPENCTI_HEALTHCHECK_ACCESS_KEY=<uuid-generado>
ELASTICSEARCH_MEMORY=4g
MINIO_ROOT_USER=opencti
MINIO_ROOT_PASSWORD=ChangeMeNow!
RABBITMQ_DEFAULT_USER=opencti
RABBITMQ_DEFAULT_PASS=ChangeMeNow!

Requisitos mínimos para producción:

RecursoMínimoRecomendado
RAM16 GB32 GB+
CPU4 cores8 cores
Disco100 GB SSD500 GB+ SSD (ElasticSearch es intensivo)
RedAcceso HTTPS salienteIP fija para acceso externo
# Levantar la plataforma
docker compose up -d

# Verificar que todos los servicios están corriendo
docker compose ps

# Ver logs de la plataforma
docker compose logs -f opencti

Post-instalación

  1. Acceder a http://localhost:8080 con credenciales configuradas
  2. Configurar conectores prioritarios (MITRE ATT&CK, abuse.ch, CVE)
  3. Crear organizaciones y usuarios
  4. Configurar marking definitions (TLP)
  5. Importar datos iniciales (MITRE ATT&CK tarda unos minutos)
  6. Crear dashboards personalizados

Escalado

Para entornos de producción con alto volumen de datos:

  • ElasticSearch: cluster de 3 nodos mínimo con réplicas
  • RabbitMQ: cluster para alta disponibilidad de mensajes
  • Workers: escalar horizontalmente según el número de conectores activos
  • MinIO: cluster para almacenamiento de ficheros redundante

Integraciones avanzadas

OpenCTI + TheHive

TheHive es la plataforma complementaria natural para respuesta a incidentes. El conector bidireccional permite:

  • Crear alertas en TheHive desde indicadores de OpenCTI
  • Enriquecer casos de TheHive con contexto de OpenCTI
  • Sincronizar observables entre ambas plataformas

OpenCTI + Cortex

Cortex ejecuta análisis automatizados (analyzers) sobre observables. Combinado con OpenCTI:

  • Enriquecimiento automático de IOCs (VirusTotal, Shodan, DomainTools)
  • Respuesta automatizada a indicadores de alta confianza
  • Feedback loop: resultados de Cortex actualizan el score en OpenCTI

OpenCTI + Elastic Security

Para organizaciones que usan Elastic como SIEM:

  • Exportación automática de IOCs a Elastic Threat Intelligence
  • Correlación de alertas de Elastic con contexto de OpenCTI
  • Dashboard unificado de amenazas

Recursos

  • OpenCTI (filigran.io/solutions/products/opencti). Sitio oficial de Filigran con documentación, releases y soporte.
  • OpenCTI Documentation (docs.opencti.io). Documentación técnica completa: instalación, configuración, API, conectores.
  • OpenCTI GitHub (github.com/OpenCTI-Platform/opencti). Código fuente, issues y releases.
  • OpenCTI Connectors (github.com/OpenCTI-Platform/connectors). Repositorio oficial de 80+ conectores.
  • pycti (github.com/OpenCTI-Platform/client-python). Cliente Python oficial para la API GraphQL.
  • Filigran Blog (blog.filigran.io). Artículos técnicos sobre CTI, OpenCTI y casos de uso.
  • STIX 2.1 Specification (docs.oasis-open.org/cti/stix/v2.1). Especificación completa del modelo de datos.
  • MalwareIntel (malwareintel.es). Plataforma CTI con knowledge graph de amenazas, familias de malware y actores.

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.