← 返回所有文章
发布于 · 作者 Renaud Deraison

一份代理安全参考架构,以及 Bromure 如何与之对应

来自 Docker、Keycard、Barclays、Socket 和 Secure Theory 的工程师发布了 The Secure Software Factory,这是一份安全运行编码代理的参考架构,以 Agent Baseline 控制项为基础。这是一个良好的开端,我们乐于看到它。本文介绍 Bromure Agentic Coding 如何覆盖它的四条边界,以及在观察和响应方面走得更远的地方。

10 月 13 日,一群工程师发布了 The Secure Software Factory,这是一份面向那些让编码代理编写、测试和发布代码的组织的参考架构。起草者包括 Eli Aleyner、Ranti Familusi 和 William Manning(Docker),Allie Howe 和 Ian Livingstone(Keycard),Andy McMahon(Barclays),Ahmad Nassri(Socket)以及 Aaron Stanley(Secure Theory)。它以 Agent Baseline 为基础,后者是一套分为六项成果的 35 个控制项,由 Keycard 联合 Docker 和 Snyk 的工程师共同发起。

我们很高兴看到它。这是一份公开、有版本号的草案,控制项标识符保持稳定,采用 CC BY 4.0 许可,在 GitHub 上公开征求意见,并计划在成熟后捐赠给一个社区机构。厂商以及向厂商采购的团队,如今可以指向同一套控制项了。

这份架构要求什么

它的核心思想一句话就能说清:代理提出,策略授权,基础设施执行。代理被视为不可信的,无论它是犯了糊涂、被读到的内容操纵,还是被人接管,因此对它的限制必须在它自己的决策之外执行。文档划定了四条边界:

  • 沙盒: 代理的代码只在一个它无法修改、也无法逃逸的隔离沙盒中运行。
  • 网络: 除了代理无法重新配置或绕过的路径之外,任何东西都进不来也出不去。
  • 供应链: 组件只能来自经批准的来源,进入沙盒的任何东西都不携带凭据。
  • 身份与访问: 代理只使用为其任务授予的访问权限,从不持有凭据,高影响操作需要一个它自己无法给出的批准。

这些边界在三个自主级别上都成立:开发者操控一个代理(级别 1),工作流把代理作为共享服务来运行(级别 2),以及由一个编排代理决定下一步做什么(级别 3)。围绕它们的,是一个能够停止任何代理的执行层,以及一条任何代理都触及不到的审计记录。

它以真实事件为依据。其中一起事件里,一个处理预发布环境任务的编码代理在一个无关文件中发现了一个 API 令牌,并用它在九秒钟内删除了一个生产数据库。在 Shai-Hulud 蠕虫事件中,恶意软件包会收集安装它们的机器上能找到的一切凭据。

Bromure 如何覆盖这四条边界

Bromure Agentic Coding 运行在你的 Mac 上,把每个代理工作区放进各自独立的 Linux VM。下面是两者的对应关系。

边界架构的要求Bromure
沙盒隔离程度与风险相匹配,最高可达拥有独立内核的 microVM;无法访问主机;测试在同一隔离环境中运行;可按需停止,并将状态保留为证据每个工作区一台完整的 Linux VM,拥有自己的内核和自己用于测试的 Docker。配合 OpenShell 策略,Landlock 和 seccomp 会在 VM 内部约束代理。机器可以暂停,保存以供调查会在机器被清除之前导出它的磁盘
网络所有流量都经过一个出站代理服务器,在网络层强制执行,而不是依赖代理设置;逐操作执行Mac 的虚拟交换机检查每一条连接,并把 Web 流量转入 Bromure 的代理服务器,即使某个工具无视代理设置也是如此。规则可以限制 HTTP 方法;配合 OpenShell 策略,还能限制路径以及 MCP、GraphQL 和 WebSocket 操作
供应链软件包只能经由一个准入点获取;新版本需要等过冷却期;进入沙盒的任何东西都不携带凭据来自八个生态系统的安装都要经过 Bromure 的检查:对新版本的两天版本年龄门槛(默认开启),以及可选的 OSV 和 socket.dev 查询。没有得出结论的软件包会被暂扣,等待你来决定
身份与访问代理从不持有凭据;凭据在代理服务器处附加;高影响操作需要批准VM 中只会有替身令牌;代理服务器会针对正确的主机换上真实令牌。SSH 密钥留在 Mac 上,AWS 请求在 VM 之外重新签名。git push 之类的写操作可以要求点击确认,代理的分支只有在你批准后才会合并

