tadata
← Retour à l'accueil

Modélisation des menaces pour les équipes SaaS : deux ateliers, un schéma, un registre que vous utiliserez vraiment

#security#architecture#best-practices#methodology#risk

La plupart des équipes SaaS découvrent leurs menaces dans un rapport de test d'intrusion ou lors d'un incident. La modélisation des menaces déplace cette découverte sur un tableau blanc, avant que le code n'existe ou avant la prochaine version, et elle coûte deux ateliers. La méthode ci-dessous est celle que nous menons avec les équipes produit : dessiner le système comme un diagramme de flux de données avec des frontières de confiance, passer STRIDE sur chaque frontière, construire un arbre d'attaque pour l'actif qui compte le plus, classer ce qu'on a trouvé sur une carte de chaleur, et repartir avec un registre qui a des responsables. Aucun outil n'est nécessaire au-delà d'un tableau blanc et des composants de cet article.

Atelier 1 : dessiner le système en flux de données

tadata
Internet Notre VPC Tiers HTTPS, cookie de session HTTPS, rôle admin code OIDC, jetons SQL avec tenant_id URL présignées message de file prompt avec texte client résultats session de paiement webhook journaux de requêtes journaux de tâches Utilisateur client Administrateurclient Fournisseurd'identité (OIDC) Application web /API Tâches de fond Base multi-locataire Stockage objet Fournisseur LLM Prestataire depaiement Journaux etmétriques external entity process data store Un SaaS B2B, diagramme de flux de données de niveau 1
Internet Notre VPC Tiers HTTPS, cookie de session HTTPS, rôle admin code OIDC, jetons SQL avec tenant_id URL présignées message de file prompt avec texte client résultats session de paiement webhook journaux de requêtes journaux de tâches Utilisateur client Administrateurclient Fournisseurd'identité (OIDC) Application web /API Tâches de fond Base multi-locataire Stockage objet Fournisseur LLM Prestataire depaiement Journaux etmétriques external entity process data store Un SaaS B2B, diagramme de flux de données de niveau 1

Les pointillés autour de « Notre VPC » et « Tiers » sont les frontières de confiance, et chaque flux qui en traverse une est l'endroit où vit une menace. Quatre-vingt-dix minutes suffisent pour un diagramme de niveau 1 de la plupart des produits ; la discussion sur l'emplacement réel des frontières (le fournisseur LLM est-il dans votre zone de confiance ? le webhook de paiement ?) est la partie la plus précieuse de la séance.

Où le système est exposé

tadata
Donnéesclients dansla basemulti-locataireet le stockageobjet 1. API publique etapplication web 2. Point d'entrée duwebhook de paiement 3. Prompts envoyés aufournisseur LLM 4. URL de stockageprésignées 5. CI/CD et secrets dedéploiement 6. Ingénieurs avecaccès à la production 7. Journaux contenantdes corps de requêtes 8. Console cloud et IAM 1. API publique et application web (internet, risk high): Authentification sur chaque route, limitation de débit, WAF2. Point d'entrée du webhook de paiement (partner, risk medium): Vérification de signature, idempotence, fenêtreanti-rejeu3. Prompts envoyés au fournisseur LLM (partner, risk medium): Clauses de traitement, caviardage, pas d'entraînement surles entrées4. URL de stockage présignées (internet, risk medium): Expiration courte, portée par objet, pas de listage5. CI/CD et secrets de déploiement (supply chain, risk high): OIDC vers le cloud, pas de clés durables, images signées6. Ingénieurs avec accès à la production (human, risk medium): Accès d'urgence avec approbation et enregistrement desession7. Journaux contenant des corps de requêtes (internal, risk medium): Caviardage par champ, rétention 30 jours8. Console cloud et IAM (cloud, risk high): MFA résistante au hameçonnage, moindre privilège, alertes Surface d'attaque des données clients
Donnéesclients dansla basemulti-locataireet le stockageobjet 1. API publique etapplication web 2. Point d'entrée duwebhook de paiement 3. Prompts envoyés aufournisseur LLM 4. URL de stockageprésignées 5. CI/CD et secrets dedéploiement 6. Ingénieurs avecaccès à la production 7. Journaux contenantdes corps de requêtes 8. Console cloud et IAM 1. API publique et application web (internet, risk high): Authentification sur chaque route, limitation de débit, WAF2. Point d'entrée du webhook de paiement (partner, risk medium): Vérification de signature, idempotence, fenêtreanti-rejeu3. Prompts envoyés au fournisseur LLM (partner, risk medium): Clauses de traitement, caviardage, pas d'entraînement surles entrées4. URL de stockage présignées (internet, risk medium): Expiration courte, portée par objet, pas de listage5. CI/CD et secrets de déploiement (supply chain, risk high): OIDC vers le cloud, pas de clés durables, images signées6. Ingénieurs avec accès à la production (human, risk medium): Accès d'urgence avec approbation et enregistrement desession7. Journaux contenant des corps de requêtes (internal, risk medium): Caviardage par champ, rétention 30 jours8. Console cloud et IAM (cloud, risk high): MFA résistante au hameçonnage, moindre privilège, alertes Surface d'attaque des données clients

