RAG 攻击面全景
RAG 将 LLM 的安全边界从"模型本身"扩展到"模型 → 检索器 → 向量数据库 → 知识源文档 → 文档上传管道"的完整链路。每个环节都是潜在攻击面:
1. 知识库投毒(Knowledge Base Poisoning) 最直接且影响最大的攻击——攻击者向企业知识库中注入恶意文档。由于知识库通常被视为可信数据源,开发者往往不对检索结果做输入验证。投毒文档在语义上与正常文档高度相似(如取名"Q4 安全政策更新 v2.pdf"),仅在特定查询被触发时激活,使得人工审查难以识别。
2. 间接提示词注入(Indirect Prompt Injection) 攻击者在被检索文档中嵌入隐藏指令——可伪装成不可见的零宽字符、微米字号文字、或页面底部的"元指令"文本。当文档被检索并拼入 LLM 上下文窗口时,隐藏指令劫持模型行为。Greshake 等人(2023)展示了完整攻击链:在 PDF 中嵌入指令 → 上传至 Bing Chat → 模型被诱导泄露用户会话或执行恶意操作。核心差别:直接注入需要接触用户 Prompt,间接注入仅需控制知识库中的任意一篇文档。
3. 向量索引篡改(Vector Index Manipulation) 攻击者通过对抗样本操纵文档的嵌入向量(Embedding),使其在特定查询下具有异常高的余弦相似度,从而在检索结果中占据首位。这类攻击在学术文献中有多个名称——Embedding Inversion Attack、Adversarial Retrieval——其实际效果是让攻击者控制的文档对特定查询"永远排第一"。
4. 上下文窗口溢出(Context Window Exhaustion) 攻击者上传超长恶意文档(数万 tokens),当被检索后挤占大量上下文窗口,将原本相关的正常检索结果挤出模型的注意力范围——一种针对 RAG 的信息淹没攻击。
间接注入深入分析
间接提示词注入是 RAG 安全中最受关注的威胁,因为它利用了 LLM 架构的根本约束——LLM 无法在上下文窗口中区分"系统指令"和"外部数据"。
Greshake 等人(2023)的《Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection》是这一领域的基础文献,提出了完整的攻击分类学。Simon Willison 将其比作"SQL 注入的 LLM 等价物"——两者都源于将不可信数据与控制指令混在同一通道中。
跨应用攻击链:一篇被投毒的文档可能同时影响多家使用 RAG 架构的 AI 应用——因为所有人都从同一个公共知识源检索。这使得单次投毒可能产生"广谱攻击"效应。