Securite en detail
Comment l'architecture se protege elle-meme
La securite est structurelle, pas ajoutee apres coup. Chaque composant est concu avec des defauts securises, et les mecanismes de protection sont hors de portee de l'agent qu'ils protegent. Cette page detaille l'enforcement runtime et les couches d'isolation.
Un daemon Python independant qui intercepte chaque commande shell avant son execution. Il tourne sur un socket Unix, hors du workspace de l'agent, avec son code et ses politiques verrouilles par des flags d'immutabilite OS.
Trois niveaux d'enforcement
Les commandes dangereuses (sudo, rm -rf, chmod 777) sont automatiquement rejetees. Aucune revue humaine necessaire.
Les commandes de lecture (git status, curl, cat) sont automatiquement autorisees. Chemin rapide, aucun delai.
Les commandes sensibles (git push, rm, kill, brew install) declenchent une demande d'approbation via iMessage avec un code de verification unique. Timeout de 2 minutes = refus automatique.
Si le daemon plante ou devient inatteignable, TOUTES les commandes non pre-autorisees sont refusees. Fail-closed par design.
Les fichiers de configuration critiques sont proteges par des flags d'immutabilite OS (chflags uchg). L'agent ne peut pas modifier ses propres regles, son identite ou sa configuration de securite.
openclaw.jsonSOUL.mdSECURITY.mdAGENTS.mdIDENTITY.mdTOOLS.mdexec-guardian.pypolicies.jsonLe deverrouillage necessite une intervention physique du superviseur humain.
Securite PIN
Toute action a fort impact necessite un code PIN numerique connu uniquement du superviseur humain. Le PIN est change apres toute suspicion de compromission et n'est jamais stocke dans les sessions de l'agent.
Implementation actuelle : PIN requis pour l'envoi d'emails, le deploiement de code, la suppression de fichiers et les modifications de configuration systeme.
Mail-Reader securise
L'agent mail-reader tourne en mode exec allowlist. Un seul script est autorise : mail-extract avec exactement 3 flags autorises (--hours, --account, --output). Tout le reste est refuse.
--hours--account--output* (everything else)Le traitement natif iMessage est desactive. Un daemon Python (imsg-watcher) poll la base de donnees chat.db en continu. Chaque message entrant spawne un sub-agent one-shot isole qui traite la demande puis se termine.
- Aucune session persistante entre les messages
- Cooldown de 24h pour les greetings par contact
- Injection automatique des briefings projet
- Timeout de 300 secondes par sub-agent
Chaque agent a ses propres permissions d'outils. L'agent principal a un acces large, tandis que les sub-agents operent avec des permissions minimales scopees a leur tache specifique. Un mail-reader ne peut pas deployer de code. Un bridge-reader n'a aucun outil.
| Agent | Shell | Fichiers | Reseau | Git | Deploy | |
|---|---|---|---|---|---|---|
| main | ||||||
| mail-reader | ||||||
| bridge-reader | ||||||
| kickoff-coding | ||||||
| imsg-handler |
Chaque sub-agent recoit uniquement les permissions minimales requises pour sa tache specifique.
Securite CLI iMessage
Le CLI d'envoi iMessage utilise des flags nommes uniquement (--to, --text). Les arguments positionnels sont rejetes. Cela empeche l'injection de commandes via le contenu des messages. Timeout de 45 secondes par envoi.
exec-guardian
Daemon permanent (launchd)Couche d'enforcement runtime -- chaque execution d'outil passe par le guardian avant d'etre lancee.
HOW IT WORKS
- 1Daemon Python ecoutant sur un socket Unix (exec-approvals). Chaque appel exec d'OpenClaw est intercepte
- 2Moteur de decision a 3 niveaux : auto-deny (commandes dangereuses comme rm -rf, curl vers hotes inconnus), auto-allow (commandes sures correspondant a l'allowlist), ask-julien (cas ambigus envoyes via iMessage pour approbation humaine)
- 3Politiques definies dans policies.json -- le daemon et le fichier de politique sont verrouilles avec chflags uchg (immuables)
- 4Fail-closed : si le daemon guardian plante ou est injoignable, TOUTES les executions sont bloquees. L'agent ne peut pas le contourner
WHY IT MATTERS
Un agent IA avec acces shell peut tout faire. Le guardian garantit que meme un agent compromis ou confus ne peut pas executer de commandes destructrices sans approbation humaine. C'est la derniere ligne de defense.
imsg-watcher
Daemon permanent (launchd)Remplace le traitement natif d'iMessage par un pipeline de traitement de messages controle et isole.
HOW IT WORKS
- 1Interroge chat.db de macOS (SQLite) toutes les quelques secondes pour les nouveaux messages. L'integration iMessage native est desactivee
- 2Chaque message entrant spawn un sub-agent one-shot jetable : nouveau contexte, outils restreints, timeout 300s. Quand le sub-agent finit, il est detruit
- 3Cooldown de 24h pour les salutations par contact pour eviter le spam. Le contexte projet est auto-injecte selon le contact
- 4L'agent principal ne voit jamais le contenu brut d'iMessage -- seul le sub-agent le voit. Si le sub-agent est compromis par un message, les degats sont contenus
WHY IT MATTERS
iMessage est un vecteur d'attaque : quiconque connait le numero de telephone peut envoyer des injections de prompt. Le watcher isole chaque message dans un bac a sable jetable. Un message malveillant tue un sub-agent -- l'agent principal n'est pas affecte.
