Microsoft 执行容器 (MXC) 概述

Microsoft 执行容器 (MXC) 为沙箱化不受信任代码提供统一抽象

Microsoft 执行容器 (MXC) 是一个沙箱化代码执行系统,旨在运行不受信任的工作负载——特别是模型输出、插件和工具——在 Windows、Linux 和 macOS 上。它作为一个 SDK 依赖项,直接集成到应用程序中,允许开发人员使用统一的容器模型和针对 Rust、.NET 和 Node.js 的类型化 SDK,在隔离环境中启动工作负载。

策略驱动的容器模型

MXC 使用基于 JSON 的配置来定义安全策略和容器创建请求。这允许开发人员指定容器类型、容器规则和工作负载命令,而无需管理底层平台特定的沙箱实现。

安全策略控制

MXC 提供对以下领域的细粒度控制:

  • 文件系统策略:定义只读、读写和拒绝的路径列表。
  • 网络策略:包括代理支持、出站控制和主机过滤(尽管功能因后端而异)。
  • UI 策略:控制对剪贴板、显示和 GUI 元素的访问。

生命周期管理

MXC 支持容器的状态感知生命周期,能够实现持久容器的配置、启动、执行、停止和取消配置。

跨平台后端支持

MXC 抽象了多个容器后端,根据主机操作系统选择最合适的后端。

运行时平台 默认后端 其他后端
Windows 11 processcontainer windows_sandbox, wslc, microvm, hyperlight, isolation_session
Linux bubblewrap lxc, microvm, hyperlight
macOS seatbelt 无

注意:windows_sandbox、microvm 和 hyperlight 目前标记为实验性。

开发者工具和诊断

为了便于创建限制性策略,MXC 包含用于识别和解决访问被拒绝失败的工具:

  • 调试控制台模式:使用带有原生执行器的 --debug 标志提供诊断输出以进行故障排除。
  • 审计模式:--audit 标志(在支持的 Windows 版本上可用)允许开发人员记录观察到的访问,以重建一个 ProcessContainer 策略,该策略仅授予受信任工具所需的必要权限。警告: 审计模式禁用所有沙箱安全性,绝不能用于运行不受信任的代码。

社区见解和技术批评

在 MXC 发布后,Hacker News 上的技术讨论强调了该系统的几个优点和缺点。

感知效用

一些开发人员指出,虽然 MXC 充当了现有工具(如 Bubblewrap 和 Seatbelt)的前端,但其价值在于一致的 SDK 和用于策略编写的“学习”模式。一位用户提到 Codex 已经在 Windows 上使用 MXC。

技术问题

批评者提出了关于实现和安全的几点意见:

  • 平台对等性:macOS 支持明显有限;具体来说,macOS 后端缺少细粒度网络(主机名/IP/CIDR 过滤)。
  • 代码库复杂性:一些用户指出 Rust 源代码行数很高(约 350,000 SLOC),并且上游沙箱未进行 vendored,对系统的可审计性表示担忧。
  • 安全实现:一些贡献者声称发现了沙箱逃逸,并认为 Bubblewrap 集成中的能力丢弃和 setuid 处理实现不正确。
  • 构建系统:对构建脚本提出了批评,指出它们在所有平台上执行仅限 Windows 的工作,并且严重依赖特定二进制文件。

替代方法

讨论参与者建议,WebAssembly (Wasm) 运行时,例如带有 WASI P3 的 Wasmtime,可能更适合沙箱化插件,因为它们具有固有的平台独立性和比操作系统级沙箱更强的隔离属性。

Sources

相关

  • Dispatch
  • 项目
  • 项目
  • Dispatch
  • 项目