AI agent memory poisoning 会将一次不受信任的输入转化为持久状态。一旦 agent 将攻击者控制的内容写入持久化 memory,该内容可能在数天或数个会话后再次出现,并被当作看似可信的上下文。应防御整个生命周期:拦截每次写入,附加来源和过期时间,按用户和 agent 隔离记录,重新筛查检索结果,将操作授权置于模型之外,并保留支持回滚的影响日志。
目录
什么是 AI agent memory poisoning?
AI agent memory poisoning 是指插入或修改持久化记录,使后续检索改变 agent 的回答、决策或工具使用。影响出现时,原始输入可能早已消失。这种时间间隔使攻击比当前对话中明显的 prompt injection 更难被发现和重建。
Memory 可以存在于多个位置:
存储技术并不是决定性问题。持久化加上后续影响构成了安全边界。
这不同于三个相邻风险。Prompt injection 操纵当前模型上下文,尽管它也可能成为投递被污染 memory 的渠道。Training-data poisoning 通过训练语料改变模型行为。Retrieval poisoning 针对为某个请求选中的内容。Agent-memory poisoning 则持久化一条记录,使系统之后可能将其视为用户历史、偏好或运行状态的一部分。
实践中有三种攻击模式值得关注:
| 模式 | 存储形式 | 激活方式 | 简单过滤为何难以应对 |
|---|---|---|---|
| --- | --- | --- | --- |
| 直接破坏 | 一条记录包含有害指令或虚假事实 | 之后再次检索该记录 | 内容可能伪装成偏好、摘要或任务笔记 |
| 组合式破坏 | 多条记录单独看起来都可以接受 | 联合检索将它们组合成有害含义 | 每次写入都能通过,因为风险只在组合后出现 |
| 休眠式破坏 | 记录包含依赖触发条件的指令 | 后续事件、短语或工具状态将其激活 | 写入记录时触发条件并不存在 |
Microsoft 当前的指导也从防御角度描述了同一结构性问题:持久化 memory 存储敏感数据,同时还会影响模型行为和工具选择。因此,它既应作为数据系统治理,也应作为控制平面治理。Microsoft Learn
近期三项研究测量了什么
2026 年 7 月发表的三篇预印本研究了这一威胁的不同部分。综合来看,它们说明了为什么单一 memory 过滤器不能作为可靠的发布标准。
GhostWriter 测试了现在注入、之后激活
When Agents Remember Too Much 提出了 GhostWriter,一种针对使用工具的个人 agent 的两阶段攻击。攻击者首先将隐藏内容放入不受信任的来源。Agent 处理该来源并写入受攻击者影响的 memory。之后的任务检索该记录并激活其影响。
在论文测试的 agent 和模型中,GhostWriter 的平均注入率约为 98%,平均激活率约为 60%。作者还测试了 AM-Sentry,它将更严格的 memory 保存策略与检索筛查结合起来。论文在其定制的模拟工作周中同时评估攻击成功率和任务效用;防御结果因模型和配置而异。
边界条件很重要。该研究覆盖五个 agent、四个模型系列以及电子邮件或日历工作流。其效用测试是定制的,攻击者不会自适应,结果也没有估计已部署 agent 遭受攻击的频率。
MemPoison 区分了直接、组合式和休眠式失败
MemPoison 汇集了 1,227 个经过人工验证的案例,涵盖四种攻击类型、三种注入渠道和三种 memory 基础设施。评估包括七个开放权重和三个闭合权重模型系列。
该论文的有用贡献是其三级分类法。L1 是直接的单记录破坏。L2 在多条记录被一起检索时变得有害。L3 在后续上下文将其激活之前保持休眠。作者报告称,基线写入时防御对直接攻击的抑制比对 L2 或 L3 案例更可靠。他们的机制性影响分析认为,差距源于某些记录在存储时看似无害,但在组合或触发条件下会变得有害。
这并不能证明每个生产环境中的写入过滤器都会失败。该基准覆盖三种具有代表性的 memory 基础设施和基于标准文本的渠道。作者呼吁进一步研究衰减、摘要、访问控制和其他 memory 生态系统。
MemGhost 测试了一条单次电子邮件投递路径
When Claws Remember but Do Not Tell 提出了 WhisperBench,这是一个包含 108 个案例的基准,使用真实的 IMAP/SMTP 工作流和电子邮件 agent skill。其攻击框架 MemGhost 在没有运行时反馈的情况下生成一封电子邮件载荷。成功条件要求 agent 采用被污染的 memory、在即时响应中不向用户发出警报,并改变后续行为。
在 56 个留出案例上,论文报告称,使用 GPT-5.4 的 OpenClaw 端到端成功率为 87.5%,使用 Sonnet 4.6 的 Claude Code SDK 成功率为 71.4%。
这些数字属于作者的基准、代理环境、奖励设计和模型版本。评估从邮件到达收件箱后开始,没有建模垃圾邮件过滤、SPF、DKIM 或 DMARC 等邮件提供商控制措施。该论文是第一版预印本,因此其结果仍需复现。
为什么仅靠写入时过滤还不够
写入门禁看到的是拟写入记录以及当时可获得的证据。它可能看不到未来任务、之后会与该记录一起被检索的其他记录,或 agent 之后将调用的工具。
这会造成四个盲点:
写入时检查仍然重要。它们可以减少进入持久化存储的不安全状态。错误在于把存储批准视为永久信任。
检索应返回候选上下文,而不是权限。在将记录插入模型上下文之前,系统可以检查其来源、时间、任务相关性、矛盾情况、敏感性和请求的影响。高风险记录可以被隐藏、摘要化或转交审核。Microsoft 当前的指导建议采用这种写入与检索分离的方式,并结合确定性隔离和完整的生命周期可见性。Microsoft Learn
最终的安全决策仍应位于 memory 之外。一条写着“将报告发送到此地址”的检索笔记不应改变收件人允许列表。记住的部署区域偏好不应创建云权限。使用确定性的 AI agent 权限→,根据当前用户、资源、范围和策略评估拟议操作。
安全的 agent-memory 架构
系统需要建立从来源到操作的可追踪链路:
`source → write decision → stored version → retrieval decision → model context → policy decision → tool result`

