微软开源 NVX:Agent 微虚拟机沙盒的硬件级隔离拆解

微软开源 NVX:Agent 微虚拟机沙盒的硬件级隔离拆解

AI Agent 越来越能干,但随之而来的一个刚需问题:Agent 要跑自己生成的代码,这些代码没人审过、可能有 bug、也可能被利用。直接在主机的原生进程里跑风险很大。传统做法是把代码放进容器,但容器与宿主机共享同一个内核,隔离并不彻底。

微软近期在官方 GitHub 账号下悄悄公开了一个项目 NVX:一个超轻量的微虚拟机(Micro-VM)沙盒,专门用来以硬件强制隔离的方式运行不可信工作负载。它基于微软开源的 Rust 虚拟机管理程序 OpenVMM 构建,运行 Linux 客户机,同时支持 Linux(KVM / MSHV)与 Windows(WHP)跨平台运行。

下面从"为什么需要"和"怎么做到"两个角度做技术拆解。

一、它要解决什么问题

Agent 场景下,代码执行环境的痛点有三个:

痛点 说明
不可信 Agent 自己写的代码未经审查,可能有漏洞或被诱导执行危险操作
共享内核风险 容器与宿主机共享内核,一旦漏洞穿透容器边界,反主机风险仍在
冷启动太重 传统虚拟机开机慢、资源占大头,不适合"每次任务开一台"的轻量场景

NVX 的答案:开一台"临时的小电脑",直接靠 CPU 硬件虚拟化把客机与宿主机隔开------里面的代码出了问题,也很难碰到外面。同时尽可能做轻,让"用完即弃"成为可接受的默认。

二、核心特点

特点 说明
超轻量 不模拟完整电脑,无固件,只开放一小组固定设备
跨平台 Linux 上 KVM / MSHV,Windows 上 WHP,同一个系统镜像到处跑
快照秒恢复 冷启动约 0.2--0.4 秒,快照恢复最快约 30 毫秒
系统可选 客机可跑 Alpine 或 Ubuntu
开源 MIT 装好 Python 3.10 以上,3 条命令即可

仓库 microsoft/nvx(MIT 协议,dev 分支,版本目前是 0.1.0 早期),由微软研究院系统研究组与 Azure 研究院系统组联合开发,底子来自 Nanvix 研究项目。

三、隔离是怎么做的:多层嵌套

从源码与设计文档看,Agent 的代码被关进"多层盒子":

1. 设备白名单:虚拟机里只有中断控制器、时钟、几个端口和 8 个固定的 virtio 插槽,串口、PCI 总线、固件统统没有------攻击面被收窄到很小。

2. 网络不直通:流量交给内置的 Consomme NAT 处理,只放行指定的 IP 和端口(最多 256 条放行、256 条禁止),外部主动连入的一律拒绝。

3. 共享目录由主机把关 :文档里的做法是把代码目录挂进虚拟机,同时禁止读取 .git/credentials(存密码文件)。检查在宿主机侧完成,虚拟机内绕不过去。

4. 虚拟机里也不信任:沙盒模式下,Agent 程序跑在独立命名空间(namespaces)里,只看得见自己的文件和进程;且以普通用户身份运行,清空全部 Linux 特权。

5. 内核裁剪:客机 Linux 6.18 不能加载内核模块,并关掉 PCI、ACPI、USB、IPv6,攻击面更小。

四、快照为什么这么快:写时复制

快照恢复是 NVX 的亮点。一份快照包含 4 个文件:清单 manifest.bin、处理器与设备状态 state.bin、内存 memory.bin、可选的可写盘 scratch.img。

恢复时,NVX 不把整个 memory.bin 读进内存,而是用内核的 MAP_PRIVATE(写时复制)把文件映射到内存:

  • 客机读内存时,系统按需从文件取页,用到哪页读哪页;
  • 客机改写某页时,系统才悄然复制一份私有页面,原文件一个字节不动;
  • 因此同一份快照可同时恢复出多台互不影响的虚拟机。

Windows 上对应 PAGE_WRITECOPY,思路一致。恢复入口在 openvmm_entry/src/snapshot_restore/prepare.rs,注释直白:从打开的文件句柄创建私有映射。

