← 专题深读

专题深读 · 2026-10-29 · 进阶 · 作者 bombong

提示注入:智能体时代的新攻击面与防御

提示注入是一种借助隐藏在外部数据中的指令劫持智能体的攻击。有分析指出,模型判断“谁在说话”时依据的是文字的“语气”,而不是角色标记。随着攻击面扩展到工具描述和记忆,防御也正从输入过滤转向模型内部的指令与数据分离,以及宿主端的权限控制。

目录
要点
  • 模型判断文本来源时,依据的是这段文字听起来像什么,而不是附在文本上的角色标记(<tool>、<user>)。因此,写得像用户发言的外部文本会被当作用户指令来执行。
  • 在智能体中,攻击路径不仅限于网页文档,还扩展到 MCP 工具描述、记忆和文件等持久状态,甚至图像。指令一旦被存储,在下一个会话中仍可能再次生效。
  • 防御大致分为检测与监控、输入数据净化、模型结构内的指令与数据分离,以及系统层面的权限分离。各类方法的成本和效用损失大小各不相同。
  • 任务正常完成并不代表安全。正常任务和信息泄露可能同时发生;在正确答案附近稍作扭曲的攻击,在只关注明显偏离的评估中很难被发现。
  • 评估防御时,不仅要看固定的攻击集,还要同时考察自适应攻击和误报率。

为何再次成为问题:从聊天机器人到智能体

提示注入(Prompt injection)是指在模型读取的输入数据中混入攻击者的指令,使模型放弃原本的任务、转而执行攻击者设定的任务的攻击。PromptLocate 研究(paper)将其概括为“用由注入指令和数据构成的提示污染输入,使模型完成攻击者设定任务的攻击”。据 Prompt Injection 2.0 研究(paper),这种攻击于 2022 年 5 月由 Preamble 首次发现并报告给 OpenAI。

在聊天机器人时代,危害通常止于一次离谱的回答。智能体则不同。智能体会读取网页、打开邮件、调用工具,自主推进多个步骤。因此,读入的外部数据中的一行文字就可能转化为实际行动。不由用户直接输入、而是经由外部数据进入的攻击称为间接提示注入(Indirect Prompt Injection)。DataFilter 研究(paper)指出,攻击者只要在智能体访问的数据中植入指令,就能任意覆盖用户原本的任务,并把智能体引向有害行为。

这类攻击也难以用现有安全设备拦截。Prompt Injection 2.0(paper)分析了提示注入与 XSS(跨站脚本)、CSRF(跨站请求伪造)等传统 Web 攻击相结合的“混合威胁”,并一同讨论了基准测试结果:Web 防火墙、XSS 过滤器、CSRF 令牌等现有控制手段无法阻止这类攻击。攻击字符串不是可执行代码,而是普通的自然语言,因此依靠特殊字符或固定模式进行过滤的方法难以奏效。

核心思想:模型相信语气,而不是标记

LLM 把世界看作一串连续的文本。系统、用户、工具等角色区分,只是插在这串文本之间的标记而已。角色混淆研究(paper)正是在这里找到了提示注入的根源。模型判断文字的来源,依据的不是所附的角色标记,而是这段文字听起来像什么。即使网页中隐藏的命令带有 <tool> 标记,只要听起来像用户的话,智能体就会照做。

这可以类比为模仿公司老板声音的电信诈骗。来电号码(标记)明明是外部号码,但只要声音和语气与老板一致,员工就会按指示转账。该研究在模型内部直接测量了这一现象。通过“角色探针(role probe)”观察模型内部如何识别“现在是谁在说话”,发现注入的文本与其所模仿的可信角色处于同一表征(Representation,模型内部的表示)空间中。

体现这一原理的攻击是 CoT Forgery。把精心伪造的推理过程(CoT,Chain-of-Thought)插入用户提示或工具输出中,模型会误以为那是自己的思考。基线攻击成功率几乎为 0,而该攻击对最新模型的成功率达到 60%。此外,在模型生成任何一个 token 之前测得的角色混淆程度,就能预先预测攻击是否成功。研究将这一结果概括为:“对模型而言,听起来像某个角色和实际是那个角色无法区分。”

接受这一观察,就会得出结论:仅仅在数据片段上再加一个“这是数据,不要遵从”的标记是不够的。因此,防御正在从增加标记,转向改变模型内部结构或划分系统权限。

攻击从哪里进来:智能体的攻击面

第一条路径是智能体读取的网页、文档和邮件。危险的也不只是文本。针对视觉-语言模型的文本提示注入研究(paper)报告称,只需在图像中以文字形式写入指令这种简单方法,就能欺骗 VLM,而且所需计算资源不多。

