---
title: "OpenCTI — Threat Intelligence Platform"
domain: security
subdomain: soc
phase: 04-detection
type: snippet
tags: [opencti, threat-intelligence, stix, taxii, soc, ioc, ttp]
difficulty: intermediate
status: stable
updated: "Fri Jun 19 2026 00:00:00 GMT+0000 (Coordinated Universal Time)"
---
## OpenCTI vs MISP

```
MISP     → Partage d'IOC (indicateurs bruts : IP, hash, domaine)
OpenCTI  → Graphe de connaissance : Acteurs → TTP → Campagnes → IOC
           Répondre à "QUI attaque COMMENT" plutôt que "QUOI bloquer"
```

OpenCTI modélise les données en **STIX 2.1** nativement :
```
Threat Actor → utilise → Malware → déploie → Infrastructure
Campaign → attribue → Threat Actor → cible → Identity (org, pays)
Attack Pattern (TTP ATT&CK) → liée à → Indicator (IOC)
```

---

## Déploiement Docker

```yaml
# docker-compose.yml
version: '3'
services:
  redis:
    image: redis:7
    restart: always

  elasticsearch:
    image: elasticsearch:8.12.1
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms2g -Xmx2g"
    volumes:
      - esdata:/usr/share/elasticsearch/data

  minio:
    image: minio/minio:latest
    command: server /data
    environment:
      - MINIO_ROOT_USER=opencti
      - MINIO_ROOT_PASSWORD=changeme123
    volumes:
      - miniodata:/data

  rabbitmq:
    image: rabbitmq:3.12-management
    environment:
      - RABBITMQ_DEFAULT_USER=opencti
      - RABBITMQ_DEFAULT_PASS=changeme123

  opencti:
    image: opencti/platform:6.2.0
    ports:
      - "8080:8080"
    environment:
      - APP__PORT=8080
      - APP__BASE_URL=http://localhost:8080
      - APP__ADMIN__EMAIL=admin@opencti.io
      - APP__ADMIN__PASSWORD=ChangeMe!2026
      - APP__ADMIN__TOKEN=UUID_TOKEN_ICI
      - REDIS__HOSTNAME=redis
      - ELASTICSEARCH__URL=http://elasticsearch:9200
      - MINIO__ENDPOINT=minio
      - MINIO__ACCESS_KEY=opencti
      - MINIO__SECRET_KEY=changeme123
      - RABBITMQ__HOSTNAME=rabbitmq
      - RABBITMQ__USERNAME=opencti
      - RABBITMQ__PASSWORD=changeme123
      - PROVIDERS__LOCAL__STRATEGY=LocalStrategy
    depends_on:
      - redis
      - elasticsearch
      - minio
      - rabbitmq

  # Connecteur MITRE ATT&CK
  connector-mitre:
    image: opencti/connector-mitre:6.2.0
    environment:
      - OPENCTI_URL=http://opencti:8080
      - OPENCTI_TOKEN=UUID_TOKEN_ICI
      - CONNECTOR_ID=CONNECTOR_MITRE_UUID
      - CONNECTOR_TYPE=EXTERNAL_IMPORT
      - CONNECTOR_NAME=MITRE ATT&CK
      - CONNECTOR_SCOPE=marking-definition,identity,attack-pattern,course-of-action,intrusion-set,campaign,malware,tool,vulnerability,x-mitre-data-source
      - MITRE_INTERVAL=7  # jours entre chaque import

volumes:
  esdata:
  miniodata:
```

```bash
# Accès : http://localhost:8080
# Login : admin@opencti.io / ChangeMe!2026
```

---

## Connecteurs essentiels

```yaml
# MISP — import IOC depuis MISP vers OpenCTI
connector-misp:
  image: opencti/connector-misp:6.2.0
  environment:
    - CONNECTOR_NAME=MISP
    - MISP_URL=https://misp.local
    - MISP_KEY=MISP_API_KEY
    - MISP_SSL_VERIFY=false
    - MISP_DATETIME_ATTRIBUTE=timestamp
    - MISP_IMPORT_FROM_DATE=2024-01-01

# Abuse.ch URLhaus
connector-urlhaus:
  image: opencti/connector-urlhaus:6.2.0
  environment:
    - CONNECTOR_NAME=Abuse.ch URLhaus
    - URLHAUS_CSV_URL=https://urlhaus.abuse.ch/downloads/csv_recent/

# AlienVault OTX
connector-alienvault:
  image: opencti/connector-alienvault:6.2.0
  environment:
    - CONNECTOR_NAME=AlienVault OTX
    - ALIENVAULT_BASE_URL=https://otx.alienvault.com
    - ALIENVAULT_API_KEY=OTX_API_KEY
    - ALIENVAULT_PULSE_START_TIMESTAMP=2024-01-01T00:00:00

# Shodan — enrichissement IP
connector-shodan:
  image: opencti/connector-shodan:6.2.0
  environment:
    - SHODAN_TOKEN=SHODAN_API_KEY
```

---

## Interface — Navigation

```
Analyse
  ├─ Rapports       → Threat reports importés/créés
  ├─ Regroupements  → Campagnes, Intrusion Sets
  └─ Malwares       → Familles de malware + TTPs

Menaces
  ├─ Acteurs        → Groupes APT (Lazarus, APT28...)
  ├─ Campagnes      → Opérations identifiées
  └─ Modes opératoires → Techniques ATT&CK

Arsenal
  ├─ Malwares       → Outils malveillants
  ├─ Canaux d'attaque → Vecteurs initiaux
  └─ Vulnérabilités → CVE liées aux acteurs

Observations
  ├─ Indicateurs    → IOC (IP, hash, domain, URL)
  └─ Artefacts observés → Fichiers, réseau

Graphe de connaissance
  → Vue graphique des relations entre entités
```

---

## API OpenCTI (GraphQL)

```bash
BASE_URL="http://localhost:8080"
TOKEN="UUID_TOKEN_ICI"

# Liste des acteurs de menace
curl -X POST "$BASE_URL/graphql" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query": "{ threatActors { edges { node { id name description } } } }"}'

# Chercher un IOC
curl -X POST "$BASE_URL/graphql" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query": "{ indicators(filters: {key: value, operator: eq}) { edges { node { id name pattern } } } }"}'
```

```python
# pycti — client Python officiel
from pycti import OpenCTIApiClient

api = OpenCTIApiClient("http://localhost:8080", "UUID_TOKEN_ICI")

# Créer un indicateur
api.indicator.create(
    name="Suspicious IP C2",
    pattern="[ipv4-addr:value = '185.220.101.45']",
    pattern_type="stix",
    x_opencti_score=85,
    labels=["c2", "apt"],
)

# Lister les groupes APT
actors = api.threat_actor.list()
for actor in actors:
    print(actor["name"], actor.get("description", ""))
```

---

## Intégration avec ton SOC

```
Wazuh (alerte) → TheHive (case) → OpenCTI (enrichissement IOC)
                                       ↓
                               Pivot : qui d'autre cible ces IOC ?
                               Acteur ATT&CK mapping ?
                                       ↓
                               MISP ← Export IOC validés

OpenCTI → Wazuh : export liste IP/domaines malveillants
          → Ingérer dans les règles Suricata
          → Mise à jour blacklists pfSense
```

---

## Dashboard recommandé

```
Widgets utiles sur le tableau de bord OpenCTI :
  - Acteurs actifs ce mois
  - IOC ingérés par source (MISP, OTX, Abuse.ch)
  - TTPs les plus utilisées (ATT&CK heatmap)
  - Rapports ajoutés cette semaine
  - Score moyen des indicateurs
```
