Aller au contenu

Analyse d'architecture sécurité : DCT, cartographie des flux, BPMN & UML

Objectifs pédagogiques

  • Comprendre pourquoi certaines failles ne se voient qu'au niveau de l'architecture
  • Structurer un document de conception technique (DCT) et y écrire des exigences de sécurité vérifiables
  • Cartographier les flux de données, leurs frontières de confiance et la classification des données
  • Modéliser un processus métier en BPMN et les interactions en UML
  • Identifier les points faibles d'une topologie et les relier à des contrôles

Pourquoi analyser l'architecture


Les failles de conception

  • Les scanners trouvent des erreurs d'implémentation : une injection, une dépendance vulnérable, un secret dans le code
  • Ils ne voient pas les erreurs de conception : un contrôle d'accès absent, une confiance excessive entre composants, un flux sensible non chiffré
  • L'OWASP Top 10 en fait une catégorie à part entière : la conception non sécurisée (Insecure Design)
  • Une faille de conception corrigée après coup coûte une refonte, pas une ligne de code
  • D'où l'analyse d'architecture avant l'implémentation, et à chaque évolution majeure

Un exemple réel : SecurePay

  • POST /api/auth/login délivre un jeton JWT signé
  • Les routes /api/payments/process, /calculate-tax et /recent ne vérifient jamais ce jeton
  • N'importe qui peut lancer un paiement ou lister les transactions, sans s'authentifier
  • Aucun outil SAST ne le signale : chaque ligne de code est « correcte »
  • Le diagramme de séquence le rend évident : la flèche de vérification du jeton n'existe pas
  • C'est un contrôle d'accès défaillant, la première catégorie de l'OWASP Top 10

La démarche

  1. Inventorier les composants, les acteurs et les dépendances externes
  2. Cartographier les flux de données et les frontières de confiance
  3. Classifier les données qui circulent
  4. Modéliser les processus (BPMN) et les interactions (UML)
  5. Analyser chaque flux qui franchit une frontière avec STRIDE
  6. Consigner dans le DCT : points faibles, exigences de sécurité, décisions

Le document de conception technique


Structure d'un DCT

  1. Contexte et périmètre : objectif, acteurs, hors périmètre
  2. Exigences : fonctionnelles, non fonctionnelles, de sécurité
  3. Architecture logique : composants, responsabilités, interfaces
  4. Architecture physique : déploiement, environnements, zones réseau
  5. Flux et données : cartographie, matrice des flux, classification
  6. Sécurité : authentification, autorisation, chiffrement, secrets, journalisation
  7. Exploitation : supervision, sauvegarde, reprise
  8. Risques et décisions : points faibles, mesures, décisions d'architecture (ADR)

Ce qui fait un bon DCT

  • Structuré : chaque section répond à une question précise
  • Clair : un lecteur extérieur comprend le système sans lire le code
  • Complet : chaque composant est décrit, avec son rôle, ses interfaces et ses dépendances
  • Justifié : chaque choix technologique a sa raison, consignée dans un ADR
  • Vivant : les diagrammes sont versionnés avec le code et mis à jour à chaque évolution
  • Ce sont aussi les critères d'évaluation d'un DCT en certification

Des exigences de sécurité vérifiables

À éviter À écrire
« L'application doit être sécurisée » « Toute route /api/payments/* exige un jeton JWT valide, vérifié par un middleware commun ; un test automatisé le prouve »
« Les secrets sont protégés » « Aucun secret n'a de valeur par défaut dans le code ; l'application refuse de démarrer sans JWT_SECRET »
« La connexion est protégée » « Après 5 échecs en 15 minutes, la connexion d'un compte est temporisée »
  • Une exigence vérifiable devient un test, une règle d'analyse ou une Quality Gate
  • L'OWASP ASVS fournit un catalogue d'exigences par niveau de sécurité

Cartographier les flux


Les éléments d'un diagramme de flux (DFD)

Élément Représentation Exemple SecurePay
Entité externe rectangle site marchand, prestataire de paiement
Processus cercle ou rectangle arrondi API SecurePay
Stockage deux traits parallèles journaux, base des transactions
Flux de données flèche nommée « demande de paiement »
Frontière de confiance trait pointillé Internet / API, API / prestataire
  • Un flux qui franchit une frontière de confiance est toujours analysé

Des niveaux de détail

  • Niveau 0 (contexte) : le système comme une seule boîte, ses acteurs et ses échanges avec l'extérieur
  • Niveau 1 : les grands composants internes et les flux entre eux
  • Niveau 2 : le détail d'un composant sensible, par exemple le traitement d'un paiement
  • On descend d'un niveau là où les données sont sensibles ou les frontières nombreuses
  • Chaque niveau reste cohérent avec le précédent : mêmes entités externes, mêmes flux sortants

Classifier les données

Classe Exemples Exigences type
Publique documentation de l'API intégrité
Interne journaux techniques sans données personnelles accès authentifié
Confidentielle montants, identifiants de bénéficiaires, données personnelles chiffrement en transit, contrôle d'accès, minimisation
Secrète clés d'API, secret de signature JWT, mots de passe coffre, rotation, jamais journalisée
  • Les données personnelles relèvent aussi du RGPD : finalité, minimisation, durée de conservation
  • La classification fixe le niveau de protection de chaque flux qui les transporte

La matrice des flux

