微软开源 MXC 沙箱化代码执行系统
MXC - a sandboxed code execution system
微软发布 MXC(Microsoft eXecution Container),一个用于在 Windows、Linux 和 macOS 上运行不可信代码(模型输出、插件和工具)的沙箱化执行系统,提供从操作系统原生进程沙箱到完整虚拟机的多种隔离后端,并统一在同一套容器模型和类型化 SDK 之下。
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