跳到正文
Hacker News· nreece·· 9 天前AI 评分62

微软开源 MXC 沙箱化代码执行系统

MXC - a sandboxed code execution system

AI 导读

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

正文 · AI 翻译

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 architecture

Linux

./build.sh --all            # Release build

macOS

./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