Aller au contenu principal
Navigation
AccueilExpertisesParcoursRéférencesProjetsHub R&D / BlogMe Contacter

06 52 86 38 82

contact@sebastien-wald.fr

Architecture

Sécuriser les agents autonomes : guide d'architecture (n8n, LangChain)

Décembre 202518 min de lectureSébastien WALD

Les agents IA autonomes : une surface d'attaque d'un genre nouveau

Un agent IA autonome n'est pas un chatbot sophistiqué. C'est un programme capable de raisonner, planifier et agir sur votre système d'information de façon autonome : exécuter du code, appeler des API, écrire dans des bases de données, envoyer des e-mails, naviguer sur le web. Les frameworks comme LangChain permettent de construire ces agents en quelques heures ; les plateformes d'automatisation comme n8n les exposent à des utilisateurs non développeurs.

La conséquence sécurité est fondamentale : un agent compromis par injection de prompt ne représente plus un simple risque de fuite de données. C'est un processus authentifié, disposant d'accès légitimes à votre SI, qui agit au nom de l'attaquant — sans que ce dernier soit jamais directement connecté à vos systèmes.

Modèle de menace : 6 vecteurs spécifiques aux agents

Le modèle de menace des agents IA est qualitativement différent de celui des chatbots. Contrairement à un LLM simple dont le périmètre se limite à ses réponses textuelles, un agent agit. Chaque capacité d'action est un vecteur potentiel.

1. Détournement d'outils (Tool Hijacking)

L'attaquant exploite une injection de prompt pour faire appeler un outil avec des paramètres malveillants. L'outil envoyer_email devient un vecteur d'exfiltration ; l'outil recherche_web est utilisé pour envoyer des requêtes vers un serveur C2 sous couvert d'une recherche légitime.

2. Injection via les outputs d'outils

Vecteur souvent sous-estimé : l'agent appelle un outil légitime (lecture d'un fichier, recherche web, requête base de données), et le résultat retourné contient des instructions malveillantes. Ces instructions sont injectées dans le contexte de raisonnement de l'agent à l'étape Observation, qui les exécute comme si elles émanaient du système. C'est une injection indirecte de second niveau, particulièrement redoutable car elle franchit la frontière outil/LLM sans toucher au prompt initial.

3. Memory poisoning

Les agents à mémoire persistante (utilisant un VectorDB pour stocker des interactions passées) sont exposés à un vecteur long-terme : lors d'une première session, un attaquant injecte des entrées malveillantes dans la mémoire de l'agent. Ces instructions persistent et influencent le comportement de l'agent dans toutes les sessions suivantes — potentiellement pour d'autres utilisateurs. Ce vecteur est couvert par OWASP LLM08 (Vector and Embedding Weaknesses).

4. Abus de capacités par excès de permissions

Un agent disposant d'un accès SQL sans restriction peut, en cas de compromission, accéder à l'ensemble du schéma, exfiltrer des tables entières ou modifier des données critiques. Ce n'est pas une escalade de privilèges au sens classique — l'agent utilise ses permissions légitimes. C'est précisément ce que couvre OWASP LLM06 (Excessive Agency) : la surface de dommage est directement proportionnelle aux droits accordés, pas à la sophistication de l'attaque. La réponse est le principe du moindre privilège appliqué aux outils.

5. Unbounded Consumption (boucles et épuisement de ressources)

Un agent piégé dans une boucle de raisonnement peut saturer l'API LLM, générer des coûts exponentiels et provoquer un déni de service applicatif. Ce vecteur, couvert par OWASP LLM10, est souvent négligé en conception car il n'est pas intuitif dans un contexte purement sécurité — c'est pourtant un des premiers incidents opérationnels constatés en production agentique.

6. Compromission dans les architectures multi-agents

Dans les architectures orchestrateur/sous-agents, un sous-agent compromis peut injecter du contenu malveillant dans le contexte de l'orchestrateur. La chaîne de confiance entre agents est un périmètre d'attaque émergent, référencé dans MITRE ATLAS : les messages inter-agents ne sont pas traités comme non fiables par défaut — à tort. Chaque sous-agent doit être considéré comme une entrée non fiable pour l'orchestrateur.

Architecture de défense en profondeur en 4 couches

Je parlerai ici de défense en profondeur (defense-in-depth) plutôt que de "Zero Trust", terme souvent galvaudé. L'objectif de cette architecture est de contenir les dommages à chaque niveau, de sorte qu'une compromission d'une couche ne soit pas suffisante pour provoquer un incident majeur.

Couche 1 — Isolation de l'environnement d'exécution

Chaque agent s'exécute dans un conteneur isolé. Mais l'isolation Docker n'est réellement sécurisée que si elle est correctement configurée — le mode par défaut est insuffisant en production.