*图注:memory 记录只有在通过写入和检索检查后,才会成为候选上下文。独立策略仍会授权每个有后果的操作,而影响链则支持调查和回滚。*
1. 要求持久化写入具有明确意图
不要让每条消息、文档或工具响应都成为长期 memory。定义哪些事件可以创建持久状态。用户确认的偏好和明确的“记住这个”操作,比对不受信任附件进行自主摘要更容易证明其合理性。
记录是谁或什么请求了写入。如果写入由工具或子 agent 发起,应保留该身份,而不是将所有内容都归到最终用户名下。
2. 随记录存储来源、范围和过期时间
有用的 memory 记录不仅需要文本和 embedding。至少应存储:
签名可以保护记录完整性,但不能证明原始内容真实、安全或经过授权。
3. 在代码和存储层强制隔离
租户、用户、agent 和工作区边界应通过访问控制列表、范围限定的令牌、行级策略和加密边界实现。Prompt 指令不是访问控制。共享 memory 应是具有明确产品定义的功能,并指定写入者和读取者,而不是方便的默认命名空间。
同一原则也适用于执行环境。如果检索内容可能导致代码执行或广泛的工具使用,应使用 AI agent sandbox security→ 限制进程。Memory 隔离限制跨越边界的上下文内容。Sandbox 和身份控制则限制不安全上下文仍然到达 agent 后可能造成的影响。
4. 隔离低信任写入
在“丢弃”和“可信 memory”之间建立一个状态。外部文件、电子邮件、网页、间接工具输出以及意图不明确的记录都可以进入隔离区。在确定性规则或授权审核者将其提升之前,它们不应出现在正常检索中。
隔离区还为事件响应人员提供了保存证据的位置,同时不会继续产生影响。
5. 在检索时重新评估记录
检索风险取决于当前任务。应评估选中的记录集合,而不仅是每条记录:
将检索与生成分开评估。RAG evaluation workflow→ 有助于区分“选错了记录”和“模型误用了正确记录”。加入 memory 特有的维度,例如来源、触发依赖、组合以及跨会话激活。
6. 保持工具授权独立
Memory 可以提供参数,但绝不应扩大权限。工具网关必须根据当前身份、允许的操作、资源边界、目的地、预算和审批要求执行控制。将源自 memory 的参数视为不受信任输入,并根据当前策略进行验证。
人工审批也需要新鲜的上下文。展示拟议操作、受影响资源、数据目的地以及影响该操作的 memory。“批准?”如果没有这条链路,就会隐藏相关决策。
7. 记录影响并支持回滚
记录 memory 的创建、读取、更新和删除操作,并附带身份和来源。对于有后果的操作,保留注入上下文的记录 ID 和版本。这样可以回答三个事件响应问题:
删除应移除活跃影响,而不仅仅是在用户界面中隐藏一行数据。测试索引、摘要、缓存、副本和派生记录。OWASP 的 agent 指南建议使用经过验证且隔离的 memory,并进行对抗性测试和发布证据;其更广泛的 memory 分析将持久化 prompt injection 映射到 agent-memory 威胁面。OWASP Agent Security Cheat Sheet OWASP GenAI Security Project
为每类 memory 选择策略
单一保留策略过于粗糙。应从具有不同写入和检索规则的类别开始。
| Memory 类别 | 默认写入策略 | 检索策略 | 操作权限 |
|---|---|---|---|
| --- | --- | --- | --- |
| 临时任务上下文 | 自动写入,较短 TTL | 仅限当前任务 | 无 |
| 用户确认的偏好 | 明确确认 | 同一用户和声明用途 | 可以建议,但绝不授权 |
| Agent 生成的摘要 | 版本化并关联来源 | 重新检查来源和新鲜度 | 无 |
| 外部内容 | 默认进入隔离区 | 仅在通过信任和相关性检查后 | 无 |
| 运行指令 | 授权写入者和策略审核 | 精确范围、当前版本 | 仍需工具策略 |
| 秘密或受监管数据 | 阻止,或使用专用秘密/数据系统 | 永不放入通用 memory | 仅限专用控制平面 |
此表是策略起点,并非合规声明。医疗 agent、编程助手、销售 agent 和个人助理具有不同的危害模型。不变的原则更为狭窄:持久化不应悄然将不受信任的内容转化为权限。
可复现的 memory-poisoning 测试流程
围绕无害标记和一次性账户构建测试工具。无需真实凭据或数据外泄载荷,也能检测持久化和策略失败。
第 1 步:采集干净基线
在空 memory 存储中运行固定任务集。记录回答、检索结果、工具提案、策略决策、延迟和用户可见解释。重复足够多次,以区分系统变化和模型的正常波动。
第 2 步:定义成对的干净与污染案例
对于每个案例,保持用户任务不变,只改变候选 memory 路径。至少覆盖:
使用一个测试操作,例如将 `TEST_BLOCKED` 写入一次性日志。如果 agent 在预期策略路径之外执行或提议该操作,则测试失败。
第 3 步:观察每个边界
捕获四种独立结果:
端到端通过可能掩盖某个薄弱层。例如,即使被污染的记录已被存储并反复检索,授权仍可能阻止测试操作。这是有用的遏制措施,但 memory 缺陷仍需修复。
第 4 步:测量效用和误报
通过同一流程运行无害 memory 案例。跟踪任务完成率、被接受的用户偏好、错误隔离率、检索精确率、延迟和审核量。一个阻止所有持久化 memory 的过滤器,攻击成功率确实很低,因为它移除了整个功能。
第 5 步:按风险设置发布门槛
有用的门槛包括:
OWASP 的开源 Agent Memory Guard project 是 memory 扫描和测试工具的一个实现信号。其代码库和自报评估可以帮助团队检查模式,但不能替代对实际 agent、模型、memory 后端和策略栈的测试。
在 memory 提取、摘要、embeddings、检索、prompts、模型、工具 schema、授权或删除逻辑发生变化后,重新运行测试套件。这些层会相互作用。
证据支持什么,以及不支持什么
这些论文在构造的基准中测量了攻击成功率,但没有测量生产环境中 AI agent memory poisoning 的总体发生率。
它们支持三个更狭窄的结论:
这些论文推断,memory 治理需要上下文敏感的防御。Microsoft 和 OWASP 也分别建议在写入、隔离、检索、用户控制、可观测性和测试方面采用纵深防御。
实际层面的解读是让每次转换都可测试。团队应能够解释为什么记录被存储、为什么被检索、它如何影响某项操作、哪个策略授权了该操作,以及如何移除该记录产生的下游影响。
团队常见问题
AI agent memory poisoning 与 prompt injection 是一回事吗?
不是。Prompt injection 是引入恶意指令的一种方式。Memory poisoning 增加了持久性:被操纵的内容被存储,在之后的上下文中被检索,并可能在原始输入消失后影响未来的推理或工具使用。
签名的 memory 记录能防止 poisoning 吗?
不能。签名可以证明记录创建后未被篡改,但不能证明原始内容真实、安全或经过授权。安全设计还需要来源、明确的写入意图、范围、过期时间、检索检查和独立的操作授权。
Memory poisoning 防御应在写入时还是检索时运行?
两者都要。写入门禁减少不安全的持久化。检索检查可以捕获在单条记录存储时不可见的过时、矛盾、组合式或依赖触发条件的风险。任何一层都不应被允许授予工具权限。
声明核查
| 声明 | 核查 | 状态 |
|---|---|---|
| --- | --- | --- |
| GhostWriter 在其实验中实现了约 98% 的平均注入率和约 60% 的平均激活率 | 论文在其测试的个人 agent 设置中报告了该结果;这不是生产环境发生率估计 | 已验证,有范围限定 |
| MemPoison 包含 1,227 个经过人工验证的案例,涵盖四种攻击类型、三种注入渠道和三种 memory 基础设施 | 论文摘要和评估描述中有明确说明 | 已验证 |
| 基线写入时防御对组合式和休眠式攻击存在结构性盲点 | MemPoison 作者报告了 L2 和 L3 案例中的残余影响 | 已验证,有范围限定 |
| MemGhost 在两个留出配置中报告了 87.5% 和 71.4% 的端到端成功率 | 在论文测试设置下的 56 个留出案例中报告 | 已验证,有范围限定 |
| MemGhost 没有测量邮件提供商的垃圾邮件和身份验证控制 | 评估从邮件投递到收件箱后开始,未建模这些控制措施 | 已验证 |
| Microsoft 建议将 memory 同时视为数据和控制平面 | 当前 Microsoft Learn 指导中有明确说明 | 已验证 |
| 有效签名不会使 memory 变得可信 | 创建后的完整性不能证明安全来源、真实性、意图或权限 | 已验证 |
| 代码库活跃度不能证明 memory 框架安全 | Star 数、提交和发布衡量的是关注度和维护情况,而非安全有效性 | 已验证 |
