hypervisor rootkit 在被 BIOS 禁用后能否启用硬件辅助虚拟化?

信息安全 虚拟化
2021-09-01 09:41:46

我最近正在阅读硬件辅助虚拟机 (HVM) Rootkits 简介(PDF),关于虚拟机管理程序 rootkit 可以启动虚拟化的条件并不完全清楚。如果启用了虚拟化,那么一切都很好,但是如果禁用了虚拟化会发生什么?

具体来说,英特尔 VT-x 或 AMD-v(VMX 和 SVM)是否支持在 BIOS(或更高版本的管理程序)禁用和锁定 HAV 后解锁和启用 HAV?我对修改 BIOS 或更改其设置不感兴趣,纯粹是对管理程序是否可以更改这些设置感兴趣。

(如果有人想知道:不,我不打算创建恶意 rootkit:P)

3个回答

引用英特尔软件手册第 3c 卷

VMXON 也由 IA32_FEATURE_CONTROL MSR(MSR 地址 3AH)控制。当一个逻辑处理器复位时,这个 MSR 被清零。MSR 的相关位是:

  • 位 0 是锁定位。如果该位清零,VMXON 会导致一般保护异常。如果设置了锁定位,则此 MSR 的 WRMSR 会导致一般保护异常;在上电复位条件之前无法修改 MSR。系统 BIOS 可以使用该位为 BIOS 提供设置选项以禁用对 VMX 的支持。要在平台中启用 VMX 支持,BIOS 必须设置位 1、位 2 或两者(见下文)以及锁定位。
  • 位 1 在 SMX 操作中启用 VMXON。如果该位清零,则在 SMX 操作中执行 VMXON 会导致一般保护异常。尝试在不支持 VMX 操作(参见第 23.6 节)和 SMX 操作(参见英特尔® 64 和 IA-32 架构软件开发人员手册第 2B 卷中的第 6 章“安全模式扩展参考”的逻辑处理器上设置此位) 导致一般保护异常。
  • 位 2 在 SMX 操作之外启用 VMXON。如果该位清零,则在 SMX 操作之外执行 VMXON 会导致一般保护异常。尝试在不支持 VMX 操作(参见第 23.6 节)的逻辑处理器上设置该位会导致一般保护异常。

解释,对于那些不熟悉这里发生的事情的人:

  • MSR 代表机器特定寄存器,指的是在 x86 架构的实现之间改变的寄存器/配置设置。
  • 其中一些用于配置该系列处理器的功能。
  • VMXON是进入管理程序管理模式的(英特尔)x86 指令 - 您可以访问硬件辅助虚拟化功能,包括扩展页表等。在这里,您可以创建虚拟机并执行vmenter等等vmexit
  • 一般保护异常是处理器内置的异常处理程序,当您执行不允许执行的操作时会发生此异常处理程序。示例将包括在特权级别之外执行特权指令,例如sidt作为用户模式应用程序的指令(环 3)。

从文档中可以看出,BIOS 可以选择启用或禁用 VMX,也可以使用锁定位;如果设置了锁定位,则任何尝试写入以更改配置都将导致 GP 异常。

因此,这实际上取决于您的 BIOS 如何设置这些位,以回答您的问题。如果 BIOS 将所有位设置为 000,那么软件应该能够启用管理程序- 请参阅此处WRMSR的讨论我认为 WRMSR 是一条特权指令,这意味着您需要从内核中执行它。但是,一旦设置了锁定位,您就需要重新启动 - 基本上电路将检查重置标志的状态,然后在您的操作系统上抛出异常 - 这可以正常进行或崩溃,具体取决于是否它理解异常(很可能不是)。

这完全取决于操作系统是否可以启用虚拟化。虽然我可能错了,但我可以想象使用一些特定的系统调用,您可以从正在运行的操作系统重新刷新 BIOS。有一些主板允许它在 Windows 上,有 flashrom 工具允许它在 Linux 上。

因此,有人可以重新刷新固件以默认启用虚拟化,然后等待重新启动。

关于这是否可以在不重新启动的情况下完成,我不知道。我建议您获取处理器文档,并尝试查看是否有这方面的信息。

当然,如果你可以刷新固件/BIOS,那么你可以直接在那里放置一个rootkit,如果我没有错的话,UEFI会解决这一点(但不是以一种让所有人都满意的方式,尤其是在免费软件方面)。

不,因为 CPU 提供了对环 0 下面的根模式的管理程序访问。请参阅本 VMware 白皮书的第 6 页。

另请参阅此 Linux KVM 文章

如果您的硬件没有 IOMMU(在 Intel 的情况下为“Intel VT-d”支持 - 在 AMD 的情况下为“AMD I/O Virtualization Technology”支持),您将无法在 KVM 中分配设备。一些允许这样做的工作已经完成,但由于代码的各种问题,代码从未进入 KVM。目前,没有硬件支持的设备分配似乎永远不会集成到 KVM 中。