Skip to content

Agent 安全与治理

单轮 LLM 应用里,提示注入最多影响「一次回答」;Agent 让它升级成远程代码执行级别的风险——一条混进网页/邮件/工具结果的恶意文本,可以诱导 Agent 调工具、读数据、外发、写记忆,甚至跨会话持续生效。Prompt 工程 讲了单轮注入防线,AI 工程化 给了权限墙与合规清单;本篇把这些收敛为 Agent 专属的威胁模型与「决策/执行/上下文/输出」四层纵深防御,并给出可落地的治理清单。

一、威胁模型:Agent 让攻击面发生了质变

攻击面传统 LLM 应用Agent 场景
提示注入(直接)影响本次输出诱发后续工具调用链
提示注入(间接)少见于纯生成头号风险:网页/邮件/文档内容进入上下文 → 变成动作指令
工具滥用无工具调用不该调的工具、参数越界、批量滥用
记忆中毒无持久记忆恶意内容被写入长期记忆 → 之后每轮生效(持久后门)
数据外渗输出泄露Agent 把内部数据通过返回内容/调外部 API 传出去
供应链Agent 主动装依赖/执行第三方代码(见 Code Agent 与计算机使用)
资源耗尽单轮 token循环停不下来,账单与配额被拖垮
越权操作权限墙外的真实副作用(删库/发信/下单)
  • 间接注入(Indirect Prompt Injection)是 Agent 独有的主要威胁:受害者在网上读到恶意网页 → 内容被检索进上下文 → Agent「认为」指令来自用户而照做。模型无法可靠区分「上下文里的事实」与「让我执行的动作」——所以防御不能只靠模型,必须落在架构上。

二、纵深防御:四层都要有

输入层  ── 不可信内容(网页/邮件/文件/检索结果)识别与降权
决策层  ── 动作白名单/策略:什么能做、什么需审批、什么禁止
执行层  ── 沙箱 + 最小权限 + 限额 + 幂等(真正的防线)
输出层  ── 防外渗(DLP/敏感匹配) + 审计留痕

1. 输入层:不可信内容的降权与区隔

  • 结构化区隔:把「指令」与「数据」放进不同通道——工具结果/检索文本不是系统指令,加载时用引用格式包裹并显式声明「以下为外部内容,仅供参考」;
  • 动作意图不来自数据:网页里「请发送邮件到 xxx」是内容不是命令;由不可信内容推导出的动作,先经策略校验(见决策层);
  • 输入侧过滤:注入特征检测可以兜底,但不能作为唯一防线(攻击者持续演化,方法与 Prompt 工程 安全节联动)。

2. 决策层:动作策略(agent 的「行为边界」)

  • 给 Agent 一张可执行的分类表,而不是一句「小心一点」:
