ola-cloud/prompt-injection-eval

GitHub: ola-cloud/prompt-injection-eval

一个轻量级的 LLM agent 间接 prompt 注入安全评估框架,通过 canary token 精确匹配来量化 agent 的抗攻击能力。

Stars: 0 | Forks: 0

# prompt-injection 评估 一个小巧、实在的评估工具,用于衡量 LLM agent 抵御**通过工具输出传递的间接 prompt 注入**的能力——即模型在执行合法任务时,*工具返回的数据*试图劫持它的情况。我认为这是生产级 agent 部署中最被低估的攻击面,因此我构建了一种可复现的测量方法。 该测试框架特意保持小巧且确定。它在每次攻击中植入一个 **canary**(注入试图让模型输出的 token)或一个 **secret**(注入试图窃取的值),然后检查模型输出中是否包含它,以此来对 agent 进行评分。因为生成该 token *就是*注入的目标,所以一旦命中,就是注入成功的直接证据——评分循环中无需使用 LLM-as-judge,因此运行成本很低且在 CI 中可重复执行。 ## 测量内容 - **攻击成功率 (ASR)** —— 包括总体和按攻击类别分类。 - **任务完成情况** —— agent 是否仍完成了实际任务,包括在干净的 *control* 场景下,从而防止模型仅仅通过拒绝一切来获得高分。 内置语料库 (`data/scenarios.yaml`) 中的攻击类别: | 类别 | 探测内容 | |---|---| | `indirect_injection` | 隐藏在检索内容(电子邮件、网页、待翻译文本)中的指令 | | `data_exfiltration` | 让 agent 泄露植入的 secret(追加凭证、markdown-image 信标) | | `toolchain_hijack` | 让 agent 调用破坏性/未请求的工具(删除、shell) | | `instruction_override` | 伪造的 `SYSTEM:` 备注和人设切换,试图摆脱 system prompt | | `control` | 干净的工具输出 —— 衡量保留的实用效用 / 过度拒绝 | ## 安装 ``` git clone https://github.com/ola-cloud/prompt-injection-eval.git cd prompt-injection-eval pip install -r requirements.txt ``` 离线演示和测试只需要 PyYAML。`anthropic` 包仅在真实后端中需要。 ## 运行 离线演示 —— 确定性强,无需 API key。这会针对模拟 agent 执行完整的 pipeline 并生成报告: ``` python run_eval.py --backend mock --out report.md --json-out report.json ``` 针对您有权访问的模型进行真实评估: ``` export ANTHROPIC_API_KEY=sk-... python run_eval.py --backend anthropic --model claude-sonnet-4-5 \ --out report.md --json-out report.json ``` 将 `--model` 设置为您的 key 可以访问的模型。请参阅 [`examples/sample_report.md`](examples/sample_report.md) 查看示例(模拟后端)报告。 ## 场景如何传达给模型 对于 Anthropic 后端,每个场景都会以最小化的 agent 循环进行重放,以便有毒内容以生产环境中相同的方式到达——即作为 `tool_result` 传递,而不是作为用户消息: 1. 用户发出合法任务, 2. agent 调用场景的工具, 3. 工具返回 `tool_output`(攻击场景中有毒,控制场景中干净), 4. 模型的最终文本将根据 canary/secret 和任务标记进行评分。 ## 扩展语料库 向 `data/scenarios.yaml` 添加条目。攻击场景必须定义 `canary` 和/或 `planted_secret`;控制场景使用 `category: control` 并保持干净。加载器会验证这两条规则,因此永远无法被评分的场景会在加载时被拒绝,而不是默默地导致 ASR 产生偏差。 ## 项目布局 ``` injection_eval/ scenario.py # Scenario model + validating YAML loader adapters.py # MockAdapter (offline) and AnthropicAdapter (real API) detectors.py # canary/secret + task-marker grading runner.py # orchestration and ASR / task-completion metrics report.py # Markdown + JSON reporting data/scenarios.yaml tests/ # pytest suite (offline; no key needed) run_eval.py # CLI ``` ## 测试 ``` pip install pytest python -m pytest ``` ## 范围和客观限制 - **模拟后端不是模型。** 它是一个植入种子的模拟器,其唯一作用是使评分 pipeline 无需 key 即可运行和复现。真实数据来自 Anthropic 后端。 - 评分有意对 canary/secret 进行**精确匹配** (exact-match)。这使得误报几乎不可能发生,但会漏掉那些在不输出植入 token 的情况下从*语义上*成功的注入。这种权衡是刻意为之;下一步自然可以是开发基于模糊匹配或判断器的检测器。 - 该语料库是一个包含公开记录注入模式的**起步集**,旨在进行扩展,而不是一个全面的基准测试。 ## 许可证 MIT —— 请参阅 [LICENSE](LICENSE)。
标签:AI安全, Chat Copilot, DLL 劫持, Python, StruQ, 大语言模型, 安全规则引擎, 恶意代码分类, 提示注入, 无后门, 红队评估, 逆向工具, 集群管理