MDS - 微架构数据采样¶
微架构数据采样是一种硬件漏洞,它允许非特权推测性访问各种 CPU 内部缓冲区中可用的数据。
受影响的处理器¶
此漏洞影响范围广泛的英特尔处理器。此漏洞不存在于
来自 AMD、Centaur 和其他非英特尔供应商的处理器
较旧的处理器型号,其中 CPU 系列 < 6
一些 Atom(Bonnell、Saltwell、Goldmont、GoldmontPlus)
IA32_ARCH_CAPABILITIES MSR 中设置了 ARCH_CAP_MDS_NO 位的英特尔处理器。
处理器是否受影响可以从 sysfs 中的 MDS 漏洞文件中读取。请参阅 MDS 系统信息。
并非所有处理器都受到所有 MDS 变体的影响,但所有变体的缓解措施是相同的,因此内核将它们视为单个漏洞。
问题¶
在执行存储、加载、L1 重新填充操作时,处理器会将数据写入临时微架构结构(缓冲区)。缓冲区中的数据可以作为优化转发到加载操作。
在某些情况下,通常是由加载操作引起的故障/辅助,与加载内存地址无关的数据可以从缓冲区中推测性地转发。由于加载操作会导致故障或辅助,并且其结果将被丢弃,因此转发的数据不会导致程序执行或状态更改不正确。但是,恶意操作可能能够将此推测性数据转发到披露工具,从而可以通过缓存侧信道攻击推断出该值。
由于缓冲区可能在超线程之间共享,因此可能会发生跨超线程攻击。
更深入的技术信息可在 MDS 特定的 x86 架构部分中找到:Documentation/arch/x86/mds.rst。
攻击场景¶
针对 MDS 漏洞的攻击可以从主机或客户机上运行的恶意非特权用户空间应用程序发起。恶意客户机操作系统显然也可以发起攻击。
与其他基于推测的漏洞相反,MDS 漏洞不允许攻击者控制内存目标地址。因此,攻击纯粹是基于采样的,但正如 TLBleed 攻击所证明的那样,样本可以成功地进行后处理。
Web 浏览器¶
目前尚不清楚是否有可能通过 Web 浏览器进行攻击。通过 Java-Script 进行利用被认为是极不可能的,但其他广泛使用的 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 状态
无需在意
否
无需在意
N/A
不受影响
是
是
已禁用
关闭
易受攻击
是
是
已禁用
完全
已缓解
是
是
已启用
无需在意
已缓解
否
是
N/A
关闭
易受攻击
否
是
N/A
完全
已缓解
这仅涵盖主机到客户机转换,即防止从主机泄漏到客户机,但不保护客户机内部。客户机需要有自己的保护措施。
XEON PHI 的特定注意事项¶
XEON PHI 处理器系列会受到 MSBDS 的影响,当进入空闲状态时,该漏洞可以跨超线程被利用。一些 XEON PHI 变体允许在用户空间(Ring 3)中使用 MWAIT,这为恶意用户空间打开了一个潜在的攻击途径。可以通过内核命令行选项 'ring3mwait=disable' 来禁用此暴露。
XEON PHI 不受其他 MDS 变体的影响,并且在 CPU 进入空闲状态之前会缓解 MSBDS。由于 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 漏洞缓解措施,在退出用户空间和进入 VM 时清除 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。