Can Indirect Prompt Injection Attacks Be Detected and Removed?
会议: ACL 2025
arXiv: 2502.16580
代码: GitHub
机构: NUS & HKUST
领域: AI安全
关键词: indirect prompt injection, detection, removal, filtering, segmentation, extraction, over-defense
一句话总结
本文系统研究间接 prompt injection 攻击的检测与移除:构建评估基准,发现现有检测模型对间接攻击表现不佳但专门训练的模型可达 99% 准确率,提出分割移除和抽取移除两种方法,并将检测+移除组合为过滤管道,有效降低间接 prompt injection 的攻击成功率。
研究背景与动机
现状
- Prompt injection 攻击分为直接攻击(用户即攻击者)和间接攻击(恶意指令注入外部数据源)
- 间接攻击更具实际威胁:攻击者将恶意指令嵌入网页/文档,LLM 通过搜索引擎检索后被误导
- 间接攻击可实现多种目的:钓鱼、广告推广、舆论操纵等
- 现有防御多关注直接攻击,间接攻击的检测和移除研究严重不足
痛点
- 现有检测模型(ProtectAI、Prompt Guard、Llama Guard)主要针对直接攻击训练,对间接攻击检测率低
- 检测后的"怎么办"几乎无人研究——检测到注入后如何移除恶意内容、保留有用信息?
- 过度防御(over-defense)问题:检测模型将干净文档误判为注入文档,影响正常使用
- 注入位置(头部/中部/尾部)对检测性能有显著影响,但现有方法未考虑
核心洞察
- 间接 prompt injection 的检测需要专门训练的模型,通用安全模型不够用
- 检测和移除应该组合为统一的过滤管道
- 过度防御问题主要出现在域外文档上,域内几乎不存在
- 不同注入位置需要不同的移除策略:分割适合头部/中部,抽取适合尾部
方法详解
整体框架
两阶段过滤管道:第一阶段用检测模型判断文档是否被注入;第二阶段对检测到的注入文档进行移除处理。最终将处理后的干净文档送给 LLM 执行原始任务。
关键设计 1:检测模型训练
- 分类模型:使用 DeBERTa,取第一个 hidden state h1 映射到二分类 logits
- 生成模型:使用 Qwen2-0.5B/1.5B,取最后 hidden state,映射到词表 logits 中"yes"/"no"的位置
- 训练数据构造:40% 干净文档,15% 头部注入,30% 中部注入,15% 尾部注入
- 仅使用最简单的 Naive Attack 构造训练数据,但对其他攻击类型有泛化能力
关键设计 2:分割移除方法 (Segmentation Removal)
- 将注入文档按句子分割为多个片段
- 对每个片段使用检测模型单独分类
- 丢弃被判定为包含注入指令的片段
- 将剩余干净片段重新拼接为处理后文档
- 优势:充分利用已训练的文档级检测模型的能力
- 训练抽取模型直接从文档中识别和提取注入指令
- 训练目标包含三个损失项:标准语言建模损失 + 首 token 预测 + 末 token 预测
- 提取后计算最长公共子串,从原文档中删除
- 优势:对尾部注入效果特别好(模型善于识别文档末尾的异常内容)
基准数据集构建
- 基于 SQuAD 和 TriviaQA 的 QA 数据构建评估基准(Inj-SQuAD、Inj-TriviaQA)
- 每个样本包含:原始指令 p、干净文档 d、答案 a、注入指令 x、探测 y
- 注入指令覆盖钓鱼、广告、宣传三类真实攻击目的(用 GPT-4o 生成)
- 注入位置覆盖头部、中部、尾部
实验关键数据
检测性能对比
| 模型 |
Inj-SQuAD 平均准确率 |
Inj-TriviaQA 准确率 |
| Llama3-8B-Instruct |
78.74% |
严重过度防御 |
| Llama-Guard3-8B |
最高 39.11% |
— |
| ProtectAI-detector |
仅对 Ignore 攻击有效 |
— |
| DeBERTa (ours) |
— |
99.12% |
| Qwen2-1.5B (ours) |
— |
97.20% |
移除性能(Table 2,Inj-TriviaQA)
| 方法 |
Naive 移除率 |
Ignore |
Fakecom |
Combined |
| Segment-DeBERTa (头) |
84.66% |
100% |
79.88% |
100% |
| Segment-Qwen2-1.5B (头) |
96.33% |
98.22% |
96.66% |
98.11% |
| Extract-Qwen2-1.5B (尾) |
100% |
98.44% |
97.66% |
94.66% |
过度防御率(Table 1)
| 模型 |
域内(SQuAD→SQuAD) |
域外(SQuAD→TriviaQA) |
| DeBERTa-SQuAD |
0.0% |
12.44% |
| Qwen2-1.5B-SQuAD |
0.0% |
11.11% |
| Qwen2-0.5B-SQuAD |
0.0% |
27.33% |
过滤管道 vs 基线防御(ASR↓)
| 方法 |
Naive |
Ignore |
Escape |
Fakecom |
| Sandwich |
高 |
高 |
高 |
高 |
| StruQ (fine-tune) |
低 |
低 |
中 |
高 |
| Filtering (ours) |
低 |
低 |
低 |
中 |
关键发现
- 现有模型对间接攻击无效:Llama Guard 最高仅 39%,ProtectAI 仅对特定攻击有效
- 专门训练效果显著:DeBERTa 在 Naive Attack 上训练后可达 99% 检测率,且对其他攻击泛化
- 过度防御主要在域外:域内过度防御率 0%,域外最高 27%;更强模型、更流畅文档更不易过度防御
- 分割 vs 抽取互补:分割整体更好,但抽取对尾部注入(最有效的攻击位置)达到 100% 移除率
- 移除不损害信息:过度防御导致的文档损坏几乎不影响原始 QA 任务的回答准确率
- 训练数据注入位置很重要:仅用单一位置训练的模型难以泛化到其他位置
亮点与洞察
- 首个系统研究间接 prompt injection 检测+移除的工作,填补了重要研究空白
- 过滤管道思路实用且模块化:检测和移除可以独立升级
- 小模型高效防御:DeBERTa(110M)和 Qwen2(1.5B)比 8B 级 Guard 模型效果好得多
- 在仅用 Naive Attack 训练的前提下对 Ignore、Escape 等攻击泛化良好
局限性 / 可改进方向
- 对 Fake Completion Attack 的泛化能力有限(因为其注入方式与 Naive 差异较大)
- 过度防御在域外场景仍然显著(12-27%),限制了跨领域部署
- 分割移除依赖检测模型的句级分类能力,而该模型是在文档级任务上训练的
- 未考虑攻击者主动规避检测(如将注入指令分散到多个句子中)
- 基准数据集仅覆盖 QA 场景,未扩展到多轮对话、代码生成等应用
相关工作与启发
- 同一团队的前作 (Chen et al., 2024a) 关注直接 prompt injection 防御,本文关注间接场景
- ProtectAI 和 Meta Prompt Guard 是主要的开源检测基线
- 启发:未来可将检测-移除-防御组合为端到端的安全中间件部署在 LLM 应用前端
评分
- 新颖性: ⭐⭐⭐⭐ — 首次系统研究间接攻击的检测+移除
- 技术深度: ⭐⭐⭐⭐ — 方法设计合理,实验维度覆盖全面
- 实用性: ⭐⭐⭐⭐⭐ — 直接可部署为 LLM 应用的安全过滤层
- 实验充分度: ⭐⭐⭐⭐ — 检测/移除/过滤/过度防御多维评估