微软推出 Windows Sandbox:可安全运行任何应用的一次性 VM

阅读数:2253 2018 年 12 月 20 日 14:19

微软推出Windows Sandbox:可安全运行任何应用的一次性VM

几个月前,微软在即将推出 Windows 10 时,曾透露过一个功能,当时称为 InPrivate Desktop:一种轻量级虚拟机,用于在隔离环境中运行不受信任的应用程序。昨天,微软正式推出这个功能,名为 Windows Sandbox。

Windows Sandbox 是一种新的轻量级桌面环境,专为安全运行应用程序而量身定制。

有多少次,你下载了一个可执行文件,却不敢运行它?你是否曾经遇到过需要一个干净的 Windows 但又不想安装虚拟机的情况?

在微软,我们经常会遇到这些情况,因此我们开发了 Windows Sandbox:一个独立的临时桌面环境,你可以在其中运行不受信任的软件,而不必担心会对你的 PC 产生任何影响。Windows Sandbox 中安装的软件仅停留在 Sandbox 中,不会影响到宿主。关闭 Windows Sandbox 后,将永久删除所有安装的软件,包括软件相关的所有文件和状态。

Windows Sandbox 具有以下特点:

  • 它是 Windows 的一部分——Sandbox 所需的一切都随 Windows 10 Pro 和 Enterprise 一起提供。无需下载 VHD!
  • 干净如初——每次运行 Windows Sandbox 时,它都像刚安装的 Windows 一样干净。
  • 一次性——不会在设备上留下任何东西,关闭之后一切都将被丢弃。
  • 安全——使用基于硬件的虚拟化进行内核隔离,依靠微软的 Hypervisor 运行单独的内核,将 Windows Sandbox 与宿主隔离开来。
  • 高效——使用集成的内核调度程序、智能内存管理和虚拟 GPU。

使用 Sandbox 的先决条件:

  • Windows 10 专业版或企业版 build 18305 或更高版本;
  • AMD64 架构;
  • 在 BIOS 中启用虚拟化功能;
  • 至少 4GB 的 RAM(推荐 8GB);
  • 至少 1GB 的可用磁盘空间(建议使用 SSD);
  • 至少 2 个 CPU 核心(建议使用 4 个超线程核心)。

Windows Sandbox 内部

Windows Sandbox 使用了与 Windows Containers 相同的技术。Containers 被设计为在云端运行,我们在 Sandbox 中采用了相同的技术,将其集成到 Windows 10 中,并添加了一些功能,使其更适合在设备和笔记本电脑上运行,而不需要 Windows Server 的全部功能。

我们所做的一些重要改进包括:

动态生成镜像

Windows Sandbox 是一种轻量级虚拟机,所以需要一个操作系统镜像才能启动。我们为 Windows Sandbox 提供的一项重要增强功能是能够使用计算机上已经安装的 Windows 10 副本,而不是像普通虚拟机那样下载新的 VHD 镜像。

我们希望提供一个干净的环境,不过挑战在于有些操作系统文件可能会发生变化。我们的解决方案是构建“动态基础镜像”:也就是一种操作系统镜像,它包含了可以被修改的文件的干净副本,同时链接宿主主机上已存在的 Windows 镜像中的不可修改文件。因为大多数文件(不可变文件)是链接,所以整个操作系统镜像很小(~100MB)。我们把它叫作 Windows Sandbox 的“基础镜像”。

如果未安装 Windows Sandbox,我们会将动态基础镜像保存在压缩包中,大小只有 25MB,展开后占用大约 100MB 的磁盘空间。

微软推出Windows Sandbox:可安全运行任何应用的一次性VM

智能内存管理

我们同时将内存管理集成到 Windows 内核中。微软的 Hypervisor 可以将单个物理机分为多个共享相同物理硬件的虚拟机。这种方法适用于传统的服务器,但不适合资源有限的设备。我们设计了 Windows Sandbox,宿主主机可以根据实际情况回收 Sandbox 的内存。

此外,Windows Sandbox 基本上运行与宿主相同的操作系统镜像,因此我们通过“直接映射”技术让 Sandbox 使用与宿主操作系统一样的物理内存页。换句话说,宿主主机的 ntdll 可执行页被映射到 Sandbox 中。

微软推出Windows Sandbox:可安全运行任何应用的一次性VM

集成内核调度程序

微软的 Hypervisor 可以控制普通虚拟机中的虚拟处理器调度。但在 Windows Sandbox 中,我们使用了一种叫作“集成调度程序”的新技术,宿主主机可以决定何时运行 Sandbox。

我们为 Sandbox 虚拟处理器使用了一种独特的调度策略,这种策略与调度线程的方式是一样的。宿主主机上的高优先级任务可以抢占 Sandbox 中不太重要的任务。使用集成调度程序的好处是宿主主机可以将 Windows Sandbox 作为一个进程而不是虚拟机来管理,让宿主主机的响应速度更快,类似于 Linux KVM。

