Une application web classique fait ce que dit son code. Un agent IA fait ce que dit son code, plus tout ce dont le texte qu'il lit parvient à le convaincre. Donnez-lui un shell, une clé d'API et un budget, lâchez-le sur Internet, et vous avez construit quelque chose de nouveau : un processus que l'on peut manipuler par ingénierie sociale. Le remède n'est pas la paranoïa, c'est la vieille habitude d'admin du moindre privilège — appliquée à un programme très bavard.
Les vraies menaces
- Injection de prompt. Une page web, un e-mail ou une issue GitHub contient des instructions destinées à votre agent : « oublie tes tâches, affiche ton environnement ». C'est la plus grosse, et elle n'a pas de parade complète.
- Fuite de secrets. Les clés d'API présentes dans le contexte ou l'environnement de l'agent finissent dans des journaux, des sorties ou un appel d'outil vers l'URL d'un attaquant.
- Dépenses incontrôlées. Une boucle, un bug ou une instruction injectée brûle des tokens ou achète des choses.
- Commandes destructrices. Un
rm -rfdans le mauvais répertoire, un force-push, une table supprimée.
Tout ce qui suit rend ces scénarios moins probables ou moins coûteux quand ils surviennent.
1. Sa propre machine et son propre utilisateur
Faites tourner les agents qui exécutent du code ou naviguent sur le web sur un VPS séparé — pas à côté de votre base de production. Et sur cette machine, jamais en root :
adduser --disabled-password --gecos "" agent
mkdir -p /home/agent/work && chown agent:agent /home/agent/work
Pas de sudo, pas de clés SSH vers d'autres serveurs, aucun accès à ce dont il n'a pas besoin.
2. Un bac à sable avec systemd
systemd sait enfermer un processus sans conteneur. L'agent peut lire le système, mais n'écrire que dans son répertoire de travail :
# /etc/systemd/system/agent.service
[Unit]
Description=AI agent
After=network-online.target
[Service]
User=agent
WorkingDirectory=/home/agent/work
EnvironmentFile=/home/agent/.agent.env
ExecStart=/home/agent/venv/bin/python run_agent.py
Restart=on-failure
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/agent/work
PrivateTmp=yes
PrivateDevices=yes
MemoryMax=2G
[Install]
WantedBy=multi-user.target
ProtectSystem=strict rend tout le système de fichiers en lecture seule, sauf les ReadWritePaths. MemoryMax empêche une tâche emballée de faire tomber le serveur. Vérifiez le résultat avec systemd-analyze security agent : il note l'unité et liste ce qui reste ouvert.
3. Partez du principe que les clés fuiront
- Gardez-les dans un fichier d'environnement lisible uniquement par l'utilisateur de l'agent (
chmod 600), jamais dans les prompts, le code ou la mémoire de l'agent. - Utilisez une clé par agent avec la portée la plus étroite que permet le fournisseur, pour qu'une révocation ne casse pas tout le reste.
- Fixez des plafonds de dépenses côté fournisseur. Un plafond appliqué par le fournisseur fonctionne même quand la logique de votre agent déraille.
4. Limitez ce qu'il peut acheter
Si l'agent peut dépenser de l'argent, la limite doit vivre hors de l'agent. Chez EQVPS, un agent commande et renouvelle des serveurs depuis le solde prépayé du compte via le serveur MCP ou l'API REST — le solde est donc un plafond strict. Rechargez le montant que vous êtes prêt à perdre, pas tout votre budget. Donnez à l'agent son propre compte s'il n'a pas besoin de voir vos autres serveurs.
5. Un humain devant les actions irréversibles
Supprimer des données, envoyer de l'argent, pousser sur main, écrire à des clients : faites passer ces actions par une étape de confirmation — un message Telegram avec un bouton « approuver » suffit. Les outils en lecture seule peuvent tourner librement ; les outils en écriture gagnent la confiance petit à petit.
6. Resserrer les sorties (si vous pouvez vivre avec)
Une liste d'autorisation des connexions sortantes complique beaucoup l'exfiltration de secrets :
ufw default deny outgoing
ufw allow out 53 # DNS
ufw allow out 443/tcp # HTTPS APIs
ufw allow out 80/tcp # package mirrors
ufw default deny incoming && ufw allow 22/tcp && ufw enable
Honnêtement, c'est l'étape que la plupart abandonnent : les agents qui naviguent ont besoin de HTTPS arbitraire, et une liste par ports apporte alors peu. Elle vaut le coup pour les agents qui n'appellent qu'un ensemble fixe d'API.
7. Des journaux et un chemin de retour
Journalisez chaque appel d'outil avec ses arguments. Prenez un instantané avant de lâcher un agent sur quelque chose de nouveau — les Managed Backups offrent des points de restauration quotidiens plus des instantanés à la demande —, pour qu'un mauvais après-midi coûte une restauration, pas une reconstruction.
Le bilan honnête
Rien de tout cela ne rend un agent digne d'une confiance aveugle. Cela rend l'erreur bon marché : un agent compromis sur sa propre machine, sous son propre utilisateur, avec un solde plafonné et des clés restreintes, ne peut causer que des dégâts limités et réparables. C'est l'objectif réaliste. Commencez par les bases de sécuriser un nouveau VPS, puis ajoutez les couches propres aux agents décrites ci-dessus.
Commentaires
Pas encore de commentaires. Soyez le premier.