← 返回 Blog

Anthropic 开源了 Sandbox Runtime:拆解 Claude Code 沙箱隔离的三层边界设计(附 Seatbelt profile 核心思路)

它叫 Sandbox Runtime(简称 SRT),一个用 TypeScript+Node.js 编写的轻量级命令行工具,采用 Apache 2.0 开源协议。它的核心功能只有一个:将任意进程关进一道预先划定的安全围栏内,从操作系统底层筑牢 AI 运行的安全边界。

ClaudeAI Agent 安全的轻量级终极防线

Sandbox Runtime:AI Agent 安全的轻量级终极防线

基于操作系统原生能力的环境层隔离方案解析

它叫 Sandbox Runtime(简称 SRT),一个用 TypeScript+Node.js 编写的轻量级命令行工具,采用 Apache 2.0 开源协议。它的核心功能只有一个:将任意进程关进一道预先划定的安全围栏内,从操作系统底层筑牢 AI 运行的安全边界。

  • macOS 平台:通过 sandbox-exec 调用苹果原生 Seatbelt 强制访问控制框架,动态生成安全配置文件
  • Linux 平台:通过 bubblewrap(bwrap)+socat 建立完整的命名空间隔离与网络桥接

整个方案不依赖 Docker,无需额外安装容器运行时,直接在操作系统内核层面实现权限管控,将所有危险操作拦截在萌芽状态。

第一堵墙:文件系统隔离 —— 内核级的精准权限管控

这是最基础也最核心的一层防护。Sandbox Runtime 在 macOS 上调用的 sandbox-exec 工具,其底层基于苹果自 OS X 10.5 版本起就内置在内核中的 Mandatory Access Control(强制访问控制)框架。它能够实现颗粒度极细的权限控制:精确指定哪些路径可读、哪些可写、哪些对进程完全不可见。

典型的配置文件(~/.srt-settings.json)格式如下:

json

{
  "filesystem": {
    "denyRead": ["~/.ssh", "/etc"],
    "allowWrite": ["."],
    "denyWrite": ["~/sensitive-folder"]
  },
  "network": {
    "allowedDomains": ["example.com"],
    "deniedDomains": []
  }
}

在这套规则下,AI 可以在当前工作目录内自由读写,但 /etc 和~/.ssh 等敏感目录,别说写入,就连读取都会被直接拦截。整个设计贯穿一条不可动摇的铁律:默认拒绝,显式授权。进程一启动就处于最小权限状态,任何额外的访问权限都必须由用户手动开启。

这里有一个常被忽略却致命的设计原则:限制沙箱时,必须同时约束文件系统和网络,只限制其中一个等于完全没有限制。

  • 没有网络隔离:被入侵的 AI 可以将~/.ssh/id_rsa 等密钥文件上传到任意外部服务器
  • 没有文件系统隔离:被入侵的 AI 可以篡改沙箱自身的配置文件,甚至直接逃逸到宿主机

两道防线必须同时建立,缺一不可。

第二堵墙:网络强制代理 —— 把 AI 的 "网线" 牢牢攥在手里

Sandbox Runtime 的网络隔离设计尤为精妙。它在网络出入口部署了两台代理服务器:一台 HTTP/HTTPS 代理负责过滤 Web 流量,一台 SOCKS5 代理负责过滤裸 TCP、SSH 等所有其他类型的连接。

沙箱内进程的所有出站流量都不会直接连接外网,而是被强制重定向到这两条代理通道:

  • 当沙箱内的进程发起curl https://api.anthropic.com请求时,它实际上被透明转发到运行在宿主机上的代理进程,由代理根据白名单规则决定是否放行
  • 在 macOS 上,Seatbelt 配置文件将进程的网络通信范围严格限制在唯一的localhost端口;在 Linux 上,bubblewrap 会完全摘除进程的网络命名空间(--unshare-net),所有流量只能通过绑定进来的 Unix 域套接字传输到宿主机代理

这种 "强制代理架构" 从根本上消除了进程绕过控制直连外网的可能性。所有网络访问只能通过这座唯一的 "独木桥",而桥头的 "门卫" 严格执行用户制定的白名单规则。

