MDS - 微架构数据采样¶
微架构数据采样是一种硬件漏洞,允许非特权推测性访问 CPU 各种内部缓冲区中可用的数据。
受影响的处理器¶
此漏洞影响范围广泛的英特尔处理器。该漏洞不存在于以下处理器上:
来自 AMD、Centaur 和其他非英特尔供应商的处理器
CPU 系列小于 6 的较旧处理器型号
部分 Atom 处理器(Bonnell、Saltwell、Goldmont、GoldmontPlus)
在 IA32_ARCH_CAPABILITIES MSR 中设置了 ARCH_CAP_MDS_NO 位的英特尔处理器。
处理器是否受影响可以从 sysfs 中的 MDS 漏洞文件中读取。参见 MDS 系统信息。
并非所有处理器都受 MDS 所有变体的影响,但它们的缓解措施是相同的,因此内核将它们视为单一漏洞。
问题¶
当执行存储、加载、L1 填充操作时,处理器会将数据写入临时微架构结构(缓冲区)。缓冲区中的数据可以作为优化转发到加载操作。
在某些条件下,通常是由加载操作引起的故障/辅助,与加载内存地址无关的数据可以从缓冲区中推测性地转发。由于加载操作导致故障或辅助,其结果将被丢弃,因此转发的数据不会导致程序执行错误或状态更改。但恶意操作可能能够将这些推测性数据转发到泄露小工具,进而通过缓存侧信道攻击推断出值。
由于缓冲区可能在超线程(Hyper-Threads)之间共享,因此跨超线程攻击是可能的。
更深入的技术信息可在 MDS 特定的 x86 架构部分中找到:Documentation/arch/x86/mds.rst。
攻击场景¶
针对 MDS 漏洞的攻击可以由运行在主机或访客机上的恶意非特权用户空间应用程序发起。恶意的访客操作系统显然也可以发起攻击。
与其他基于推测的漏洞不同,MDS 漏洞不允许攻击者控制内存目标地址。因此,攻击纯粹是基于采样的,但正如 TLBleed 攻击所演示的那样,样本可以成功进行后处理。
Web 浏览器¶
目前尚不清楚是否可以通过 Web 浏览器发起攻击。通过 JavaScript 进行利用被认为可能性很小,但其他广泛使用的 Web 技术(如 Webassembly)可能会被滥用。
MDS 系统信息¶
Linux 内核提供了一个 sysfs 接口,用于枚举系统的当前 MDS 状态:系统是否易受攻击以及哪些缓解措施处于活动状态。相关的 sysfs 文件是:
/sys/devices/system/cpu/vulnerabilities/mds
此文件中可能的值是:
“不受影响”
处理器不易受攻击
“易受攻击”
处理器易受攻击,但未启用缓解措施
“易受攻击:已尝试清除 CPU 缓冲区,但无微码”
处理器易受攻击,但微码未更新。缓解措施已尽力启用。
如果处理器易受攻击,但基于微码的缓解机制的可用性未通过 CPUID 宣布,则内核会选择一种尽力缓解模式。此模式会调用缓解指令,但不保证它们能清除 CPU 缓冲区。
这样做是为了解决虚拟化场景,即主机已应用微码更新,但管理程序尚未更新以将 CPUID 暴露给访客机。如果主机有更新的微码,保护就会生效;否则会无谓地浪费一些 CPU 周期。
“缓解:清除 CPU 缓冲区”
处理器易受攻击,且已启用 CPU 缓冲区清除缓解措施。
如果处理器易受攻击,则以下信息会附加到上述信息中:
“SMT 易受攻击”
SMT 已启用
“SMT 已缓解”
SMT 已启用并得到缓解
“SMT 已禁用”
SMT 已禁用
“SMT 主机状态未知”
内核在虚拟机中运行,主机 SMT 状态未知
缓解机制¶
内核会检测受影响的 CPU 以及所需微码的存在。
如果 CPU 受影响且微码可用,则内核默认启用缓解措施。该缓解措施可以在引导时通过内核命令行选项进行控制。参见 内核命令行上的缓解控制。
CPU 缓冲区清除¶
MDS 的缓解措施会在返回用户空间和进入访客机时清除受影响的 CPU 缓冲区。
如果启用了 SMT,当 CPU 仅受 MSBDS 影响而未受任何其他 MDS 变体影响时,它还会在空闲进入时清除缓冲区,因为其他变体无法防止跨超线程攻击。
对于仅受 MSBDS 影响的 CPU,用户空间、访客机和空闲转换缓解措施已足够,并且 SMT 不受影响。
虚拟化缓解¶
主机到访客机转换的保护取决于 CPU 的 L1TF 漏洞。
CPU 受 L1TF 影响
如果 L1D 刷新缓解措施已启用且有最新的微码可用,则 L1D 刷新缓解措施会自动保护访客机转换。
如果 L1D 刷新缓解措施已禁用,则在主机 MDS 缓解措施启用时,会明确调用 MDS 缓解措施。
有关 L1TF 和虚拟化的详细信息,请参见:Documentation/admin-guide/hw-vuln//l1tf.rst。
CPU 不受 L1TF 影响
在主机 MDS 缓解措施启用时,CPU 缓冲区会在进入访客机前被刷新。
主机到访客机转换的 MDS 保护矩阵
L1TF
MDS
VMX-L1FLUSH
主机 MDS
MDS 状态
不关心
否
不关心
不适用
不受影响
是
是
已禁用
关闭
易受攻击
是
是
已禁用
完整
已缓解
是
是
已启用
不关心
已缓解
否
是
不适用
关闭
易受攻击
否
是
不适用
完整
已缓解
这仅涵盖主机到访客机的转换,即防止从主机到访客机的泄漏,但不能在访客机内部提供保护。访客机需要有自己的保护措施。
XEON PHI 特定注意事项¶
XEON PHI 处理器家族受 MSBDS 影响,在进入空闲状态时可能通过超线程被利用。某些 XEON PHI 变体允许在用户空间(Ring 3)中使用 MWAIT,这为恶意用户空间提供了潜在的攻击向量。可以通过内核命令行选项 ‘ring3mwait=disable’ 禁用此暴露。
XEON PHI 不受其他 MDS 变体的影响,并且 MSBDS 在 CPU 进入空闲状态之前已得到缓解。由于 XEON PHI 也不受 L1TF 影响,因此不需要禁用 SMT 即可获得全面保护。
SMT 控制¶
除了 MSBDS 之外的所有 MDS 变体都可以通过超线程进行攻击。这意味着在受 MFBDS 或 MLPDS 影响的 CPU 上,需要禁用 SMT 才能获得全面保护。这些是大多数受影响的 CPU;例外是 XEON PHI,参见 XEON PHI 特定注意事项。
禁用 SMT 可能会对性能产生显著影响,但影响程度取决于工作负载的类型。
有关详细信息,请参见 L1TF 缓解文档中的相关章节:Documentation/admin-guide/hw-vuln/l1tf.rst。
内核命令行上的缓解控制¶
内核命令行允许在引导时使用选项 “mds=” 控制 MDS 缓解措施。此选项的有效参数有:
full
如果 CPU 易受攻击,则启用所有可用的 MDS 漏洞缓解措施,包括退出用户空间和进入虚拟机时清除 CPU 缓冲区。如果启用了 SMT,空闲转换也会受到保护。
它不会自动禁用 SMT。
full,nosmt
与 mds=full 相同,但会在易受攻击的 CPU 上禁用 SMT。这是完整的缓解措施。
off
完全禁用 MDS 缓解措施。
未指定此选项等同于“mds=full”。对于同时受 TAA(TSX 异步中止)和 MDS 影响的处理器,仅指定“mds=off”而不附带“tsx_async_abort=off”将无效,因为两种漏洞使用相同的缓解措施。
缓解选择指南¶
1. 可信用户空间¶
如果所有用户空间应用程序都来自可信来源,并且不执行外部提供的不可信代码,则可以禁用缓解措施。
2. 具有可信访客机的虚拟化¶
与上述针对可信用户空间相同考虑因素也适用。
3. 具有不可信访客机的虚拟化¶
保护取决于 L1TF 缓解措施的状态。参见 虚拟化缓解。
如果 MDS 缓解措施已启用且 SMT 已禁用,则可以防止访客机到主机以及访客机到访客机的攻击。
默认缓解措施¶
内核针对易受攻击处理器的默认缓解措施是:
启用 CPU 缓冲区清除
内核默认不强制禁用 SMT,这使得 SMT 系统在运行不可信代码时容易受到攻击。其原理与 L1TF 相同。参见 Documentation/admin-guide/hw-vuln//l1tf.rst。