Lección 3 — Les risques des applications LLM

Fuites, sorties non maîtrisées, agentivité excessive et autres risques

6 min de lectura

Este contenido aún no está traducido. Se muestra la versión original.

Fuites, sorties non maîtrisées, agentivité excessive et autres risques

1. Les fuites de données

Un LLM peut divulguer de l'information par trois chemins différents :

CheminCatégorie OWASPExempleCause racine habituelle
Ce que le modèle a mémoriséLLM02Le modèle fine-tuné sur des tickets restitue un numéro de téléphoneDonnées personnelles non nettoyées avant fine-tuning
Ce qui est dans le prompt systèmeLLM07Règles commerciales internes, identifiants, URL d'API privéesSecrets placés dans le prompt
Ce que le RAG récupèreLLM08Un salarié obtient un compte rendu de comité de directionIndex unique sans filtrage par droits d'accès

Pour le RAG, la règle d'or : l'assistant ne doit jamais pouvoir lire un document que l'utilisateur ne pourrait pas ouvrir lui-même. Le filtrage se fait au moment de la recherche, avec l'identité de l'utilisateur, et non par une consigne « ne montre pas les documents confidentiels ».

2. Les sorties non maîtrisées

Le texte produit par le modèle doit être traité comme une entrée utilisateur non fiable, au même titre qu'un formulaire web.

flowchart TD
  O["Sortie du LLM"] --> Q{"Où va-t-elle ?"}
  Q -->|"Navigateur"| H["Risque XSS, liens et images d'exfiltration"]
  Q -->|"Base de données"| S["Risque d'injection SQL"]
  Q -->|"Shell ou interpréteur"| C["Exécution de code arbitraire"]
  Q -->|"E-mail, courrier client"| E["Engagement de l'entreprise, désinformation"]
  Q -->|"Autre agent"| A["Propagation d'une injection"]
  H --> V["Encoder, assainir, liste blanche"]
  S --> V2["Requêtes paramétrées, jamais de SQL généré exécuté tel quel"]
  C --> V3["Bac à sable, pas de droits réseau"]
  E --> V4["Relecture humaine, mentions, sources citées"]
  A --> V5["Schéma de sortie structuré et validé"]

La désinformation (LLM09) est une sortie non maîtrisée d'un genre particulier : le contenu est techniquement inoffensif, mais faux. Sur un assistant client, une réponse inventée sur une garantie, un tarif ou un délai peut engager l'entreprise. Les parades : réponses ancrées sur des sources citées, refus explicite quand la source manque, et périmètre de questions restreint.

L'assistant génère du Markdown affiché dans un widget web. Quelle mesure traite le mieux le risque LLM05 ?

3. L'agentivité excessive

L'OWASP décompose LLM06 en trois excès :

ExcèsQuestion à poserExemple de dériveParade
FonctionnalitésL'agent a-t-il des outils dont il n'a pas besoin ?Un outil « gestion de fichiers » qui sait aussi supprimerOutils minimaux, un outil = une action
PermissionsLes outils ont-ils plus de droits que nécessaire ?Compte de service administrateur de la baseCompte dédié en lecture seule, scope réduit
AutonomieL'agent agit-il sans validation sur des actions à impact ?Remboursement émis automatiquementConfirmation humaine au-delà d'un seuil

4. Les risques de socle

  • Empoisonnement (LLM04) : un attaquant introduit des données biaisées ou piégées dans le corpus de fine-tuning, d'évaluation ou dans les documents qui alimentent le RAG. Parade : provenance des données, revue des sources, jeux d'évaluation de non-régression.
  • Chaîne d'approvisionnement (LLM03) : modèles téléchargés depuis un hub public, bibliothèques, extensions, serveurs MCP tiers. Parade : inventaire (une forme de SBOM pour l'IA), versions épinglées, sources vérifiées, revue avant ajout d'un outil.
  • Consommation non bornée (LLM10) : coûts qui explosent, déni de service, extraction du modèle par requêtes massives. Parade : authentification, quotas par utilisateur, limites de taille d'entrée et de sortie, alertes budgétaires.

Une équipe ajoute à son agent un serveur MCP open source trouvé sur un forum, qui donne accès au CRM. Quelles catégories sont concernées en priorité ? (plusieurs réponses)

Exercice : revue d'un agent de remboursement

Un agent support client dispose des outils suivants :

outils-agent.yaml
tools:
  - name: crm_query
    description: "Exécute une requête SQL sur la base CRM"
    credentials: "compte crm_admin"
  - name: issue_refund
    description: "Émet un remboursement sur la carte du client"
    max_amount: null
    confirmation: false
  - name: send_email
    description: "Envoie un e-mail à n'importe quelle adresse"

Listez les problèmes et proposez une version corrigée.

Voir la solution

Problèmes relevés :

  1. crm_query exécute du SQL libre (LLM05) avec un compte administrateur (LLM06, permissions).
  2. issue_refund n'a ni plafond ni confirmation (LLM06, autonomie).
  3. send_email peut écrire à n'importe qui : canal d'exfiltration (LLM02 via LLM01).

Version corrigée :

outils-agent.yaml
tools:
  - name: get_customer_orders
    description: "Liste les commandes du client authentifié (identifiant injecté par le serveur, pas par le modèle)"
    credentials: "compte crm_readonly_orders"
  - name: propose_refund
    description: "Prépare une demande de remboursement"
    max_amount: 50          # par exemple ; au-delà, escalade vers un conseiller
    confirmation: "conseiller humain au-delà du plafond, client dans tous les cas"
  - name: reply_to_customer
    description: "Répond uniquement au client de la conversation en cours"

Principe : remplacer les outils génériques par des outils métier étroits, dont les paramètres sensibles (identité du client, destinataire) sont fixés par le serveur.

Je sais faire

  • Distinguer les trois chemins de fuite (mémorisation, prompt système, RAG)
  • Traiter la sortie d'un LLM comme une entrée non fiable selon sa destination
  • Analyser un agent selon les trois excès : fonctionnalités, permissions, autonomie
  • Citer une parade pour l'empoisonnement, la chaîne d'approvisionnement et la consommation non bornée
Siguiente