阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

  • 2018-12-20
  • 本文字数:3091 字

    阅读完需:约 10 分钟

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


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


集成内核调度程序

微软的 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 因此能够受益于硬件加速渲染,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 了。系统可能会要求你重新启动电脑。



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

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

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

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

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

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

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



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


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


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


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


2018-12-20 14:193114
用户头像

发布了 731 篇内容, 共 433.6 次阅读, 收获喜欢 1997 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

“啰嗦”是成事唯一正确的方法

霍太稳@极客邦科技

团队管理 个人成长 团队协作 沟通

从数据中台到AI中台,企业到底要建什么中台?

脑极体

《effective-go》 学习笔记

半亩房顶

Go 语言

消息疯狂堆积!RocketMQ出Bug了?

Edison

RocketMQ 中间件

踩坑记 | Flutter升级影响了NestedScrollView?

哈利迪

android

Executor看不懂?教你如何盘它

Edison

后端 线程池

以区块链为基础 通证经济是下一代互联网的数字经济

CECBC

区块链 落地应用

2.1.2 类加载器的工作原理与自定义加载器 -《SSM深入解析与项目实战》

谙忆

政策加持迎来区块链技术应用“红利期”

CECBC

关于微服务架构思考

Axe

500行代码写一个俄罗斯方块游戏

程序员生活志

疫情之年 下半年区块链应用落地会加速么?

CECBC

区块链 场景应用落地

话题讨论 | 特朗普正式封禁微信,iPhone 和微信二选一?

InfoQ写作社区官方

写作平台 话题讨论

真正的勇士,会跨过六道裂谷,奔向云与AI的彼端

脑极体

我是如何参与硅谷顶级开源项目并赚得2500美金

阿水

硅谷 Minio

LeetCode题解:24. 两两交换链表中的节点,递归,JavaScript,详细注释

Lee Chen

大前端 LeetCode

你为什么还在用存储过程?

架构师修行之路

数据库设计 架构设计

ARTS Week8

丽子

DevOps 技术栈

柴锋

Linux DevOps 运维 敏捷 Shell

List 和 Map 的排序

一盐难进

Java

# spring boot自定义线程池进行异步调用

一盐难进

Java

用户体验(UX)设计≠用户界面(UI)设计

刘华Kenneth

敏捷 设计 UX 用户体验

MySQL事物-学习笔记

Edison

MySQL 数据库 数据库事务

数据采集能力受限?企业数字化运营如何迈出第1步

易观大数据

Python爬取微信公众号文章保存到数据库

wjchenge

RocketMQ源码解析-开篇

Edison

RocketMQ 中间件

nested exception is java.lang.IllegalStateException: refreshAfterWrite requires a LoadingCache异常解决

谙忆

learn go with tests 学习笔记(六)进程同步

半亩房顶

Go 语言

learn go with tests 学习笔记(七)反射

半亩房顶

反射 Go 语言

零代码/无代码 vs 低代码 如何分类?如何区别?到底有什么不同?分析超过20款零代码低代码产品

代码制造者

编程 低代码 行业资讯 零代码

原来你是这样的B+树

Java技术宝典

B+树

微软推出Windows Sandbox:可安全运行任何应用的一次性VM
_容器_Hari Pulapaka_InfoQ精选文章