SRBDS - 特殊寄存器缓冲区数据采样¶
SRBDS 是一种硬件漏洞,允许 MDS MDS - 微架构数据采样 技术推断特殊寄存器访问返回的值。特殊寄存器访问是对脱离核心的寄存器进行的访问。根据 Intel 的评估,具有安全隐私预期的特殊寄存器读取包括 RDRAND、RDSEED 和 SGX EGETKEY。
当使用 RDRAND、RDSEED 和 EGETKEY 指令时,数据通过易受 MDS 攻击的特殊寄存器机制移动到核心。
受影响的处理器¶
实现 RDRAND 和/或 RDSEED 的酷睿型号(桌面、移动、Xeon-E3)可能受到影响。
如果处理器的 Family_Model 和 Stepping 在以下列表中,则受 SRBDS 影响,但列出的处理器在 Intel TSX 可用但未启用时导出 MDS_NO 的情况除外。后一类处理器仅在软件使用 TSX_CTRL_MSR 启用 Intel TSX 时才受影响,否则不受影响。
通用名称
系列_型号
步进
IvyBridge
06_3AH
全部
Haswell
06_3CH
全部
Haswell_L
06_45H
全部
Haswell_G
06_46H
全部
Broadwell_G
06_47H
全部
Broadwell
06_3DH
全部
Skylake_L
06_4EH
全部
Skylake
06_5EH
全部
Kabylake_L
06_8EH
<= 0xC
Kabylake
06_9EH
<= 0xD
攻击场景¶
非特权用户可以使用 MDS 技术,从在另一个核心或同级线程上执行的 RDRAND 和 RDSEED 返回的值中提取数据。
缓解机制¶
Intel 将发布微代码更新,修改 RDRAND、RDSEED 和 EGETKEY 指令,以在共享暂存缓冲区中的秘密特殊寄存器数据被另一个逻辑处理器访问之前将其覆盖。
在执行 RDRAND、RDSEED 或 EGETKEY 指令期间,来自其他逻辑处理器的脱核访问将被延迟,直到特殊寄存器读取完成且共享暂存缓冲区中的秘密数据被覆盖。
这会对性能产生三个影响
RDRAND、RDSEED 或 EGETKEY 指令具有更高的延迟。
在多个逻辑处理器上同时执行 RDRAND 将被串行化,导致 RDRAND 最大带宽的整体下降。
执行 RDRAND、RDSEED 或 EGETKEY 将延迟其他未命中核心缓存的逻辑处理器的内存访问,其影响类似于传统的锁定缓存行拆分访问。
微代码更新提供了一种选择退出机制 (RNGDS_MITG_DIS),以禁用在 Intel 软件保护扩展 (Intel SGX) enclave 之外执行的 RDRAND 和 RDSEED 指令的缓解措施。在通过此选择退出机制禁用缓解措施的逻辑处理器上,RDRAND 和 RDSEED 的执行时间不会增加,也不会影响同级逻辑处理器的内存访问性能。选择退出机制不影响 Intel SGX enclave(包括在 enclave 内执行 RDRAND 或 RDSEED,以及 EGETKEY 的执行)。
IA32_MCU_OPT_CTRL MSR 定义¶
除了对此问题的缓解措施外,Intel 还添加了一个新的线程范围 IA32_MCU_OPT_CTRL MSR(地址 0x123)。此 MSR 和 RNGDS_MITG_DIS(位 0)的存在通过 CPUID.(EAX=07H,ECX=0).EDX[SRBDS_CTRL = 9]==1 进行枚举。此 MSR 是通过微代码更新引入的。
将逻辑处理器的 IA32_MCU_OPT_CTRL[0] (RNGDS_MITG_DIS) 设置为 1 会禁用在该逻辑处理器上 Intel SGX enclave 之外执行的 RDRAND 和 RDSEED 的缓解措施。选择退出特定逻辑处理器的缓解措施不会影响其他逻辑处理器的 RDRAND 和 RDSEED 缓解措施。
请注意,在 Intel SGX enclave 内部,无论 RNGDS_MITG_DS 的值如何,都会应用缓解措施。
内核命令行上的缓解控制¶
内核命令行允许在启动时通过选项“srbds=”控制 SRBDS 缓解措施。选项如下:
off
此选项会在受影响的平台上禁用 RDRAND 和 RDSEED 的 SRBDS 缓解措施。
SRBDS 系统信息¶
Linux 内核通过 sysfs 提供漏洞状态信息。对于 SRBDS,可以通过以下 sysfs 文件访问:/sys/devices/system/cpu/vulnerabilities/srbds
此文件中可能包含的值有:
不受影响
处理器无漏洞
存在漏洞
处理器存在漏洞且缓解措施已禁用
存在漏洞:无微代码
处理器存在漏洞且微代码缺少缓解措施
缓解:微代码
处理器存在漏洞且缓解措施已生效。
缓解:TSX 已禁用
仅当 TSX 启用时处理器才存在漏洞,而本系统是在 TSX 禁用状态下启动的。
未知:取决于
hypervisor 状态
运行在受影响的虚拟访客处理器上,但无法得知宿主处理器是否已缓解或存在漏洞。
SRBDS 默认缓解¶
此新微代码在执行 RDRAND、RDSEED 期间使处理器访问串行化,确保共享缓冲区在释放以供重用之前被覆盖。使用“srbds=off”内核命令行可禁用 RDRAND 和 RDSEED 的缓解措施。