不断失效的框架
大多数 Agent 安全讨论仍然围绕提示词展开。所问的问题是模型是否会被诱导生成有害文本,所提出的控制措施是分类器或系统指令。一旦 Agent 被赋予凭证和工具,这个框架就立刻失效。一次产生工具调用的提示词注入不是内容审核事件。它是对 Agent 权限集的远程代码执行,由一个恰好是语言模型的解释器执行。
这一区别很重要,因为缓解措施不同。提示词过滤器作用于输入,是概率性的。权限边界作用于能力,是确定性的。只部署前者的团队是在防御错误的层面。
攻击者已经完成了这一转变。关于用于盗刷信用卡的 Agent 集群的报道描述的是基础设施,而非对话:编排的进程负责开通账户、持有支付凭证,并通过下游服务转移价值。Agent 就是工作负载。提示词仅仅是其接口。
身份供应商正在得出相同的结论。关于 Agent 身份的工作——为 Agent 颁发自己的主体、限定其令牌范围、审计其操作——之所以存在,正是因为持有凭证的 Agent 是需要身份生命周期的工作负载。这是正确的框架,也是本文论证所依据的框架。
横向移动是什么样子
横向移动是攻击者在获得初始访问权限后,用来触达未被授予的系统的一组技术。对于 Agent,初始访问通常是通过 Agent 读取的内容成功注入:检索到的文档、工具响应、网页、工单正文。从那里开始,Agent 自己的权限就变成了攻击者的权限。
考虑一个 Agent,它对一个数据集有读取权限,并对一个下游工具——工单系统、消息 API、代码托管——有写入权限。单独来看,两个权限都不过度。组合起来,它们形成了一条外泄路径:读取数据集,将结果编码到下游工具会接受的字段中,然后写出去。每一次单独的调用都在声明的范围内。组合起来则不是。
这相当于一个服务账户可以读取数据库并写入外部端点。没有成熟的安全团队会接受这种配对而不加出口控制。Agent 部署却经常接受它,因为工具列表在配置文件中看起来很整洁。
两个乘数使情况更糟。
第一,共享工具凭证。当多个 Agent 使用同一个密钥向同一个工具进行身份验证时,一次泄露的影响范围就是整个集群。无法在不撤销所有 Agent 的情况下撤销被泄露的 Agent,也无法在事后将调用归因于特定 Agent。审计日志记录的是服务账户,而不是主体。

第二,长期有效的令牌。一个生命周期为多天的令牌会将一次成功的注入变成持久的立足点。攻击者不需要重新注入;他们持有的凭证在产生它的对话结束后仍然有效。以周为单位的轮换窗口将一次短暂事件转化为长期访问授权。
真正起作用的控制措施
减少影响范围的控制措施与应用于任何特权工作负载的措施相同,只是针对 Agent 的调用模式进行了调整。
每个 Agent、每个工具、短期凭证
每个 Agent 都应持有自己的身份,并且该身份应限定到它所需的特定工具。凭证应在任务开始时颁发,并在任务结束时过期,同时带有明确的受众限制,指明其有效工具。为只读分析端点铸造的令牌,即使被正确出示,也必须被消息 API 拒绝。
这是标准的工作负载身份实践。权衡在于运维:短期凭证需要 Agent 能够访问的令牌颁发路径,而该路径会成为依赖项。如果颁发不可用,Agent 就会停止工作。团队必须决定,降级的 Agent 是否比长期凭证更可取,答案通常是肯定的——但这必须经过设计,而不是假设。
网络层的出口允许列表
工具级限制是必要的,但不充分。如果 Agent 的运行时可以打开任意出站连接,被攻陷的 Agent 就可以通过不受任何工具策略管辖的通道外泄数据。出口应在网络层限制为 Agent 合法需要的目的地,并相应地约束 DNS 解析。
这里诚实的权衡是摩擦。当工具添加端点、供应商更换 CDN,或合法工作流触达新主机时,允许列表就会失效。成本是真实且反复发生的。它仍然低于无限制出口路径的成本,但团队应为维护做预算,而不是将允许列表视为一次性配置。
不可变的轨迹日志
每次工具调用都应记录授权它的主体、使用的凭证、传递的参数以及返回的结果。日志必须是仅追加的,并存储在
code-on-screen-dark-9fc1eb-81348e.jpg)
机制比格式更重要。有用的轨迹记录连接三件事:Agent 身份、特定凭证实例和工具调用。没有凭证实例,就无法区分轮换前和轮换后的调用。没有 Agent 身份,就无法将事件范围限定到单个 Agent,而不是共享账户。
评估作为安全控制
Agent 的安全评估应遵循用于服务的模式:假设输入是对抗性的,并衡量对手能触达什么。
像对 API 进行红队测试一样对 Agent 进行红队测试。通过 Agent 读取的每个通道注入——检索到的文档、工具输出、用户消息、文件内容——并观察导致哪些工具调用。目标不是找到产生不良文本的提示词。而是找到产生未授权调用的输入。
评分遏制力,而非拒绝率。拒绝率告诉你 Agent 拒绝的频率。遏制力评分告诉你成功注入传播多远:它触达多少工具、可以使用多少凭证、由此产生的访问持续多久。拒绝率是质量指标。遏制力是安全指标,也是映射到影响范围的指标。
实际输出是每次注入的遏制力包络:给定在点 X 成功注入,哪些工具可达、哪些凭证可用,以及由此产生的访问生命周期。这个包络就是你通过上述控制措施缩小的对象,也是你向利益相关者报告的内容。
公布攻击面
Agent 部署应随系统提示词一起提供攻击面文档。文档应说明 Agent 将哪些输入视为不可信、它可以调用哪些工具、每个工具的凭证可以触达什么、允许出口的位置,以及在成功注入下的遏制力包络是什么样子。
这不是披露练习。这是设计产物。写下可达工具集迫使人们质疑每条边是否必要,并为事件响应者提供了起始地图。系统提示词描述预期行为。攻击面文档描述当提示词不受控制时系统实际能做什么。
这两份文档不能互相替代。提示词是接口契约。攻击面是安全契约。Agent 系统两者都需要,而后者将被一个从不阅读前者的对手测试。
封面照片:panumas nikhomkhai / Pexels。
