
Benchmark e codice di difesa per attacchi alla memoria persistente su agenti di tipo computer-use in stile OpenClaw, con mitigazione tramite memory-zoning, scenari di attacco e script di valutazione.
Codice sperimentale per ZoneClaw: Mitigating Persistent Memory Attack by Establishing Memory-Zoning among OpenClaw-Style Computer-Use Agents.
Questo repository contiene i task di benchmark, le implementazioni delle difese e gli script di valutazione utilizzati nel paper. Il benchmark studia gli attacchi alla memoria persistente tra sessioni in agenti computer-use in stile OpenClaw. Copre due classi di attacco:
ZoneClaw separa le osservazioni esterne conservate dalla memoria portatrice di autorità, quindi utilizza agenti con ruoli separati per osservare, classificare e agire sulle informazioni persistenti.
Questa edizione solo-codice non include i risultati sperimentali. Le trascrizioni del paper, le evidenze del verificatore e i riepiloghi sono disponibili nel repository degli artefatti di accompagnamento.
uvConsentire almeno 20 GB di spazio libero su disco per dipendenze, immagini Docker e run generate. Si consigliano 16 GB di RAM per esperimenti paralleli. Il setup iniziale richiede tipicamente 10-20 minuti, a seconda della rete e della cache di build di Docker.
Per un download anonimo, estrarre lo ZIP, aprire un terminale nella sua directory di primo livello ed eseguire:
bash setup.sh
Il setup recupera le dipendenze fissate di OpenClaw, Harbor e WorkspaceBench direttamente dai loro repository upstream pubblici. Non è necessario l'accesso al repository privato originale.
Per un checkout Git, sostituire <repository-url> qui sotto con l'URL di clone del repository:
git clone --depth 1 --recurse-submodules --shallow-submodules \
<repository-url> ZoneClaw-code
cd ZoneClaw-code
bash setup.sh
Lo script convalida gli strumenti locali e il daemon Docker, costruisce le immagini richieste e crea .env da .env.example. Genera OPENCLAW_GATEWAY_TOKEN localmente; modificare .env solo per impostare le chiavi del provider necessarie per una run. Non eseguire il commit di .env.
| Esperimento | Chiavi API richieste |
|---|---|
| Modello principale Anthropic | ANTHROPIC_API_KEY |
| Modello principale OpenAI | OPENAI_API_KEY |
| Modello principale Z.AI | ZAI_API_KEY |
| Modello principale Alibaba Qwen | ALIBABA_KEY |
| Watcher o MELON con un modello principale non-Anthropic | Chiave del modello principale e ANTHROPIC_API_KEY |
| Valutazioni di autorità e utilità benigna di WorkspaceBench | OPENAI_API_KEY e ANTHROPIC_API_KEY |
Gli esperimenti effettuano chiamate a pagamento ai provider. Iniziare con una singola prova per verificare il percorso completo:
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-userprompt N=1 P=1 bash bench.sh
Gli esperimenti principali del paper utilizzano Claude Sonnet 4.6. Dopo che lo smoke test ha successo, riprodurre la riga completa con:
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-userprompt N=15 P=3 bash bench.sh
Gli output vengono scritti in runs/<timestamp>__e2e-<experiment>/. Il comando stampa una ripartizione per prova dopo l'aggregazione; una run esistente può essere visualizzata nuovamente con:
bash show-bench.sh runs/<run-directory>
Gli esperimenti end-to-end denominati seguono:
<scenario>[-<defense>]-<setting>
| Termine del paper | Token del comando |
|---|---|
| Esfiltrazione BCC | bcc |
| Chat mirror | chat |
| Source redirection | sr |
| Marketplace redirection | market |
| Aggiornamento attivato dall'utente | userprompt |
| Aggiornamento periodico | heartbeat |
| Nessuna difesa | omettere il token della difesa |
| Watcher in stile ClawKeeper | auditor |
| Separazione dei privilegi | privsep |
| ClawGuard | clawguard |
| MELON | melon |
| ZoneClaw | zoneclaw |
Esempi:
# BCC non difeso, aggiornamento attivato dall'utente
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-userprompt N=15 P=3 bash bench.sh
# Watcher in stile ClawKeeper, aggiornamento periodico Chat Mirror
MODEL=anthropic/claude-sonnet-4-6 \
E2E=chat-auditor-heartbeat N=15 P=3 bash bench.sh
# ZoneClaw, aggiornamento source-redirection attivato dall'utente
MODEL=anthropic/claude-sonnet-4-6 \
E2E=sr-zoneclaw-userprompt N=15 P=3 bash bench.sh
Tutti i nomi validi e le loro coppie di task di injection/exploitation sono elencati in experiments/e2e.tsv.
Per utilizzare un altro modello supportato, sostituire MODEL; ad esempio:
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
Le run misurate archiviano il runtime per fase, l'utilizzo del modello e l'utilizzo del modello helper
insieme a ciascuna prova. Le run Alibaba Qwen conservano inoltre un registro di utilizzo grezzo privo di contenuto
così che i token di reasoning non vengano conteggiati due volte dall'adattatore di compatibilità. Vedere docs/measurement.md per lo schema e le regole di aggregazione.
Il paper valuta ciascuna ablazione sulla forma attivata dall'utente di tutti e quattro gli scenari. I comandi BCC sono:
# senza Zone
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-no-authority-metadata-userprompt N=15 P=3 bash bench.sh
# senza Gatekeeper
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-auto-promotion-userprompt N=15 P=3 bash bench.sh
# senza Cross-check
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-low-context-userprompt N=15 P=3 bash bench.sh
Sostituire bcc con chat, sr o market per gli scenari rimanenti.
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
Il paper utilizza lo schedule di attacco ripetuto BCC, dieci sessioni di aggiornamento e checkpoint dopo 0, 1, 2, 3, 5 e 10 aggiornamenti:
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
Gli esperimenti WorkspaceBench richiedono i suoi metadati Lite e i file del workspace:
uv run --with huggingface_hub python \
workspace-bench/evaluation/scripts/download_hf_assets.py \
--eval-root workspace-bench/evaluation \
--language en --lite --workspaces
Dopo aver scaricato i task upstream, generare i due sottoinsiemi disgiunti da 15 task del paper con il seed di selezione fisso: