
Código de benchmark e defesa para ataques de memória persistente em agentes de uso de computador no estilo OpenClaw, com mitigação de zoneamento de memória, cenários de ataque e scripts de avaliação.
Código experimental para ZoneClaw: Mitigating Persistent Memory Attack by Establishing Memory-Zoning among OpenClaw-Style Computer-Use Agents.
Este repositório contém as tarefas de benchmark, as implementações de defesa e os scripts de avaliação usados no artigo. O benchmark estuda ataques de memória persistente entre sessões em agentes de uso de computador no estilo OpenClaw. Abrange duas classes de ataque:
O ZoneClaw separa observações externas retidas de memória com autoridade, e então usa agentes com papéis separados para observar, classificar e agir sobre informações persistentes.
Esta edição somente de código não inclui os resultados dos experimentos. As transcrições, evidências do verificador e resumos do artigo estão disponíveis no repositório de artefatos que o acompanha.
uvReserve pelo menos 20 GB de espaço livre em disco para dependências, imagens Docker e execuções geradas. Recomendamos 16 GB de RAM para experimentos paralelos. A configuração inicial normalmente leva de 10 a 20 minutos, dependendo da rede e do cache de build do Docker.
Para um download anônimo, extraia o ZIP, abra um terminal em seu diretório de nível superior e execute:
bash setup.sh
A configuração busca as dependências fixadas do OpenClaw, Harbor e WorkspaceBench diretamente de seus repositórios públicos upstream. Não é necessário acesso ao repositório privado original.
Para um checkout Git, substitua <repository-url> abaixo pela URL de clone do repositório:
git clone --depth 1 --recurse-submodules --shallow-submodules \
<repository-url> ZoneClaw-code
cd ZoneClaw-code
bash setup.sh
O script valida as ferramentas locais e o daemon do Docker, compila as imagens necessárias e cria .env a partir de .env.example. Ele gera OPENCLAW_GATEWAY_TOKEN localmente; edite .env apenas para definir as chaves de provedor necessárias para uma execução. Não faça commit de .env.
| Experimento | Chaves de API necessárias |
|---|---|
| Modelo principal Anthropic | ANTHROPIC_API_KEY |
| Modelo principal OpenAI | OPENAI_API_KEY |
| Modelo principal Z.AI | ZAI_API_KEY |
| Modelo principal Alibaba Qwen | ALIBABA_KEY |
| Watcher ou MELON com um modelo principal não-Anthropic | Chave do modelo principal e ANTHROPIC_API_KEY |
| Avaliações de autoridade e utilidade benigna do WorkspaceBench | OPENAI_API_KEY e ANTHROPIC_API_KEY |
Os experimentos fazem chamadas pagas aos provedores. Comece com uma tentativa para verificar o caminho completo:
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-userprompt N=1 P=1 bash bench.sh
Os experimentos principais do artigo usam Claude Sonnet 4.6. Depois que o smoke test for bem-sucedido, reproduza a linha completa com:
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-userprompt N=15 P=3 bash bench.sh
As saídas são gravadas em runs/<timestamp>__e2e-<experiment>/. O comando imprime um detalhamento por tentativa após a agregação; uma execução existente pode ser visualizada novamente com:
bash show-bench.sh runs/<run-directory>
Os experimentos end-to-end nomeados seguem:
<scenario>[-<defense>]-<setting>
| Termo do artigo | Token do comando |
|---|---|
| Exfiltração de BCC | bcc |
| Espelhamento de chat | chat |
| Redirecionamento de fonte | sr |
| Redirecionamento de marketplace | market |
| Atualização acionada pelo usuário | userprompt |
| Atualização periódica | heartbeat |
| Sem defesa | omita o token de defesa |
| Watcher no estilo ClawKeeper | auditor |
| Separação de privilégios | privsep |
| ClawGuard | clawguard |
| MELON | melon |
| ZoneClaw | zoneclaw |
Exemplos:
# Undefended BCC, user-triggered update
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-userprompt N=15 P=3 bash bench.sh
# ClawKeeper-style Watcher, periodic Chat Mirror update
MODEL=anthropic/claude-sonnet-4-6 \
E2E=chat-auditor-heartbeat N=15 P=3 bash bench.sh
# ZoneClaw, user-triggered source-redirection update
MODEL=anthropic/claude-sonnet-4-6 \
E2E=sr-zoneclaw-userprompt N=15 P=3 bash bench.sh
Todos os nomes válidos e seus pares de tarefas de injeção/exploração estão listados em experiments/e2e.tsv.
Para usar outro modelo suportado, substitua MODEL; por exemplo:
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
As execuções medidas arquivam o tempo de execução por fase, o uso do modelo e o uso de modelos auxiliares
junto com cada tentativa. As execuções do Alibaba Qwen também retêm um registro bruto de uso sem conteúdo
para que os tokens de raciocínio não sejam contados duas vezes pelo adaptador de compatibilidade. Consulte docs/measurement.md para o esquema e as regras de agregação.
O artigo avalia cada ablação na forma acionada pelo usuário de todos os quatro cenários. Os comandos de BCC são:
# w/o Zone
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-no-authority-metadata-userprompt N=15 P=3 bash bench.sh
# w/o Gatekeeper
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-auto-promotion-userprompt N=15 P=3 bash bench.sh
# w/o Cross-check
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-low-context-userprompt N=15 P=3 bash bench.sh
Substitua bcc por chat, sr ou market para os cenários restantes.
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
O artigo usa o cronograma de ataque repetido de BCC, dez sessões de atualização e checkpoints após 0, 1, 2, 3, 5 e 10 atualizações:
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
Os experimentos do WorkspaceBench exigem seus metadados Lite e arquivos de workspace:
uv run --with huggingface_hub python \
workspace-bench/evaluation/scripts/download_hf_assets.py \
--eval-root workspace-bench/evaluation \
--language en --lite --workspaces
Depois de baixar as tarefas upstream, gere os dois subconjuntos disjuntos de 15 tarefas do artigo com a semente de seleção fixa: