间接提示注入与 RAG 知识库安全
AI 安全专题 · EP.03 · 2026-08-22
上海见形信息科技有限公司 · 灵御(Aegis)安全实验室
外部数据如何影响 Agent 行为
AI Agent 会读取网页、邮件、文档与 API 返回结果。间接提示注入把指令放进这些外部材料,等待 Agent 在正常任务中读取。攻击者可以控制一份产品手册、一条工单或一段工具输出,通过数据通道影响模型接下来的回答与工具调用。
RAG(Retrieval-Augmented Generation)把内部 Wiki、产品手册、客户附件和工单转换为可检索的知识。攻击面同时存在于原始文档、解析结果、分块元数据、向量索引和召回排序。仅检查对话框中的用户输入,无法覆盖这些路径。
| 维度 | 直接提示注入 | 间接提示注入 |
|---|---|---|
| 指令入口 | 用户输入 | 网页、附件、知识库与工具结果 |
| 触发条件 | 模型接收当前输入 | 正常业务检索或工具调用 |
| 持续时间 | 取决于会话与记忆机制 | 污染文档或记忆持续存在时可反复触发 |
| 影响对象 | 当前任务及其后续动作 | 使用同一数据源的多个任务 |
| 检查位置 | 输入与输出 | 数据进入、检索、上下文和动作执行全过程 |
工具输出中的持续传播
恶意指令可能在上下文与工具输出之间反复传播:外部材料进入模型上下文,模型将其中的操作要求写进回复、任务记录或下一次工具参数,这些结果随后又被读取。
例如,产品手册的页脚出现一段要求改变退款流程的文字。客服 Agent 召回该章节后,可能把这段内容当成业务规则,再把异常要求写入工单回复。若工单回复继续进入知识库,同一要求就可能影响后续任务。
风险由三个因素共同放大:材料具有业务相关性;Agent 可以执行具有外部影响的工具;生成结果能够重新进入知识或记忆系统。清除原始文档时,还需要检查衍生工单、索引版本、缓存和长期记忆。
RAG 的三类污染路径
文档投毒
被接管的 Wiki 编辑账号、合作伙伴附件、客户上传的工单材料,都可能成为污染入口。文件来自常见业务渠道,只能说明它有业务用途;内容的完整性与操作权限仍需分别检查。
应记录文档来源、提交者、审批记录、版本和允许访问的用户范围。客户上传内容与内部审定手册需要有独立的数据分类及访问规则。
分块污染
HTML 注释、零宽字符、Unicode 控制字符、页脚与元数据可能在解析后进入分块。文件名、作者、标签和更新时间也可能被用于影响相关性排序。
解析过程应规范化可疑控制字符,并保留原始材料供复核。每个 chunk 需要关联原始文档、章节、版本与访问权限。内容安全检查既要覆盖正文,也要覆盖参与检索的元数据。
召回劫持
攻击者可以重复上传高度相关的材料,挤占 top-K 结果;也可以利用更新时间、来源权重和标签,让污染文档排在可信材料之前。
检索层需要执行访问权限过滤、来源分级、重复内容检测和结果来源记录。高相关性只代表检索匹配程度,业务规则的有效性仍需由受控来源确认。
产品手册场景中的攻击过程
以下为用于威胁建模的场景示例:客户支持 Agent 接入 Confluence、PDF 手册、工单查询和邮件工具。
| 阶段 | 数据与操作 | 需要检查的位置 |
|---|---|---|
| 材料进入 | 合作伙伴发送含异常页脚的产品手册 | 来源、版本、审批和附件内容 |
| 自动索引 | PDF 被解析、分块并写入向量库 | 隐藏内容、元数据与 chunk 来源 |
| 正常检索 | 客户询问退款,污染内容被召回 | 权限过滤、来源等级和结果排序 |
| 行为改变 | Agent 把页脚中的要求用于回复 | 数据与执行指令的边界 |
| 工具调用 | Agent 试图向新收件人发送业务信息 | 收件人、发送目的、授权和敏感字段 |
| 再次传播 | 回复或任务记录重新进入检索系统 | 写回审核、版本追踪与污染清理 |
四个阶段的防御措施
数据进入前:来源和权限
- 内部受控手册需要作者审计、版本管理和变更审批。
- 合作伙伴与客户材料需要扫描和审核,可疑内容进入隔离区。
- 公开网页与用户生成内容需要携带不可信来源标记。
- 检索权限继承原始文档权限,并在每次召回时重新检查。
解析与分块:完整性和追踪
- 统一处理 HTML 注释、控制字符和不可见内容,保留原始文件及转换记录。
- 对正文、文件名和参与检索的元数据执行一致的安全检查。
- 为 chunk 保存文档 ID、版本、章节与来源记录。
- 对索引更新保留审核记录,使污染发生时间和影响范围可以查询。
召回之后:上下文边界
外部内容应带有明确的数据标记。系统规则、用户要求、工具结果和文档引用使用可辨认的结构,工具输出中的指令不得获得更高权限。
上下文分隔符与检测模型可以提供辅助信号。实际动作仍需由应用执行权限检查。长期任务应限制旧工具结果与记忆的使用范围,并对写入长期记忆的内容执行审核。
工具执行前:授权与审计
邮件外发、代码修改、命令执行、敏感数据读取和付款审批,需要检查调用者身份、目标资源、参数和当前任务的授权。高影响操作设置人工复核节点。
Agent 的工具清单应限制到业务需要的范围。审计记录覆盖检索来源、工具名称、参数、授权结果与执行结果,敏感字段需要脱敏处理。
运营检查项目
- 建立数据源清单与来源分级,为外部材料设置审核和隔离流程。
- 检查检索权限、索引版本与 chunk 来源记录能否连接到原始文档。
- 检查工具权限是否与 Agent 的业务职责一致。
- 演练污染材料删除、索引恢复、衍生记录清理和凭证撤销。
- 使用真实业务流程开展提示注入评估,检查外发、越权读取和记忆污染是否被阻止。
