Aller au contenu

Threat Intelligence : Protocole TAXII et Échange Automatisé

Maintenu par le consortium OASIS aux côtés de STIX, la philosophie de conception de TAXII repose sur une stricte séparation des rôles.

  • Agnostique au contenu : un serveur TAXII n’analyse ni ne valide la signification des objets STIX qu’il transporte. Il agit simplement comme un coursier sécurisé pour les “enveloppes” (Bundles) STIX.
  • Identité et confiance : TAXII lui-même ne dicte pas qui est digne de confiance. Il s’appuie sur le protocole HTTP sous-jacent pour la sécurité (HTTPS/TLS) et l’authentification (TLS mutuel, OAuth2 ou Basic Auth) afin de régir l’accès aux flux de renseignements.

Analogie : si STIX est le conteneur maritime standardisé contenant la cargaison (indicateurs, acteurs de la menace), TAXII est le réseau logistique international (les navires, les camions et les ports) qui définit les numéros de suivi, les itinéraires de livraison et les adresses des entrepôts.

Le protocole TAXII moderne (version 2.1) a abandonné la messagerie XML complexe de la version 1.x au profit d’une architecture d’API REST hautement rationalisée et moderne. Il organise les renseignements sur les menaces selon une structure hiérarchique.

1. L'API Root

le point d’entrée principal d’un serveur TAXII. Une API Root est une URL représentant un regroupement logique de CTI (ex: https://cti.exemple.com/api1/). Un seul serveur TAXII peut héberger plusieurs API Roots pour séparer les données destinées à différentes équipes opérationnelles ou différents niveaux de confiance.

2. Les Collections

hébergée sous une API Root, une Collection est un flux thématique d’objets STIX. Par exemple, un serveur peut héberger une collection pour les “IOCs de Ransomware”, une autre pour les “TTPs d’APT28” et une troisième pour les “Menaces du secteur financier”.

3. Les Objets

les véritables objets JSON STIX 2.1 résidant à l’intérieur d’une collection.

TAXII prend en charge plusieurs modèles de partage, le plus dominant étant l’architecture “hub-and-spoke” (en étoile), où un centre d’échange central (comme un CERT national ou un ISAC) distribue des renseignements aux organisations membres.

Il s’agit du flux de travail opérationnel standard pour les SOC d’entreprise.

  1. Le TIP ou le SIEM de l’organisation s’authentifie auprès du serveur TAXII.
  2. Il demande la liste des collections disponibles à l’API Root.
  3. Il sélectionne une collection pertinente et effectue une requête HTTP GET (un “Pull”) pour récupérer tous les objets STIX ajoutés depuis son dernier horodatage (via le paramètre added_after).

Une approche plus collaborative où un client téléverse (via HTTP POST) de manière sécurisée des objets STIX nouvellement découverts vers une collection spécifique sur le serveur, partageant ainsi ses découvertes d’incidents locaux avec le reste de la communauté.

Bien que les analystes DFIR interagissent rarement avec les appels API TAXII bruts, comprendre le protocole est fondamental pour saisir le fonctionnement des centres opérationnels de sécurité (SOC) modernes.

Lorsqu’un EDR ou un SIEM génère une alerte indiquant “Connexion à une adresse IP malveillante connue bloquée”, ce renseignement n’est pas apparu par magie. Il est fort probable que le TIP de l’organisation ait interrogé une collection TAXII 15 minutes auparavant, reçu un objet Indicator STIX contenant cette IP, et l’ait poussé vers le pare-feu via API. Comprendre ce flux permet aux analystes de remonter la lignée d’une alerte jusqu’au fournisseur de renseignements spécifique.

En s’abonnant à des flux TAXII spécialisés, les organisations peuvent automatiser leur recherche de menaces. À mesure que de nouveaux objets STIX Attack Pattern (mappés sur MITRE ATT&CK) arrivent via TAXII, les SIEM modernes peuvent les traduire automatiquement en requêtes de chasse proactives pour balayer les journaux historiques.

taxii_poll_client.py
# Un exemple simplifié de la façon dont un outil SOC extrait des renseignements d'un serveur TAXII 2.1
import requests
# TAXII 2.1 nécessite des en-têtes Accept spécifiques
headers = {
"Accept": "application/taxii+json;version=2.1"
}
# Interrogation d'une Collection spécifique pour ses objets STIX
url = "https://cti.exemple.com/api1/collections/91a7b528-80eb-42ed-a74d-c6fbd5a26116/objects/"
# En environnement réel, des paramètres de requête comme ?added_after=2026-01-01T00:00:00Z sont utilisés
response = requests.get(url, headers=headers, auth=('soc_user', 'super_secret_token'))
if response.status_code == 200:
stix_bundle = response.json()
print(f"Récupération réussie de {len(stix_bundle.get('objects', []))} objets STIX.")
# Poursuite de l'ingestion dans le SIEM/TIP...