沙盒 2 说明

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

沙盒 2 的设计基于知名的成熟技术、政策框架以及两个流程:沙盒执行器和沙盒。

涉及的技术

下面几部分介绍了为 Sandbox2 构建基础层的技术。

Linux 命名空间

Linux 命名空间是尝试提供操作系统级虚拟化。虽然多个用户空间看起来似乎彼此独立,但它们共用一个内核实例。Sandbox2 使用以下类型的命名空间:

  • IPC
  • 网络(除非通过调用 PolicyBuilder::AllowUnrestrictedNetworking() 明确停用)
  • 装载(使用文件系统树的自定义视图)
  • PID
  • 用户(通过调用 PolicyBuilder::AllowUnsafeKeepCapabilities() 明确停用的情况除外)
  • UTS

如需详细了解 Linux 命名空间,请访问 Wikipedia 或相关手册页面。

IPC

Sandbox2 支持在沙盒执行器和不受信任的沙盒之间交换任意数据。它支持类型长度值 (TLV) 消息、传递文件描述符以及通过令牌和句柄进行凭据交换。

Seccomp-BPF

Sandbox2 依赖于 seccomp-bpf,后者是安全计算模式 (seccomp) 的扩展,允许使用柏克莱封包过滤器 (BPF) 规则来过滤系统调用。

seccomp 是一种 Linux 内核工具,可仅允许进程的系统调用使用 exitsigreturnreadwrite。如果某个进程尝试执行其他系统调用,系统会终止该调用。与 seccomp 相比,seccomp-bpf 扩展程序的灵活性更高。seccomp-bpf 可对系统调用数据运行 BPF 程序,然后可以根据程序的返回值运行系统调用、跳过系统调用并返回虚拟值、终止进程、生成信号或通知跟踪程序,而不是使用一组固定的系统调用。

Ptrace

ptrace(进程跟踪)系统调用提供的功能可让跟踪程序进程观察和控制跟踪进程的执行。跟踪程序进程在连接轨迹后拥有完全控制权。如需详细了解 ptrace,请访问维基百科或相关手册页面。

沙盒政策

沙盒政策是沙盒中最重要的部分,因为它指定了沙盒可以和无法执行的操作。沙盒政策分为两部分:

  • Syscall 政策
  • 命名空间设置

默认 Syscall 政策

默认政策会屏蔽始终危险的系统调用,并优先于用户提供的扩展政策。

扩展 Syscall 政策

您可以使用我们的 PolicyBuilder 类创建扩展的系统调用政策。此类定义了一些便捷规则(例如 AllowStaticStartupAllowDynamicStartupAllowOpen),它们可用于提高政策的可读性。

如果您想进一步限制系统调用或需要更复杂的规则,可以使用 AddPolicyOnSyscallAddPolicyOnSyscalls 指定原始 BPF 宏。crc4 示例利用此机制来限制 readwriteclose 系统调用的参数。

一般而言,沙盒政策越严格,就越利于攻击者攻击代码中存在的漏洞。如果您能够明确地说明哪些程序调用和参数可以正常执行程序,那么利用代码执行漏洞的任何攻击者也都受到同样的限制。

非常严格的沙盒政策可以拒绝所有系统调用,但对标准输入和输出文件描述符执行读写操作除外。在此程序中,程序可以获取输入、对其进行处理并返回输出。不过,如果该进程尝试进行任何其他系统调用,则会因违反政策而终止。因此,如果进程遭到入侵(恶意用户执行代码),那么它将无法执行比生成不良输出(执行器和其他人仍然需要正确处理)更好的操作。

命名空间设置

PolicyBuilder 对象还可用于设置沙盒的文件系统个人视图。单个文件 (AddFile / AddFileAt)、整个目录 (AddDirectory / AddDirectoryAt) 和临时存储 (AddTmpfs) 可映射到沙盒环境中。此外,AddLibrariesForBinary 可用于自动映射指定动态链接的可执行文件所需的全部库。

命令行 flag

您可以通过指定以下某个命令行 flag 来停用任何 Sandbox2 政策。这些标记仅用于测试目的(例如在优化扩展 Syscall 政策时)。

  • --sandbox2_danger_danger_permit_all
  • --sandbox2_danger_danger_permit_all_and_log

沙盒执行程序

沙盒执行器是一个本身未沙盒化的进程。它是附加到沙盒的 ptrace 跟踪器进程(ptrace 跟踪记录进程)。沙盒执行器还会设置一个并运行监控实例,该实例用于跟踪沙盒并提供状态信息。

Sandbox2 支持三种执行模式:独立模式、Sandbox2 分支服务器和自定义分支服务器。如果您使用分支服务器,则创建 Sandboxee 是沙盒执行器的子级进程。本文将详细介绍这些模式。

沙盒

沙盒是指在沙盒政策定义的受限沙盒中运行的进程。沙盒执行器通过 IPC 将政策发送给沙盒。随后,沙盒会应用该政策。任何违反政策的行为都将导致流程终止,除非另有配置(请参阅沙盒政策)。