iTLB 多次命中

iTLB 多次命中是一个缺陷,当指令获取命中指令 TLB 中的多个条目时,某些处理器可能会发生机器检查错误,可能导致 CPU 无法恢复的死锁。这可能发生在页面大小与物理地址或缓存类型一起更改时。在虚拟化系统上运行的恶意访客可以利用此缺陷执行拒绝服务攻击。

受影响的处理器

此缺陷的变体存在于大多数英特尔酷睿 (Intel Core) 和至强 (Xeon) 处理器型号上。此缺陷不存在于

  • 非英特尔处理器

  • 部分 Atom 处理器 (Airmont, Bonnell, Goldmont, GoldmontPlus, Saltwell, Silvermont)

  • 在 IA32_ARCH_CAPABILITIES MSR 中设置了 PSCHANGE_MC_NO 位的英特尔处理器。

问题

特权软件(包括操作系统和虚拟机管理器 (VMM))负责内存管理。内存管理中的一个关键组件是页表的控制。现代处理器使用虚拟内存,这是一种为处理器创建巨大内存错觉的技术。这个虚拟空间被分成给定大小的页面。页表将虚拟地址转换为物理地址。

为了减少执行虚拟地址到物理地址转换时的延迟,处理器包含一个称为 TLB 的结构,用于缓存最近的转换。指令(iTLB)和数据(dTLB)有单独的 TLB。

在此缺陷下,指令从使用 iTLB 中缓存的 4 KB 转换翻译的线性地址获取。特权软件修改分页结构,使得同一线性地址使用不同的物理地址或内存类型的大页面大小(2 MB、4 MB、1 GB)。在页结构修改之后但在软件使该线性地址的任何 iTLB 条目失效之前,在同一线性地址上发生的代码获取可能会导致机器检查错误,从而可能导致系统挂起或关机。

攻击场景

针对 iTLB 多次命中缺陷的攻击可以从虚拟化系统中的恶意访客发起。

iTLB 多次命中系统信息

Linux 内核提供了一个 sysfs 接口来枚举系统当前的 iTLB 多次命中状态:系统是否脆弱以及哪些缓解措施是活跃的。相关的 sysfs 文件是:

/sys/devices/system/cpu/vulnerabilities/itlb_multihit

此文件中可能的值是:

不受影响

处理器不受此漏洞影响。

KVM:缓解措施:拆分巨页

软件更改缓解此问题。

KVM:缓解措施:VMX 不支持

KVM 不受此漏洞影响,因为虚拟机扩展 (VMX) 不受支持。

KVM:缓解措施:VMX 已禁用

KVM 不受此漏洞影响,因为虚拟机扩展 (VMX) 已禁用。

KVM:易受攻击

处理器易受攻击,但未启用缓解措施

缺陷的枚举

IA32_ARCH_CAPABILITIES (PSCHANGE_MC_NO) MSR 中已分配一个新位,并将在已针对此问题采取缓解措施的 CPU 上设置此位。

IA32_ARCH_CAPABILITIES MSR

不存在

可能易受攻击,检查型号

IA32_ARCH_CAPABILITIES[PSCHANGE_MC_NO]

‘0’

可能易受攻击,检查型号

IA32_ARCH_CAPABILITIES[PSCHANGE_MC_NO]

‘1’

不受攻击

缓解机制

此缺陷可以通过将大页面大小的使用限制为不可执行页面来缓解。这会将所有 iTLB 条目强制为 4K,并消除多次命中的可能性。

为了缓解此漏洞,KVM 最初将所有巨页标记为不可执行。如果访客尝试在其中一个页面中执行,该页面将被分解为 4K 页面,然后这些页面被标记为可执行。

如果 EPT 在宿主机上被禁用或不可用,KVM 将控制 TLB 刷新,并且不会发生问题情况。然而,嵌套虚拟化使用的影子 EPT 分页机制是易受攻击的,因为嵌套访客可以通过修改其自己的(非嵌套)页表来触发多次 iTLB 命中。为简化起见,KVM 将在所有影子分页模式下将大页面设置为不可执行。

内核命令行和 KVM - 模块参数上的缓解控制

KVM 虚拟机监控程序将巨页标记为不可执行的缓解机制可以通过模块参数“nx_huge_pages=”来控制。内核命令行允许在启动时使用选项“kvm.nx_huge_pages=”来控制 iTLB 多次命中缓解措施。

这些选项的有效参数是:

force

缓解已启用。在这种情况下,缓解措施在 Linux 内核 KVM 模块中实现了不可执行的巨页。EPT 中的所有巨页都标记为不可执行。如果访客尝试在其中一个页面中执行,该页面将被分解为 4K 页面,然后这些页面被标记为可执行。

off

缓解已禁用。

auto

仅当平台受影响且内核未通过“mitigations=off”命令行参数引导时,才启用缓解措施。这是默认选项。

缓解措施选择指南

1. 未使用虚拟化

系统已由内核无条件保护,无需进一步操作。

2. 带有可信访客的虚拟化

如果访客来自可信来源,您可以假定访客不会恶意利用这些缺陷,无需进一步操作。

3. 带有不可信访客的虚拟化

如果访客来自不可信来源,访客宿主机内核将需要通过内核命令行或 KVM 模块参数应用 iTLB 多次命中缓解措施。