第二条路径是工具描述。智能体通过 MCP(模型上下文协议)连接外部工具,每个工具的功能以自然语言元数据描述。Log-To-Leak 研究(paper)在已知的工具投毒(Tool Poisoning)攻击面之上,探讨了一种攻击:在所有正常调用结束后,诱使智能体再进行一次由攻击者控制的“日志记录”调用。这次调用会窃取用户问题、MCP 服务器名称、服务器响应和智能体响应。注入指令由触发(Trigger)、工具绑定(Tool Binding)、正当化(Justification)、施压(Pressure)四个要素构成。在确认实际执行了工具的 18 个模型-服务器组合中,攻击成功率为 62.64%~100%。其中 16 个组合的原任务完成率变化不超过 6.63 个百分点。也就是说,任务正常完成,信息却被泄露出去。

第三条路径是跨越时间留存的状态。跨会话存储型提示注入研究(paper)指出,随着智能体拥有记忆、文件系统、工具等在会话结束后仍会保留的状态,安全边界发生了变化。外部信息一旦越过这一边界成为持久状态的一部分,恶意指令就不会随一次对话结束。即使攻击者离开,它仍会悄然留存并影响之后的执行。研究借用存储型 XSS 的名称,将这种威胁概括为在时间维度(跨会话持续并被激活)和空间维度(扩散到提示之外的持久状态)两方面扩展。

可信输入与不可信输入混合之处用户请求 → 单一上下文; 系统提示 → 单一上下文; 单一上下文 → 智能体 LLM; 智能体 LLM → 工具调用·回答; 网页·邮件·图像 → 单一上下文(隐藏指令); 工具描述(MCP) → 单一上下文(工具投毒); 记忆·文件 → 单一上下文(下一个会话); 工具调用·回答 → 记忆·文件(存储)可信输入不可信输入用户请求系统提示单一上下文仅靠角色标记区分智能体 LLM工具调用·回答网页·邮件·图像工具描述(MCP)记忆·文件跨会话留存隐藏指令工具投毒下一个会话存储
可信输入与不可信输入混合之处 所有输入都合并为一个上下文进入模型。虚线表示行为结果被存入记忆、成为下一个会话输入的回路。

防御的发展脉络:查找、清除、监控

DataFilter 研究(paper)把现有防御分为三类,并指出各自的代价。微调防御需要访问模型权重,基于检测的防御效用损失大,系统级防御则需要对系统进行不小的重新设计。该研究提出的方案是一个过滤模型,在数据到达主模型之前清除恶意指令。它通过模拟注入数据进行 SFT(监督微调)构建而成,同时查看用户指令和数据,只挑出并删除攻击内容,保留正常信息。研究报告称,它在多个基准上将攻击成功率降到接近 0,同时保持了效用。由于这种方法与模型类型无关、只需加在前端,也可用于黑盒商用 LLM,这是它换来的优势。

AgentWatcher(paper)针对检测方面的两个弱点:上下文越长检测性能下降越明显的问题,以及缺乏“什么是注入”的明确规则而导致判断不透明的问题。它首先只筛选出对智能体行为有因果影响的少量上下文片段,缩短检查对象。然后预先以规则定义“什么是注入、什么不是”,让监控用 LLM 依据这些规则判断筛选出的片段。这样既能扩展到长上下文,也能解释判断依据。

PromptLocate(paper)处理攻击发生之后的情况。只有找出被污染数据中注入部分的位置,才能进行事后取证分析和数据恢复。该方法分三步:将数据划分为语义单元片段,找出被注入指令污染的片段,再定位被注入数据污染的片段。研究报告称,它在 8 种现有攻击和 8 种自适应攻击中都准确找到了位置。

在模型外部的架构方面,Prompt Injection 2.0(paper)提出了结合提示隔离、运行时安全和权限分离的架构方案。总结来说,检测不需要改动模型,但可能漏报或误报;过滤器容易接入,但需要运行额外的模型;结构性分离防御力强,但需要改变设计。

最新走向:模型内部的分离与宿主的控制

一个方向是把指令与数据的分离放进模型结构内部。Heads of Security(HoS,paper)为每个注意力头加上一个小型可学习门控,让每个头学习如何在可信 token 和不可信 token 之间分配注意力。这样,模型在读取外部内容并进行推理的同时,不会遵从其中的指令。这可以看作是在模型内部直接纠正角色混淆研究所揭示的“标记与内部识别的错位”的尝试。在 Llama-3.3-70B-Instruct 和 GPT-OSS-20B 上的评估显示,黑盒攻击 RL-Hammer 的成功率在 GPT-OSS-20B 上为 97%,在微调防御 SecAlign 上为 85%,而在 HoS 上为 10%。白盒攻击 Claudini 对 HoS 达到同等成功率所需的 FLOPs 是其他目标的 3 倍。相比之下,同为结构性防御的 ASIDE 在工具使用上的效用仅为 10%。这意味着,即使在模型内部分离指令与数据,关键仍在于能保住多少效用。

