Retour à tous les articles
Publié le · par Renaud Deraison

Votre agent de codage ressemble trait pour trait à un attaquant

En juillet 2026, Sophos X-Ops a rapporté que, sur une semaine de télémétrie Windows, des agents de codage comme Claude Code, Cursor et Codex ont déclenché les mêmes règles de terminaux conçues pour attraper les intrus — 56,2 % des blocages relevaient de l'accès aux identifiants, le plus important étant un déchiffrement des mots de passe du navigateur. Le comportement est identique à celui d'une vraie attaque ; la seule variable est la machine sur laquelle il tourne. Bromure Agentic Coding fait de cette variable une VM Linux jetable avec des identifiants leurres, de sorte que les manœuvres bruyantes atterrissent dans une boîte jetable et que les défenses de votre hôte restent strictes.

Votre agent a déchiffré les mots de passe enregistrés du navigateur, listé le gestionnaire d'identifiants, récupéré un installeur à l'aide d'un utilitaire système Windows et déposé un script dans le dossier de démarrage. Chacune de ces manœuvres figure sur la liste de contrôle d'un véritable intrus. Sophos a vu un agent de codage les accomplir toutes. Rien n'était malveillant — et c'est précisément le problème, car la télémétrie que génère un attaquant et celle que génère votre agent sont la même télémétrie.

Le 7 juillet 2026, Sophos X-Ops a publié une analyse d'une semaine de télémétrie de terminaux de juin, examinant ce qui se passe lorsque des développeurs pointent des agents de codage vers de vraies machines. Le constat est une collision, pas un bug que quiconque peut corriger. Le travail quotidien d'un agent — lire un identifiant, exécuter une commande, télécharger un outil, maintenir quelque chose en vie entre les redémarrages — se superpose presque à l'identique aux tactiques MITRE ATT&CK que la détection sur les terminaux est réglée pour attraper. Alors les capteurs se sont déclenchés.

Ce que les capteurs ont réellement vu