L'anneau dit quelque chose que le diagramme de flux ne dit pas : trois des huit points d'entrée ne sont pas du code exposé aux clients (CI/CD, accès des ingénieurs, console cloud), et les statistiques d'incidents confirment que c'est là que commencent la plupart des compromissions de SaaS.

STRIDE sur chaque frontière

Pour chaque flux qui traverse une frontière, poser les six questions STRIDE : l'émetteur peut-il être usurpé (Spoofing), les données altérées (Tampering), l'action niée (Repudiation), l'information divulguée (Information disclosure), le service refusé (Denial of service), les privilèges élevés (Elevation) ? Écrit dans un tableau, cela ressemble à un devoir ; dit à voix haute devant le schéma, cela prend quarante minutes et produit la liste brute du registre ci-dessous. Les trouvailles classiques d'un SaaS sont l'isolation des locataires (un identifiant dans l'URL non vérifié contre le locataire de la session), l'usurpation de webhook, des URL présignées qui survivent à la session de l'utilisateur, et l'injection de prompt par du contenu client envoyé au LLM.

Atelier 2 : un arbre d'attaque pour l'actif qui compte

tadata
Appeler l'APIavecl'identifiantd'un autrelocataire tenant_id absentde la requête faible : IDOR Deviner ouénumérer desidentifiantsd'objets faible si séquentiels La fonctionLLM lit dutexte nonfiable L'outil peutinterrogerd'autreslocataires Injecter viadu contenuclient Exploiterl'application Hameçonner unadministrateurclient moyen Pas de MFArésistante auhameçonnage Accèspermanent àla production Hameçonnerun ingénieuravec accèsprod Voler desidentifiants Empoisonnerunedépendanceou une action moyen Secrets dedéploiementutilisables depuisla CI faible si clés durables Compromettrela chaîne delivraison Lire les donnéesd'un autre locataire AND OR AND OR AND OR AND: every child needed OR: any child suffices Leaf values: Effort pour l'attaquant highlighted path Arbre d'attaque : lire les données d'un autre locataire
Appeler l'APIavecl'identifiantd'un autrelocataire tenant_id absentde la requête faible : IDOR Deviner ouénumérer desidentifiantsd'objets faible si séquentiels La fonctionLLM lit dutexte nonfiable L'outil peutinterrogerd'autreslocataires Injecter viadu contenuclient Exploiterl'application Hameçonner unadministrateurclient moyen Pas de MFArésistante auhameçonnage Accèspermanent àla production Hameçonnerun ingénieuravec accèsprod Voler desidentifiants Empoisonnerunedépendanceou une action moyen Secrets dedéploiementutilisables depuisla CI faible si clés durables Compromettrela chaîne delivraison Lire les donnéesd'un autre locataire AND OR AND OR AND OR AND: every child needed OR: any child suffices Leaf values: Effort pour l'attaquant highlighted path Arbre d'attaque : lire les données d'un autre locataire

