ZoneClaw: OpenClawスタイルのコンピュータ利用エージェント間でメモリゾーニングを確立することによる永続メモリ攻撃の緩和のための実験コード。
このリポジトリには、論文で使用されたベンチマークタスク、防御実装、評価スクリプトが含まれています。このベンチマークは、OpenClawスタイルのコンピュータ利用エージェントにおけるクロスセッションの永続メモリ攻撃を研究しています。以下の2つの攻撃クラスを対象としています:
ZoneClawは、保持された外部観察と権限を伴うメモリを分離し、役割分離されたエージェントを使用して永続情報を観察、分類、および行動します。
このコードのみのエディションには実験結果は含まれていません。論文のトランスクリプト、 検証エビデンス、および要約は、付随するアーティファクトリポジトリで入手できます。
uv依存関係、Dockerイメージ、および生成された実行のために、少なくとも20 GBの空きディスク容量を確保してください。並列実験には16 GBのRAMを推奨します。初期セットアップは通常、ネットワークとDockerビルドキャッシュに応じて10〜20分かかります。
匿名ダウンロードの場合、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 |
| Alibaba Qwenメインモデル | ALIBABA_KEY |
| 非Anthropicメインモデルを使用したWatcherまたはMELON | メインモデルキーとANTHROPIC_API_KEY |
| WorkspaceBenchの権限および良性ユーティリティ評価 | OPENAI_API_KEYとANTHROPIC_API_KEY |
実験は有料のプロバイダー呼び出しを行います。完全なパスを検証するために、まず1回の試行から始めてください:
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
測定された実行は、各試行とともにフェーズごとのランタイム、モデル使用量、およびヘルパーモデル使用量をアーカイブします。Alibaba Qwenの実行はさらに、コンテンツフリーの生の使用量台帳を保持するため、推論トークンが互換性アダプターによって二重にカウントされません。スキーマと集計ルールについてはdocs/measurement.mdを参照してください。
論文では、4つのシナリオすべてのユーザートリガー形式で各アブレーションを評価しています。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反復攻撃スケジュール、10回の更新セッション、および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
アップストリームタスクをダウンロードした後、固定された選択シードで論文の2つの互いに素な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"
両方のサブセットで4つの権限条件をそれぞれ実行します:
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の良性タスクで未防御システムと5つの防御すべてを評価し、3つの互いに素な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