
Code de benchmark et de défense contre les attaques de mémoire persistante sur les agents d'utilisation informatique de style OpenClaw, avec atténuation par zonage mémoire, scénarios d'attaque et scripts d'évaluation.
Code expérimental pour ZoneClaw : Atténuer les attaques par mémoire persistante en établissant un cloisonnement mémoire parmi les agents informatiques de style OpenClaw.
Ce dépôt contient les tâches de référence, les implémentations de défense et les scripts d'évaluation utilisés dans l'article. Le benchmark étudie les attaques par mémoire persistante inter-sessions dans les agents informatiques de style OpenClaw. Il couvre deux classes d'attaques :
ZoneClaw sépare les observations externes retenues de la mémoire porteuse d'autorité, puis utilise des agents à rôles séparés pour observer, classifier et agir sur les informations persistantes.
Cette édition code uniquement n'inclut pas les résultats expérimentaux. Les transcriptions, les preuves de vérification et les résumés de l'article sont disponibles dans le dépôt d'artefacts accompagnant.
uvPrévoyez au moins 20 Go d'espace disque libre pour les dépendances, les images Docker et les exécutions générées. Nous recommandons 16 Go de RAM pour les expériences parallèles. La configuration initiale prend généralement 10 à 20 minutes, selon le réseau et le cache de build Docker.
Pour un téléchargement anonyme, extrayez le ZIP, ouvrez un terminal dans son répertoire de premier niveau et exécutez :
bash setup.sh
La configuration récupère les dépendances épinglées OpenClaw, Harbor et WorkspaceBench directement depuis leurs dépôts publics en amont. Aucun accès au dépôt privé d'origine n'est nécessaire.
Pour un checkout Git, remplacez <repository-url> ci-dessous par l'URL de clone du dépôt :
git clone --depth 1 --recurse-submodules --shallow-submodules \
<repository-url> ZoneClaw-code
cd ZoneClaw-code
bash setup.sh
Le script valide les outils locaux et le démon Docker, construit les images requises et crée .env à partir de .env.example. Il génère OPENCLAW_GATEWAY_TOKEN localement ; modifiez .env uniquement pour définir les clés de fournisseur nécessaires à une exécution. Ne commitez pas .env.
| Expérience | Clés API requises |
|---|---|
| Modèle principal Anthropic | ANTHROPIC_API_KEY |
| Modèle principal OpenAI | OPENAI_API_KEY |
| Modèle principal Z.AI | ZAI_API_KEY |
| Modèle principal Alibaba Qwen | ALIBABA_KEY |
| Watcher ou MELON avec un modèle principal non-Anthropic | Clé du modèle principal et ANTHROPIC_API_KEY |
| Évaluations d'autorité et d'utilité bénigne WorkspaceBench | OPENAI_API_KEY et ANTHROPIC_API_KEY |
Les expériences effectuent des appels payants aux fournisseurs. Commencez par un essai pour vérifier le chemin complet :
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-userprompt N=1 P=1 bash bench.sh
Les expériences principales de l'article utilisent Claude Sonnet 4.6. Une fois le test de fumée réussi, reproduisez la ligne complète avec :
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-userprompt N=15 P=3 bash bench.sh
Les sorties sont écrites dans runs/<timestamp>__e2e-<experiment>/. La commande affiche une répartition par essai après agrégation ; une exécution existante peut être revue avec :
bash show-bench.sh runs/<run-directory>
Les expériences de bout en bout nommées suivent :
<scenario>[-<defense>]-<setting>
| Terme de l'article | Jeton de commande |
|---|---|
| Exfiltration BCC | bcc |
| Miroir de chat | chat |
| Redirection de source | sr |
| Redirection de place de marché | market |
| Mise à jour déclenchée par l'utilisateur | userprompt |
| Mise à jour périodique | heartbeat |
| Sans défense | omettre le jeton de défense |
| Watcher de style ClawKeeper | auditor |
| Séparation des privilèges | privsep |
| ClawGuard | clawguard |
| MELON | melon |
| ZoneClaw | zoneclaw |
Exemples :
# BCC sans défense, mise à jour déclenchée par l'utilisateur
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-userprompt N=15 P=3 bash bench.sh
# Watcher de style ClawKeeper, mise à jour périodique Chat Mirror
MODEL=anthropic/claude-sonnet-4-6 \
E2E=chat-auditor-heartbeat N=15 P=3 bash bench.sh
# ZoneClaw, mise à jour de redirection de source déclenchée par l'utilisateur
MODEL=anthropic/claude-sonnet-4-6 \
E2E=sr-zoneclaw-userprompt N=15 P=3 bash bench.sh
Tous les noms valides et leurs paires de tâches d'injection/exploitation sont listés dans experiments/e2e.tsv.
Pour utiliser un autre modèle pris en charge, remplacez MODEL ; par exemple :
MODEL=openai/gpt-5.5 OPENCLAW_THINKING=medium \
E2E=bcc-zoneclaw-userprompt N=15 P=3 bash bench.sh
MODEL=zai/glm-5.2 \
E2E=bcc-zoneclaw-userprompt N=15 P=3 bash bench.sh
BENCH_TOKEN_PRICES_FILE="$PWD/experiments/measurement/qwen3.7-plus-2026-05-26.json" \
MODEL=alibaba/qwen3.7-plus-2026-05-26 OPENCLAW_THINKING=medium \
E2E=bcc-zoneclaw-userprompt N=15 P=3 bash bench.sh
Les exécutions mesurées archivent le temps d'exécution par phase, l'utilisation du modèle et l'utilisation du modèle auxiliaire
aux côtés de chaque essai. Les exécutions Alibaba Qwen conservent en outre un registre d'utilisation brut sans contenu afin que les jetons de raisonnement ne soient pas comptés deux fois par l'adaptateur de compatibilité. Voir docs/measurement.md pour le schéma et les règles d'agrégation.
L'article évalue chaque ablation sur la forme déclenchée par l'utilisateur des quatre scénarios. Les commandes BCC sont :
# sans Zone
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-no-authority-metadata-userprompt N=15 P=3 bash bench.sh
# sans Gatekeeper
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-auto-promotion-userprompt N=15 P=3 bash bench.sh
# sans Cross-check
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-low-context-userprompt N=15 P=3 bash bench.sh
Remplacez bcc par chat, sr ou market pour les scénarios restants.
for experiment in \
bcc-prompt-aware-promotion-userprompt \
bcc-zoneclaw-prompt-aware-promotion-userprompt \
bcc-prompt-aware-composed-userprompt \
bcc-zoneclaw-prompt-aware-composed-userprompt \
sr-prompt-aware-finegrained-userprompt \
sr-zoneclaw-prompt-aware-finegrained-userprompt
do
MODEL=anthropic/claude-sonnet-4-6 \
E2E="$experiment" N=15 P=3 bash bench.sh
done
MODEL=anthropic/claude-sonnet-4-6 \
TASK=bcc-exfiltration-zoneclaw-promotion/benign-only \
N=30 P=3 bash bench.sh
MODEL=anthropic/claude-sonnet-4-6 \
TASK=bcc-exfiltration-zoneclaw-promotion/malicious-only \
N=30 P=3 bash bench.sh
L'article utilise le calendrier d'attaque répétée BCC, dix sessions de mise à jour et des points de contrôle après 0, 1, 2, 3, 5 et 10 mises à jour :
MODEL=anthropic/claude-sonnet-4-6 \
SYSTEM=no-defense SCHEDULE=repeated-attack \
N=3 P=1 bash longitudinal-bench.sh
MODEL=anthropic/claude-sonnet-4-6 \
SYSTEM=zoneclaw SCHEDULE=repeated-attack \
N=3 P=1 bash longitudinal-bench.sh
Les expériences WorkspaceBench nécessitent ses métadonnées Lite et ses fichiers d'espace de travail :
uv run --with huggingface_hub python \
workspace-bench/evaluation/scripts/download_hf_assets.py \
--eval-root workspace-bench/evaluation \
--language en --lite --workspaces
Après avoir téléchargé les tâches en amont, générez les deux sous-ensembles disjoints de 15 tâches de l'article avec la graine de sélection fixe :