官方数据显示,Claude Code 接入这套沙箱系统后,不必要的权限弹窗减少了 84%,极大提升了开发者的使用体验,同时安全等级反而显著提高。

读写不对称:"宽松读" 与 "偏执写" 的安全哲学

第三道防线隐藏在访问控制模型的细节之中 ——SRT 对读操作和写操作采取了截然不同的管控策略:

表格

操作类型默认策略核心逻辑典型拦截场景
读(Read)默认放行,黑名单拦截全盘可读基础上,精准切掉敏感区域,必要时可在禁区内单独开放权限禁止读取~/.ssh、.bashrc、.git/config 等包含敏感信息的文件
写(Write)默认拒绝,白名单授权所有写入操作全部禁止,必须逐条显式授权才能执行仅允许写入当前工作目录,其他路径一律拦截

这套不对称设计背后的判断既冷酷又准确:

  • "偷看" 的后果是数据泄露,而 "动手修改" 的后果可能是整机失守,因此对写操作必须采取极端保守的态度
  • 读操作采用黑名单模式可以在保障安全的前提下,不影响正常的编译、测试和依赖安装流程

此外,SRT 还设置了一层不可修改的强制拒绝路径:像.bashrc、.zshrc、.git/hooks/、.mcp.json 这类一旦被写入就等于留下 "投毒后门" 的文件,无论用户在 allowWrite 中如何配置,都会被一律禁止写入。这是硬编码在程序中的安全底线,无法通过任何配置绕过。

Seatbelt 配置的核心哲学:四句话讲透安全边界

将 Seatbelt 安全配置的设计思想拆解到本质,其实可以概括为四句话:

  1. 锁通信:沙箱内进程唯一合法的对外通道是指向代理的localhost端口,所有外网访问必须经过代理白名单审核
  2. 锁路径:~/.ssh、/etc、/System 等核心敏感目录在 Seatbelt 层面直接标记为不可读 / 不可写,甚至不让进程感知到它们的存在
  3. 子进程继承:所有安全限制会沿整个进程树向下继承,AI 创建的任何子进程都会带着同样的权限约束出生,彻底堵死通过 fork 绕过权限检查的逃逸路径
  4. 默认拒绝:配置文件只显式放行极少数经过严格审计的安全操作,其余所有行为全部禁止

最终实现的效果是:AI 在工作区内可以自由地编译代码、运行测试、安装依赖,但系统的核心敏感区域从物理层面就无法触及。

写在最后:安全的本质是物理隔离

当配置生效后,你在沙箱中执行:

bash

运行

srt "cat ~/.ssh/id_rsa"

你看到的不会是密钥内容,而是:

plaintext

cat: /Users/.../.ssh/id_rsa: Operation not permitted

一个空字节曾经能够轻易短路掉基于字符串匹配的白名单检查,但那不是因为攻击者太聪明,而是因为过去的安全设计哲学从根上就错了。Sandbox Runtime 的出现,标志着 AI 安全正式从 "模型判断审查" 转向 "系统硬阻断"。

Agent 安全最实在的方向,也许就是这句话:不是教 AI 别碰不该碰的东西,而是让它物理上就碰不到。

在 AI 技术加速迭代、安全挑战日益严峻的今天,企业在构建完善的环境层安全防御体系的同时,选择稳定可靠、安全合规的 AI 服务接入渠道同样至关重要。UseAIAPI作为专业的全球 AI 大模型接入平台,提供 Gemini、Claude、ChatGPT、DeepSeek 等全球主流最新 AI 大模型的一站式接入服务,同时支持企业级定制化解决方案,无需复杂的技术配置即可快速部署上线。为切实帮助企业降低 AI 应用门槛和成本,UseAIAPI 推出重磅优惠活动,所有服务最低可享官方价格 5 折,大幅减轻企业高强度内容生成、大规模 AI 应用开发和部署的算力负担,让企业能够在筑牢安全防线的前提下,充分释放 AI 技术的创新潜力与商业价值。