用 sandboxing 让 Claude Code 更安全、更自主

原文:Making Claude Code more secure and autonomous with sandboxing

导读

本文介绍 Claude Code 的 sandboxing 能力:通过文件系统隔离和网络隔离,在减少 permission prompt 的同时控制 prompt injection、凭据外传和恶意命令带来的风险。

核心观点

正文

在 Claude Code 中,Claude 会与你一起编写、测试和调试代码:它会浏览你的 codebase、编辑多个文件,并运行命令来验证自己的工作。给 Claude 这么多访问 codebase 和文件的能力会引入风险,尤其是在 prompt injection 场景下。

为了解决这个问题,我们在 Claude Code 中引入了两个建立在 sandboxing 之上的新功能。二者都旨在为开发者提供更安全的工作空间,同时让 Claude 能以更高自主性、更少 permission prompt 运行。在我们的内部使用中,sandboxing 已经可以安全地减少 84% 的 permission prompt。通过定义 Claude 可自由工作的固定边界,它们同时提升了安全性和 agent 的行动能力。

让 Claude Code 用户保持安全

Claude Code 运行在基于 permission 的模型上:默认情况下它是只读的,这意味着在修改内容或运行任何命令之前,它会先请求 permission。也有一些例外:我们会自动允许像 echo 或 cat 这样的安全命令,但大多数操作仍然需要明确批准。

不断点击“approve”会拖慢开发循环,并可能导致 approval fatigue:用户可能不再仔细关注自己正在批准的内容,进而让开发过程变得更不安全。

为了解决这一点,我们为 Claude Code 推出了 sandboxing。

要点:permission prompt 本身是安全机制,但过多 prompt 会削弱人的判断质量,sandboxing 的目标是把边界前移到执行环境。

Sandboxing:一种更安全、更自主的方法

Sandboxing 会创建预先定义的边界,Claude 可以在这些边界内更自由地工作,而不是为每一个动作请求 permission。启用 sandboxing 后,你会收到大幅减少的 permission prompt,同时获得更高安全性。

我们的 sandboxing 方法建立在操作系统级功能之上,用来启用两类边界:

值得注意的是,有效的 sandboxing 同时需要 filesystem isolation 和 network isolation。没有 network isolation,被攻破的 agent 可能外传 SSH key 等敏感文件;没有 filesystem isolation,被攻破的 agent 则可能轻易逃出 sandbox 并获得网络访问。正是通过同时使用这两种技术,我们才能为 Claude Code 用户提供更安全、更快速的 agentic experience。

Claude Code 中的两个新 sandboxing 功能

Sandboxed bash tool:无需 permission prompt 的安全 bash 执行

我们正在引入一个新的 sandbox runtime,目前以 beta 形式作为 research preview 提供。它让你精确定义 agent 可以访问哪些目录和网络 host,同时避免启动和管理 container 的开销。它可用于 sandbox 任意 process、agent 和 MCP server,也作为开源 research preview 提供。

在 Claude Code 中,我们使用这个 runtime 来 sandbox bash tool,让 Claude 能在你设置的定义边界内运行命令。在安全 sandbox 内,Claude 可以更自主地运行,并安全执行命令而无需 permission prompt。如果 Claude 试图访问 sandbox 外的内容,你会立刻收到通知,并可以选择是否允许。

我们基于 Linux bubblewrap 和 MacOS seatbelt 等 OS-level primitive 构建该能力,在 OS 层强制执行这些限制。它们不仅覆盖 Claude Code 的直接交互,也覆盖由命令生成的任何 script、program 或 subprocess。如上所述,这个 sandbox 同时执行两类隔离:

这两个组件都是可配置的:你可以轻松选择允许或禁止特定 file path 或 domain。

Claude Code 的 sandboxing 架构通过 filesystem 和 network 控制来隔离代码执行,自动允许安全操作、阻止恶意操作,并且只在必要时请求 permission。

Sandboxing 可以确保即使 prompt injection 成功,也会被完全隔离,无法影响用户整体安全。这样一来,被攻破的 Claude Code 无法窃取你的 SSH key,也无法向攻击者的服务器回连。

要开始使用该功能,请在 Claude Code 中运行 /sandbox,并查看关于我们安全模型的更多技术细节。

为了让其他团队更容易构建更安全的 agent,我们已经开源了这个功能。我们认为其他团队也应考虑在自己的 agent 中采用这项技术,以增强其 agent 的安全态势。

Web 上的 Claude Code:在云端安全运行 Claude Code

今天,我们还发布了 Claude Code on the web,让用户能够在云端的隔离 sandbox 中运行 Claude Code。Claude Code on the web 会在一个隔离 sandbox 中执行每个 Claude Code session,在安全可靠的方式下拥有对其服务器的完整访问。我们设计这个 sandbox 的目标,是确保敏感凭据(例如 git credential 或 signing key)永远不会和 Claude Code 一起出现在 sandbox 内。这样,即使 sandbox 中运行的代码被攻破,用户也能避免进一步伤害。

Claude Code on the web 使用一个自定义 proxy service,透明处理所有 git 交互。在 sandbox 内,git client 会使用专门构建的 scoped credential 向该服务认证。proxy 会验证这个 credential 和 git 交互内容(例如确认它只 push 到配置好的 branch),然后在把请求发送到 GitHub 之前附加正确的 authentication token。

Claude Code 的 Git integration 会通过一个 secure proxy 路由命令,该 proxy 会验证 authentication token、branch name 和 repository destination,从而允许安全的 version control workflow,同时防止未授权 push。

要点:桌面侧用 OS sandbox 管住命令执行,Web 侧把 credential 留在 sandbox 外,用 proxy 把 git 操作变成可验证、可限权的协议。

开始使用

新的 sandboxed bash tool 和 Claude Code on the web,为使用 Claude 进行工程工作的开发者在安全性和生产力上都带来了显著改进。

要开始使用这些工具:

或者,如果你正在构建自己的 agent,可以查看我们开源的 sandboxing 代码,并考虑把它集成到你的工作中。我们期待看到你构建出的成果。

要了解更多关于 Claude Code on the web 的信息,请查看我们的 launch blog post。

Acknowledgements

本文由 David Dworken 和 Oliver Weller-Davies 撰写,Meaghan Choi、Catherine Wu、Molly Vorwerck、Alex Isken、Kier Bradwell 和 Kevin Garcia 参与贡献。

本文为 Anthropic 官方工程博客文章。

深度解读

这篇文章的重点不是“让 agent 少问几次”,而是把权限控制从人反复点击转移到可执行的环境边界。传统 permission prompt 依赖用户在每次动作前保持注意力,但 agentic coding 的命令密度很高,长期审批很容易变成机械动作。Anthropic 的方案更像是把安全策略下沉:filesystem isolation 限定 agent 能碰哪些文件,network isolation 限定它能把信息发到哪里,二者组合后才真正能抑制 prompt injection 的后果。Web 版设计也展示了同一原则:不要把高价值 credential 放进 agent 可触达的环境,而是通过 proxy 将 git 操作约束到 branch、repo 和 token 级别。这对所有 agent 产品都有借鉴意义:自主性不是简单跳过 permission,而是先明确可行动边界,再让模型在边界内尽量自由。

落地启示