Modèle de menaces
Le modèle de menaces de Chatbotaurus part des menaces, pas des contrôles. La première version du programme de sécurité était partie d'un inventaire de ce qui existait. Le modèle STRIDE actuel part des actifs et des flux, puis note ce qui manque. À la fin, vous saurez quelles menaces sont couvertes, lesquelles ne le sont pas, et dans quel ordre se classent les risques résiduels.
Une honnêteté d'abord
Ce modèle a été écrit par l'équipe qui a écrit le code. Il ne peut pas se valider lui-même. C'est une hypothèse structurée sur l'emplacement du risque, à confirmer ou réfuter par un test d'intrusion indépendant. Ce test n'a pas eu lieu à ce jour.
Actifs, par ordre de criticité décroissante
| Actif | Pourquoi il compte |
|---|---|
| Données de santé et dossiers | catégorie particulière (article 9 du RGPD) |
| Secrets (connecteurs, base, clés de signature, clés d'API de modèles) | une fuite ouvre tout le reste |
| Données des clients et frontière entre organisations | l'isolation est le cœur du produit |
| Matériel d'authentification (jetons, TOTP, WebAuthn, clés d'API) | prise de compte |
| Intégrité du journal d'audit | preuve en cas d'incident |
| Entrées et sorties du modèle de langage | injection, fuite |
| Facturation et crédits | fraude |
| Sauvegardes et restauration | une fuite donne un dossier complet |
Frontières de confiance
Les flux traversent neuf frontières : Internet, bordure TLS, pile du serveur API, cerveau de l'agent, modèle de langage, connecteurs, recherche documentaire (RAG), stockage, et enfin les agents de sauvegarde. STRIDE est appliqué à chaque passage de frontière.
STRIDE sur les passages critiques
| Passage | Menace | Contrôle | État |
|---|---|---|---|
| Bordure vers API | Force brute sur les comptes | limiteur par compte et par adresse | câblé |
| Bordure vers API | Usurpation d'adresse par en-tête | l'en-tête du proxy n'est lu que si l'opérateur l'autorise | câblé |
| Bordure vers API | Clickjacking, XSS | en-têtes de sécurité | câblé |
| Bordure vers API | CSRF sur cookie | jeton anti-CSRF à double soumission | câblé |
| Bordure vers API | Requête lente | délai maximal par requête | câblé |
| Bordure vers API | Inondation distribuée, épuisement de connexions | traitement en bordure | lacune (opérateur) |
| Authentification | Jeton forgé | algorithme épinglé | câblé |
| Authentification | Attaque sur mot de passe | Argon2id | câblé |
| Autorisation | Escalade de privilèges | rôles et politiques Cedar | câblé |
| Autorisation | IDOR / BOLA (accès à la ressource d'une autre organisation) | gardes de handler et RLS PostgreSQL | partiel : non prouvé de façon adverse |
| Agent | Injection directe (anglais, français, unicode, base64) | filtre d'injection, heuristique | câblé |
| Agent | Action destructive lancée par le modèle | porte d'agence excessive : suppression et paiement exigent une approbation humaine | câblé |
| Agent | Injection indirecte (texte malveillant dans un document ou une sortie d'outil) | neutralisation du contenu non fiable avant retour dans l'invite | partiel (heuristique) |
| Agent | Paraphrase, multi-tours, homoglyphes | le filtre est une heuristique, pas un classificateur | lacune |
| Connecteurs | SSRF, y compris rebond DNS | vérification de l'adresse résolue, adresse épinglée | câblé |
| Connecteurs | Fuite de secret entre organisations | secrets résolus à la requête, par organisation | câblé |
| Retour du modèle | Fuite de l'invite système ou de données personnelles | analyse de sortie | câblé sur /prediction, lacune sur le flux du chat |
| Stockage | Injection SQL | requêtes paramétrées | câblé |
| Stockage | Altération du journal | chaîne de hachage, vérification à la demande | câblé |
| Stockage | Chiffrement des données de santé au repos | chiffrement applicatif des colonnes de santé (actif en production : PHI_AT_REST_KEY est obligatoire au démarrage), chiffrement de disque documenté | partiel : l'étendue sur toutes les données de santé n'est pas établie |
| Sauvegardes | Restauration forgée | URL signée à durée courte et approbation humaine | câblé |
| Sauvegardes | Image d'agent hors UE | image servie par un miroir UE, registres hors UE interdits par une garde | câblé |
Plusieurs connecteurs parlent en http:// à l'intérieur d'un même plan : c'est une décision documentée et acceptée. Elle est à rouvrir si un connecteur traverse un jour une frontière d'hôte.
Risques résiduels, par ordre
- Journal de lecture des données de santé incomplet : les lectures de l'agent sur l'ERP ne sont pas toutes tracées.
- Sortie du chat non analysée pour les données personnelles.
- IDOR non prouvé de façon adverse.
- Contrôles RGPD de santé à étendre : l'effacement et la rétention sont actifs par défaut pour les journaux vocaux et les comptes en attente de suppression, mais leur étendue sur le reste des données de santé reste à vérifier surface par surface.
- Déni de service au niveau applicatif, hors bordure.
- Aucune validation indépendante : test d'intrusion, certification d'hébergement de données de santé, supervision des incidents.
Menaces propres à l'IA
| Menace | Mitigation présente | Limite |
|---|---|---|
| Injection d'invite | filtre d'entrée, neutralisation du contenu récupéré | heuristique |
| Exfiltration par le modèle | analyse de sortie | partielle (voir ci-dessus) |
| Empoisonnement de modèle | somme SHA-256 des modèles comparée à une base épinglée | la signature du manifeste est réservée, jamais vérifiée |
| Usage non autorisé du modèle | authentification, limitation de débit | |
| Hallucination | mise en règle sur sources (grounding) | une réponse sans source est signalée, pas supprimée |
Acteurs
Opportunistes, concurrents, acteurs étatiques, personnel interne, militants : le modèle les considère tous, avec des capacités croissantes. Aucune de ces catégories n'est exclue de l'analyse.
Exercices
Des scénarios d'exercice sont prévus (fuite de données, menace interne, rançongiciel, chaîne d'approvisionnement). Le dépôt n'établit pas qu'ils ont été joués. La page publique du plan d'incident annonce un exercice sur table trimestriel : c'est un engagement, pas un historique.
Revue du modèle
Le modèle est repris après chaque incident (étape de retour d'expérience du plan d'incident). Une revue adverse du modèle lui-même a été faite en interne et a relevé des frontières omises, notamment les webhooks entrants.
Voir aussi
- Réponse aux incidents — la procédure déclenchée quand une de ces menaces se réalise
- Architecture de confiance zéro — statut câblé, optionnel ou prévu de chaque contrôle cité ici
- OpenBao et secrets — protection des secrets, second actif par ordre de criticité après les données de santé
- Sécurité — fichiers du code qui portent limiteurs, en-têtes et chiffrements
- Conformité RGPD — obligations sur les données de santé et les droits des personnes