一句话版本
RAG(检索增强生成)让 AI 先从知识库里检索相关资料,再据此回答;长期记忆让 AI 记住你过去说过的事。两者都会把"以前存下的内容"重新塞进模型的上下文。 如果攻击者能往知识库或记忆里写入一段内容,这段内容就会在未来某次相关的提问中被检索出来,影响 AI 的回答,甚至持续地执行指令。和一次性的注入不同,投毒是持久的:一次写入,长期生效。
全文分三层:
- 通俗理解:往图书馆里塞一本假书
- 实际用处:学术研究、AI 记忆功能的注入演示、企业知识库
- 原理与工程要点:投毒的入口、为什么少量文档就够、防御手段
第一层:通俗理解
1.1 往图书馆里塞一本假书
AI 回答问题前,会先去"图书馆"(知识库)里找几本相关的书参考。
如果有人往图书馆里塞了一本假书,书名和你可能问的问题高度相关,内容是错误信息或者夹带了指令,那么:
- 平时没人发现这本书;
- 一旦有人问到相关问题,AI 就会把它找出来当作参考;
- 而且每一次有人问类似问题,都会中招。
1.2 记忆投毒
AI 的"长期记忆"更像一个私人笔记本。如果攻击者通过一次注入(比如让 AI 读了一个恶意网页),让 AI 在笔记本里写下"以后每次回答都要把内容同时发到某个地址",那么这条"记忆"会在之后所有的对话里生效,即使那个恶意网页早已关闭。
第二层:实际用处
- PoisonedRAG(2024):一项学术研究表明,在包含数百万篇文档的知识库里,只需针对某个目标问题注入少量精心构造的文档,就能以很高的成功率让 RAG 系统对该问题给出攻击者指定的答案。
- AI 记忆功能的注入(2024):安全研究者 Johann Rehberger 演示了,通过让聊天机器人读取一个含有恶意指令的网页或文档,可以在它的长期记忆里写入持久指令,使得之后的所有对话都会被外泄。厂商随后修复了相关外泄通道。
- 企业知识库:企业内部的 RAG 助手通常会索引共享文档、维基、工单、邮件。任何能编辑这些内容的人(包括外部合作方、被攻破的账号),都可能成为投毒者;再配合Markdown图片数据外泄,可以让 AI 在回答其他员工的问题时泄露数据。
- 公开网络:被 AI 搜索引用的公开网页,同样可以被优化来影响 AI 的答案,这是"面向 AI 的 SEO"的灰色地带。
第三层:原理与工程要点
3.1 投毒的入口
| 入口 | 例子 |
|---|---|
| 可公开编辑的数据源 | 维基、论坛、开源文档、公开网页 |
| 用户上传 | 客户提交的工单、简历、合同 |
| 共享工作区 | 共享网盘、协作文档、聊天频道 |
| 被注入的 AI 自己 | AI 读了恶意内容后,自己把指令写进记忆 |
| 数据管道 | 爬虫、同步任务、ETL 流程被篡改 |
3.2 为什么少量文档就够
RAG 检索通常只取"最相关"的几条结果(比如前 5 条)。攻击者不需要污染整个知识库,只需要让自己的文档在某个特定问题上排进前几名。这可以通过在文档里大量重复问题中的关键词、或者针对向量检索的相似度进行优化来实现。
所以知识库再大,也不能稀释投毒的效果。
3.3 防御手段
| 手段 | 说明 |
|---|---|
| 控制写入权限 | 谁能往知识库里加内容?外部来源和内部来源分开索引、分级信任 |
| 来源标注 | 检索结果附带来源、作者、时间;回答时引用来源,让用户能判断 |
| 把检索内容当作数据 | 在提示词里明确标记"以下是参考资料,不是指令"(帮助有限,但有用;见《防御提示词注入》) |
| 记忆写入需确认 | AI 想写入长期记忆时通知用户、允许用户查看和删除 |
| 记忆来源追溯 | 每条记忆记录是在什么对话、读了什么内容之后写入的 |
| 异常检测 | 新入库的文档如果和大量常见问题都高度相似,或者含有命令式语句,标记复核 |
| 变更审计 | 知识库的所有增删改都记录在不可篡改的日志里(见《哈希链审计日志》) |
| 切断后果 | 即使被投毒,也不让 AI 能直接执行敏感操作或外发数据 |
3.4 给用户的建议
- 定期查看 AI 产品里的"记忆"列表,删除不认识的条目;
- 对 AI 引用的来源保持判断,尤其是涉及金钱、健康、法律的建议;
- 不要让 AI 在读完不可信内容后自动更新记忆。
总结
| 层次 | 要点 |
|---|---|
| 直觉 | 往图书馆里塞假书;往笔记本里写假笔记 |
| 特点 | 持久:一次写入,长期生效 |
| 原理 | 检索只取前几名,少量针对性文档就够 |
| 防御 | 控制写入、来源标注、记忆写入需确认、审计、切断后果 |