
ポリシー駆動型の多層的な分離と封じ込め
MXC は、Windows、Linux、macOS 上で信頼できないコード(モデル出力、プラグイン、ツール)を実行するためのサンドボックス化されたコード実行システムです。OS ネイティブのプロセスサンドボックスから完全な VM まで、複数の封じ込めバックエンドを、統一された JSON 構成スキーマと TypeScript SDK の背後で提供します。
[!WARNING] このリポジトリには、Microsoft Execution Containers の早期統合と開発者からのフィードバックを可能にするために公開されたコードの初期プレビューが含まれています。この初期プレビューの基盤となるサンドボックスは現在開発中であるため変更される予定ですが、機能の進化に伴う互換性への影響を最小限に抑えるよう努めます。このリポジトリの MXC SDK によって生成される現在のポリシーが過度に寛容である既知のケースがあり、これはより広く利用可能になる前に対処される予定です。MXC が成熟する間のセキュリティ研究者との連携は歓迎しますが、現在のところ MXC プロファイルはセキュリティ境界として扱われるべきではありません。
@microsoft/mxc-sdk npm パッケージMXC はネイティブコンテナラッパーと TypeScript SDK を同梱しています。完全な API ドキュメントについては SDK README を参照してください。
安定したワンショットバックエンド(processcontainer、bubblewrap、lxc、seatbelt)は実験モードを必要としません。Linux ホストには対応するランタイムもインストールされている必要があります:デフォルトバックエンドには bwrap (Bubblewrap)、lxc バックエンドには lxc ツールセット。実験的バックエンド(windows_sandbox、wslc、microvm、isolation_session、hyperlight)は、SandboxSpawnOptions での { experimental: true } または --experimental CLI フラグが必要です。
Windows processcontainer バックエンドが各 Windows 11 リリース(23H2 / 24H2 / 25H2 / 25H2+)で適用できるファイルシステム、ネットワーク、UI 制限ポリシーの側面については、Windows OS バージョンポリシーサポート を参照してください。
src/rust-toolchain.toml を介して 1.93 に固定(rustup によって自動選択)src/ Rust ワークスペース(ネイティブバイナリ + 共有ライブラリクレート)
sdk/ TypeScript SDK (@microsoft/mxc-sdk npm パッケージ)
schemas/ JSON 構成スキーマ(安定版 + 開発版)
docs/ ドキュメント(スキーマリファレンス、バックエンドガイド、設計ドキュメント)
tests/ テスト用コラテラル(構成、例、スクリプト)
scripts/ ビルドおよびユーティリティスクリプト
build.bat # 現在のアーキテクチャ用のリリースビルド
build.bat --debug # デバッグビルド
build.bat --all # x64 と ARM64 の両方のリリースビルド
build.bat --with-microvm # NanVix マイクロ VM バイナリを含める
./build.sh # リリースビルド
./build.sh --debug # デバッグビルド
./build.sh --rust-only # Rust バイナリのみ、SDK/CLI をスキップ
./build-mac.sh # ネイティブアーキテクチャ用のリリースビルド
./build-mac.sh --all # Apple Silicon と Intel の両方
./build-mac.sh --debug # デバッグビルド
./build-mac.sh --rust-only # Rust バイナリのみ、SDK をスキップ
すべてのビルドスクリプト:
プラットフォームに適した Rust バイナリをビルド
SDK バンドル用にバイナリを sdk/node/bin/<arch>/(例:x64 または arm64)にコピー
TypeScript SDK をビルド
# Rust ワークスペース(src/ から)
cargo build --release --target x86_64-pc-windows-msvc # Windows x64
cargo build --release --target aarch64-pc-windows-msvc # Windows ARM64
cargo build --release -p lxc # Linux — lxc-exec(LXC と Bubblewrap の両方に使用)
cargo build --release -p mxc_darwin --target aarch64-apple-darwin # macOS
# SDK(sdk/node/ から)
npm install && npm run build
# Windows Rust(src/ から)
cargo clippy --workspace --all-targets -- -D warnings
# Linux Rust(src/ から;build.sh のプラットフォーム互換クレートセットに一致)
cargo clippy -p lxc -p lxc_common -p wxc_common -p bwrap_common -p unix_test_proxy --all-targets -- -D warnings
# macOS Rust(src/ から)
cargo clippy -p mxc_darwin -p seatbelt_common --all-targets -- -D warnings
# Rust ユニットテスト(src/ から)
cargo test --workspace
cargo test -p wxc_common # 単一クレート
cargo test -p wxc_common -- config_parser # テスト名でフィルタリング
# SDK(sdk/node/ から)
npm test # ユニットテスト
npm run test:integration # 統合テスト
# E2E(src/ から)
cargo test -p wxc_e2e_tests
MXC は JSON 構成を使用して実行パラメータを定義します。完全なリファレンスについては スキーマドキュメント を参照してください。
# ファイルパス
wxc-exec.exe config.json
# Base64 エンコードされた構成
wxc-exec.exe --config-base64 <base64-encoded-json>
# デバッグ出力
wxc-exec.exe --debug config.json
Linux の場合:./lxc-exec config.json
macOS の場合:./mxc-exec-mac --experimental config.json
npm install @microsoft/mxc-sdk
import {
spawnSandboxFromConfig, createConfigFromPolicy,
getAvailableToolsPolicy, getTemporaryFilesPolicy,
getPlatformSupport,
} from '@microsoft/mxc-sdk';
if (!getPlatformSupport().isSupported) {
throw new Error('MXC not available on this host');
}
const tools = getAvailableToolsPolicy(process.env);
const temp = getTemporaryFilesPolicy();
const config = createConfigFromPolicy({
version: '0.6.0-alpha',
filesystem: {
readonlyPaths: tools.readonlyPaths,
readwritePaths: temp.readwritePaths,
},
network: { allowOutbound: false },
timeoutMs: 30_000,
});
config.process!.commandLine = 'python -c "print(\'hello from sandbox\')"';
const child = spawnSandboxFromConfig(config, { usePty: false });
child.stdout!.on('data', (d) => process.stdout.write(d));
child.on('close', (code) => console.log('exit:', code));
SDK は、長期実行サンドボックス用の状態認識ライフサイクル API も提供します:
import {
provisionSandbox, startSandbox, execInSandboxAsync,
stopSandbox, deprovisionSandbox,
} from '@microsoft/mxc-sdk';
完全な API ドキュメントについては SDK README を参照してください。
リリース済みの不変の安定スキーマは schemas/stable/ にあり、進行中の開発スキーマ(実験的バックエンド、状態認識ライフサイクル)は schemas/dev/ にあります。現在の安定版および開発版のバージョンは、schemas/schema-version.json で正規に追跡されています。
サポートされている任意のプラットフォームで新しいコードを書く場合は、最新の安定スキーマを選択してください。完全なバージョン管理設計については docs/versioning.md を参照してください。
デフォルトでは、ネイティブバイナリはサイレントモードで実行されます — stdin/stdout/stderr はコンテナに直接結合されます。詳細な出力には --debug を使用します:
wxc-exec.exe --debug config.json
完全な診断リファレンスについては docs/diagnostics.md を参照してください。
--audit は、ETL 保持を強制した許可モードでの processContainer.captureDenials に対する互換性ラッパーです。permissiveLearningMode を注入するため、拒否された操作は記録されますが、実行は許可されます。完全な PSEC/V2 学習モード API セットを備えたホストでは、選択された ProcessContainer ランナーは、PLM を起動したり昇格を要求したりせずにネイティブキャプチャを使用します。古い、またはポリシーと互換性のない階層では、ガード付き WPR フォールバックを使用します:wxc-exec.exe は非昇格のままで、特権 WPR ライフサイクルのためだけにセッションスコープの UAC 昇格 PLM ガーディアンを開始し、認証されたローカル名前付きパイプを介して通信します。Windows Sandbox、WSLC、IsolationSession、およびその他すべての封じ込めバックエンドでは拒否されます。
wxc-exec.exe --audit policy.json
成功した非ドライラン監査には、キャプチャメタデータ、実用的な拒否 JSON、および保持された ETL が必要です。CLI はバックエンドが選択したパスをユーザーごとの監査ディレクトリ内の denials.json と trace.etl に再配置し、ETL を再度デコードせずに実用的な JSON からソース構成スナップショットと Adjusted_*.json を生成します。Base64 のみの入力は JSON と ETL を保持しますが、スナップショットまたは調整するソース構成がありません。切り詰められた分析は JSON、ETL、ソーススナップショットを保持しますが、調整済み構成の生成はスキップします。学習済みポリシーの詳細を出力するには --audit-verbose を使用します。
警告:
--auditはpermissiveLearningModeを注入します — AppContainer の制限は実行期間中適用されません。ポリシー作成にのみ使用してください。processContainer.captureDenialsと組み合わせることはできません。寛容なアプリケーション駆動キャプチャにはcaptureDenials.mode: "allow"を使用してください。learningModeLoggingとpermissiveLearningModeは予約済みの内部機能名であり、processContainer.capabilitiesでは拒否されます。3 つの学習モードフローについては docs/learning-mode/capabilities.md を参照してください。
MXC は、実行の可観測性のためのオプションの TraceLogging ETW テレメトリをサポートしています。有効にすると、構造化イベント(MXC.Execution および MXC.Error)が Rust tracelogging クレートを介してローカル ETW サブシステムに出力されます。すべてのイベントには、Part C カスタムイベントデータとして共通フィールド(Version、Channel、IsDebugging、UTCReplace_AppSessionGuid)が含まれます。
テレメトリには以下が必要です:
"telemetry": { "enabled": true }構成フラグは実行ごとの追加のオプトインです。同意を付与したり、管理上のブロックを回避したりすることはできません。該当するすべてのゲートが開いていない限り、テレメトリはオフのままです。MXC は、アプリケーションの同意の代わりとして Windows の診断とフィードバック設定を使用しません。
Windows 以外のプラットフォームでは、すべてのテレメトリ関数は no-op です。
本ソフトウェアは、お客様およびお客様による本ソフトウェアの使用に関する情報を収集し、Microsoft に送信する場合があります。Microsoft はこの情報を使用してサービスを提供し、製品とサービスを改善する場合があります。リポジトリで説明されているようにテレメトリをオフにすることができます。本ソフトウェアには、お客様と Microsoft がお客様のアプリケーションのユーザーからデータを収集できるようにする機能もいくつかあります。これらの機能を使用する場合は、Microsoft のプライバシーに関する声明のコピーとともにお客様のアプリケーションのユーザーに適切な通知を提供することを含め、適用される法律を遵守する必要があります。当社のプライバシーに関する声明は https://go.microsoft.com/fwlink/?LinkID=824704 にあります。データの収集と使用についての詳細は、ヘルプドキュメントとプライバシーに関する声明で確認できます。本ソフトウェアの使用は、これらの慣行への同意として機能します。
テレメトリはデフォルトでオフです。オフのままにするには、実行時に "telemetry": { "enabled": true } を設定しないでください。
構成でテレメトリが有効になっている場合でも、Windows ユーザーの同意が付与され、管理ポリシーが収集を許可しない限り、収集は行われません。
公式/出荷済みの Microsoft ビルドは、ビルド時に TraceLogging プロバイダーグループ GUID を設定し、テレメトリが有効な場合に UTC パイプラインを介して MXC.Execution および MXC.Error イベントを Microsoft にルーティングします。同じビルド時設定により、イベントの正しい Measures キーワードと Product-and-Service-Usage プライバシータグも選択されるため、テレメトリのルーティングとイベント分類は常に一致します。ローカルおよびオープンソースビルドは、デフォルトでは Microsoft に何も送信しません — 公開ソースにはプロバイダーグループ GUID が含まれていないため、イベントはローカル ETW サブシステムにのみ出力され、UTC の意味を持たないプロバイダーローカルキーワードを使用し、プライバシー分類タグを保持せず、Microsoft の収集パイプラインにルーティングされません。ビルド時に MXC_TELEMETRY_PROVIDER_GROUP_GUID 環境変数を設定する内部ビルドは、Microsoft ルーティングパスを有効にします。
PII は収集されません。イベントには実行メトリクス(期間、バックエンドタイプ、終了コード)と制限付きのエラーカテゴリ(error_type)のみが含まれます。自由形式のエラーメッセージテキストは決して出力されないため、パス、ユーザー名、資格情報がテレメトリを介して漏洩することはありません。SDK を使用してアプリケーションを構築する場合、独自のユーザーに適切なテレメトリ通知を提供する責任があります。
プライバシー情報は https://privacy.microsoft.com および https://go.microsoft.com/fwlink/?LinkID=824704 の Microsoft プライバシーに関する声明にあります。
貢献ガイドラインについては CONTRIBUTING.md を参照してください。
詳細については LICENSE.md を参照してください。
| プラットフォーム | デフォルトバックエンド | その他のバックエンド | 最小ビルド |
|---|
| Windows 11 24H2+(25H2 で検証済み) | processcontainer | windows_sandbox、wslc、microvm、hyperlight、isolation_session | processcontainer: 26100 (24H2)isolation_session: 26340.9212 (Insider Preview) |
| Linux x64 / ARM64 | bubblewrap | lxc、microvm、hyperlight | — |
macOS ARM64 / x64(スキーマ 0.7.0-alpha 以降) | seatbelt | — | — |
| ドキュメント | 説明 |
|---|
| docs/schema.md | 完全な JSON 構成スキーマリファレンス |
| docs/versioning.md | スキーマのバージョン管理と実験的機能のライフサイクル |
| docs/examples.md | 注釈付き構成例 |
| docs/host-prep.md | Windows ホストの準備(wxc-host-prep.exe) |
| docs/diagnostics.md | 診断ロギングと ETW |
| docs/sandbox-policy/0.7.0/policy.md | サンドボックスポリシー 0.7.0 仕様 |
| docs/process-container/guide.md | Windows AppContainer / BaseContainer ガイド |
| docs/lxc-support/lxc-backend.md | LXC バックエンド(Linux) |
| docs/bwrap-support/bubblewrap-backend.md | Bubblewrap バックエンド(Linux) |
| docs/seatbelt/seatbelt-backend.md | Seatbelt バックエンド(macOS) |
| docs/windows-sandbox/windows-sandbox.md | Windows Sandbox バックエンド |
| docs/state-aware-lifecycle/mxc-state-aware-sandbox-api.md | 状態認識サンドボックスライフサイクル API |
| docs/telemetry/telemetry.md | TraceLogging テレメトリアーキテクチャ |
| docs/telemetry/telemetry-consent-design.md | テレメトリ同意契約 |
| docs/telemetry/telemetry-administrative-policy.md | 管理テレメトリ制御 |