Aller au contenu

Threat modeling — STRIDE

Identifier les menaces techniques composant par composant avant qu'elles ne se materialisent.


Pourquoi le threat modeling

Le threat modeling est une approche structurée pour identifier les menaces de sécurité d'un système avant que le code ne soit écrit. Plutôt que d'attendre les tests de penetration en fin de projet, on anticipe les vecteurs d'attaque des la conception.

STRIDE est un framework de categorisation des menaces développé par Microsoft. Les 6 catégories couvrent l'ensemble des vecteurs d'attaque possibles sur un système. Pour les définitions détaillées de chaque catégorie et leur application au code, voir Securiser son code — fondamentaux.

Lettre Menace Propriété violee Exemple architectural
S Spoofing Authentification Service interne usurpant l'identité d'un autre
T Tampering Intégrité Message modifie entre deux services
R Repudiation Non-repudiation Action critique sans trace d'audit
I Information Disclosure Confidentialite Données sensibles exposees dans les logs
D Denial of Service Disponibilité Surchargé d'un service par un appelant interne
E Elevation of Privilege Autorisation Service obtenant des droits supérieurs a son rôle

Processus en 4 étapes

Étape 1 — Dessiner le diagramme de flux (DFD)

Le DFD (Data Flow Diagram) est la base de l'analyse. On identifie les composants, les flux de données entre eux, les frontieres de confiance et les stockages de données.

Les éléments du DFD :

Élément Représentation Description
Processus Rectangle Service, API, composant actif
Stockage Cylindre Base de données, file, cache
Flux de données Fleche Communication entre composants
Frontiere de confiance Ligne pointillee Séparation entre zones de confiance différentes
Entité externe Rectangle double Acteur externe au système (utilisateur, API tierce)

La précision du DFD détermine la qualité de l'analyse. Un DFD trop abstrait manque les menaces. Un DFD trop détaillé rend l'analyse ingerable. On vise le niveau ou chaque flux de données significatif est visible.

Étape 2 — Identifier les menaces par composant

Pour chaque composant et chaque flux du DFD, on appliqué STRIDE systematiquement. La question n'est pas "est-ce que cette menace est probable ?" mais "est-ce que cette menace est possible ?". La priorisation vient ensuite.

Composant / Flux S T R I D E
API Gateway x . . . x .
Flux Gateway -> Service x x . x . .
Service de commandes . x x . . x
Base de données . x x x . .
Flux Service -> DB . x . x . .

Chaque "x" est une menace a documenter avec une description concrète.

Étape 3 — Prioriser avec une risk matrix

Toutes les menaces n'ont pas le même impact ni la même probabilite. Une risk matrix simple croise probabilite et impact sur une échelle 1-3 :

Menace Probabilite Impact Score Priorité
Spoofing API Gateway 2 3 6 Haute
DoS sur l'API 3 2 6 Haute
Info Disclosure DB 1 3 3 Moyenne
Repudiation commande 1 2 2 Basse

Les menaces de score >= 5 sont traitees en priorité. Les autres sont documentees et revisitees lors du prochain cycle.

La méthode DREAD (Damage, Reproducibility, Exploitability, Affected users, Discoverability) offre une granularité supplémentaire si la risk matrix simple ne suffit pas.

Étape 4 — Définir les mitigations

Pour chaque menace prioritaire, on définit la mesure d'attenuation concrète et l'équipe responsable.

Menace Mitigation Responsable
Spoofing API Gateway mTLS + JWT validation avec expiration courte Équipe plateforme
DoS sur l'API Rate limiting par IP et par token + auto-scaling Équipe SRE
Info Disclosure DB Chiffrement at-rest + column-level encryption Équipe data

Exemple complet : API e-commerce

graph LR
    U[Utilisateur] --text--> GW[API Gateway]
    GW --text--> OS[Order Service]
    OS --text--> DB[(Base de donnees)]
    OS --text--> PP[Payment Provider]
    OS --text--> NS[Notification Service]

Analyse STRIDE

