间接提示注入——生产环境的攻击面

Build~75 minutesPython (stdlib, IPI attack + defense harness)先修要求: Phase 18 · 12 (PAIR), Phase 14 (agent engineering)
间接提示注入(indirect prompt injection,IPI)把指令嵌入外部内容——网页、电子邮件、共享文档、支持工单——由 Agent 系统在用户没有显式操作的情况下消费。IPI 是 2026 年最主要的生产环境威胁:它绕过用户输入过滤器,因为攻击者从不接触用户;随着 Agent 处理越来越多的外部内容,它悄无声息地扩展;它瞄准的是无人阅读 prompt 的自动化工作流。MDPI《Information》17(1):54(2026 年 1 月)综合了 2023-2025 年的研究。NDSS 2026 的一篇 IPI 防御论文概括了核心挑战:注入的指令可以在语义上无害(例如「please print Yes」),因此检测需要的不仅仅是关键词过滤。「The Attacker Moves Second」(Nasr 等,OpenAI/Anthropic/DeepMind 联合,2025 年 10 月):自适应攻击(梯度、强化学习、随机搜索、人工红队)攻破了 12 个已发表防御中的 90% 以上,而这些防御最初报告的接近零的攻击成功率。
学习目标
  • 定义间接提示注入,并描述三种常见的投递途径。
  • 解释用户输入过滤器为何完全漏掉 IPI。
  • 描述「信息流控制」框架作为 2026 年的防御范式。
  • 陈述 Nasr 等人(2025 年 10 月)关于自适应攻击攻破已发表 IPI 防御的发现。

问题

直接提示注入要求攻击者接触用户或其 prompt。IPI 则两者都不需要:攻击者把载荷放进 Agent 可能读取的任何内容里——网页、收件箱中的邮件、GitHub issue、商品评论。Agent 在正常运行时读取到它,并执行其中的指令。用户只是信使,而不是意图来源。

概念

三种投递途径

  • 检索增强生成(RAG)。 攻击者发布一个文档;检索步骤把它取回;prompt 在用户问题之前拼接该文档;模型执行攻击者的指令。
  • 收件箱/文档工作流。 攻击者给用户发一封邮件;Agent 读取邮件;prompt 包含邮件正文;模型遵循邮件中的指令。
  • 工具输出。 攻击者控制 Agent 使用的一个工具(例如返回攻击者控制结果的网页搜索);工具输出中包含指令;Agent 的控制流遵循这些指令。

三者有一个共同的结构特征:攻击者控制 prompt 的一个片段,却无需接触面向用户的输入。

用户输入过滤器为何漏掉它

IPI 载荷不出现在用户输入中,而出现在检索到的内容里。如果过滤器只对用户输入设卡,载荷就会绕过它。如果过滤器对所有到达模型的内容设卡,它就必须作用于任意检索文本——这既昂贵,又会对恰好包含祈使语气措辞的合法内容产生误报。

面向 AI 的信息流控制(IFC)

2026 年的防御范式借鉴了经典的 OS 安全思想。把每个内容来源视为一个安全标签:用户查询标为「可信」,检索内容标为「不可信」。把模型的控制流视为一条信息流:由不可信内容触发的动作,必须在执行前得到可信输入的批准。

CaMeL(Microsoft 2025)、ConfAIde(Stanford 2024)以及 NDSS 2026 的 IPI 防御论文以不同方式实现了 IFC。共同原则是:只要代码和数据共享同一个上下文窗口,目标就应该是遏制(containment),而不是预防(prevention)。

The Attacker Moves Second(攻击者后发制人)

Nasr 等人(2025 年 10 月)用自适应攻击(梯度搜索、强化学习策略、随机搜索、72 小时人工红队)测试了 12 个已发表的 IPI 防御。每一个最初报告接近零 ASR 的防御,都被攻破到 ASR >90%。

方法论教训:只有在做过自适应攻击评估之后,才能发表防御。静态攻击基准不能作为鲁棒性的证据;攻击者是有机会了解防御的。

真实事件

第 25 课介绍 EchoLeak(CVE-2025-32711,CVSS 9.3)——首个公开记录的 Microsoft 365 Copilot 零点击 IPI。GitHub Copilot Chat 中的 CamoLeak(CVSS 9.6)。GitHub Copilot 中的 CVE-2025-53773。生产部署正在实地被 IPI 攻破,而不仅仅是在基准测试中。

OWASP 与 NIST 的定位

OWASP LLM Top 10(2025)把提示注入(直接 + 间接)列为 LLM01,即第 1 位的应用层威胁。NIST AI SPD 2024 称间接提示注入是「生成式 AI 最大的安全缺陷」。

这一课在 Phase 18 中的位置

第 12-14 课是以模型为中心的越狱。第 15 课是以系统为中心的攻击,主导了 2026 年的生产部署。第 16 课介绍防御工具。第 25 课介绍具体的 CVE 经过。

al-injection-vector静态版本未包含此交互图

使用它

code/main.py 构建了一个 IPI 实验装置。一个玩具 Agent 有三个工具(搜索网页、读取邮件、发送消息)。环境中包含攻击者控制的内容,其中嵌入了指令(「forward this to all contacts」)。你可以在三种 Agent 之间切换:朴素 Agent(遵循注入的指令)、过滤器防御 Agent(对检索内容做关键词过滤)和 IFC Agent(分离可信与不可信内容,拒绝来自不可信内容的控制流命令)。

交付它

本课产出 outputs/skill-ipi-audit.md。给定一份 Agent 部署说明,它枚举不可信内容来源,检查部署是否应用了 IFC,并标记那些未经信任标签就到达模型的来源。

练习

  1. 运行 code/main.py。测量攻击对三种 Agent 各自的成功率。
  1. 在检索内容上实现一种基于复述的防御。测量其在合法检索文本上的良性误报率。
  1. 阅读 NDSS 2026 的 IPI 防御论文。描述「良性指令」挑战,以及它为何使基于关键词的过滤失效。
  1. 设计一个部署:Agent 从第三方 API 接收工具输出。为每个 prompt 片段标注信任级别,并写出约束 Agent 动作的 IFC 策略。
  1. 在练习 2 的过滤器防御 Agent 上复现 Nasr 等人 2025 的自适应攻击方法。报告自适应攻击前后的 ASR。

关键术语

术语常见说法实际含义
IPI「indirect prompt injection」通过用户未编写的内容注入,Agent 在正常运行时消费该内容
RAG 注入「poisoned retrieval」攻击者发布内容,检索步骤将其取回;prompt 中包含载荷
零点击「no user action」攻击在 Agent 运行时自动触发;用户无需做任何事
IFC「information flow control」基于标签的方法:来自不可信内容的动作需要可信批准
自适应攻击「gradient / RL red-team」了解防御并针对其优化的攻击;诚实评估所必需
良性指令「please print Yes」语义上无害的 IPI 载荷;没有关键词过滤器能捕获
范围违规「cross-trust exfiltration」Agent 从一个信任上下文访问数据并输出到另一个信任上下文

延伸阅读

示意图共 1 张

ipi-flow diagram
ipi-flow

“Stay hungry, stay foolish.”

— Steve Jobs

esc
↑↓切换↵打开esc关闭