还有两个巧思:

  • 快照由虚拟机自触发:客机里的脚本先冻结程序与磁盘,再往 0x605 端口写入一个字节;写入之后的代码只在每台恢复出来的副本里运行,效果类似 fork。
  • 恢复后重新播种随机数:否则多台副本随机数状态一致,生成的密钥/凭据可能碰撞;NVX 每次恢复注入 64 字节新随机数和新的机器编号。

文档把恢复目标定在约 10ms,当前实测 30--116ms。

五、开发者怎么用

目前主要通过命令行(sandbox provision → start → exec → stop/deprovision),OpenVMM 还提供一套 ttrpc 管理接口,智能体框架可编程创建、等待、关闭虚拟机。附一个最简 Linux/KVM 启动序列(与官方 README 一致):

bash 复制代码
git clone https://github.com/microsoft/nvx.git && cd nvx
python3 scripts/nvx.py download      # 下载最新 release(无需本地构建)
python3 scripts/nvx.py run           # 启动,打印 NVX-GUEST-BOOT-OK: alpine
# 客机内优雅退出
/sbin/nvx-exit 0

Windows 同样支持:启用 Windows Hypervisor Platform 后 python scripts\nvx.py download + run。

六、与既有沙盒的对比

方案 隔离级别 平台 备注
Docker 容器 共享内核 跨平台 隔离不够彻底
Firecracker(E2B 等用) 微 VM Linux only 行业常用但单平台
NVX 微 VM Linux + Windows 首个 Windows 原生可跑微 VM 沙盒
Hyperlight 微 VM Linux 已成微软 Agent 框架代码执行后端
MXC / ACA Sandboxes 多级 云 管理/托管类,早期/正式并存

NVX 最大差异化点是 Windows 上也能原生跑,意味着未来 Windows 电脑上也可能直接给 Agent 开一台本地隔离环境。

七、当前限制与判断

  • 只支持 x86-64,vCPU 只能选 1/2/4/8;
  • 不支持嵌套虚拟化;快照不能跨平台恢复;
  • 不能直接跑标准容器镜像(OCI);无常公开快照流程;
  • 命令行沙盒命令还不能自动管理检查与恢复;
  • 待办里还有 Azure Files 挂载、计费、多租户隔离,显然在为云计算生产环境做准备。

所以当前它更像"底层积木",离开箱即用还有距离。

小结

AI Agent 越来越能干,"给它一台安全的电脑"就成刚需。NVX 把硬件级隔离做得更轻,并且第一次照顾了 Windows,这是它区别于 Firecracker 系(只能 Linux)的差异化价值。除了隔离能力,它"精简攻击面 + 多副本恢复不共享状态 + 写时复制"的设计思路,对任何想给自己 Agent 运行时加隔离的开发者都有参考意义。

相关推荐
阿乔外贸日记11 小时前
外贸风控|美国市场7大类欺诈模式解析与风控框架
大数据·人工智能·物联网·microsoft·智能手机
ShineWinsu11 小时前
对于Qt:QWidget通用属性的解析—上
数据库·qt·microsoft·面试·gui·属性·qwidget
染指111014 小时前
160.Agent-LangGraph-自定义主管架构智能体
人工智能·windows·microsoft·langchain·1024程序员节·agents
wuyk5551 天前
PyQt6-第10讲-PDF工具箱
python·microsoft·pdf·pyqt
鬼手点金2 天前
缓存作为架构约束
开发语言·前端·人工智能·python·microsoft·缓存·架构
Vic.Tang2 天前
一次元数据管理项目投标后,我对 Microsoft Purview的初识一
microsoft·purview
贾伟康2 天前
【共创稿事节】第一张服务卡片:2×2 今日菜谱的克制设计
microsoft·harmonyos·arkts·鸿蒙
Shell运维手记2 天前
Shell 结构化命令知识点总结(case、for、while)
运维·microsoft·shell·脚本
2501_944525762 天前
开源鸿蒙平台 KMP_CMP 三方库「Atrium」适配全流程
microsoft·开源·harmonyos
平头哥技术团队3 天前
把端到端延迟当成走时误差:高端腕表主题里的“AI 端渲“
人工智能·microsoft