agentdojo
ETH Zurich 开源的 LLM Agent 安全基准测试框架,量化评估 Prompt Injection 攻击与防御策略的有效性
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
ETH Zurich 开源的 LLM Agent 安全基准测试框架,量化评估 Prompt Injection 攻击与防御策略的有效性
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2024 年 6 月,苏黎世联邦理工学院(ETH Zurich)安全研究实验室(SPY Lab)发布了一个令人不安的发现:在他们设计的测试环境中,大多数主流 LLM Agent 都会在用户毫无察觉的情况下,被恶意注入的指令"劫持"——你以为 AI 在帮你查资料,它却在悄悄执行第三方植入的操作。这不是理论上的假设,而是一个经过严格实验验证的结论。这套测试环境,就是 AgentDojo。
传统的 AI 安全研究主要关注模型本身的输出安全性——比如模型会不会生成有害内容。但随着 GPT-4、Claude 等大模型被广泛接入各类 Agent 应用(自动执行代码、操作数据库、发送邮件、浏览网页),一个全新的攻击面出现了:prompt injection(提示词注入)。
攻击者只需要在 AI 代理能读取的任何文本中嵌入恶意指令——比如一封邮件的签名、一段网页内容、甚至一个文件名——就能让 AI 在执行正常任务时"顺便"执行攻击者植入的命令。在传统软件中,这是经典的"代码注入"漏洞;在 LLM Agent 时代,它的表现形式更为隐蔽,危害也更大。
ETH Zurich 的研究团队认为,对抗这种威胁的第一步,是有一个可量化、可复现的评估基准——这就是 AgentDojo 的诞生动机。Dojo 在日语中意为"道场",既是习武之地,也是检验实力之所。这个命名暗示了项目的核心目标:构建一个标准化的"擂台",让各种攻击和防御手段在这里公开较量。
AgentDojo 是一个动态评估环境,专门用于测试 LLM Agent 在面对 prompt injection 攻击时的表现,以及各种防御机制的有效性。项目由 ETH Zurich 的六位研究者联合开发,发表在 arXiv(论文 ID:2406.13352),并在 GitHub 上开源了完整的基准测试框架。
从定位上看,AgentDojo 属于 AI Safety / Security Benchmark 类别,核心用户是 AI 安全研究者和 LLM 应用开发者。它的价值在于提供了一套标准化的测试流程:你不用自己搭建测试环境,直接用 AgentDojo 就能评估你部署的 Agent 面对注入攻击时的脆弱程度,以及你选择的防御策略是否有效。
1. 攻击系统(Attacks)
AgentDojo 实现了多种 prompt injection 攻击策略:
每种攻击都封装为独立模块,继承自 BaseAttack 类,方便研究者扩展新的攻击手法。
2. 防御系统(Defenses)
防御机制以"管道元素"(Pipeline Element)的形式嵌入 Agent 执行管道:
防御和攻击是正交的——你可以将任意攻击策略与任意防御策略组合,跑出完整的对抗矩阵。
3. 基准测试套件(Task Suites)
AgentDojo 提供了多个预构建的任务套件,每个套件模拟真实场景:
| 套件 | 模拟场景 | 包含任务数 |
|---|---|---|
| workspace | 办公效率场景(Gmail、Google Docs 等) | 多步任务链 |
| slack | 企业通讯场景 | 消息读写/权限操作 |
| banking | 金融交易场景 | 账户查询/转账操作 |
| travel | 旅行规划场景 | 航班/酒店预订 |
| webbase | Web 浏览场景 | 网页内容提取/表单提交 |
每个任务包含**用户任务(User Task)和注入任务(Injection Task)**两部分。用户任务是 Agent 应该完成的合法操作;注入任务则是攻击者试图让 Agent 执行的操作。基准测试通过比对 Agent 最终行为与注入任务目标的吻合程度,来量化攻击成功率。
AgentDojo 的代码架构设计非常清晰,整体采用管道(Pipeline)模式,将 Agent 执行流程拆解为若干可插拔的阶段:
User Input → [Defense Elements] → LLM → [Defense Elements] → Tool Execution → Output
核心模块:
src/agentdojo/agent_pipeline/):主管道实现,负责协调 LLM 调用、消息传递和工具执行。支持 OpenAI、Anthropic、Cohere、Google 四家主流 LLM 提供商。functions_runtime.py):沙箱化的函数执行环境,管理工具注册、参数校验和执行隔离。task_suite/):任务套件框架,定义任务结构、验证逻辑和评分标准。attacks/):攻击策略模块,提供多种注入手法的标准化实现。scripts/):包含 benchmark.py 这个核心脚本,用于运行完整的基准测试并生成结果报告。依赖技术栈:
AgentDojo 是一个面向开发者的 Python 库,而非面向终端用户的 Web 应用。它没有图形界面,所有操作都通过命令行完成。
安装(极简):
pip install agentdojo
# 如需使用 prompt injection 检测器
pip install "agentdojo[transformers]"
运行基准测试:
python -m agentdojo.scripts.benchmark -s workspace \
-ut user_task_0 -ut user_task_1 \
--model gpt-4o-2024-05-13 \
--defense tool_filter --attack tool_knowledge
这个命令指定了测试套件(workspace)、具体任务(task_0 和 task_1)、使用的 LLM(GPT-4o)、防御策略(tool_filter)和攻击策略(tool_knowledge)。运行结果会输出每个任务的成功率、平均步数等指标。
结果查看:测试结果可上传到 AgentDojo 官方结果页面(agentdojo.spylab.ai/results/)进行可视化对比。平台支持不同模型、不同防御策略之间的横向比较。
1. 攻击手法依赖 Agent 读取外部文本
AgentDojo 的攻击前提是 Agent 必须能够读取包含恶意指令的外部文本(如邮件正文、网页内容)。如果 Agent 的上下文不包含这些文本,攻击就不会生效。这意味着 AgentDojo 模拟的是"被动读取"场景,对"主动浏览"场景(如网页 Agent 点击链接)覆盖不足。
2. 防御评估不完整
Tool Filter 是目前 AgentDojo 评估最充分的防御手段,但其他防御策略(如 Prompt Guard)的测试覆盖相对有限。研究者在论文中也承认,这套评估体系还不能代表所有可能的防御思路。
3. API 尚未稳定
项目 README 明确标注"API 仍在开发中,未来可能变化"。对于需要依赖其 API 构建生产系统的开发者来说,这是一个风险。
4. 基准测试的代表性存疑
AgentDojo 的任务套件虽然覆盖了多个场景,但每个套件的任务数量有限(通常每个套件 10-30 个任务)。这是否足以代表真实世界中的复杂交互模式,学界存在一定争议。
AgentDojo 的出现填补了 LLM Agent 安全评估领域的一个重要空白。在它之前,研究者评估 Agent 安全性主要靠手工构造测试用例,缺乏标准化工具。AgentDojo 提供了一个可复现、可扩展的基准框架,推动了这个领域从"感性认知"到"量化评估"的转变。
从趋势上看,prompt injection 攻击正随着 LLM Agent 的普及而快速增长。2025 年以来,多个针对商业 Agent 系统的实际攻击案例被披露,引起了业界对 Agent 安全的广泛关注。AgentDojo 作为首个专门针对这一场景的标准化基准,其研究方向代表了一个重要趋势:未来的 AI 安全不仅要看模型本身,还要看整个 Agent 执行链条的安全性。
| 角色 | 建议 |
|---|---|
| AI 安全研究者 | 直接用 AgentDojo 的 benchmark 脚本跑对抗矩阵,重点关注不同攻击策略的相对有效性 |
| LLM 应用开发者 | 用 AgentDojo 评估你所使用的 Agent 框架(LangChain/LangGraph)面对注入攻击时的脆弱程度 |
| 学生/学习者 | 阅读论文 + 源码,理解攻击原理,然后尝试自己实现一个新的攻击或防御策略 |