Composant Menace STRIDE Description Mitigation
API Gateway Spoofing Usurpation d'identité utilisateur mTLS + JWT validation avec expiration courte
API Gateway Denial of Service Surchargé par volume de requêtes Rate limiting, throttling par IP et par token
Order Service Tampering Modification de commande en transit Signature des événements, validation des schémas
Order Service Elevation of Privilege Accès a des endpoints admin RBAC sur les endpoints, validation des rôles
Order Service Repudiation Commande passee sans trace Audit log immutable sur toutes les écritures
Base de données Information Disclosure Accès non autorise aux données Chiffrement at-rest + column-level encryption
Base de données Repudiation Modification de données sans trace Audit log immutable sur toutes les écritures
Payment Provider Tampering Webhook modifie entre le provider et le service Vérification HMAC des webhooks entrants
Payment Provider Spoofing Faux callback de paiement Vérification signature + IP whitelisting
Notif Service Information Disclosure Données sensibles dans les notifications Masquer les données sensibles (PII) dans les messages

Threat modeling automatise

Le threat modeling manuel est indispensable pour les analyses profondes. Mais pour les systèmes complexes avec de nombreux composants, des outils automatises aident à couvrir la surface et a maintenir l'analyse dans le temps.

Outils principaux

Outil Type Forces Limites
OWASP Threat Dragon Open source Modèles DFD, génération automatique de menaces Menaces génériques, nécessité validation manuelle
Microsoft Threat Modeling Tool Gratuit Intégration ecosystem Microsoft, templates Windows only, templates orientes Microsoft
IriusRisk Commercial Intégration CI/CD, bibliotheque de menaces riche Coût, courbe d'apprentissage
Threagile Open source Modèle en YAML, génération automatique de risques Moins mature, communauté plus petite

OWASP Threat Dragon

Threat Dragon est l'outil de référence open source. Il permet de dessiner des DFD, d'appliquer STRIDE automatiquement à chaque composant, et de générer un rapport de menaces.

Workflow typique :

  1. Dessiner le DFD dans l'interface (composants, flux, frontieres)
  2. Pour chaque composant, l'outil suggère les menaces STRIDE applicables
  3. Valider ou rejeter chaque menace suggérée
  4. Documenter les mitigations pour les menaces retenues
  5. Générer le rapport final

L'avantage principal : le modèle est versionne avec le code. À chaque modification architecturale, on met à jour le DFD et l'outil signale les nouvelles menaces potentielles.

Threagile

Threagile adopte une approche "as code" — le modèle du système est défini en YAML et l'outil généré automatiquement les risques identifiés :

# threagile.yaml (extrait)
technical_assets:
  api-gateway:
    description: API Gateway public
    type: process
    technologies:
      - web-service-rest
    internet: true
    confidentiality: confidential
    integrity: critical
    availability: critical

  order-service:
    description: Service de commandes
    type: process
    technologies:
      - web-service-rest
    internet: false

communication_links:
  api-gateway-to-order:
    source: api-gateway
    target: order-service
    protocol: https
    authentication: token

L'approche "as code" permet d'intégrer le threat model dans le pipeline CI. À chaque changement d'architecture, le modèle est mis à jour et les risques sont recalcules automatiquement.


Intégrer le threat modeling dans le cycle

Le threat modeling n'est pas un exercice ponctuel. Il doit être rejoue à chaque modification architecturale significative.

Déclencheurs de revue

Événement Action
Ajout d'un nouveau composant Ajouter au DFD, appliquer STRIDE
Nouveau flux de données Analyser le flux, identifier les menaces
Changement de frontiere de confiance Re-évaluer les menaces des composants affectes
Nouveau type de données sensibles Évaluer Information Disclosure sur tous les flux
Incident de sécurité Vérifier si le threat model couvrait le vecteur

Bonnes pratiques

  • Intégrer le threat modeling au processus de design review — avant le code, pas après
  • Versionner le DFD avec le code source du projet
  • Maintenir un registre des menaces et de leur statut (ouverte, mitigee, acceptee)
  • Impliquer les développeurs, pas seulement les specialistes sécurité
  • Commencer simple : un DFD papier et une matrice STRIDE sur un tableau blanc suffisent pour démarrer

