25. TSX 异步中止 (TAA) 缓解¶
25.1. 概述¶
TSX 异步中止 (TAA) 是某些 Intel 处理器中内部缓冲区的一种侧信道攻击,类似于微架构数据采样 (MDS)。在这种情况下,当事务同步扩展 (TSX) 事务中存在异步中止条件时,某些加载可能会将无效数据推测性地传递给依赖操作。这包括没有故障或辅助条件的加载。此类加载可能会推测性地暴露来自与 MDS 相同的微架构数据结构的陈旧数据,具有相同的暴露范围,即同一线程和跨线程。此问题会影响所有当前支持 TSX 的处理器。
25.2. 缓解策略¶
a) 禁用 TSX - 其中一种缓解方法是禁用 TSX。一个新的 MSR IA32_TSX_CTRL 将在未来的处理器和微码更新后的当前处理器中可用,可用于禁用 TSX。此外,它还控制 CPUID 中 TSX 特性位(RTM 和 HLE)的枚举。
b) 清除 CPU 缓冲区 - 与 MDS 类似,清除 CPU 缓冲区可以缓解此漏洞。有关此方法的更多详细信息,请参阅Documentation/admin-guide/hw-vuln/mds.rst。
25.3. 内核内部缓解模式¶
关闭
缓解已禁用。要么 CPU 不受影响,要么在内核命令行上提供了 tsx_async_abort=off。
TSX 已禁用
缓解已启用。在支持 TSX 控制的处理器上,默认情况下在启动时禁用 TSX 特性。
verw
缓解已启用。CPU 受影响,并且在 CPUID 中声明了 MD_CLEAR。
需要微码
缓解已启用。CPU 受影响,并且在 CPUID 中未声明 MD_CLEAR。这主要适用于主机具有更新的微码但虚拟机管理程序未在 CPUID 中暴露 MD_CLEAR 的虚拟化场景。这是一种尽力而为的方法,不保证有效。
如果 CPU 受影响,并且未提供“tsx_async_abort”内核命令行参数,则内核将根据 RTM 和 MD_CLEAR CPUID 位的状态选择适当的缓解措施。
下表指示了 tsx=on|off|auto 命令行选项对 TAA 缓解、VERW 行为和 TSX 特性的状态的影响,适用于 MSR_IA32_ARCH_CAPABILITIES 位的各种组合。
“tsx=off”
MSR_IA32_ARCH_CAPABILITIES 位 |
使用 cmdline tsx=off 的结果 |
|||||
---|---|---|---|---|---|---|
TAA_NO |
MDS_NO |
TSX_CTRL_MSR |
启动后的 TSX 状态 |
VERW 可以清除 CPU 缓冲区 |
TAA 缓解 tsx_async_abort=off |
TAA 缓解 tsx_async_abort=full |
0 |
0 |
0 |
硬件默认 |
是 |
与 MDS 相同 |
与 MDS 相同 |
0 |
0 |
1 |
无效情况 |
无效情况 |
无效情况 |
无效情况 |
0 |
1 |
0 |
硬件默认 |
否 |
需要微码更新 |
需要微码更新 |
0 |
1 |
1 |
已禁用 |
是 |
TSX 已禁用 |
TSX 已禁用 |
1 |
X |
1 |
已禁用 |
X |
不需要 |
不需要 |
“tsx=on”
MSR_IA32_ARCH_CAPABILITIES 位 |
使用 cmdline tsx=on 的结果 |
|||||
---|---|---|---|---|---|---|
TAA_NO |
MDS_NO |
TSX_CTRL_MSR |
启动后的 TSX 状态 |
VERW 可以清除 CPU 缓冲区 |
TAA 缓解 tsx_async_abort=off |
TAA 缓解 tsx_async_abort=full |
0 |
0 |
0 |
硬件默认 |
是 |
与 MDS 相同 |
与 MDS 相同 |
0 |
0 |
1 |
无效情况 |
无效情况 |
无效情况 |
无效情况 |
0 |
1 |
0 |
硬件默认 |
否 |
需要微码更新 |
需要微码更新 |
0 |
1 |
1 |
已启用 |
是 |
无 |
与 MDS 相同 |
1 |
X |
1 |
已启用 |
X |
不需要 |
不需要 |
“tsx=auto”
MSR_IA32_ARCH_CAPABILITIES 位 |
使用 cmdline tsx=auto 的结果 |
|||||
---|---|---|---|---|---|---|
TAA_NO |
MDS_NO |
TSX_CTRL_MSR |
启动后的 TSX 状态 |
VERW 可以清除 CPU 缓冲区 |
TAA 缓解 tsx_async_abort=off |
TAA 缓解 tsx_async_abort=full |
0 |
0 |
0 |
硬件默认 |
是 |
与 MDS 相同 |
与 MDS 相同 |
0 |
0 |
1 |
无效情况 |
无效情况 |
无效情况 |
无效情况 |
0 |
1 |
0 |
硬件默认 |
否 |
需要微码更新 |
需要微码更新 |
0 |
1 |
1 |
已禁用 |
是 |
TSX 已禁用 |
TSX 已禁用 |
1 |
X |
1 |
已启用 |
X |
不需要 |
不需要 |
在表中,TSX_CTRL_MSR 是 MSR_IA32_ARCH_CAPABILITIES 中的一个新位,指示是否支持 MSR_IA32_TSX_CTRL。
IA32_TSX_CTRL MSR 中有两个控制位
- 位 0:设置后,它会禁用 TSX 的受限事务内存 (RTM) 子功能(将强制所有事务在 XBEGIN 指令上中止)。
sub-feature of TSX (will force all transactions to abort on the XBEGIN instruction).
- 位 1:设置后,它会禁用 RTM 和 HLE 特性的枚举
(即它会使 CPUID(EAX=7).EBX{bit4} 和 CPUID(EAX=7).EBX{bit11} 读取为 0)。