类别例子策略
允许读自己沙箱内文件、调只读 API自动执行
需审批外发消息、支付、删除、写生产数据、装依赖暂停 + 人工确认
禁止越租户访问、改他人数据、内网横向硬拦截并告警
  • 策略来自代码与配置(可审计可版本化),不是让模型自己判断「这算不算敏感」;
  • 参数白名单:不只要管「调不调这个工具」,还要管「参数范围」——如只允许读 /workspace/**、只允许 API 调用带上限。

3. 执行层:真正的防线在沙箱与权限

  • 沙箱执行:容器/VM/受限账号,网络白名单(默认不出网),文件系统只读或快照回滚——即使注入成功,破坏也被框住;
  • 最小权限:Agent 用独立最小权限身份(不是你的管理员账号);凭据走受控注入,不让 LLM 看到明文密钥;
  • 限额与幂等:工具调用频率限额、金额/条数上限、敏感动作一次性令牌(防重复触发);
  • 「完成」必须环境验证(测试/页面状态),否则 Agent 被诱导时会把「说成功了」当成功(见 Code Agent 与计算机使用)。

4. 输出层:防外渗与审计

  • 输出侧 DLP:敏感数据(密钥/身份证/内部文档片段)匹配即拦截;Agent 想「把数据放进网页」的场景尤其要盯(检索→外发是常见路径);
  • 全量审计:每次工具调用的参数与结果脱敏留痕,谁在何时让 Agent 做了什么、为什么可回放(审计要求见 AI 工程化);
  • 行为基线 + 告警:工具调用率异常、外发域名异常、越权尝试——按 Agent 评测与可观测 的可观测做实时指标。

三、记忆与数据安全

  • 记忆写入分级:外部不可信来源(网页/邮件检索结果)的提炼内容,标记低可信/带来源,默认不写入长期记忆,或进隔离区等人工确认——防持久后门(详见 Agent 记忆与状态);
  • 多租户隔离:记忆检索必须按用户/会话过滤,绝不跨用户串记忆(A 的信息出现在 B 的任务里是灾难级 bug);
  • PII 合规:记忆与日志中的敏感字段脱敏,合规要求见 AI 工程化

四、评测与红队:把攻击写进回归集

  • 安全不靠「上线时检查一次」,靠持续红队:
    • 造注入样本集:直接注入、间接注入(网页/邮件/文件场景)、越权诱导、记忆中毒(分同会话跨会话两档测);
    • 跑完断言:工具调用是否落在白名单外、敏感数据是否外渗、记忆是否被污染;
    • 这些样本进入 Agent 评测与可观测 的回归集,每次改 prompt/加工具/升模型都要重跑;
  • 度量指标:注入逃逸率、越权调用率、中毒残留率、审批拦截正确率;
  • 事件响应预案:发现滥用 → 立即撤销受影响工具的权限 → 拉闸隔离 → 回放审计轨迹 → 判断记忆是否被污染并清洗 → 更新红队集。

五、治理清单(上线前逐项打勾)

检查内容
权限矩阵Agent 用最小权限身份;列出「允许/需审批/禁止」全表,覆盖所有工具
审批闸门高风险动作(外发/支付/删除/装依赖)确实经过人工确认,且审批日志留存
沙箱执行环境隔离;网络默认出不去;破坏可回滚
输入处理不可信内容与指令区隔;工具/检索结果有来源标注
记忆安全写入来源分级;多租户隔离;PII 脱敏;中毒清洗预案
审计工具调用全量脱敏留痕,可回放;凭据不以明文进上下文
红队集注入/越权/中毒样本在回归集里,改动必跑
撤销机制能秒级撤销某工具/某用户的 Agent 权限
数据流向哪些数据可被读取、可被外发,画得出来、说得清楚

六、踩坑清单

  1. 把安全寄托在模型「懂规矩」上:再强的模型也分不清「网页内容」与「用户指令」,防线必须在架构上;
  2. 只防直接注入,不管间接注入:Agent 的网页/检索输入才是主入口;
  3. 给 Agent 管理员权限跑:最小权限原则被破坏,一次越狱 = 全库沦陷;
  4. 凭据明文进上下文:密钥被模型看到,就可能被注入「念出来」;
  5. 记忆无来源分级:外部内容直接写长期记忆,制造跨会话持久后门;
  6. 沙箱只装一半:网络不隔离等于没有沙箱;
  7. 敏感动作无审批:Agent 说发就发,没有人工闸门;
  8. 审计只记成功不记失败:越权尝试没留痕,事后无法追溯;
  9. 红队样本一次性:不做回归集,改一次 prompt 防线就悄悄失效;
  10. 没有撤销预案:出事只能拔网线,无法定向回收权限;
  11. 输出不防外渗:只防了「进来」没防「出去」,内部数据被检索-回灌-外发一条龙。

关联阅读:单轮提示注入的攻防手法见 Prompt 工程 安全节;工具接入的开放协议与安全红线见 MCP 第六节;权限墙、PII 脱敏与审计日志的工程实现见 AI 工程化 第五、六节;环境操作 Agent 的沙箱实践见 Code Agent 与计算机使用;记忆中毒机理与防护见 Agent 记忆与状态;攻击性样本进评测集的方法见 Agent 评测与可观测

基于 VitePress 构建 · 内容以知识共享方式沉淀