N° Source Destination Protocole Données Classe Authentification Chiffrement
F1 Site marchand API HTTPS 443 identifiants secrète aucune (c'est le login) TLS
F2 Site marchand API HTTPS 443 paiement confidentielle JWT non vérifié TLS
F3 API Prestataire HTTPS 443 paiement confidentielle clé d'API TLS
F4 API Journaux local événements interne — —
  • La matrice sert aussi aux équipes réseau pour ouvrir les flux strictement nécessaires
  • Chaque cellule « aucune » ou « non vérifié » est un point faible potentiel

Modéliser


BPMN : le processus métier

  • Couloirs : un par acteur (client, site marchand, API, prestataire)
  • Événements : début (commande validée), fin (paiement accepté ou refusé)
  • Tâches : valider la demande, calculer les frais, appeler le prestataire
  • Passerelles : les décisions (montant valide ? paiement accepté ?)
  • Flux de messages : les échanges entre couloirs, qui correspondent aux flux de la cartographie
  • Objets de données et annotations : où la donnée sensible apparaît, et quel contrôle s'applique

Annoter les contrôles sur le processus

Étape BPMN Donnée manipulée Contrôle attendu
Réception de la demande montant, bénéficiaire jeton vérifié, schéma de requête validé
Calcul des frais montant aucune entrée interprétée comme du code
Appel du prestataire paiement, clé d'API clé lue dans le coffre, TLS vérifié
Réponse au marchand résultat aucune donnée interne divulguée
Journalisation événement ni secret ni donnée personnelle superflue
  • Le BPMN montre où se trouve la donnée ; l'annotation dit comment elle est protégée

Les diagrammes UML utiles en sécurité

  • Composants : qui dépend de qui, quelles interfaces sont exposées
  • Séquence : l'ordre exact des échanges, donc l'endroit où un contrôle manque
  • Déploiement : nœuds, conteneurs, environnements et zones réseau
  • Cas d'utilisation et d'abus : ce qu'un utilisateur légitime fait, et ce qu'un attaquant tenterait

La séquence de paiement de SecurePay

sequenceDiagram
    actor M as Site marchand
    participant A as API SecurePay
    participant P as Prestataire de paiement
    M->>A: POST /api/auth/login (identifiants)
    A-->>M: jeton JWT
    M->>A: POST /api/payments/process (Bearer JWT)
    Note over A: aucune vérification du jeton
    A->>P: demande de paiement (clé d'API)
    P-->>A: résultat
    A-->>M: 201 transaction créée
  • La flèche « vérifier le jeton » est absente : la faille de conception apparaît d'elle-même

Des diagrammes versionnés

  • Mermaid : texte rendu nativement par GitLab, GitHub et MkDocs (séquence, flux, composants)
  • PlantUML : couverture UML plus large, rendu par un outil ou un serveur
  • draw.io : bibliothèques BPMN et UML complètes, fichier XML versionnable
  • StarUML : outil UML dédié
  • Les diagrammes vivent dans le dépôt, à côté du code : ils se revoient en MR et suivent ses évolutions
  • Pour un dossier écrit : export en SVG ou en PNG depuis la source versionnée

Identifier les points faibles


La méthode

  • Pour chaque flux qui franchit une frontière : passer en revue les six menaces STRIDE
  • Pour chaque composant : droits minimaux ? point de défaillance unique ? dépendances maîtrisées ?
  • Pour chaque donnée sensible : où est-elle stockée, journalisée, copiée ?
  • Pour chaque secret : où vit-il, qui y accède, comment est-il renouvelé ?
  • Chaque point faible reçoit une gravité, une recommandation et un responsable

Les faiblesses d'architecture fréquentes

  • Authentification présente mais autorisation absente ou non vérifiée
  • Confiance implicite entre services internes (« c'est le réseau interne »)
  • Validation faite seulement côté client
  • Secret partagé entre composants ou environnements, ou valeur par défaut dans le code
  • Flux sensible non chiffré, même en interne
  • Interface d'administration exposée sur Internet
  • Point de défaillance unique sur un composant critique
  • Journaux qui contiennent des secrets ou des données personnelles superflues

Les points faibles de SecurePay

Point faible Élément STRIDE Gravité Recommandation
Jeton JWT jamais vérifié flux F2 S, E critique middleware d'authentification sur /api/payments
Mot de passe unique codé en dur, rôle ADMIN pour admin processus de connexion S, E critique référentiel d'utilisateurs, mots de passe hachés
Secrets avec valeur par défaut dans le code API I haute coffre, refus de démarrer sans secret
Formule interprétée par eval() calcul des frais T, E critique aucune entrée exécutée comme du code
Aucune limite de tentatives de connexion flux F1 S, D moyenne limitation de débit et temporisation
Transactions listées sans contrôle d'accès /recent I haute autorisation par marchand

Du point faible au contrôle

Point faible Exigence du DCT Contrôle automatisé Preuve
Jeton non vérifié toute route de paiement exige un jeton valide test d'intégration : requête sans jeton → 401 rapport de tests
Secret par défaut aucun secret n'a de valeur par défaut Gitleaks + règle Semgrep maison pipeline bloquant
eval() aucune entrée exécutée comme du code règle SAST bloquante + test de non-régression Quality Gate
  • L'analyse d'architecture alimente directement les contrôles du pipeline et le registre des risques

Anti-patterns à proscrire

  • Un DCT écrit après la mise en production, pour l'audit
  • Des diagrammes décoratifs, jamais mis à jour
  • Une cartographie avec un flux « Internet → tout »
  • Des exigences de sécurité invérifiables
  • Analyser les composants sans analyser les flux qui les relient
  • Ignorer les dépendances externes (prestataire, services cloud)

À retenir

  • Les failles de conception échappent aux scanners : seule l'analyse d'architecture les révèle
  • Le DCT décrit composants, flux, données et exigences de sécurité vérifiables, avant le code
  • La cartographie des flux, avec frontières de confiance et classification, désigne ce qu'il faut protéger
  • BPMN montre où circule la donnée, UML comment les composants l'échangent
  • Chaque point faible devient une exigence, puis un contrôle automatisé, puis une preuve

Pour aller plus loin