## Docker — Hardening minimal pour un agent IA

docker run \

--read-only \

--no-new-privileges \

--cap-drop ALL \

--security-opt seccomp=agent-seccomp.json \

--security-opt apparmor=agent-profile \

--memory=2g --cpus=1 \

--network=agent-internal-net \

--tmpfs /tmp:rw,noexec,nosuid,size=100m \

agent-image:latest

  • --read-only + --tmpfs /tmp : système de fichiers racine en lecture seule ; seul un répertoire temporaire non exécutable est accessible en écriture, nettoyé à la fin de chaque session
  • --no-new-privileges : empêche tout processus fils d'acquérir de nouveaux droits via setuid/setgid
  • --cap-drop ALL : supprime toutes les Linux capabilities — n'ajoutez que celles strictement nécessaires à votre use case
  • seccomp + AppArmor : filtrage des appels système et des accès fichiers au niveau kernel — couche indépendante de Docker elle-même
  • Réseau interne isolé : tout accès externe passe par un proxy filtrant avec allowlist explicite des domaines autorisés

Couche 2 — Contrôle d'accès aux capacités

Le RBAC s'applique aux identités humaines. Pour les agents IA, le concept pertinent est le principe du moindre privilège appliqué aux outils : chaque outil exposé est configuré avec le périmètre d'action minimal nécessaire à son usage légitime.

  • Scoping des outils : un outil SQL n'accède qu'aux tables nécessaires, en lecture seule si l'écriture n'est pas requise. Ne jamais exposer un compte admin à un agent.
  • Validation des paramètres : chaque appel d'outil valide ses arguments contre une allowlist de valeurs et de formats attendus avant exécution — première défense contre le Tool Hijacking
  • Human-in-the-Loop obligatoire : les outils à fort impact (envoi d'e-mail, écriture en base, exécution de code) requièrent une approbation humaine explicite. Ce n'est pas une option de confort — c'est une exigence architecturale non négociable pour les actions irréversibles
  • Rate limiting par outil : quota d'appels par session et par heure, pour limiter l'impact d'une boucle ou d'un abus (défense Unbounded Consumption)

Couche 3 — Observabilité complète du raisonnement

La chaîne de raisonnement d'un agent LangChain suit le cycle Thought → Action → Observation (pattern ReAct). Chaque étape doit être journalisée et transmissible au SIEM — c'est la seule fenêtre sur ce que "décide" l'agent à chaque instant.

Deux outils couvrent ce besoin nativement :

  • LangSmith (solution officielle LangChain) : capture les traces complètes avec latence, tokens consommés et étapes intermédiaires. Adapté si vous n'avez pas de contrainte de souveraineté des données.
  • Langfuse (open-source, auto-hébergeable) : alternative RGPD-compatible, déployable sur votre propre infrastructure. Produit des traces structurées JSON exportables vers votre pipeline SIEM via webhook ou API.

Alertes SIEM à configurer en priorité sur ces traces :

  • Appel d'un outil absent de la liste autorisée pour ce rôle d'agent
  • Séquence d'actions anormale (ex : lecture fichier → connexion réseau externe en moins de 2 secondes)
  • Champ Thought contenant des patterns caractéristiques d'injection ("ignore previous", "act as", "reveal")
  • Nombre d'itérations dépassant le seuil calibré pour le use case

Couche 4 — Guardrails et circuit breakers concrets

Cette couche est la dernière ligne de défense active. Chaque contrôle doit être implémentable, pas seulement déclaratif.

Canary token dans le system prompt — insérez un identifiant unique dans le prompt système de chaque agent :

## Canary token — Détection de fuite ou de manipulation du system prompt

SYSTEM_PROMPT = """

Tu es un assistant RH. [...instructions légitimes...]

<!-- SYS_CANARY:a7f3-9b2c-4e81 -->

"""

→ Si ce token apparaît dans une réponse LLM, dans un log réseau

ou dans une requête sortante : alerte critique SIEM immédiate.

Régénérer un token unique par agent et par environnement.

Kill switch via LangChain Callbacks — implémenter un BaseCallbackHandler qui inspecte chaque étape intermédiaire et interrompt l'agent si un pattern d'injection est détecté dans le raisonnement :

## LangChain — SecurityCallbackHandler (arrêt d'urgence)

class SecurityCallbackHandler(BaseCallbackHandler):

INJECTION_PATTERNS = [

r"ignore.{0,20}(previous|instructions|rules)",

r"act as|jailbreak|DAN mode",

r"SYS_CANARY:[a-f0-9-]+" # canary exfiltré

]

def on_agent_action(self, action, **kwargs):

for pattern in self.INJECTION_PATTERNS:

if re.search(pattern, str(action), re.IGNORECASE):

siem_alert(severity="CRITICAL", payload=action)

raise AgentSecurityException("Injection détectée — session terminée")

  • Budget tokens maximal : limite stricte par session pour contrer l'Unbounded Consumption (OWASP LLM10)
  • Nombre d'itérations maximal : paramètre max_iterations dans LangChain — valeur recommandée ≤ 15 pour des use cases standard, à calibrer selon le use case réel

LangChain vs n8n : deux outils, deux approches de sécurité

Ces deux outils sont souvent mentionnés ensemble dans les architectures agentiques, mais ils répondent à des besoins différents et appellent des contrôles de sécurité distincts. Les confondre conduit à des angles morts.

LangChain construit des agents à raisonnement dynamique : le modèle choisit lui-même quels outils appeler et dans quel ordre, en fonction d'un objectif de haut niveau. C'est ce dynamisme qui crée les vecteurs décrits dans cet article. Les recommandations des Couches 1 à 4 ci-dessus s'appliquent principalement à des agents LangChain.

n8n est une plateforme d'automatisation de workflows dont les flux d'exécution sont prédéfinis par le développeur. Les nœuds IA de n8n peuvent appeler un LLM, mais le LLM ne décide pas quels outils activer — c'est le workflow qui l'impose. Le risque est donc différent : la surface de raisonnement autonome est réduite, mais les risques de configuration et de gestion des credentials sont plus importants.

Bonnes pratiques spécifiques à n8n en contexte sensible :

  • Credentials chiffrés : stocker tous les tokens d'API dans le vault n8n, jamais en clair dans les nœuds de workflow
  • Webhooks authentifiés : chaque webhook exposé doit exiger un header Authorization ou une validation de signature HMAC — un webhook non authentifié est une porte d'entrée directe
  • IP allowlisting : restreindre les sources autorisées à déclencher les workflows en production
  • Logs d'exécution vers SIEM : n8n expose une API de logs d'exécution — la connecter à votre pipeline de collecte via syslog-ng ou Kafka, avec le même traitement que vos autres sources SOC
  • Isolation réseau de l'instance n8n : l'instance elle-même doit résider dans un segment réseau dédié, non exposée directement à Internet

Référentiels à connaître

Deux frameworks structurent aujourd'hui la sécurité des systèmes IA en entreprise et constituent les références que vos interlocuteurs (RSSI, DSI, auditeurs) vont progressivement adopter :

  • MITRE ATLAS (Adversarial Threat Landscape for AI Systems) : l'équivalent du framework ATT&CK pour les systèmes IA. Référence les tactiques, techniques et procédures (TTP) spécifiques aux attaques contre les modèles ML et les agents IA. Indispensable pour construire votre threat model et piloter vos exercices de red teaming IA.
  • NIST AI RMF (AI Risk Management Framework, 2023) : cadre de gouvernance du risque IA articulé autour de 4 fonctions (Govern, Map, Measure, Manage). Complémentaire de l'ISO 42001 pour les organisations souhaitant une approche de maturité progressive et documentée.

Conclusion : l'agent sécurisé se conçoit, il ne s'improvise pas

Le déploiement d'agents IA autonomes en entreprise n'est pas une question de "si" mais de "quand" — et pour beaucoup d'organisations, c'est déjà "maintenant", en shadow IT, avec des droits d'accès réels à vos systèmes. La question pour les RSSI n'est plus théorique.

Ce que j'observe sur le terrain : les équipes qui déploient des agents sans cette architecture construisent les incidents de demain. Mon expérience sur les SOC de grands comptes m'a appris qu'en sécurité, la surface d'attaque se paie toujours — la seule variable, c'est le moment où la facture arrive.

Pour aller plus loin

  • MITRE ATLAS — référentiel des tactiques adversariales contre les systèmes IA, incluant les techniques de compromission d'agents autonomes
  • OWASP Top 10 for LLM Applications 2025 (v2.0) — vulnérabilités LLM06 (Excessive Agency) et LLM10 (Unbounded Consumption) directement applicables aux architectures agentiques
  • NIST AI RMF 1.0 — cadre de gouvernance du risque IA pour structurer votre approche de maturité
  • LangChain Security Docs — bonnes pratiques officielles de sécurité pour les chaînes et agents LangChain
  • n8n — Securing your instance — documentation officielle de sécurisation d'une instance n8n auto-hébergée

Tags

Agents IAn8nLangChainArchitectureDefense-in-DepthMITRE ATLASSécurité IA

Cet article vous a été utile ?

Recevez la veille bi-mensuelle du Red Teamer directement dans votre boîte mail.