对这类事件来说,凭据边界最为关键。一个在 Bromure VM 中收集凭据的 Shai-Hulud 软件包只能找到替身令牌,而这些令牌离开 Bromure 的代理服务器就毫无用处。(其中一位作者所在的 Socket,也是 Bromure 可以使用的软件包检查之一。)

自主级别也能一一对应。开发者在会话中运行代理,属于级别 1。按计划启动代理,或在 GitHub 拉取请求、Linear 问题到来时启动代理的自动化,每次都在全新的 git worktree 中运行,并可选择在机器的一次性克隆中运行,属于级别 2。代理把工作委派给其他代理,每条消息都由主机中转、筛查提示注入并记录日志,这是级别 3 的开端。

Bromure 走得更远的地方

这份草案对自身的弱点十分坦率。它的来源声明指出,在六项成果中,发现、观察和响应“没有任何一家发起组织在销售”,并且“相应地发展得较不成熟”,还把这种不对称称为“一个缺陷”。它还说,按照该基线自己的检验标准,三家发起公司中没有一家是完整的实现。把这样的话写下来,坦诚得少见。

观察和响应正是我们投入最多的地方:

  • 从内核内部观察。 架构要求沙盒运行时记录进程、文件和网络活动。Bromure 的内核哨兵从客户机内核内部做到这一点,并通过一条 VM 里的 root 无法关闭的通道把数据流式传到 Mac 上。任何让它沉默的企图都会被视为篡改。
  • 从意图到结果。 Agent Baseline 的控制项 OBS-05 要求提供证据,把代理想做的事与它实际做的事联系起来。Bromure 的溯源链会把每一条连接回溯到打开它的进程,再到代理的工具调用,以及模型为该调用给出的推理。当某个依赖的安装脚本试图向外发送数据时,你能看到运行它的那次安装,以及代理为什么要运行那次安装。
  • 筛查输入。 架构把代理读到的一切都视为不可信。Bromure 可以在你的 Mac 上扫描工具结果和 CLAUDE.md 之类的规则文件,检查其中的提示注入;它会筛查代理之间的每一条消息,并且在自动化根据 GitHub 或 Linear 事件采取行动之前,总会先筛查事件的文本。
  • 发送去推理的数据。 Bromure 的 PII 保护会在请求到达云端模型之前,把姓名、电子邮件、账号等数据替换为替身,并在回复中还原它们。
  • 响应时保全证据。 当 Bromure 发现某个凭据流向了不该去的地方,它会暂停 VM。你可以把它关机,或者保存它的磁盘以供调查,此后这台机器在被清除之前将拒绝启动。在 OpenShell 策略下,短时间内大量操作被拒绝会使工作区进入隔离状态:网络切断,VM 暂停。
  • 任何代理都触及不到的记录。 每台机器的模型请求、工具调用、命令和文件活动记录都以加密方式存储在 Mac 上,位于 VM 之外。

在运行位置上还有一处不同。这份架构是为“工厂”而写的,而级别 1,也就是使用本地代理的开发者,只占了几段篇幅。可如今大多数代理正是在那里运行的。Bromure 把这四条边界放到了这位开发者的 Mac 上,无需搭建任何基础设施,而且免费、开源。

一个良好的开端

The Secure Software Factory 是第 1 版,正在征求意见:它对自己的主张很谨慎,对哪些公司的产品塑造了它也很坦诚。它的问题跟踪器向所有人开放,而我们认为,关于观察和响应的章节是最有待补充的部分。

越来越多从事代理安全的公司公开协作,并采用稳定的控制项标识符,这对每一个运行代理的人都有好处。