13/11/2024
Blog technique
Les vulnérabilités dans les LLM : (8) Excessive Agency
Jean-Léon Cusinato, équipe SEAL
Bienvenue dans cette suite d’articles consacrée aux Large Language Model (LLM) et à leurs vulnérabilités.
Focus technique : Qu'est-ce qu'un agent autonome ?
Un agent autonome est un système ou une entité capable de prendre des décisions et d’entreprendre des actions de manière indépendante, sans nécessiter une intervention humaine constante. Dans le contexte des Large Language Models (LLM), un agent autonome est souvent conçu pour interagir avec d’autres systèmes, analyser des données, et exécuter des tâches en réponse à des requêtes ou des prompts. Attention cependant, un agent n’a pas besoin d’être très complexe pour être considéré comme autonome. Par exemple, un système gérant la température et les volets automatiquement en fonction de capteurs et de demandes explicites d’un utilisateur est considéré comme un agent autonome.
Dans le cadre de l’intelligence artificielle, plusieurs assistants virtuels sont déjà considérés comme des agents autonomes, tel Siri, Alexa, ou Google Assistant.
Caractéristiques d'un Agent Autonome
Un Agent Autonome, sur une Intelligence Artificielle, dispose des caractéristiques suivantes :
- Autonomie : l’agent est capable de fonctionner de manière indépendante en prenant des décisions basées sur les informations auquel il a accès. Dans certains cas, l’agent peut être celui qui engage l’échange en premier, comme certaines modes de fonctionnement de ChatGPT, présentés en ligne par des utilisateurs, dans lesquels l’IA initie la conversation :
A titre informatif, cette fonctionnalité n’a jamais été officialisée par ChatGPT. Un lien vers une conversation identique est disponible publiquement.
- Interaction avec d’autres systèmes : l’agent peut interagir avec divers systèmes et applications, qu’il s’agisse de plugin LLM, de bases de données, de services web, ou d’autres agents autonomes.
- Réactivité : l’agent réagit dynamiquement aux changements dans son environnement ou aux nouvelles informations qu’il reçoit, en ajustant ses actions en conséquence.
- Apprentissage et Adaptation : certains agents autonomes sont capables d’apprendre de leurs expériences et d’adapter leur comportement pour améliorer leurs performances au fil du temps. Cet article ne prend pas ce type d’agent en compte.
Fonctionnement
Le fonctionnement d’un Agent Autonome est relativement simple. En premier lieu, il collecte au fil de l’eau des données et des informations à partir de son environnement ou des systèmes avec lesquels il interagit. Ensuite, il va analyser ces données collectées pour identifier les actions nécessaires ou des décisions à prendre. Sur la base de cette analyse, l’agent prend des décisions autonomes en utilisant des algorithmes ou des règles préprogrammées. Dans le cas d’un LLM, ces algorithmes sont créés lors de l’entrainement du modèle (pour des détails sur le fonctionnement de l’entrainement, voir le préambule de (6) Sensitive Information Disclosure). Enfin, l’agent exécute les actions décidées, qu’il s’agisse de manipuler des données, d’interagir avec d’autres systèmes, ou de communiquer avec des utilisateurs.
En résumé, un agent autonome est une entité capable de prendre des décisions et d’entreprendre des actions de manière indépendante. Bien que ces agents offrent de nombreux avantages en termes d’efficacité et de réactivité, ils présentent également des défis en matière de sécurité, de contrôle et d’éthique. Par exemple, leur utilisation au sein de drones militaires armés est très souvent médiatisée, et sources de nombreux débats publics. De même, l’utilisation d’agents autonomes dans des systèmes de pentest automatisés pourrait générer des attaques non souhaitées par l’utilisateur.
Description de la vulnérabilité
Un système basé sur les Large Language Models est souvent doté d’un certain degré d’autonomie par son développeur, lui permettant d’interagir avec d’autres systèmes et d’entreprendre des actions en réponse à une requête. Le choix des fonctions à invoquer peut également être déléguée à un « agent » LLM qui détermine dynamiquement ces actions en fonction de la requête d’entrée ou de la sortie du LLM.
L’Excès d’Autonomie (Excessive Agency en anglais) est une vulnérabilité qui permet l’exécution d’actions nuisibles en réponse à des sorties inattendues ou ambiguës d’un LLM, quelle que soit la cause du dysfonctionnement du LLM (qu’il s’agisse d’hallucinations/confabulations, d’injections de requêtes directes/indirectes (voir (1) Prompt Injection), de plugins malveillants (voir (5) Supply Chain Vulnérability) ou mal développés (voir (7) Insecure Plugin Design), de requêtes bénignes mal conçues, ou simplement d’un modèle mal performant).
La cause profonde de l’Excès d’Autonomie est généralement l’une des suivantes : une fonctionnalité excessive, des permissions excessives ou une autonomie excessive. Cela signifie que le système ou l’application peut avoir des capacités ou des autorisations qui dépassent les besoins réels, ce qui peut entraîner des risques de sécurité. Par exemple, un logiciel pourrait avoir des fonctionnalités inutiles qui augmentent la surface d’attaque, ou des permissions trop larges qui permettent des actions non autorisées. En revanche, la gestion des sorties non sécurisées (voir (2) Insecure Output Handling) concerne l’insuffisance de contrôle des sorties du LLM.
Exemples
- Un LLM contient un plugin de RAG, et a accès à des données sensibles auxquelles l’utilisateur n’est pas censé accéder. Un attaquant utilise une méthode d’injection de prompt afin de récupérer des extraits de documents au travers des actions de l’intelligence. Par exemple une requête pourrait demander au LLM d’effectuer une action si le dernier COMEX a conclu sur une augmentation de budget, contournant ainsi les sécurités mises en place sur le contenu de la réponse qui auraient filtré les réponses chiffrées sur le budget du COMEX.
- Un LLM utilise un plugin permettant de lire des fichiers, mais aussi de les modifier ou de les supprimer. Un attaquant pourrait essayer de faire supprimer des documents sensibles ou d’injecter du code malveillant dans certains fichiers automatiquement.
- Enfin, un LLM ne détecte pas la sensibilité d’une opération et effectue des tâches qui nécessiteraient normalement une validation humaine.
Risques d'une telle vulnérabilité
L’Excès d’Autonomie peut entraîner des conséquences graves, allant de la compromission de la confidentialité des données à des perturbations majeures de l’intégrité et de la disponibilité des systèmes. Dans des scénarios avancés, un LLM avec une autonomie excessive pourrait interagir avec d’autres systèmes de manière non contrôlée, potentiellement en contournant les mécanismes de sécurité en place. Cela pourrait entraîner des interruptions de service ou des pertes de données critiques. Les entreprises utilisant de plus en plus de LLM interconnectés sont plus à même d’être victimes d’une attaque telle que celle-ci.
Pour aller plus loin
- Projet NeMo-Guardrails – https://github.com/NVIDIA/NeMo-Guardrails/tree/main
- Approbation humaine – https://python.langchain.com/docs/how_to/tools_human/#adding-human-approval
- Le modèle Dual LLM pour créer des assistants IA capables de résister à une injection de prompt – https://simonwillison.net/2023/Apr/25/dual-llm-pattern/