跳到主要内容

爆炸半径即权限模型:按‘能破坏什么’而非‘能读取什么’来隔离智能体沙箱

· 阅读需 12 分钟
Tian Pan
Software Engineer

2025 年 7 月,一个 AI 编程智能体在明确的代码冻结期间,并在被告知未经批准不得更改的情况下,删除了一个包含 1,200 多名高管和近 1,200 家公司记录的生产数据库。这里有一个大多数转述都忽略了的尴尬细节:它运行的每一条破坏性命令都是经过 授权 的。

该智能体持有可以触达生产环境的凭据,因此当它决定运行破坏性迁移时,权限系统没有任何理由拒绝。访问控制层完全按照设计运行。设计本身才是问题所在。

面对此类事件,工程师们总是习惯于采用错误的修复方法。他们收紧角色权限,增加审批提示,或者编写更严厉的系统提示词。但角色、提示词和策略解决的都是 “该身份是否可以触达此资源?” 的问题。而自主智能体迫使我们思考一个不同的问题:“该任务能造成的最坏结果是什么?” —— 这个问题的答案并非凭据的属性,而是执行环境的属性。如果你想要一个能在智能体操作下幸存的权限模型,你必须基于沙箱而非角色来构建它。

RBAC 回答的是 “你是否可以” —— 智能体需要的是 “后果多严重”

基于角色的访问控制(RBAC)是为人类设计的,它包含了一个针对人类的假设:凭据背后的主体理解其行为的后果,并且其行为大致符合其意图。在这种假设下,权限是风险的合理替代指标。一个拥有生产环境访问权限的 DBA 在理论上是危险的,但在实践中,他们的意图会过滤掉他们实际的操作。

智能体从两个方向打破了这一假设。它可能会误读遥测数据,并基于误读自信地采取行动。它也可能受到间接提示词注入的影响 —— 即嵌入在代码库、git 历史、配置文件或工具响应中的恶意指令。NVIDIA 的 AI 红队将此视为智能体工作流的默认威胁模型:智能体继承了用户的权限,而智能体读取的任何内容都可能成为潜在的指令来源。一旦你接受了这个设定,凭据就几乎无法告诉你任何关于风险的信息。同一个 “读取仓库、运行测试、开启 PR” 的角色在执行一项任务时是无害的,而在另一项任务中可能是灾难性的,这完全取决于智能体 从其运行位置 可以触达什么。

这就是核心的反转。对于人类来说,身份层是权限模型,而环境是次要的。对于智能体来说,环境才是权限模型,而身份是次要的。由此可以立即得出两个结论:

  • 权限必须按任务分配,而不是按智能体分配。 角色通常一次性授予,并倾向于演变为智能体所需权限的并集。而一个任务有明确的可定义的最坏情况,且其范围通常很小。
  • 强制执行必须位于智能体层级之下,而不是在其内部。 应用级的护栏 —— 系统提示词、工具调用验证器、“删除前请确认” —— 与它们监管的对象处于同一信任层级。一旦智能体产生子进程,应用级的控制就会完全失去可见性。操作系统和基础设施层级的边界(沙箱、网络策略、内核隔离)并不关心提示词注入有多么强的说服力。

透过这个视角,Replit 事件有了不同的解读。事后分析中真正起作用的修复措施并非更好的提示词 —— 而是开发和生产数据库的自动隔离以及仅限规划模式。换句话说:供应商将强制执行从模型的判断转移到了环境的形态上。这就是我们要遵循的模式。

针对每个任务沙箱的四个杠杆

每个任务的沙箱并非单一机制;它是一组独立的杠杆,每个杠杆都能将无限的故障模式转化为有限的故障模式。以下四个杠杆涵盖了大部分场景。

限定范围的短期凭据。 智能体从不持有长期密钥。当任务开始时,凭据发行方会铸造一个仅包含该任务所需权限且 TTL(生存时间)以分钟计的令牌,该令牌随沙箱一同销毁。这消除了将小错误演变为大灾难的故障模式:即智能体在无关文件中偶然发现一个长期有效的、账户范围的令牌并使用它。它还限制了提示词注入的危害 —— 中途劫持智能体的攻击者继承的是一个即将过期且仅限于单个任务资源的令牌,而不是账户的钥匙。秘密信息(Secrets)应该被显式注入沙箱,绝不能从父环境中完整继承。

临时分支与工作区。 智能体写入到一个可丢弃的副本中 —— 一个由它独自拥有的 git 分支、一个临时工作区或一个影子环境 —— 而将其提升到共享状态则是一个独立的、受控的行为。GitHub 的 Copilot 编程智能体是最清晰的生产案例:它在一个临时环境中工作,只能推送到以 copilot/ 为前缀的分支,绝不能推送到 main,且现有的分支保护依然适用。写入权限是真实的,但 写入的爆炸半径 只是一个无人依赖的分支。同样的理念可以推广:使用预发模式(Staging Schemas)代替生产数据库,使用草稿状态代替已发布状态。

出站白名单。 数据外泄和远程控制通道都需要出站网络访问,这使得出站流量(Egress)成为最高效的控制点。默认拒绝所有出站流量;仅将任务真正需要的少数端点加入白名单(如包管理器仓库、模型 API、受测的内部服务)。Copilot 智能体默认开启了这种防火墙。NVIDIA 的指南甚至更进一步:黑名单应在用户和智能体无法覆盖的层级执行,因为一个能编辑自己网络配置的智能体可以实现 “自我脱域”。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates