跳到正文
原文
Hacker News· nreece·· 7 小时前精选AI 评分63

Microsoft 开源跨平台沙箱执行系统 MXC

MXC - a sandboxed code execution system

AI 导读

Microsoft 开源跨平台沙箱执行系统 MXC,用于隔离运行模型输出、插件和工具等不可信代码,支持 Windows、Linux 和 macOS。它提供 ProcessContainer、Windows Sandbox、LXC、Bubblewrap、Seatbelt、MicroVM、Hyperlight 等后端,并附带 Rust、.NET、Node SDK。

推荐理由

MXC 把多种沙箱后端封装在统一 SDK 与 JSON 配置下,读者可借此对比跨平台隔离方案来安全运行模型输出。

正文 · 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