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报告查看器, 反取证, 大语言模型, 安全评估, 提示词注入防御, 逆向工具