当您必须依赖第三方开发的软件(您无权访问源代码)或没有执行源代码评估的资源时,对不受信任的代码进行沙盒化非常有用。沙盒还可以作为您代码的额外安全边界。

根据您的用例,您可以使用不同的工具控制代码。下表简要介绍了不同产品及其适用用例。其中一些产品是在 Google 内部使用的,由 Google 工程师开发。

Sandbox2 和沙盒 API 是由 Google 安全团队的沙盒部门开发的两款产品。

产品 说明 用例
沙盒 2 使用命名空间、资源限制和 seccomp-bpf 系统调用过滤器的 Linux 沙盒。为沙盒化 API 提供底层沙盒技术。 常规沙盒
gVisor 在应用内核中实现系统调用。使用 ptrace 或硬件虚拟化拦截系统调用。 常规沙盒
对话泡 使用部分用户命名空间实现的沙盒工具。用作 Flatpak 等执行引擎。 CLI 工具
迷你监狱 Chrome 操作系统和 Android 中使用的沙盒和包含工具。提供一个可执行文件和库,它可用于启动其他程序和代码并将其沙盒化。 CLI 工具
NSJail Linux 中的进程隔离,使用命名空间、资源限制和 seccomp-bpf 系统调用过滤器。可以选择使用 Kafel(一种自定义网域专用语言)指定系统调用政策。 CLI 工具
沙盒化 API 使用 Sandbox2 实现可重复使用的 C/C++ 库沙盒。 C/C++ 代码
原生客户端 已弃用

这是一种强大的技术,可通过编译到受限的 x86 (NaCl)/LLVM 字节码 (PNaCl) 子集中实现沙盒化 C/C++ 二进制文件。

对其继承者 (WebAssembly) 的设计产生了影响,并主要被其取代。

C/C++ 代码
WebAssembly (WASM) 便携式二进制文件的二进制格式。WASM 模块在独立的运行时环境中执行。 C/C++ 代码
RLBox 沙盒 API(使用 C++17 编写),可以使用各种执行后端:Native Client、WebAssembly 或远程进程。 C/C++ 代码
Flatpak 卡 基于 Bubblewrap 构建,可为 Linux 桌面应用提供沙盒功能。强调原生应用的打包和分发。 桌面应用

Sandbox2 是一款适用于 Linux 的开源 C++ 安全沙盒。借助 Sandbox2,您可以将运行时环境限制为真实操作所需的最低规模,从而限制潜在代码执行漏洞的影响。

Sandbox2 可用于沙盒化所有程序或用 C/C++ 编写的部分程序。

沙盒 API (SAPI) 是一个用于沙盒 C/C++ 库的开源项目。通过沙盒化 API 可以轻松地重复使用沙盒,这样便消除了未来项目的负担。在沙盒化 API 推出之前,可用于 Google 沙盒的沙盒需要为要沙盒化的项目中的每个新实例执行额外的实现工作,即使它重复使用了同一软件库也是如此。每次在沙盒环境中应用 Sandbox2 政策和其他限制时,都必须重新实现,并且代码部分可信和不可信部分之间的数据交换机制必须从头开始设计。