ZoneClaw:通过在 OpenClaw 风格计算机使用代理之间建立内存分区来缓解持久内存攻击的实验代码。
本仓库包含论文中使用的基准任务、防御实现和评估脚本。该基准研究 OpenClaw 风格计算机使用代理中的跨会话持久内存攻击。它涵盖两类攻击:
ZoneClaw 将保留的外部观察与具有权威性的内存分离,然后使用角色分离的代理来观察、分类并对持久信息采取行动。
此纯代码版本不包含实验结果。论文的转录记录、 验证器证据和摘要可在随附的工件仓库中获取。
uv请至少预留 20 GB 的可用磁盘空间用于依赖项、Docker 镜像和生成的运行结果。我们建议为并行实验配备 16 GB 内存。初始设置通常需要 10-20 分钟,具体取决于网络和 Docker 构建缓存。
如需匿名下载,请解压 ZIP,在其顶层目录中打开终端,然后运行:
bash setup.sh
设置脚本会直接从其公共上游仓库获取固定版本的 OpenClaw、Harbor 和 WorkspaceBench 依赖项。无需访问原始私有仓库。
对于 Git 检出,请将下面的 <repository-url> 替换为仓库的克隆 URL:
git clone --depth 1 --recurse-submodules --shallow-submodules \
<repository-url> ZoneClaw-code
cd ZoneClaw-code
bash setup.sh
该脚本会验证本地工具和 Docker 守护进程,构建所需的镜像,并根据 .env.example 创建 .env。它会在本地生成 OPENCLAW_GATEWAY_TOKEN;仅需编辑 .env 来设置运行所需的提供商密钥。请勿提交 .env。
| 实验 | 所需 API 密钥 |
|---|---|
| Anthropic 主模型 | ANTHROPIC_API_KEY |
| OpenAI 主模型 | OPENAI_API_KEY |
| Z.AI 主模型 | ZAI_API_KEY |
| 阿里巴巴 Qwen 主模型 | ALIBABA_KEY |
| 使用非 Anthropic 主模型的 Watcher 或 MELON | 主模型密钥和 ANTHROPIC_API_KEY |
| WorkspaceBench 权威性和良性效用评估 | OPENAI_API_KEY 和 ANTHROPIC_API_KEY |
实验会产生付费的提供商调用。请先运行一次试验以验证完整路径:
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-userprompt N=1 P=1 bash bench.sh
论文的主要实验使用 Claude Sonnet 4.6。冒烟测试成功后,使用以下命令复现完整行:
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-userprompt N=15 P=3 bash bench.sh
输出会写入 runs/<timestamp>__e2e-<experiment>/。该命令在聚合后会打印每次试验的明细;可以使用以下命令再次查看已有的运行结果:
bash show-bench.sh runs/<run-directory>
命名的端到端实验遵循以下格式:
<scenario>[-<defense>]-<setting>
| 论文术语 | 命令标记 |
|---|---|
| BCC 数据外泄 | bcc |
| 聊天镜像 | chat |
| 来源重定向 | sr |
| 市场重定向 | market |
| 用户触发的更新 | userprompt |
| 周期性更新 | heartbeat |
| 无防御 | 省略防御标记 |
| ClawKeeper 风格 Watcher | auditor |
| 权限分离 | privsep |
| ClawGuard | clawguard |
| MELON | melon |
| ZoneClaw | zoneclaw |
示例:
# 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
所有有效名称及其注入/利用任务对都列在 experiments/e2e.tsv 中。
要使用其他受支持的模型,请替换 MODEL;例如:
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
已测量的运行会随每次试验一起归档各阶段运行时间、模型使用情况和辅助模型使用情况。阿里巴巴 Qwen 运行还会额外保留一份无内容的原始使用台账,以免推理令牌被兼容适配器重复计算。有关模式和聚合规则,请参阅 docs/measurement.md。
论文在所有四种场景的用户触发形式上评估每个消融。BCC 命令如下:
# 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
对于其余场景,请将 bcc 替换为 chat、sr 或 market。
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
论文使用 BCC 重复攻击计划、十次更新会话,以及在第 0、1、2、3、5 和 10 次更新后的检查点:
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
WorkspaceBench 实验需要其 Lite 元数据和工作区文件:
uv run --with huggingface_hub python \
workspace-bench/evaluation/scripts/download_hf_assets.py \
--eval-root workspace-bench/evaluation \
--language en --lite --workspaces
下载上游任务后,使用固定选择种子生成论文的两个不相交的 15 任务子集:
WB_SUBSETS="$PWD/workspace-bench/evaluation/.generated/memory_authority_probe/subsets"
python3 scripts/workspacebench_privilege_probe.py make-subset \
--n 15 --seed 20260709 --language en \
--dest "$WB_SUBSETS/lite-en-15-seed20260709"
python3 scripts/workspacebench_privilege_probe.py make-subset \
--n 15 --seed 20260709 --language en \
--exclude-selection "$WB_SUBSETS/lite-en-15-seed20260709/selection.json" \
--dest "$WB_SUBSETS/lite-en-15-extension-seed20260709"
在两个子集上分别运行四种权威性条件:
for batch in lite-en-15-seed20260709 lite-en-15-extension-seed20260709; do
for condition in \
benign-instruction memory-injection \
memory-instruction-conflict intra-memory-conflict
do
python3 scripts/workspacebench_privilege_probe.py run \
--docker-run \
--condition "$condition" \
--probe-kind risk-assumption-section \
--seed-file all \
--harness openclaw \
--model gpt-5.5 \
--dataset lite \
--task-path "workspace-bench/evaluation/.generated/memory_authority_probe/subsets/$batch" \
--task-parallel-workers 3 \
--run-name "Authority-${batch}-${condition}"
done
done
该包装器保留了 WorkspaceBench 的运行器和任务构建。论文的效用值使用 WorkspaceBench 的官方评分标准评判器。
此运行器在相同的 30 个良性任务上评估无防御系统和所有五种防御,分为三个不相交的 10 任务批次。它运行上游任务收集器和评分标准评判器:
for subset in pilot10 pilot20-add10 pilot30-add10; do
for condition in undefended watcher privsep clawguard melon zoneclaw; do
python3 scripts/workspacebench_benign_utility.py all \
--subset "$subset" \
--condition "$condition" \
--workers 2 \
--judge-workers 2
done
done
分析脚本接受外部提供的运行包,这些运行包组织在
attack-evaluation/ 和 mitigation-evaluation/ 目录中。要分析从工件仓库
下载的包:
python3 scripts/analyze_memory_boundaries.py \
--artifacts-root /path/to/experiment-runs \
--output-dir runs/analysis/memory-boundaries
agents/ Harbor agent adapters
experiments/ End-to-end registry and repeated-session manifests
scripts/ WorkspaceBench, repeated-session, and analysis runners
tasks/ Attack, baseline, ablation, and ZoneClaw task definitions
harbor/ Pinned Harbor submodule
openclaw/ Pinned OpenClaw submodule
workspace-bench/ Pinned WorkspaceBench submodule