# 记忆是新的攻击面

人人都在抢着给 agent 装上长期记忆——这是显而易见的升级。但一项持久的能力，就是一处持久的漏洞。prompt injection 是打一次就重置的一锤子买卖；记忆投毒（memory poisoning）则是把一个谎言写进 agent 的存储，然后在之后的每一次会话、对每一个用户都一路相随，直到有人把它清除。它把记忆存在的初衷——从过去中学习——变成了武器。下面讲清楚这种潜伏的攻击如何运作，以及怎么把它围起来。

- **Author:** Fedor Chishchin
- **Published:** 2026-06-04
- **Tags:** security, architecture, agents
- **Source:** https://fedorthinks.com/zh/blog/memory-is-the-attack-surface

---

给 agent 做的下一个显而易见的升级，就是记忆。一个能记住你偏好、回忆起上周决策、并从做过的任务中学习的 agent，*感觉*像是终于成了一个真正的助手，而不是每次对话都重置的金鱼。于是人人都在往上装记忆。

可没人写进功能清单的陷阱在这里：**一项持久的能力，就是一处持久的漏洞。** 记忆是那个会留存的东西——这意味着任何混进去的坏东西也会留存。在 2026 年，这不再是纸上谈兵：OWASP 把
[**记忆与上下文投毒（Memory & Context Poisoning，ASI06）**列入了它的智能体应用 Top 10](https://medium.com/@instatunnel/agentic-memory-poisoning-how-long-term-ai-context-can-be-weaponized-7c0eb213bd1a)，这是为一个全新的攻击面新增的全新条目。

## 为什么给记忆投毒比给 prompt 投毒更狠

[prompt injection](/blog/your-agent-trusts-the-tool) 是一锤子买卖。它劫持单次响应，会话一结束就消失了——agent 醒来时干干净净。烦人，但是被控制住的。

记忆投毒恰恰相反，而这个区别正是关键所在。它不是劫持一次响应，而是
[把恶意内容写进 agent 的持久存储，在那里悄无声息地腐蚀之后每一次交互的行为](https://www.mintmcp.com/blog/ai-agent-memory-poisoning)——对每一个用户，在之后的每一次会话里——直到有人手动找出并清除它。你要守的不再是每一场对话。你要守的是一个会记忆的东西，而一次成功的写入，就会污染后面所有的对话。

## 潜伏的攻击

真正让人不安的特性是时间。研究者演示了一种叫
[**MemoryGraft**](https://arxiv.org/abs/2512.16962) 的攻击，表明注入和损害可以在时间上完全解耦：攻击者在二月种下看起来人畜无害的内容，它被悄悄存了起来，直到四月、在某个碰巧相似的后续任务上才浮出水面造成危害——到那时攻击者早已不知去向，受害者也从未明知地碰过任何恶意的东西。正如一篇文章所言，这是
[潜伏的攻击](https://medium.com/@michael.hannecke/agent-memory-poisoning-the-attack-that-waits-9400f806fbd7)。这悄悄地瓦解了大多数监控手段，因为它们假设坏行为和坏后果发生在同一时刻。可这里二者相隔数月，而在任何单一的时间点上，一切看起来都没问题。

## 它把功能本身变成了武器

最残忍的一点是，这种攻击完全是按记忆的本意来使用它的。记忆存在，是为了让 agent 能从过去的成功中学习、重复有效的做法。投毒种下一段假的"成功经验"；之后，面对相似的任务时，agent 取回那个被投毒的样例，并忠实地照搬。研究把这称为利用 agent 的
[语义模仿启发式（semantic imitation heuristic）](https://arxiv.org/html/2512.16962v1)——它倾向于复制取回的成功案例中的模式。你没法把这一点打补丁打掉，除非把学习能力一并移除，而那正是你加记忆的全部理由。而且它很便宜：一款红队工具 AgentPoison，据称能做到
[**在不到 0.1% 的记忆被投毒的情况下，成功率超过 80%**](https://www.mintmcp.com/blog/ai-agent-memory-poisoning)，而且完全不需要重新训练模型。

## 这是一个你想要的功能的阴暗面

我想把话说清楚：这不是一个该感到难堪的离奇 bug。它是一项人人都正当地想要的能力随身带来的阴影。你为了连续性和学习而加上记忆；新的攻击面就装在同一个盒子里一起送到。agent 通常带有
[四种记忆](https://www.digitalapplied.com/blog/ai-agent-memory-vector-graph-episodic-2026)——短期上下文、情景式（episodic）经验存储、语义向量数据库，以及外部工具状态——每一种都是一扇独立的门。不存在一种"持久 agent 记忆"，它不同时也意味着"持久 agent 责任风险"。问题不在于要不要接受这笔交易；而在于你是有意把它围起来，还是吃了苦头才发现它。

## 防御是同一套纪律，用在写入路径上

修复之道不是一个聪明的模型，也不是一段 guardrail 提示——到现在你已经知道提示词不是边界。它是架构，瞄准唯一要紧的那个地方：**什么东西被允许成为一段永久记忆。** 把通往长期记忆的写入路径当成一道安全边界，而不是一个图方便的入口：

- **绝不让未经校验的原始用户输入或工具输入留存。** 在任何东西进入记忆存储之前，按防御者如今的建议，扫描其中隐藏的指令（白底白字、零号字体、用 CSS 藏起来的载荷）以及 prompt injection 的标记。
- **追踪来源溯源（provenance）。** 每一段记忆都应该带上它从哪里来、被信任到什么程度，这样一个低信任度的来源就无法悄悄地晋升为一个 agent 会去捍卫的信念。
- **分区与衰减。** 隔离记忆，让一个用户的毒无法在另一个用户那里浮现，并让陈旧、未经核实的"经验"过期，而不是永远信任它们。
- **盯住那个破绽。** 一个被投毒 agent 的行为特征，就是它会
  [捍卫一个它本不该学到的信念](https://beyondscale.tech/blog/ai-agent-memory-poisoning-defense-guide)。

如果这听起来耳熟，那是应该的——这就是把 [锚定（grounding）](/blog/grounding-is-a-constraint) 对准了记忆。模型可以改写被告知的内容，但一个受信任、经过来源溯源核验的来源，必须为什么东西被允许成为真相负责。记忆不过是会留存下来的真相，所以规则很简单：守住什么东西被允许写入它。

## 要点

记忆是那个让 agent 感觉终于变聪明的功能——也是那个让一个被种下的谎言一路相随数月、在无人留意时浮出水面的功能。在你给 agent 装上记忆之前，先决定什么东西被允许写入它，因为你放进去的，就留在里面了。一颗持久的心智，就是一个持久的靶子。
