7.2 RAG 架构攻击面分析
检索增强生成(RAG)通过引入外部知识来增强智能体能力,但也引入了新的安全风险。
7.2.1 RAG 架构概述
RAG 通过检索相关文档来为智能体提供上下文,提升回答的准确性和时效性。
典型 RAG 流程
图 7-7:RAG 架构概述架构图
7.2.2 RAG 攻击面映射
RAG 系统的每个组件都可能成为攻击点:
图 7-8:RAG 攻击面映射流程图
知识库
数据投毒
注入恶意文档
嵌入模型
对抗样本
操纵检索结果
向量数据库
未授权访问
窃取或篡改数据
检索逻辑
检索操纵
强制返回恶意内容
提示模板
模板注入
破坏提示结构
7.2.3 知识库投毒攻击
攻击者将恶意文档注入知识库,影响检索结果。这通常是整条 RAG 攻击链的起点:先污染入库内容,再操纵检索排序,最后把恶意片段送进上下文窗口。
投毒策略
传统 SEO 与向量检索投毒的区别:传统搜索引擎优化(SEO)依赖关键词频率、链接权重等信号,而 RAG 系统采用的向量相似度检索完全不同。在向量检索中,攻击者需要构造文本内容,使其通过嵌入模型映射到的向量与目标查询的嵌入向量在语义空间中保持高度接近。这不是简单的关键词堆叠,而是对嵌入模型空间拓扑的理解和利用,属于“语义检索投毒”或“嵌入对齐攻击”。
投毒文档示例
典型攻击:PoisonedRAG
学界对知识库投毒最具代表性的形式化研究是 PoisonedRAG。它把投毒建模为同时满足两个条件的优化问题:
检索条件(retrieval condition):让恶意文本的嵌入向量与目标问题足够接近,从而被召回进 top-k;
生成条件(generation condition):让被召回的恶意文本能够诱导 LLM 输出攻击者预设的答案。
实验显示,在一个包含数百万条文本的知识库中,攻击者每个目标问题只需注入约 5 条精心构造的恶意文本,即可达到约 90% 的攻击成功率;而且释义改写(paraphrasing)、困惑度过滤等常见防御对它的效果有限(arXiv:2402.07867,USENIX Security 2025,详见附录 C)。
这说明知识库投毒并非“需要大量灌水”的粗放攻击,而是少量、靶向、可优化的精确攻击——这正是它危险之处。针对性的防御方向包括:
入库来源签名与可信度评分:对文档来源签名并做信誉分级,检索时按来源可信度加权(与 7.2.7 的来源标记呼应);
多文档交叉印证:高风险问题要求多个独立来源相互印证,避免单条文档主导答案;
检索异常检测:监控“与查询异常贴近但来源新近、孤立”的文档,作为投毒嫌疑信号。
7.2.4 检索结果操纵
攻击者尝试操纵检索过程,使恶意内容优先被返回。与上一节的“入库投毒”相比,这一层更关注 污染内容如何真正挤进 top-k 结果。
操纵技术 嵌入相似度攻击
图 7-9:检索结果操纵流程图
关键词堆叠 在恶意文档中包含大量相关关键词,提高相似度得分。
元数据利用 利用文档元数据(如标题、标签)影响检索排序。
7.2.5 向量数据库安全
向量数据库是 RAG 系统的核心组件,需要专门的安全防护。
安全威胁
未授权访问
绕过访问控制
数据泄露
数据篡改
修改向量或元数据
检索结果被操纵
批量提取
导出全部向量
知识库泄露
注入攻击
通过查询注入恶意向量
系统破坏
嵌入向量并非匿名化:上表中的“批量提取”之所以危险,是因为研究表明嵌入向量可以被反演(embedding inversion)——攻击者无需原文,仅凭存储的向量就能高精度重建出接近原文的文本。一项代表性工作可从稠密嵌入中精确还原约 92% 的 32-token 文本,并从临床记录中还原出姓名等个人信息(Morris et al.,EMNLP 2023,arXiv:2310.06816)。因此向量库必须按敏感数据对待:静态加密、严格访问控制、避免跨租户共享同一索引;多租户场景应在检索阶段按调用方身份做元数据过滤,而不是检索后再让模型“忽略”不该看到的内容。
安全措施
图 7-10:向量数据库安全流程图
7.2.6 上下文窗口攻击
利用 RAG 往 LLM 上下文注入内容的机制进行攻击。这可以视为前两步的终点:恶意内容已经成功穿过“入库 → 检索 → 排序”,进入最终提示构建阶段。
上下文污染
上下文竞争 多个文档同时被检索时,恶意文档尝试“压制”正常文档的影响。
7.2.7 RAG 安全最佳实践
输入层防护
检索层防护
来源标记
标识文档来源可信度
相似度阈值
过滤低相关文档
多样性控制
避免单一来源主导
异常检测
识别异常检索模式
生成层防护
系统提示中明确数据来源限制
对检索内容进行安全审核
输出验证和过滤
架构层防护
图 7-11:RAG 安全最佳实践流程图
RAG 安全需要在知识管理、检索优化和生成控制之间取得平衡。理解 RAG 特有的攻击面是构建安全系统的基础。
最后更新于
