是否应该为 Meltdown 和 Spectre 修补虚拟机?

信息安全 虚拟化 崩溃 幽灵
2021-09-04 07:41:39

Meltdown and Virtual Machines中明确指出,至少 Spectre 可以跨虚拟机工作。这当然意味着 Hypervisor 必须打补丁,但是

虚拟机操作系统也应该打补丁吗?

不是真正的 CPU,尚不清楚它们是否直接容易受到基于预取的攻击,或者修补 Hypervisor 是否就足够了。

3个回答

首先,我的理解是操作系统/管理程序补丁只能缓解 Meltdown,而不是 Spectre。

其次,您修补管理程序以防止 VM 读取属于管理程序内核的内存。您修补来宾操作系统以防止进程读取属于来宾操作系统内核的内存。我的理解是它们是相互独立的;修补一个对另一个没有影响。


仿真与虚拟化

我不是虚拟化技术方面的专家,但是您的问题涉及仿真与虚拟化:在仿真中,CPU(包括所有寄存器、缓存等)在软件中完全模拟,它可能使用与底层硬件不同的指令集. 在虚拟化中,指令直接传递给硬件,但由管理程序强加了额外的进程调度。特别是,我对x86 虚拟化,特别是Intel 的 VT-x 技术的理解是,它是一个“真正的 CPU”,因为客户操作系统正在使用真正的 x86 指令,这些指令或多或少地直接传递到底层硬件。

所以是的,客户操作系统将容易受到 Meltdown 的影响,并且需要独立于虚拟机管理程序是否已打补丁进行打补丁。

我刚刚使用SpectrePoC的概念验证代码在一次性 VM 上进行了测试(它基于Spectre Attacks: Exploiting Speculative Execution,并且它有效,因为它声称能够利用系统。我肯定会建议修补虚拟机来宾内核和主机内核。

根据 QEMU 发布的信息,客户内核需要更新,并在管理程序插入新的 CPUID 和机器寄存器后重新启动。这解决了 Spectre 问题之一。唉,截至撰写本文时,QEMU 尚未发布相关的源代码补丁,预计将在其 2.11.1 版本中,因此如果在 QEMU 上运行,您可能需要在该补丁之后再次重新启动 VM。来宾内核应该识别新的 CPUID/MR 并做出适当的反应。其他管理程序(和云提供商)可能已经提供了这些更改,但仍需要新内核来保护来宾操作系统免受恶意应用程序的侵害。