RUC-NLPIR/ClawTrojan
GitHub: RUC-NLPIR/ClawTrojan
ClawTrojan 是一款用于防御代理工具中持久性提示注入木马攻击的工具。
Stars: 15 | Forks: 0
ClawTrojan
在本地代理工具中基准测试持久性提示注入木马,
以 DASGuard 作为动态防御。
本存储库包含论文
**“从提示注入到持久控制:防御代理工具对抗木马后门”** 的公开代码和数据。它包括 ClawTrojan 基准、DASGuard 防御、沙盒评估代码、基线适配器和论文实验的重现脚本。
## 目录
- [概述](#overview)
- [包含内容](#what-is-included)
- [基准测试](#benchmark)
- [DASGuard](#dasguard)
- [结果快照](#results-snapshot)
- [设置](#setup)
- [烟雾测试](#smoke-checks)
- [重现论文规模运行](#reproducing-paper-scale-runs)
- [数据说明](#data-note)
- [引用](#citation)
## 概述
LLM 代理越来越多地被用作本地代理工具中的操作工具。它们可以读取和写入项目文件、调用工具,并在会话之间重用工作区状态。这些功能创建了一个新的攻击面:攻击者可以在文件或工具输出中放置提示注入,诱导代理存储它,并在以后触发它。
ClawTrojan 研究了这个多步骤的木马设置。单个步骤可能看起来无害,但完整的轨迹可以将不受信任的文本转换为工作区中的持久控制内容。该基准旨在衡量代理或防御是否可以在有害且不可逆的结果发生之前停止链式反应。
DASGuard 是论文中提出的防御。它扫描敏感本地文件中的控制类文本,追踪该文本的来源,并删除或阻止非受信任来源的控制内容。
## 包含内容
- `claw_trojan/`: ClawTrojan 样本、步骤注释、可运行的工作区、技能包和合成用户配置文件。
- `agent_eval/`: DASGuard、沙盒执行、基线适配器、AgentDojo 适配器、判断和指标。
- `configs/`: 默认沙盒和 DASGuard 配置文件。
- `scripts/`: 论文规模碎片准备、工作执行、结果合并和所选基线辅助脚本。
- `tests/`: DASGuard 和基线布线的集中回归测试。
- `figures/`: README 图像和主图表的可编辑 draw.io 源文件。
有意排除大型原始输出、本地 `.env` 文件、缓存的字节码、IDE 文件和特定于机器的训练或评估日志。
## 基准测试
ClawTrojan 模拟本地代理工具中的攻击,其中项目文件、内存、下载内容、工具输出和代理能力在回合之间持续存在。它将攻击表示为轨迹,而不是单个恶意提示。
发布的基准涵盖了文档伪造、任务偏差、外部副作用、未经授权的披露以及用于假阳性测量的清洁或边缘控制。
每个可运行环境记录可见的用户请求、隐藏指令放置、语义攻击阶段以及是否是停止不可逆结果的最后机会。这支持早期检测分析和完整链式攻击成功测量。
## DASGuard
DASGuard 是放置在工具边界处的动态防御。对于每个提出的工具调用或文件操作,它:
1. 将内容来源标记为受信任、清洁工作区状态或不受信任;
2. 在更改的内容中检测携带控制的跨度;
3. 将每个跨度分配给来源、目的地和控制角色;
4. 阻止受保护的不安全操作或提交清洗后的影子副本。
这种设计针对步骤局部防御的故障模式:防御可能阻止明显的有害最终操作,但可能错过早期写入以放置后门的操作。DASGuard 在轨迹上携带来源标签和先前发现,以便在控制内容成为持久工作区状态之前将其删除。
## 结果快照
论文报告称,ClawTrojan 在 GPT-5.4 的 OpenClaw 风格模拟工作区中达到 95.5% 的 ASR,而现有的单回合提示注入攻击在同一模型上产生接近零的 ASR。这突出了持久工作区控制与一次性提示注入是不同的威胁。
DASGuard 通过结合运行时攻击阻止和对工作区的清洗提交来降低步骤级 ASR 和完整链式 ASR。
## 设置
```
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
```
仅填写您打算运行的模型后端所需的 API 密钥。
DASGuard 可以使用确定性的 `hashing` 嵌入后端进行本地烟雾测试,而无需网络嵌入服务。
## 烟雾测试
导出基准标签:
```
python run.py trojan-export \
--envs-root ./claw_trojan/envs \
--output-path ./outputs/trojan_gold.jsonl
```
使用本地哈希嵌入运行 DASGuard 检测:
```
python run.py dasguard-detect \
--envs-root ./claw_trojan/envs \
--embedding-backend hashing \
--output-path ./outputs/dasguard_pred.jsonl
```
运行集中测试:
```
pytest tests/test_dasguard_assessment.py tests/test_dasguard_shadow_gate.py
```
## 重现论文规模运行
准备正分割碎片和命令清单:
```
python scripts/prepare_paper_eval_shards.py \
--samples-root ./claw_trojan/samples \
--envs-root ./claw_trojan/envs \
--output-root ./outputs/paper_eval \
--num-shards 8 \
--copy-envs \
--force
```
运行过滤后的工作切片:
```
python scripts/run_paper_eval_worker.py \
--manifest ./outputs/paper_eval/manifests/commands_no_defense_bases.jsonl \
--condition no_defense \
--worker-id 0 \
--num-workers 1
```
合并完成的碎片输出:
```
python scripts/merge_paper_eval_results.py \
--input-root ./outputs/paper_eval/runs \
--output-root ./outputs/paper_eval/merged \
--table-dir ./outputs/paper_eval/tables
```
## 数据说明
基准工作区包含合成用户配置文件、模拟凭证、虚假联系人和注入的攻击字符串,因为这些是评估任务的一部分。它们是生成场景工件,而不是真实用户数据。
工作存储库中可选的合成 `dataset/` 生成器不包括在本发布包中,因为它不是重现 ClawTrojan 沙盒结果所必需的。
## 引用
如果您在研究中使用了 ClawTrojan 或 DASGuard,请引用该论文:
```
@misc{tan2026promptinjectionpersistentcontrol,
title = {From Prompt Injection to Persistent Control: Defending Agentic Harness Against Trojan Backdoors},
author = {Jiejun Tan and Zhicheng Dou and Xinyu Yang and Yuyang Hu and Yiruo Cheng and Xiaoxi Li and Ji-Rong Wen},
year = {2026},
eprint = {2605.31042},
archivePrefix = {arXiv},
primaryClass = {cs.CR},
url = {https://arxiv.org/abs/2605.31042},
note = {Code: \url{https://github.com/RUC-NLPIR/ClawTrojan}; Dataset: \url{https://huggingface.co/datasets/zstanjj/ClawTrojan}}
}
```
标签:arXiv, DAST, DNS解析, HuggingFace, LLM 代理, MIT 许可, Python, 动态防御, 安全测试, 开源项目, 恶意软件分析, 持续控制, 提示注入, 攻击性安全, 攻击表面, 无后门, 沙箱评估, 逆向工具, 集群管理