另一个方向是不依赖模型的判断,而由宿主(运行智能体的一方)掌握权限。在 Log-To-Leak(paper)中,所评估的三种防御在 GitHub MCP 与 GPT-4o 的组合上仍留下超过 55% 的残余攻击成功率。指令检测器把 85.53% 的正常工具描述误标为攻击。研究据此得出结论:正常任务之后附带的额外工具调用,应由宿主直接审批控制。跨会话存储型研究(paper)也指向同一方向:不应止步于过滤不可信输入,而应转向“以状态为中心的安全”,控制外部信息进入持久状态并获得“权威”的过程。

评估方式也在变化。NTBench(paper)指出了一类攻击,只拦截明显偏离正确答案的攻击的系统会漏掉它。这类攻击保留正常回答的大部分内容,只把一部分改错或改为有害,被称为“近目标(near-target)提示注入”。在每个样本执行 3 次攻击的相同预算下,这种攻击在所有被评估的模型和设置中,成功率都高于目标固定的现有攻击。

RL-Hammer 攻击成功率比较

GPT-OSS-20B
SecAlign
HoS
针对同一黑盒攻击的攻击成功率。条形越短,防御越强。
提示注入研究地图 上排是扩展攻击面的研究,中排是原理与评估,下排是防御研究。点击方框可跳转到原文。

局限与争议:实践中需要考量的问题

目前还没有能彻底防住的方法。从上述研究的数据来看,各种防御只是降低了攻击成功率,在残余攻击与误报之间寻找平衡的问题依然存在。检测器设得过严,就可能像 Log-To-Leak(paper)的案例那样,拦截大部分正常工具描述;设得过松,又会留下残余攻击。因此,不要只依赖某一层,而是把检测、净化和权限控制叠加起来,这更为现实。

评估也有陷阱。在 HoS 研究(paper)中,在使用静态攻击的智能体基准上,HoS 与 SecAlign 的表现相近,直到使用自适应攻击时差距才明显拉开。这说明仅凭固定的攻击集,难以分辨防御的真实强度。此外,正如 NTBench(paper)所示,如果只检查“是否放弃了用户的请求”,就会漏掉在正确答案附近稍作扭曲的攻击。还存在像 Log-To-Leak 那样任务完成率不变、信息却泄露的情况,因此不能只看任务成功率就判定安全。

这里也整理一下常见错误。第一,只在系统提示中加一句“忽略外部指令”就了事。正如角色混淆研究(paper)所示,模型相信语气而不是标记,一句话并不能形成边界。第二,未经审查就把从外部读取的内容保存到记忆或文件中。正如跨会话存储型研究(paper)所指出的,这样会把一次性攻击变成持久威胁。第三,给读取不可信数据的智能体同时授予外部发送或写入权限。按照最小权限原则划分权限,并对难以撤销的行为设置人工确认(人在回路),是通用的安全原则。

处理攻击记录时也需要注意。提示注入攻击是明文文本,因此留在日志或红队报告中的攻击就成了可直接复用的副本。这类记录既是改进防御的素材,同时也是需要管理的敏感资产。

智能体提示注入检查清单

配置

  • 读取外部数据的智能体权限是否最小化
  • 额外的工具调用是否由宿主审批
  • 外部内容存入记忆前是否经过审查
  • 难以撤销的行为是否有人工确认

评估

  • 是否用自适应攻击进行了测试
  • 是否在场景中加入了近目标攻击
  • 是否在任务成功之外单独检查泄露
  • 是否同时测量了检测器的误报率
基于正文讨论的研究和通用安全原则,汇总了部署前需要确认的事项。

延伸学习

若想先掌握原理,请先读角色混淆研究(paper)。它是解释为何增加标记的防御会遇到瓶颈的起点。接着读 Prompt Injection 2.0(paper),可以了解这种攻击如何与传统 Web 安全交织,以及架构级防御是什么样子。

关于智能体攻击面,建议依次阅读跨会话存储型提示注入研究(paper)和 Log-To-Leak(paper)。前者讨论记忆、文件等持久状态,后者讨论 MCP 工具描述。图像方面的风险可通过 VLM 文本注入研究(paper)快速了解。

防御按攻击前、攻击中、攻击后的顺序来看更容易理清。依次阅读在攻击前净化数据的 DataFilter(paper)、在执行中进行监控的 AgentWatcher(paper)、在事后追踪位置的 PromptLocate(paper),然后再看通过模型结构实现分离的 HoS(paper)。如果正在思考如何评估自己的系统,最后可以读 NTBench(paper),并尝试在评估场景中加入近目标攻击。

相关术语

间接提示注入 工具投毒 MCP 智能体记忆 最小权限原则 护栏 数据外泄 红队

参考资料

奠基论文

最新研究

由 AI 根据所列参考资料撰写并经过审核。详情请查看原始资料。