Le chemin surligné est le moins cher, et d'après notre expérience la trouvaille la plus fréquente d'un premier modèle de menaces SaaS : une référence directe non sécurisée où la vérification du locataire vit dans l'interface plutôt que dans la requête. Un WHERE tenant_id = :session_tenant sur chaque requête, imposé par la couche d'accès aux données, coupe la branche.

Classer ce qu'on a trouvé

tadata
↑ Likelihood Quasi certain Probable Possible Peu probable Rare Négligeable Mineur Modéré Majeur Grave Impact → 1 2 3 4 5 6 7 1 Lecture inter-locataires parIDOR 20 → 5 2 Ingénieur hameçonné, accèsproduction 15 → 3 3 Injection de prompt atteignantun outil avec accès aux données 12 → 4 4 Webhook de paiement usurpé 6 → 3 5 URL présignée partagée aprèsdéconnexion 6 → 4 6 Dépendance empoisonnée dans laCI 10 → 4 7 Corps de requêtes dans lesjournaux : fuite de donnéespersonnelles 8 → 2 Menaces sur une carte de chaleur 5 × 5, avec la cible après atténuation
↑ Likelihood Quasi certain Probable Possible Peu probable Rare Négligeable Mineur Modéré Majeur Grave Impact → 1 2 3 4 5 6 7 1 Lecture inter-locataires parIDOR 20 → 5 2 Ingénieur hameçonné, accèsproduction 15 → 3 3 Injection de prompt atteignantun outil avec accès aux données 12 → 4 4 Webhook de paiement usurpé 6 → 3 5 URL présignée partagée aprèsdéconnexion 6 → 4 6 Dépendance empoisonnée dans laCI 10 → 4 7 Corps de requêtes dans lesjournaux : fuite de donnéespersonnelles 8 → 2 Menaces sur une carte de chaleur 5 × 5, avec la cible après atténuation

La vraisemblance, c'est « à quelle fréquence cela arrive-t-il à des entreprises comme nous », pas « est-ce possible » ; l'impact s'exprime dans les termes du client (ses données, son argent, son régulateur). Les flèches vers les cibles sont les contrôles que vous vous apprêtez à engager, ce qui fait de la carte de chaleur une conversation budgétaire autant que sécuritaire.

Les deux séances, heure par heure

tadata
Deux ateliers de 2 h 30, à une semaine d'intervalle 10:00 Périmètre et actifs Quel produit, quelles données, quelles promesses aux clients 20 min Produit 10:20 Dessiner le diagramme de flux Entités externes, processus, stockages, flux, frontières 70 min Tech lead 11:30 Tour de la surface d'attaque Chaque traversée de frontière : qui, quoi, quelle exposition 30 min Sécurité 12:00 STRIDE par traversée Liste brute des menaces, sans classement Tout le monde 10:00 Semaine 2 : arbre d'attaque sur l'actif principal Le chemin le moins cher d'abord 60 min Sécurité 11:00 Carte de chaleur et cibles Vraisemblance en fréquences réelles, impact côté client 45 min Tout le monde 11:45 Registre : responsables et dates Un responsable par risque, date de revue 45 min Responsableingénierie
Deux ateliers de 2 h 30, à une semaine d'intervalle 10:00 Périmètre et actifs Quel produit, quelles données, quelles promesses aux clients 20 min Produit 10:20 Dessiner le diagramme de flux Entités externes, processus, stockages, flux, frontières 70 min Tech lead 11:30 Tour de la surface d'attaque Chaque traversée de frontière : qui, quoi, quelle exposition 30 min Sécurité 12:00 STRIDE par traversée Liste brute des menaces, sans classement Tout le monde 10:00 Semaine 2 : arbre d'attaque sur l'actif principal Le chemin le moins cher d'abord 60 min Sécurité 11:00 Carte de chaleur et cibles Vraisemblance en fréquences réelles, impact côté client 45 min Tout le monde 11:45 Registre : responsables et dates Un responsable par risque, date de revue 45 min Responsableingénierie