我们的整体目标是将 Sandbox 视为一个应用程序,同时具备虚拟机那样的安全性。

快照和克隆

如上所述,Windows Sandbox 使用了微软的 Hypervisor。我们基本上是在运行另一个 Windows 副本,所以可能需要一些启动时间。为了不在每次启动 Windows Sandbox 时都要花很多时间启动整个操作系统,我们使用了其他两项技术,即“快照”和“克隆”。

通过使用快照,在启动一次 Sandbox 环境之后,将内存、CPU 和设备状态保存到磁盘上。然后,当我们需要一个新的 Windows Sandbox 实例时,可以直接从磁盘恢复 Sandbox 环境,并将其放入内存,而不是重新启动它。这显著改善了 Windows Sandbox 的启动时间。

图形虚拟化

硬件加速渲染是带来良好用户体验的关键,特别是对于图形密集型或媒体密集型的场景来说。虚拟机与宿主是相隔离的,无法访问 GPU 等高级设备。因此,图形虚拟化技术(例如微软的 RemoteFX)是弥合这一差距的关键,并在虚拟化环境中提供硬件加速。

最近,微软与图形生态系统合作伙伴合作,将现代图形虚拟化功能直接集成到 DirectX 和 WDDM 中,它们是 Windows 显示驱动程序使用的驱动程序模型。

这种图形虚拟化大致工作原理如下:

  • 在 Hyper-V 虚拟机中运行的应用程序使用图形 API。
  • 虚拟机中的图形组件(支持虚拟化)在虚拟机边界与宿主主机协调,以执行图形工作负载。
  • 宿主主机在虚拟机应用程序和本机应用程序之间分配和调度图形资源。从概念上讲,它们就像是一个图形客户端池。

微软推出Windows Sandbox:可安全运行任何应用的一次性VM

Windows Sandbox 因此能够受益于硬件加速渲染,Windows 可以在宿主主机和 Sandbox 之间动态分配图形资源,提升了运行在 Windows Sandbox 中的应用程序的性能和响应能力,同时改进了电池寿命(对于图像密集型的使用场景)。

要获得这些优势,你需要有一个具有兼容 GPU 和图形驱动程序(WDDM 2.5 或更高版本)的系统,否则将使用微软的基于 CPU 的渲染技术在 Windows Sandbox 中渲染应用程序。

电池穿透

Windows Sandbox 可以知道宿主主机的电池状态,从而进行功耗优化。这对于笔记本电脑来说至关重要,因为用户对笔记本的耗电非常敏感。

快速开始

  1. 安装 Windows 10 Pro 或企业版 build 18305 或更高版本;

  2. 启用虚拟化:

  • 如果你使用的是物理机,确保在 BIOS 中启用了虚拟化功能。
  • 如果你使用的是虚拟机,请使用此 PowerShell cmdlet 启用嵌套虚拟化:

Set-VMProcessor -VMName -ExposeVirtualizationExtensions $true

  1. 打开 Windows Features,然后选择 Windows Sandbox。选择“OK”,就可以安装 Windows Sandbox 了。系统可能会要求你重新启动电脑。

微软推出Windows Sandbox:可安全运行任何应用的一次性VM

  1. 从“开始”菜单中找到 Windows Sandbox,运行它。

  2. 从宿主操作系统复制一个可执行文件。

  3. 将可执行文件粘贴到 Windows Sandbox 的窗口中。

  4. 在 Windows Sandbox 中运行可执行文件,如果是安装程序,请继续安装。

  5. 运行应用程序并像平常一样使用它。

  6. 完成实验后,你只需关闭 Windows Sandbox 即可。所有 Sandbox 中的内容都将被丢弃并永久删除。

  7. 确认宿主操作系统中没有你在 Windows Sandbox 中做出的任何修改。

微软推出Windows Sandbox:可安全运行任何应用的一次性VM

总体来看,Windows Sandbox 结合了虚拟机和容器的元素。Sandbox 和主机操作系统之间的安全边界是靠硬件强制分隔,就像虚拟机一样。而且 Sandbox 和 VM 一样有虚拟化的硬件,在磁盘上和内存中与主机共享可执行文件。

目前,Sandbox 的生命周期很短暂。它会在关闭时被销毁并重置,因此变更不会在不同 Sandbox 运行之间持续。 Edge 浏览器虚拟机的第一个版本 Sandbox 工作机制类似,在后续版本中,微软对其添加了将文件从虚拟机传输到主机的支持,以便可以持久存储它们。

我们期待 Windows Sandbox 的类似演变。

英文原文: https://techcommunity.microsoft.com/t5/Windows-Kernel-Internals/Windows-Sandbox/ba-p/301849

评论

发布