khaledkr07/prompt-injection
GitHub: khaledkr07/prompt-injection
该项目基准评估了多种防御机制在保护 LLM Agent 免受间接提示注入攻击方面的实际效果,揭示了安全性与可用性之间的深层权衡。
Stars: 0 | Forks: 0
# 提示注入防御基准测试
评估不同防御措施在保护 LLM agent 免受**间接提示
注入**攻击方面的效果——这种攻击将恶意指令隐藏在 agent 读取的数据中
(如文件、交易记录或电子邮件),而不是由用户直接输入。
基于 [AgentDojo](https://github.com/ethz-spylab/agentdojo) 构建,在 `banking`
测试套件中使用 `gpt-4o-mini` 进行测试,每种防御机制分别针对 90 种任务/注入场景进行了测试。
## 摘要(TL;DR)—— 研究发现
| 防御机制 | 正常任务成功率 ↑ | 攻击成功率 ↓ | 误拦截率 ↓ | 延迟 |
|---|---|---|---|---|
| Baseline(无防御) | 58.9% | 40.0% | — | 5.4 s |
| 工具过滤 | 58.9% | **73.3%** ⚠️ | ~0 | 6.0 s |
| Spotlighting | 60.0% | 40.0% | ~0 | 4.7 s |
| 确认机制(自定义) | 51.1% | 见下方注释 ↓ | 33.3% | 11.2 s |
**三个值得强调的发现:**
1. **工具过滤使攻击效果变得_更糟_(40% → 73%)。** 当合法任务需要使用
敏感工具(例如使用 `send_money` 支付账单)时,过滤机制会让该工具保持可用状态——
而这正是攻击者利用的同一工具。当攻击针对的是必需工具时,基于任务相关性进行白名单过滤无法
提供任何保护。
2. **Spotlighting 在此毫无作用(40% → 40%)。** 对不受信任的内容块进行界定可以阻止
*命令式*注入,但无法阻止*伪造数据*注入——这种攻击会夹带一个虚假的
账号,而 agent 会将其视为合法数据。
3. **自定义确认防御在物理层面上拦截了约 79% 的攻击**,但 AgentDojo 对其评分
较低,因为中断 agent 意味着合法任务也同样无法完成。它的实际
代价表现为 **33% 的误拦截率**——三分之一的合法任务被错误地
中止。这是安全性与实用性权衡的最纯粹体现。
**结论:**没有任何一种防御机制能够同时实现高可用性、*以及*低攻击成功率、*以及*低成本。
间接提示注入能够抵御简单的单层防御机制。
## 自定义防御机制
`confirmation_defense.py` 实现了*敏感操作前确认*机制:在任何
敏感工具运行之前,会有一个独立的 LLM 审批器检查该操作是否与用户的
**原始**请求相匹配。该审批器被刻意设计为永远无法看到被投毒的工具输出(即中毒数据)——因此
注入内容无法操纵审批决定。敏感工具包括:`send_money`、
`schedule_transaction`、`update_scheduled_transaction`、`update_password`、`update_user_info`、
`get_user_info`。
## 仓库结构
```
confirmation_defense.py # the custom confirmation defence (pipeline element)
patch_models.py # registers the model name into AgentDojo
patch_confirmation.py # wires the custom defence into AgentDojo's pipeline
run_baseline.py # runs each condition, task-by-task (crash-resilient)
run_toolfilter.py
run_spotlight.py
run_confirmation.py
run_confirmation_benign.py # no-attack runs, for false-blocking measurement
analyze_*.py # tally utility/security/latency from the JSON logs
logs/ # raw per-scenario result files (gitignored if large)
```
## 复现步骤
```
python3.12 -m venv venv && source venv/bin/activate
pip install "agentdojo[openai]"
# 将你的 key 添加到 .env:OPENAI_API_KEY=sk-...
python patch_confirmation.py # register the custom defence
python run_baseline.py # baseline
python run_confirmation.py # custom defence
python analyze_baseline.py # print the numbers
```
需要 OpenAI API 密钥。`.env` 文件已被配置在 gitignore 中——切勿提交密钥。
标签:AI安全, Chat Copilot, DLL 劫持, Web报告查看器, 反取证, 大语言模型, 安全评估, 提示词注入防御, 逆向工具