
OpenClaw 스타일 컴퓨터 사용 에이전트에 대한 지속적 메모리 공격을 위한 벤치마크 및 방어 코드로, 메모리 구역화 완화, 공격 시나리오, 평가 스크립트를 포함합니다.
ZoneClaw: OpenClaw 스타일 컴퓨터 사용 에이전트 간의 메모리 구역화를 통한 지속적 메모리 공격 완화 논문의 실험 코드입니다.
이 저장소에는 논문에서 사용된 벤치마크 작업, 방어 구현, 평가 스크립트가 포함되어 있습니다. 이 벤치마크는 OpenClaw 스타일 컴퓨터 사용 에이전트의 세션 간 지속적 메모리 공격을 연구합니다. 두 가지 공격 클래스를 다룹니다:
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 |
실험은 유료 제공자 호출을 수행합니다. 전체 경로를 확인하기 위해 하나의 시도로 시작하세요:
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 |
예시:
# 방어되지 않은 BCC, 사용자 트리거 업데이트
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-userprompt N=15 P=3 bash bench.sh
# ClawKeeper 스타일 Watcher, 주기적 Chat Mirror 업데이트
MODEL=anthropic/claude-sonnet-4-6 \
E2E=chat-auditor-heartbeat N=15 P=3 bash bench.sh
# ZoneClaw, 사용자 트리거 소스 리다이렉션 업데이트
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를 참조하세요.
논문은 네 가지 시나리오 모두의 사용자 트리거 형태에 대해 각 절제를 평가합니다. BCC 명령은 다음과 같습니다:
# Zone 없음
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-no-authority-metadata-userprompt N=15 P=3 bash bench.sh
# Gatekeeper 없음
MODEL=anthropic/claude-sonnet-4-6 \
E2E=bcc-zoneclaw-auto-promotion-userprompt N=15 P=3 bash bench.sh
# 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
업스트림 작업을 다운로드한 후, 고정된 선택 시드로 논문의 두 개의 서로소인 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 에이전트 어댑터
experiments/ 엔드투엔드 레지스트리 및 반복 세션 매니페스트
scripts/ WorkspaceBench, 반복 세션, 분석 러너
tasks/ 공격, 기준선, 절제, ZoneClaw 작업 정의
harbor/ 고정된 Harbor 서브모듈
openclaw/ 고정된 OpenClaw 서브모듈
workspace-bench/ 고정된 WorkspaceBench 서브모듈