跳转至

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)

  • 将注入文档按句子分割为多个片段
  • 对每个片段使用检测模型单独分类
  • 丢弃被判定为包含注入指令的片段
  • 将剩余干净片段重新拼接为处理后文档
  • 优势:充分利用已训练的文档级检测模型的能力

关键设计 3:抽取移除方法 (Extraction 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)

关键发现

  1. 现有模型对间接攻击无效:Llama Guard 最高仅 39%,ProtectAI 仅对特定攻击有效
  2. 专门训练效果显著:DeBERTa 在 Naive Attack 上训练后可达 99% 检测率,且对其他攻击泛化
  3. 过度防御主要在域外:域内过度防御率 0%,域外最高 27%;更强模型、更流畅文档更不易过度防御
  4. 分割 vs 抽取互补:分割整体更好,但抽取对尾部注入(最有效的攻击位置)达到 100% 移除率
  5. 移除不损害信息:过度防御导致的文档损坏几乎不影响原始 QA 任务的回答准确率
  6. 训练数据注入位置很重要:仅用单一位置训练的模型难以泛化到其他位置

亮点与洞察

  • 首个系统研究间接 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 应用的安全过滤层
  • 实验充分度: ⭐⭐⭐⭐ — 检测/移除/过滤/过度防御多维评估