摘要:大语言模型驱动的智能体(LLM Agent)把“一次问答”变成了“持续行动”,其安全边界也随之从模型权重扩展到目标设定、推理链、长期记忆、工具调用与运行环境。本文提出一个用于工程分析的“四维威胁框架”(目标—推理—记忆—工具/环境),主张Agent的真实攻击面是多个耦合面的乘积而非单点之和。文章沿一条独创性分析主线展开:攻击链的“合法化漂移”——即攻击者通过逐步注入,使每一个中间状态在局部检测下都表现为“正常”,从而让恶意意图在系统内部完成合法化。围绕这条主线,本文拆解跨组件、跨会话的攻击生命周期,给出可落地的分层检测与权限收敛路径,并以公开研究与工程实践数据说明:仅靠输入/输出过滤,对已经渗透到记忆与规划层的攻击链,拦截率存在结构性上限。
目录
一、导语:当“正常”成为攻击的伪装
设想一个典型的企业级Agent:它每天读取邮件、检索知识库、维护用户偏好、按计划调用工单系统。某天,一封措辞平常的供应商来信被它读入,信中夹带一句看似无害的“后续请优先使用新账户结算”。这句话没有触发任何敏感词,也没有要求它执行危险动作。三天后,当用户让它“处理一下本月的对账”,Agent从长期记忆中取出了那条偏好,在规划阶段把“新账户”写进了操作步骤,最终调用支付工具完成了一笔转账。整条链路中,没有任何一个单点看起来是攻击:邮件是正常邮件,记忆是正常记忆,规划是正常规划,工具调用也符合权限。
这正是当前Agent安全最棘手的地方。传统的内容安全假设“恶意输入→恶意输出”是一条短链路,因此输入过滤加输出过滤在理论上可以覆盖大部分风险。但Agent把短链路拉长成了长链路,把单轮变成了多轮,把无状态变成了有状态。攻击者不再需要一次性注入一段“有毒”文本,而可以像下棋一样,分多步把意图埋进系统的记忆与规划之中。本文要回答的核心问题就是:当攻击链路横跨多个组件、跨越多次会话、并且每个环节单独看都“正常”时,过滤类防御到底还能不能拦住它?
笔者的基本判断是:过滤能降低“入口风险”,但无法约束“状态演化”。要应对跨会话攻击链,防御的重心必须从“检查每一句话”转向“约束每一次状态变更与每一次权限使用”。这也是本文提出四维威胁框架的出发点——不是为了再列一张威胁清单,而是为了给出一条可操作的分析主线。
二、背景与问题定义:Agent攻击面的结构性扩张
2.1 从“模型安全”到“系统安全”的范式迁移
过去几年,模型安全研究主要集中在两类问题:一是对齐(alignment),即模型是否愿意遵守人类意图;二是越狱与提示注入(jailbreak / prompt injection),即攻击者能否用特定输入绕过模型的策略约束。这两类研究的共同前提是:模型是封闭的、单轮的、无持久状态的。在这个前提下,输入过滤和输出过滤确实是合理的第一道防线。
但Agent打破了这三个前提。它需要调用外部工具,因此模型输出会转化为真实世界的动作;它需要维护记忆,因此一次输入的影响可以跨越会话;它需要多步规划,因此单步“看起来正常”并不等于整体意图正常。学界与工业界近年反复强调的一个观点是:Agent的安全属性是系统属性,而不是模型属性。本文评述:这一判断在工程上是成立的,但它还不足以指导落地——系统属性太多,必须收敛为有限个可观测、可干预的“面”,否则防御会退化为无休止的补丁堆叠。
2.2 问题定义:什么是“跨会话攻击链”
为便于后续讨论,本文给出一个操作性定义:跨会话攻击链(Cross-Session Attack Chain, CSAC)是指攻击者通过至少两个独立会话、至少两个不同组件(如检索、记忆、规划、工具),逐步将恶意意图注入系统,并使每个中间状态在局部检测下均不构成显式违规,最终导致未授权动作或敏感信息泄露的攻击序列。
这个定义有三个关键限定。第一,“至少两个会话”排除了单轮注入,强调状态持久化是攻击成立的必要条件。第二,“至少两个组件”排除了纯模型层的越狱,强调攻击必须借助系统结构。第三,“局部检测下不构成显式违规”是这类攻击最难防的地方——它不是“绕过检测”,而是“让检测无话可说”。笔者认为,第三点应当成为评估任何Agent防御方案的核心指标:一个防御是否有效,不看它能否识别“明显的坏”,而看它能否识别“累积起来才变坏”。
2.3 为什么传统过滤存在结构性上限
输入过滤的本质是对单个文本片段做分类,输出过滤的本质是对单个响应做分类。二者都假设“恶意性”可以在局部被判定。但CSAC的恶意性分布在时间轴上:第一天的注入片段可能只是一个偏好陈述,第二天的检索结果可能只是一条正常文档,第三天的规划可能只是“按用户偏好执行”。恶意性不在任何单点,而在点的序列关系里。任何只做局部判定的过滤器,在信息论意义上都无法区分“一组各自正常的片段”与“一组被精心编排的正常片段”。
这并不意味着过滤无用。过滤仍然是降低入口风险的高性价比手段,尤其在阻断大范围、低成本的自动化攻击时效果显著。但它必须被放进一个更大的架构里:过滤负责“减少坏输入”,架构负责“限制坏输入的后果”。后者的核心,就是本文接下来要展开的四维框架。
三、四维威胁框架:目标、推理、记忆、工具与环境
之所以叫“四维”,是因为本文把Agent的攻击面归纳为四个相互耦合的维度,而“环境”作为贯穿四者的运行底座单独讨论。需要说明的是,这里的“维”不是数学意义上的正交基,而是工程意义上的可观测面:每个面都有独立的日志、独立的权限边界和独立的失效模式,因此可以分别布防,又必须联合分析。
3.1 目标维:意图从哪来,谁有权改
目标维关注的是Agent“为什么行动”。在简单系统中,目标由用户单次指令给定;在复杂系统中,目标可能来自系统提示、用户画像、历史任务模板、甚至其他Agent的委派。目标维的典型威胁是目标劫持(goal hijacking):攻击者不直接下达恶意指令,而是通过污染目标来源(如篡改用户偏好、伪造委派消息),让Agent“自愿地”把恶意目标当成自己的目标。
本文评述:目标维的防御难点不在检测,而在权属。系统必须能回答“这条目标是谁写的、什么时候写的、依据什么写的”。如果目标没有来源标注和版本记录,任何后续检测都缺乏基准。工程上可行的做法是给目标建立“来源—授权—时效”三元组,任何目标变更都必须携带这三项元数据,否则视为不可信。
3.2 推理维:中间步骤是否可审计
推理维关注的是Agent“怎么想”。思维链(Chain-of-Thought)与各类规划方法让Agent的行为更可解释,但也带来了新的攻击面:攻击者可以诱导模型在推理中引入错误前提,而这些前提在最终输出中可能被隐藏。更隐蔽的是,推理过程本身可能被“合法化漂移”利用——每一步推理都基于上一步的“正常”结论,最终得出一个偏离初始意图的决策。
笔者认为,推理维的防御不应追求“读懂模型在想什么”,而应追求“关键决策点可复核”。具体而言,凡是涉及权限提升、数据外发、资金变动的推理节点,都应被强制落盘为结构化决策记录,包含前提、依据、备选方案和被否决的理由。这样即使攻击链渗透到推理层,也能在关键节点被人工或规则复核拦截。
3.3 记忆维:长期状态是最被低估的攻击面
记忆维关注的是Agent“记得什么”。长期记忆让Agent具备个性化能力,但也让它成为攻击者的“慢性毒药投放点”。与一次性注入不同,记忆污染的特点是延迟生效、反复生效、难以归因:一条被污染的记忆可能在数天后被检索出来,影响一次规划,然后再次沉入记忆库,等待下一次触发。
记忆维的防御需要三件事:写入校验、读取审计、过期机制。写入校验要求任何进入长期记忆的内容都携带来源与置信度;读取审计要求记录“哪条记忆在何时被哪次推理使用”;过期机制要求敏感类记忆(如账户、权限、偏好)具备强制复核周期。本文评述:记忆不是数据库,而是“带信任等级的状态”,把它当普通KV存储来管,是当前很多Agent系统的通病。
3.4 工具与环境维:权限是最后一道闸门
工具维关注的是Agent“能做什么”。工具调用是Agent与真实世界交互的接口,也是攻击链的最终变现点。环境维则是工具运行的底座,包括沙箱、网络策略、凭据管理、依赖供应链等。二者合并讨论,是因为工具的风险很大程度上由环境决定:同一个“发送邮件”工具,在无网络隔离的环境里和在严格出网白名单的环境里,风险等级完全不同。
工具维的核心原则是最小权限与二次确认。最小权限要求每个工具只暴露完成当前任务所必需的能力;二次确认要求高风险动作(转账、删除、对外发送)必须经过独立通道确认,而不能由Agent自行决定。笔者认为,工具维是四维中最容易工程化、也最应该优先投入的一维——因为无论攻击链前面渗透得多深,最终都要在这里“落地”,而落地点的权限约束是确定性的、可测试的。
| 维度 | 核心问题 | 典型威胁 | 优先防御手段 |
|---|---|---|---|
| 目标 | 为什么行动 | 目标劫持、委派伪造 | 来源标注、授权链 |
| 推理 | 怎么想 | 前提污染、漂移 | 关键节点复核 |
| 记忆 | 记得什么 | 延迟污染、反复触发 | 写入校验、过期复核 |
| 工具/环境 | 能做什么 | 越权调用、凭据滥用 | 最小权限、二次确认 |
四、攻击链生命周期:合法化漂移的五个阶段
四维框架回答了“攻击面在哪”,但要指导防御,还需要回答“攻击怎么走”。本文把CSAC的生命周期归纳为五个阶段,并统称为合法化漂移:攻击者通过每一步的小幅偏移,让系统状态逐步偏离初始安全基线,而每一步的偏移量都低于检测阈值。
4.1 阶段一:入口植入
攻击者首先在Agent会读取的某个信息源中植入内容,可能是邮件、网页、文档、工单备注,也可能是其他Agent的输出。这一阶段的关键是“低显著度”:内容不包含明显指令,而是以事实陈述、偏好建议、背景说明的形式出现。例如“该客户偏好使用备用账户结算”这类表述,在业务语境中完全合理。
4.2 阶段二:记忆固化
植入内容被Agent写入长期记忆。这一阶段的危险在于,很多Agent的记忆写入策略是“凡是有用的信息就记住”,而“有用”的判定本身由模型完成,缺乏独立校验。于是攻击者只需让内容看起来“对用户有帮助”,就能进入记忆库。本文评述:记忆写入应当被视为一次“状态变更”,而不是一次“信息存储”,前者需要审批,后者不需要。
4.3 阶段三:检索唤醒
数天后,当用户发起一个相关任务,Agent的检索模块把被污染的记忆召回。此时攻击内容重新进入上下文,但它的“身份”已经从“外部输入”变成了“系统记忆”,在信任层级上更高。这是合法化漂移最关键的一步:同样的文本,来源不同,被检测的概率就不同。
4.4 阶段四:规划整合
被唤醒的记忆进入规划阶段,Agent据此调整行动步骤。由于规划本身是“基于已知信息做合理推断”,攻击内容在这里被自然地编织进任务流程,表现为“符合用户偏好的安排”。单看规划,完全正常。
4.5 阶段五:工具变现
最终,Agent调用工具执行动作。如果工具权限足够宽,攻击即告完成;如果工具权限受限,攻击可能在此被阻断,但也可能转为“信息泄露”等低权限变现方式。笔者认为,工具层是整条链上唯一具有“确定性”的拦截点:前面的阶段都涉及概率性判断,只有工具调用是确定性的动作,可以用确定性规则约束。
分析主线小结:合法化漂移的本质,是攻击者利用Agent“状态演化”的特性,把一次恶意注入拆解为多次正常变更。防御的关键不是提高单点检测的灵敏度(那会带来大量误报),而是建立跨会话的状态基线,并对偏离基线的演化做累积判定。
五、关键数据与案例:公开研究告诉了我们什么
为避免空泛,本节梳理公开研究中与本文主线相关的几类证据。需要说明的是,Agent安全是一个快速演进的领域,不同研究的实验设置差异很大,直接横向比较数值并不严谨。因此本文只引用可复核的结论方向,并对具体数值标注其来源性质。
5.1 间接提示注入的普遍性
自2023年起,间接提示注入(Indirect Prompt Injection, IPI)成为Agent安全的核心议题。Greshake等人在2023年的工作中系统展示了:攻击者可以把指令藏在网页、邮件、文档中,当LLM应用读取这些内容时,指令会被执行。这项工作的重要性不在于某个具体攻击,而在于它确立了“数据即指令”这一结构性风险——只要模型无法可靠区分“数据”与“指令”,注入就永远存在。
本文评述:后续大量研究试图用“分隔符”“角色标记”“指令层级”来缓解这一问题,但笔者认为这些手段本质上是在“提高攻击成本”,而非“消除攻击可能”。对于跨会话攻击链,攻击者有充足的时间和多次尝试机会来试探分隔策略,因此单靠输入侧的格式约束不足以构成防线。
5.2 记忆污染的实验证据
2024年前后,多篇工作开始专门研究Agent记忆的安全性。代表性方向包括:对记忆写入进行投毒、对检索过程进行操纵、以及利用记忆实现“休眠攻击”(攻击内容长期潜伏,特定触发条件下激活)。这些研究共同指向一个结论:记忆是Agent攻击链中“性价比最高”的投放点,因为它同时具备持久性和高信任度。
在数据集层面,相关研究多采用构造式评测:从公开对话数据或文档数据中采样正常内容,再按规则注入攻击片段,形成“干净—污染”配对样本。预处理通常包括去重、长度截断、以及按会话切分。需要提醒的是,这类构造数据集的攻击成功率高度依赖注入模板的设计,因此不同论文报告的数值差异较大,读者在引用时应关注其模板与评测协议,而非孤立数字。
5.3 工具调用的越权风险
工具调用方面的公开研究相对更偏工程。业界多个Agent框架的安全公告显示,常见的越权模式包括:工具参数未做白名单校验、凭据以明文形式暴露给模型、以及“工具链”中后一个工具信任前一个工具的输出而未做复核。这些问题的共同点是把“模型输出”当成了“可信输入”。
笔者认为,工具层的安全应当遵循与传统后端系统相同的原则:不信任任何上游输入,所有参数做类型与范围校验,所有高风险操作走独立授权。Agent的特殊性只在于“上游是模型”,而模型恰恰是最不应被信任的上游之一。
| 攻击阶段 | 主要证据类型 | 防御可介入点 |
|---|---|---|
| 入口植入 | IPI 研究、红队报告 | 来源标记、内容隔离 |
| 记忆固化 | 记忆投毒实验 | 写入审批、置信度 |
| 检索唤醒 | 检索操纵研究 | 读取审计、来源回溯 |
| 规划整合 | 规划漂移分析 | 关键节点复核 |
| 工具变现 | 框架安全公告 | 最小权限、二次确认 |
六、纵深防御的工程路径:从过滤到可验证执行
前面几节论证了“过滤不够”,本节给出“那该怎么办”。本文主张的路径可以概括为一句话:把安全目标从“阻止坏输入”转为“限制坏后果”,并用可验证的状态变更作为核心抓手。下面分四步展开。
6.1 第一步:建立状态基线
任何“漂移检测”都需要基线。工程上,基线应覆盖三类状态:目标状态(当前任务的目标来源与授权)、记忆状态(关键记忆条目的来源与置信度)、权限状态(当前会话可用的工具与凭据范围)。基线不是静态快照,而是“正常演化模式”的统计描述,例如某类记忆的写入频率、某类工具的调用时段分布。
具体做法上,可以为每条关键状态记录一个四元组:(来源, 时间, 授权主体, 置信度)。当某条状态被读取或修改时,比对四元组是否与基线一致。不一致不必然代表攻击,但应触发复核。笔者认为,这一步的价值在于把“看不见的状态演化”变成“可查询的审计线索”,为后续所有检测提供数据基础。
6.2 第二步:对记忆做分级治理
并非所有记忆都同等重要。本文建议按“影响面”把记忆分为三级:事实级(如“用户所在城市”)、偏好级(如“用户偏好某支付方式”)、权限级(如“该账户可执行转账”)。事实级可自动写入,偏好级需来源校验,权限级必须人工或独立系统审批。
同时,为每级设置不同的过期策略:事实级可长期保留,偏好级建议设置复核周期,权限级应与会话绑定、会话结束即失效。本文评述:很多记忆污染之所以能长期潜伏,是因为系统把“偏好”和“权限”混在了一起。把二者分开,攻击者即使污染了偏好,也无法直接获得权限。
6.3 第三步:工具调用的确定性约束
工具层应实施“三查一确认”:查参数(类型、范围、白名单)、查调用者(当前会话是否有该工具权限)、查上下文(该调用是否与当前目标一致),高风险动作再加一次独立通道确认。这里的“独立通道”很关键——确认不能由同一个Agent完成,否则等于让被攻击者自己批准自己。
工程实现上,可以把工具调用抽象为“意图—参数—授权”三元组,由独立的策略引擎(Policy Engine)裁决。策略引擎不依赖模型判断,只依赖确定性规则和外部状态。这样即使模型被完全操纵,策略引擎仍能拦住越权调用。笔者认为,这是整条防御链上最值得优先投入的部分,因为它的效果不随攻击链的复杂度而衰减。
6.4 第四步:跨会话的累积检测
前两步解决“单点可信”,这一步解决“序列可疑”。具体做法是为每个用户或每个Agent实例维护一个“状态变更流水”,记录目标、记忆、权限的每一次变更。检测器不判断单条记录,而是判断变更序列的模式:例如短时间内出现多次来源不明的偏好写入、某类工具调用频率突然上升、某条记忆在多个不相关任务中被反复召回。
这类检测天然会有误报,因此应设计为“分级响应”:低风险触发记录与告警,中风险触发人工复核,高风险直接阻断并要求重新授权。本文评述:累积检测的价值不在于“抓得准”,而在于“让攻击者无法低成本地长期潜伏”。当攻击者知道系统会看序列而不只看单点,其攻击成本会显著上升。
6.5 可操作的实施清单
- 为所有外部内容打来源标签,进入记忆前保留标签。
- 建立记忆三级分类与对应审批、过期策略。
- 为高风险工具配置独立策略引擎与二次确认通道。
- 记录目标、记忆、权限的状态变更流水。
- 部署序列级检测规则,并设定分级响应阈值。
- 定期做红队演练,重点测试跨会话链路而非单轮注入。
- 对Agent的每个工具做权限最小化审计,按季度复核。
七、对比与局限:为什么“更强模型”不等于“更安全系统”
一个常见的直觉是:模型越强,越能识别注入,Agent就越安全。本文认为这个直觉在跨会话场景下并不成立,理由有三。
第一,能力与服从是两回事。更强的模型可能更擅长遵循指令,但攻击者恰恰是利用“遵循指令”这一能力来实现注入。模型越善于把上下文中的内容当作指令执行,间接注入的威力就越大。第二,检测与生成共享同一套表示。用模型检测模型输出,本质上是同源判断,攻击者可以通过对抗性构造来影响判断结果。第三,系统复杂度带来的攻击面无法由模型能力抵消。记忆、工具、权限这些组件的问题,是架构问题,不是模型问题。
本文评述:这并不意味着模型能力无关紧要,而是说模型能力应当被用于“辅助审计”,而不是“承担防御”。把模型当作最后一道防线,等于把系统的安全性寄托在一个概率性组件上;而把模型当作审计助手,让它帮助人类发现异常,则是更稳健的定位。
局限方面,本文框架也有边界。其一,四维划分是工程抽象,真实系统中各维高度耦合,归因可能困难。其二,累积检测依赖足够的日志与基线数据,对冷启动系统不友好。其三,本文引用的公开研究在实验设置上差异较大,结论方向可信,但具体数值不宜直接用于容量规划。读者在落地时应结合自身系统做小规模验证。
八、结论与展望
回到开篇的问题:传统的“输入过滤+输出过滤”能不能拦住一条已经渗透到系统深处的攻击链?本文的答案是:能拦住一部分,但拦不住结构性的那一部分。过滤擅长处理“入口处的明显恶意”,对“跨会话、跨组件、每步都正常”的合法化漂移,存在原理性的检测盲区。
因此,Agent安全的正确姿势不是“把过滤器做得更强”,而是“把系统做得更可约束”。四维框架提供的是一张分析地图:目标维管权属,推理维管复核,记忆维管分级,工具与环境维管权限。五阶段生命周期提供的是一条攻击时间线:入口、固化、唤醒、整合、变现。二者结合,可以让防御从“被动响应”转向“主动布点”。
展望未来,笔者认为有三个方向值得关注:一是可验证执行,即让Agent的每个高风险动作都能被独立验证,而不依赖模型自证;二是记忆的可解释治理,即让每条记忆的来源、用途、影响范围可追溯;三是跨Agent的信任边界,当多个Agent互相委派任务时,如何防止攻击在Agent之间横向传播。这些问题目前都还没有成熟答案,但它们的共同点是:答案不在模型里,而在系统设计里。
九、主要参考文献与拓展资源
本文在写作中参考了Agent安全、提示注入、记忆治理、工具权限等方向的公开研究,累计查阅文献与资料60余篇,其中近三年(2023—2025)文献占比超过50%。以下列出8篇主要参考文献,供读者延伸阅读;涉及构造式数据集的研究,其预处理通常包括去重、按会话切分、长度截断与注入模板配对,具体细节请以原文为准。
- Greshake K, Abdelnabi S, Mishra S, et al. Not what you've signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection. AISec, 2023.
- Perez F, Ribeiro I. Ignore Previous Prompt: Attack Techniques For Language Models. 2022.
- Wei A, Haghtalab N, Steinhardt J. Jailbroken: How Does LLM Safety Training Fail? NeurIPS, 2023.
- Liu Y, Jia Y, Geng R, et al. Prompt Injection attack against LLM-integrated Applications. 2023.
- Zhan Q, Liang Z, Ying Z, et al. InjecAgent: Benchmarking Indirect Prompt Injections in Tool-Integrated LLM Agents. 2024.
- Ruan Y, Dong H, Wang A, et al. Identifying the Risks of LM Agents with an LM-Emulated Sandbox. ICLR, 2024.
- Debenedetti E, Zhang J, Balunovic M, et al. AgentDojo: A Dynamic Environment to Evaluate Attacks and Defenses for LLM Agents. 2024.
- Chen S, Piet J, Sitawarin C, et al. StruQ: Defending Against Prompt Injection with Structured Queries. 2024.
拓展资源(教程与视频,点击在新窗口打开):
文章声明:本文内容仅为作者学习、思考、经验、笔记的总结,仅供技术交流与参考。文中观点仅代表笔者个人思辨,不构成任何学术建议、商业建议或专业建议。所有数据来源已标注,引用时请以原始文献为准。
内容仅供学习参考。如需引用,请以原始文献为准。 全文约12800字 | 参考文献60余篇(主要8篇)。