Tip

Le meilleur moment pour faire du threat modeling est avant d'écrire le code. Le deuxieme meilleur moment est maintenant. Ne laissez pas la perfection du processus empêcher de commencer.


STRIDE per élément vs STRIDE per interaction

Deux variantes de STRIDE existent selon la granularité souhaitee :

STRIDE per élément — on applique les 6 catégories à chaque composant du DFD. C'est l'approche classique, plus rapide mais moins précisé.

STRIDE per interaction — on appliqué STRIDE à chaque flux de données entre composants. Plus détaillé, cette variante identifie des menaces spécifiques aux communications (homme du milieu, rejeu, etc.).

Pour un premier threat model, STRIDE per élément suffit. Pour les systèmes critiques ou les flux sensibles (paiement, authentification), STRIDE per interaction apporte une couverture plus fine.


Arbres d'attaque

Les arbres d'attaque sont un complement a STRIDE pour les menaces complexes. La ou STRIDE identifie les catégories de menaces, l'arbre d'attaque decompose un objectif d'attaque en sous-objectifs et en chemins alternatifs.

La racine de l'arbre est l'objectif de l'attaquant. Les branches représentent les différentes manières d'atteindre cet objectif. Les nœuds intermédiaires sont des sous-objectifs. Les feuilles sont des actions concrètes.

graph TD
    ROOT["Exfiltrer les donnees\nde paiement"]
    ROOT --> A["Compromettre\nla base de donnees"]
    ROOT --> B["Intercepter\nles flux de paiement"]
    ROOT --> C["Compromettre\nun backup"]
    A --> A1["Injection SQL\nvia l'API"]
    A --> A2["Credentials DB\nen clair dans la config"]
    A --> A3["Acces direct\nport DB expose"]
    B --> B1["Man-in-the-middle\nsans mTLS"]
    B --> B2["Compromission\ndu payment gateway"]
    C --> C1["Backup non chiffre\nsur S3 public"]
    C --> C2["Acces au NAS\nvia credentials par defaut"]

Chaque feuille est évaluée en termes de faisabilite et de coût pour l'attaquant. Les chemins les plus accessibles (faible coût, forte probabilite) sont les priorités de traitement.

Les arbres d'attaque sont particulièrement utiles pour :

  • Les menaces complexes qui impliquent plusieurs étapes
  • La communication avec les decideurs non techniques (la représentation visuelle est intuitive)
  • L'identification de points de convergence ou une seule mesure bloque plusieurs chemins

Registre des menaces

Le registre des menaces est le livrable opérationnel du threat modeling. Il centralise toutes les menaces identifiées, leur évaluation, leur statut de traitement et les responsables.

ID Composant Menace Catégorie STRIDE Probabilite Impact Score Mitigation Statut Responsable
T-001 API Gateway Usurpation d'identité Spoofing 2 3 6 mTLS + JWT En cours Équipe plateforme
T-002 API Gateway Surchargé volumetrique DoS 3 2 6 Rate limiting Déployé Équipe SRE
T-003 Base de données Accès non autorise Info Disclosure 1 3 3 Chiffrement Planifie Équipe data
T-004 Order Service Modification commande Tampering 2 3 6 Signature events En cours Équipe dev

Le registre est un document vivant. Il est révisé à chaque modification architecturale et chaque incident de sécurité. Les menaces traitees restent documentees pour la traçabilite. Les nouvelles menaces sont ajoutees au fur et à mesure que le système évolue.

Note

Un registre des menaces non maintenu est pire que pas de registre — il donne une fausse impression de sécurité. Si l'équipe ne peut pas le maintenir, commencer par un scope limite (services critiques uniquement) est preferable a un registre exhaustif mais obsolète.

Chapitre suivant : Zero trust — ne jamais faire confiance par défaut, même à l'intérieur du réseau.