Microsoft 开源跨平台沙箱执行系统 MXC
MXC - a sandboxed code execution system
Microsoft 开源跨平台沙箱执行系统 MXC,用于隔离运行模型输出、插件和工具等不可信代码,支持 Windows、Linux 和 macOS。它提供 ProcessContainer、Windows Sandbox、LXC、Bubblewrap、Seatbelt、MicroVM、Hyperlight 等后端,并附带 Rust、.NET、Node SDK。
MXC 把多种沙箱后端封装在统一 SDK 与 JSON 配置下,读者可借此对比跨平台隔离方案来安全运行模型输出。
Microsoft eXecution Container (MXC)
MXC 是一个沙盒化代码执行系统,用于在 Windows、Linux 和 macOS 上运行不受信任的代码(模型输出、插件和工具)。它在统一的容器模型和类型化 SDK 背后,提供了多种隔离后端,从操作系统原生进程沙盒到完整虚拟机。
功能
- 跨平台:在 Windows、Linux 和 macOS 上提供支持,并使用平台相应的隔离后端
- 基于 JSON 的配置:版本化的容器创建请求和安全策略
- 多种隔离后端:ProcessContainer、Windows Sandbox、LXC、Bubblewrap、Seatbelt、MicroVM (Nanvix)、Hyperlight、IsolationSession 和 WSLC
- Policy-driven sandboxing:
- 文件系统策略:只读、可读可写和拒绝访问的路径列表
- 网络策略:代理支持、出站控制以及依赖于后端的主机过滤
- UI 策略:剪贴板、显示和 GUI 访问控制
- 有状态生命周期:对持久化容器进行配置、启动、执行、停止和取消配置
- Rust、.NET 和 Node SDK:为一次性执行和有状态执行提供版本化的 API
- 诊断:用于了解容器中访问被拒绝失败的工具
什么是 MXC?
MXC 是一个构建到您的应用中的 SDK 依赖项。
flowchart LR
App["Your application<br/>Launch API"] --> SDK["MXC SDK<br/>Rust / .NET / Node<br/>(in process)"]
SDK --> Backend["Selected backend<br/>(in process)"]
Backend --> Container["Isolated workload<br/>ProcessContainer / WSLC / Bubblewrap / ..."]
加载中
您的应用程序指定:
- 容器类型
- 隔离规则
- 工作负载命令
MXC 验证请求、选择后端,并在生成的容器中启动工作负载。
支持哪些容器类型?
MXC 通过 Windows、Linux 和 macOS 上平台相应的容器后端来运行工作负载。
| 运行时平台 | 默认后端 | 其他后端 | 最低主机操作系统 |
|---|---|---|---|
| Windows 11 x64 / ARM64 | processcontainer |
windows_sandbox*, wslc, microvm*, hyperlight*, isolation_session |
Windows 操作系统版本支持 |
| Linux x64 / ARM64 | bubblewrap |
lxc, microvm, hyperlight |
- |
| macOS ARM64 / x64 | seatbelt |
- | - |
* 这些后端属于实验性功能。
如何使用 MXC?
通过包管理器安装 SDK。您无需克隆此代码仓库。
| SDK | 包 |
|---|---|
| Rust | https://crates.io/crates/mxc-sdk |
| .NET | https://www.nuget.org/packages/Microsoft.Mxc.Sdk |
| Node | https://www.npmjs.com/package/@microsoft/mxc-sdk |
Node 和 .NET 包包含原生运行时资源。Rust crate 会将 MXC SDK、引擎以及所选后端构建到消费应用中。
非 SDK 使用方式:平台特定的可执行二进制文件(例如 wxc-exec.exe)接受由稳定架构定义的 JSON 容器创建请求。用于测试或在 SDK 无法嵌入到您的应用中时使用。
运行容器化的工作负载
有关完整的 SDK 示例,请参阅Rust、.NET 和 Node 示例。
Node 示例代码片段
import { spawn, type ContainerRequest } from '@microsoft/mxc-sdk/v1'; const request: ContainerRequest = { command: 'node -e "console.log(\'hello from container\')"', network: { egress: { default: 'deny' } }, timeoutMs: 30_000, }; const child = await spawn(request);
请参阅可运行的流式标准 I/O 示例和SDK API 参考。
我的应用程序在沙盒中无法运行!
在沙盒中运行应用程序时,您会碰到访问问题,直到您有时间调整隔离规则为止。我们随时为您提供帮助。
调试控制台模式
原生执行器通常会为工作负载预留标准输入、输出和错误。使用 --debug 获取 MXC 诊断输出:
wxc-exec.exe --debug config.json
有关完整的开发者参考,请参阅 MXC 诊断。
审计模式
警告:
--audit会关闭正在分析的工作负载的所有沙盒安全机制。切勿使用它来运行不受信任的代码。
审计模式可帮助策略作者查找访问被拒绝的失败,并重建一个为受信任工具授予其实际所需文件和权限的 ProcessContainer 策略。在受支持的 Windows 版本上,运行:
wxc-exec.exe --audit policy.json
MXC 记录观察到的访问并生成策略编写产物。有关安全的“拒绝并记录”诊断、审计输出和支持的工作流,请参阅 记录访问被拒绝。
遥测
官方 Microsoft 版本可以向 Microsoft 发送可选的诊断遥测数据。除非单次运行选择加入、Windows 用户已明确同意、管理策略允许收集,并且你的应用程序在受限工作负载请求中启用了遥测选项,否则遥测默认为关闭状态。管理员可以阻止遥测,但无法替用户授予同意。
本地开源版本未配置为将遥测路由到 Microsoft,且在非 Windows 平台上遥测为空操作。有关控制方式和隐私详情,请参阅 遥测策略与同意。
从源码构建
开发 MXC、更改原生运行时,或使用独立执行器二进制文件而非打包的 SDK 时,从源码构建。仓库构建会生成平台原生运行时和执行器,并暂存 Node SDK 使用的原生资源。
构建前提条件包括:
- Rust,由
src/rust-toolchain.toml锁定至版本 1.93 - Node.js 24 或更高版本以及 npm
- 所选后端所描述的平台工具链和前提条件
构建
Windows
build.bat --all # Release build for current architectureLinux
./build.sh --all # Release buildmacOS
./build-mac.sh --all # Release build for native architecture文档
使用者文档
| 文档 | 仓库位置 | 用途 |
|---|---|---|
| SDK 示例 | samples/ |
可运行的 Rust、.NET 和 Node 场景 |
| SDK API 参考 | docs/api-reference/ |
支持的 V1 操作和类型 |
| 容器生命周期 | docs/container-lifecycle.md |
持久容器生命周期概述 |
| 记录访问被拒绝 | docs/logging-access-denied.md |
诊断被阻止的访问并编写策略 |
| 遥测 | docs/telemetry.md |
同意和管理控制 |
| 后端指南 | docs/backends/ |
平台和后端的前提条件及行为 |
仓库贡献者应从 MXC 开发文档 开始。
贡献
有关贡献指南,请参阅 CONTRIBUTING.md。
许可证
有关详情,请参阅 LICENSE.md。
来源:Hacker News · github.com