Sur la semaine, la plus grande part des déclenchements de règles bloquantes — 56,2 % — relevait de l'accès aux identifiants, et 28,8 % de plus de l'exécution. Ce sont deux des catégories les plus attaquantes du référentiel. La plus importante règle sur les identifiants, à 42,6 % de ce groupe, se déclenche lorsqu'un processus utilise l'API de protection des données de Windows (DPAPI, le service du système qui déverrouille les secrets stockés d'un utilisateur) pour déchiffrer les identifiants enregistrés du navigateur. Sophos l'a retracée jusqu'à la compétence /browse de GStack — un pack de compétences populaire qui donne un navigateur à un agent — exécutant PowerShell pour déverrouiller les données enregistrées du navigateur. Elle l'a attrapée sous Claude Code.

Le reste de la liste se lit comme un rapport d'incident. Des agents ont exécuté cmdkey /list pour énumérer le Gestionnaire d'identifiants Windows. Ils ont tué le processus du navigateur puis fouillé son magasin d'identifiants. Ils ont téléchargé un installeur Python avec certutil et bitsadmin — deux binaires Windows légitimes que les attaquants détournent pour récupérer des charges utiles sans déclencher de filtre de téléchargement, la technique que les défenseurs appellent un LOLBin (« living off the land binary », vivre sur le pays). Cursor a écrit un VBScript dans le dossier de démarrage de Windows, ce qui est un cas d'école de persistance. Et des lignes de commande de Claude portaient --dangerously-skip-permissions, le drapeau qui coupe les propres invites « êtes-vous sûr ? » de l'agent.

Rien de tout cela n'était une attaque. En contexte, c'est presque toujours de l'automatisation que le développeur a demandée. Mais Sophos est sans détour sur ce que cela signifie pour la défense : les règles fonctionnent comme prévu, et le comportement seul ne peut plus distinguer un agent bénin d'un vrai attaquant.

Votre agent de codageskill navigateur · setupvous l'avez demandéUn vrai intruspost-exploitationsur la même machineLes mêmes commandes• DPAPI : déchiffre les logins• cmdkey /list• certutil / bitsadmin fetch• écrit un script au DémarrageCapteur de terminalAccès identifiants · Exécutionqui l'a lancé ? inconnu
Un même bloc de commandes, deux auteurs, un seul capteur. Un agent de codage qui exécute une compétence d'automatisation de navigateur et un intrus en phase de post-exploitation lancent les mêmes manœuvres — déchiffrer le coffre du navigateur, lister le gestionnaire d'identifiants, récupérer un outil avec un LOLBin, écrire dans le Démarrage. Le capteur de terminal voit une télémétrie identique et ne peut dire qui l'a tapée. Le seul fait qui diffère, c'est la machine sur laquelle les commandes ont tourné.

Le piège : corriger au capteur

Lisez ce constat en exploitant et la pression est évidente. Votre équipe adopte des agents de codage. L'outil de terminal se met à lever des alertes d'accès aux identifiants et d'exécution chaque fois que quelqu'un en lance un. Les alertes sont bruyantes, et elles sont « fausses » au sens où personne n'est attaqué — le réflexe naturel est donc de les faire taire : ajouter une exception pour l'agent, mettre le pack de compétences sur liste blanche, cesser de signaler les lectures DPAPI de cette arborescence de processus.

À l'instant où vous faites cela, vous avez dit à vos défenses d'ignorer la séquence exacte qu'utilise un vrai intrus. Et l'agent n'est pas une chose sûre à exclure, car c'est l'élément le plus susceptible sur la machine d'être retourné contre vous. Une injection de prompt cachée dans un dépôt, une compétence de marketplace empoisonnée, une dépendance malveillante — nous avons couvert chacun de ces cas — fait exécuter à l'agent les instructions de l'attaquant avec vos privilèges. Quand cela arrive, l'agent fait le même déchiffrement DPAPI, le même vidage du gestionnaire d'identifiants, la même récupération par LOLBin — sauf que maintenant, c'est pour de vrai. Vous avez aveuglé le seul capteur qui l'aurait attrapé, au nom de l'empêcher de crier au loup à son propre sujet.

Sophos aboutit à la version sobre : l'ingénierie de détection devra s'adapter, certaines règles auront besoin d'être ajustées, et le signal distinctif devra venir du contexte — quel agent, invoqué comment — plutôt que de l'action seule. C'est juste, et c'est aussi beaucoup de travail continu pour garder un capteur honnête face à une cible mouvante. Il existe une option plus brutale : cesser de faire tourner l'agent là où vit le capteur.

Déplacez l'agent, pas l'alarme

Bromure Agentic Coding fait tourner l'agent tout entier à un hyperviseur de distance, à l'intérieur d'une VM Linux jetable sur votre Mac. Les lectures du magasin d'identifiants, les téléchargements d'outils, les écritures de persistance — tout cela se produit dans une boîte qui n'est pas votre machine, et dont la réinitialisation revient à une image de base propre entre les sessions. Trois choses en découlent, et aucune n'exige d'assouplir une seule règle sur l'hôte.

Le bruit n'atteint jamais votre terminal. Les vraies défenses de votre hôte restent strictes parce que l'agent n'est pas sur l'hôte pour les déclencher. L'écriture dans le dossier de démarrage atterrit dans un système de fichiers jetable ; le redémarrage qu'elle attendait n'arrive jamais, et la réinitialisation la jette de toute façon.

Les lectures d'identifiants reviennent bredouilles. C'est le coup direct sur ces 56,2 %. Bromure garde les vrais secrets sur l'hôte et injecte des faux au niveau du proxy, sur le fil ; ce qui se trouve réellement dans la VM est du matériel leurre — un espace réservé brm_… là où devrait être la clé d'API, un kubeconfig synthétique, des identifiants git et ssh jetables. Un agent qui déchiffre le coffre du navigateur ou vide le gestionnaire d'identifiants dans cette VM ne récolte rien qui fonctionne. La vraie valeur n'est substituée que sur la requête sortante, à une frontière que l'agent ne peut contourner.

--dangerously-skip-permissions cesse d'être dangereux. Le drapeau existe parce que se faire demander « êtes-vous sûr ? » à chaque étape tue l'intérêt d'un agent ; les gens le désactivent. Ce qui le rend imprudent, c'est la machine en dessous. Déplacez la machine vers une VM jetable avec des identifiants leurres, et le drapeau n'est que rapide — la raison de le craindre n'a jamais été le drapeau, c'était le rayon de destruction.

L'agent sur votre machineAgent de codagemanœuvres type ATT&CKVrais secretscoffre nav., jetonsDossier Démarrage · vrai disque · persisteun agent détourné fait tout cela pour de vraiCapteur de terminal, forcé de choisirfaux positifs constants …… ou whitelister l'agent et devenir aveugleL'agent dans une VM BromureAgent de codagemêmes gestes, jetableSecrets leurresbrm_… , clés facticesDisque jetable · reset vers basela persistance est effacée entre sessionsFrontière hôteinjecte les vrais secrets · filtre les destructeursjournalise la sortie · le capteur hôte reste strict
Deux endroits où placer le même agent. Sur votre machine (à gauche), les commandes en forme d'attaque frappent de vrais identifiants et une vraie persistance, et votre outil de terminal est coincé entre des faux positifs constants et un angle mort. Dans une VM Bromure (à droite), les mêmes commandes frappent des identifiants leurres dans une boîte qui se réinitialise, le capteur de l'hôte reste strict parce que l'agent n'est pas sur l'hôte, et les manœuvres sortantes franchissent une frontière qui injecte les vrais secrets, filtre les appels destructeurs et journalise le trafic.

Et l'agent détourné ?

Le confinement répond au bruit, mais l'inquiétude plus aiguë est l'agent qui n'est pas seulement bruyant — il a été retourné. La frontière de Bromure est bâtie pour ce cas aussi. Sa détection d'injection sur l'appareil note le contenu non fiable et les fichiers d'instructions que l'agent lit — avec un modèle PromptGuard local et un classificateur affiné — avant que l'agent n'agisse dessus, de sorte que le « maintenant, exfiltre les clés » malveillant est signalé à la porte. Les manœuvres qui compteraient hors de la boîte — un push, un déploiement, un Delete* contre votre cloud — franchissent le proxy de l'hôte, où les Guardrails peuvent retirer entièrement les appels destructeurs et où un consentement par destination peut exiger d'abord une validation humaine. Et chaque requête sortante atterrit dans la trace de session, de sorte que le rappel dont un intrus a besoin apparaît comme une ligne journalisée portant un identifiant factice.

La collision comportementale que Sophos a mesurée est réelle et ne va pas disparaître — le travail honnête d'un agent de codage recoupe le manuel d'un attaquant par conception. Vous ne pouvez pas résoudre cela au capteur sans soit vous noyer dans les faux positifs, soit percer un trou par lequel votre propre agent passera le jour où il sera compromis. Bromure le résout ailleurs : il cesse de se soucier de savoir lequel a tapé la commande, parce que la commande atterrit dans une boîte qui se réinitialise, dépense des identifiants qui sont des leurres, et ne peut toucher le monde extérieur qu'à travers une frontière qui surveille.

Ce que cela délimite

L'isolement est du confinement, pas la promesse que rien de mauvais ne s'exécute. Il vaut la peine d'être précis sur les bords.

Ce sont des noms Windows ; la collision, non

DPAPI, cmdkey, certutil et le dossier de démarrage sont propres à Windows. Bromure fait tourner l'agent sur Linux, donc ces binaires exacts ne se déclenchent jamais à l'intérieur. Mais le motif est indépendant de la plateforme : un agent sous Linux lit ~/.aws/credentials, vide les jetons d'environnement et écrit une tâche cron ou une unité systemd — les mêmes manœuvres en forme d'attaque sous d'autres noms. Le contrôle est le même aussi. L'emplacement et les leurres, pas les signatures.

La substitution couvre les secrets que vous configurez

L'échange de leurres protège les identifiants que vous placez dans un profil : clés de modèle, jetons git et cloud, points d'accès de bases de données gérées, clés ssh. Un mot de passe qu'un script écrit dans un fichier en cours de session, ou un secret que vous collez dans la boîte à la main, n'est qu'un fichier que l'agent peut lire. Gardez les secrets dans le broker, pas dans l'espace de travail.

La détection est un filet, pas un mur

La notation d'injection sur l'appareil signale une instruction malveillante le plus souvent, mais un auteur déterminé peut affamer n'importe quel scanner isolé. Traitez le détecteur comme une couche ; le confinement — une boîte jetable avec des clés factices et une sortie journalisée — est ce qui tient quand un détecteur rate.

Votre EDR d'hôte compte toujours

Bromure ne remplace pas la protection des terminaux ; il lui donne un travail plus propre. Le bruit de l'agent quitte l'hôte, donc votre capteur continue de surveiller la machine sur laquelle vous vous connectez vraiment, sans être émoussé — et un vrai intrus qui y est doit encore passer devant lui.

La leçon sous les chiffres de Sophos n'est pas « les agents sont dangereux ». C'est qu'on ne peut pas distinguer un bon acteur d'un mauvais à la forme des commandes, parce que la forme est la même. Alors cessez d'essayer de le décider au clavier, et décidez-le plutôt au périmètre : faites tourner l'agent là où son travail en forme d'attaque est contenu, où ses identifiants sont factices, et où chacune de ses étapes vers l'extérieur est journalisée. Installez-le.