Qui est dans la salle : le tech lead, un développeur qui connaît la couche de données, une personne produit qui connaît les promesses faites aux clients, une personne exploitation ou sécurité, et un animateur. Six personnes au maximum ; au-delà, le schéma cesse d'être dessiné et commence à être présenté.

Ce avec quoi vous repartez

tadata
# Risk L I Score Owner Status T1 Lecture inter-locataires par IDOR ↳ Filtrage par locataire dans la couche dépôt ; testd'intégration par entité 4 5 20 Responsable couche données open T2 Ingénieur hameçonné, accès permanent à laproduction ↳ Passkeys pour tous ; accès d'urgence avec approbation 3 5 15 Responsable plateforme open T3 Injection de prompt atteignant un outil dedonnées ↳ Outils en lecture seule limités au locataire ; contrôlesde sortie 3 4 12 Responsable fonction IA open T6 Dépendance empoisonnée dans la CI ↳ Actions épinglées, déploiement OIDC, images signées 2 5 10 DevOps mitigating T7 Données personnelles dans les journaux derequêtes ↳ Caviardage par champ, rétention 30 jours 4 2 8 Responsable backend mitigating T4 Webhook de paiement usurpé ↳ Signature et clé d'idempotence vérifiées 2 3 6 Responsable facturation closed T5 URL présignée survivant à la session ↳ Expiration 5 minutes, portée par objet 3 2 6 Responsable backend accepted Registre des menaces après le second atelier
# Risk L I Score Owner Status T1 Lecture inter-locataires par IDOR ↳ Filtrage par locataire dans la couche dépôt ; testd'intégration par entité 4 5 20 Responsable couche données open T2 Ingénieur hameçonné, accès permanent à laproduction ↳ Passkeys pour tous ; accès d'urgence avec approbation 3 5 15 Responsable plateforme open T3 Injection de prompt atteignant un outil dedonnées ↳ Outils en lecture seule limités au locataire ; contrôlesde sortie 3 4 12 Responsable fonction IA open T6 Dépendance empoisonnée dans la CI ↳ Actions épinglées, déploiement OIDC, images signées 2 5 10 DevOps mitigating T7 Données personnelles dans les journaux derequêtes ↳ Caviardage par champ, rétention 30 jours 4 2 8 Responsable backend mitigating T4 Webhook de paiement usurpé ↳ Signature et clé d'idempotence vérifiées 2 3 6 Responsable facturation closed T5 URL présignée survivant à la session ↳ Expiration 5 minutes, portée par objet 3 2 6 Responsable backend accepted Registre des menaces après le second atelier

Un registre de sept lignes, chacune avec un nom et un statut, vaut plus qu'un rapport de quarante pages que personne n'ouvre. Relisez-le à chaque changement d'architecture significatif et une fois par trimestre ; un modèle de menaces est un document vivant ou il n'est rien.

En résumé

La modélisation des menaces est bon marché quand c'est une conversation autour d'un schéma et coûteuse quand c'est un livrable. Deux ateliers, un diagramme de flux de données, un arbre d'attaque et un registre avec des responsables donnent à une équipe SaaS l'essentiel de ce qu'une méthode formelle promet, et font remonter la trouvaille présente dans presque chaque premier modèle : l'isolation des locataires imposée dans la mauvaise couche. Pour la suite du registre, nos articles sur la liste de contrôle d'audit de sécurité cloud et la sécurisation de la CI/CD prennent le relais.

Sources : Shostack, Threat Modeling: Designing for Security ; le Threat Modeling Manifesto ; OWASP Threat Modeling et OWASP Top 10 pour les applications LLM ; documentation STRIDE de Microsoft ; statistiques d'accès initial du Sophos State of Ransomware 2026 et du Verizon DBIR 2026. Lus le 15 octobre 2026.

Nous utilisons des cookies analytiques pour améliorer votre expérience. Aucune donnée personnelle n'est collectée.