微軟發布了開源專案 Microsoft eXecution Container (MXC),這是一個用於在 Windows、Linux 和 macOS 上執行不受信任代碼(如模型輸出、外掛程式和工具)的沙盒代碼執行系統。MXC 作為一個 SDK 依賴項直接整合到應用程式中,提供統一的隔離模型和類型化 SDK,並支援多種隔離後端,包括 ProcessContainer、Windows Sandbox、LXC、Bubblewrap、Seatbelt、MicroVM (Nanvix)、Hyperlight、IsolationSession 和 WSLC。

MXC 的主要功能包括: 1. **跨平台支援**:根據平台選擇適當的隔離後端。Windows 11 預設使用 processcontainer,其他選項包括 windows_sandbox、wslc、microvm、hyperlight 和 isolation_session(部分為實驗性);Linux 預設使用 bubblewrap,其他選項包括 lxc、microvm 和 hyperlight;macOS 僅支援 seatbelt。 2. **策略驅動的沙盒**:支援檔案系統策略(唯讀、讀寫、拒絕路徑)、網路策略(代理支援、出站控制、依賴後端的主機過濾)以及 UI 策略(剪貼簿、顯示和 GUI 存取控制)。 3. **狀態感知生命週期**:支援持久化容器的配置、啟動、執行、停止和取消配置。 4. **多語言 SDK**:提供 Rust、.NET 和 Node.js 的版本化 API,支援一次性執行和狀態感知執行。Node 和 .NET 套件包含原生運行時資產,Rust crate 則將 SDK、引擎和選定的後端構建到消費應用程式中。 5. **診斷與調試工具**:提供「調試控制台模式」(--debug)以輸出 MXC 診斷資訊,以及「稽核模式」(--audit)幫助策略作者觀察存取拒絕失敗並重建策略。需注意,--audit 模式會關閉被分析工作負載的所有沙盒安全性,因此不應用於執行不受信任的代碼。

此外,MXC 支援基於 JSON 的配置,定義容器創建請求和安全策略。對於無法嵌入 SDK 的場景,提供了平台特定的執行器二進位檔案(如 wxc-exec.exe),接受符合穩定架構的 JSON 容器創建請求。官方微軟構建版本可選地發送診斷遙測數據,但預設關閉,且需滿足用戶同意、管理策略允許及應用程式啟用等多重條件;本地開源構建不配置為向微軟發送遙測數據,且在非 Windows 平台上遙測功能為空操作。

事件背景

MXC 是一個 SDK 依賴項,構建進應用程式中。應用程式指定容器類型、隔離規則和工作負載命令,MXC 驗證請求、選擇後端並在生成的容器中啟動工作負載。其架構為:應用程式 -> MXC SDK (Rust/.NET/Node, 進程內) -> 選定的後端 (進程內) -> 隔離工作負載。

MXC 利用了現有的作業系統原生技術和虛擬化技術來提供隔離邊界。在 Windows 上,它利用 ProcessContainer、Windows Sandbox、WSLC 等技術;在 Linux 上,利用 Bubblewrap、LXC 等;在 macOS 上,利用 Seatbelt。部分後端如 MicroVM (Nanvix)、Hyperlight 和 IsolationSession 在 Windows 上被標記為實驗性功能。

社群觀察

社群討論集中在 MXC 的定位、功能完整性及代碼規模: 1. **與現有技術的比較**:用戶 shados 詢問 MXC 是否與 gVisor 等技術處於同一領域。 2. **正面評價與設計讚賞**:用戶 dannyw 認為 MXC 設計良好,雖然可視為 bubblewrap/seatbelt/processcontainer 的前端/SDK,但統一設置這些後端並非易事,手動實現風險較高。他特別讚賞其「學習模式」(用於確定運行時所需的權限/配置)、MIT 授權、清晰的遙測披露以及簡潔可讀的文件。 3. **功能缺失擔憂**:用戶 simonw 指出 MXC 缺乏他非常重視的細粒度網路控制功能,特別是在 macOS 上。他提到 Windows 和 Linux 有此功能,但 macOS 的 Seatbelt 後端缺少「按主機名允許/拒絕」和「按 IP、CIDR、端口或協議允許/拒絕」等功能。 4. **動態權限請求**:用戶 neobrain 詢問是否有沙盒解決方案具備動態組件,允許從最小沙盒開始並異步添加權限。他提到 Harnesses 嘗試這樣做,但並非嚴格強制且通常不可撤銷,且會阻塞代理執行直到做出決定。 5. **代碼規模與複雜性**:用戶 kernc 指出 MXC 擁有約 35 萬行主要是 Rust 的源代碼(SLOC),且上游沙盒技術未被內嵌(vendored)。他認為基於自己能夠理解和掌握的技術構建會更有信心,並提供了 sandbox-utils/sandbox-run 作為對比。