SRBDS - 特殊寄存器缓冲区数据采样¶
SRBDS 是一种硬件漏洞,它允许 MDS MDS - 微架构数据采样 技术推断从特殊寄存器访问返回的值。特殊寄存器访问是对核外寄存器的访问。根据英特尔的评估,具有隐私安全预期的特殊寄存器读取是 RDRAND、RDSEED 和 SGX EGETKEY。
当使用 RDRAND、RDSEED 和 EGETKEY 指令时,数据通过易受 MDS 攻击的特殊寄存器机制移动到核心。
受影响的处理器¶
实现 RDRAND 和/或 RDSEED 的核心模型(桌面、移动、Xeon-E3)可能会受到影响。
如果处理器的 Family_Model 和步进在以下列表中,则该处理器会受到 SRBDS 的影响,但列出的处理器导出 MDS_NO 但 Intel TSX 可用但未启用除外。后一类处理器仅在软件使用 TSX_CTRL_MSR 启用 Intel TSX 时才会受到影响,否则它们不会受到影响。
通用名称
Family_Model
步进
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 返回的值。
缓解机制¶
英特尔将发布微代码更新,修改 RDRAND、RDSEED 和 EGETKEY 指令,以覆盖共享暂存缓冲区中的秘密特殊寄存器数据,然后再由另一个逻辑处理器访问秘密数据。
在执行 RDRAND、RDSEED 或 EGETKEY 指令期间,来自其他逻辑处理器的核外访问将被延迟,直到特殊寄存器读取完成并且共享暂存缓冲区中的秘密数据被覆盖。
这对性能有三个影响
RDRAND、RDSEED 或 EGETKEY 指令具有更高的延迟。
在多个逻辑处理器上同时执行 RDRAND 将被序列化,导致最大 RDRAND 带宽总体减少。
执行 RDRAND、RDSEED 或 EGETKEY 将延迟其他逻辑处理器错过其核心缓存的内存访问,其影响类似于传统的锁定缓存行拆分访问。
微代码更新提供了一种选择退出机制 (RNGDS_MITG_DIS),用于禁用在 Intel 软件保护扩展 (Intel SGX) 飞地外部执行的 RDRAND 和 RDSEED 指令的缓解措施。在使用此选择退出机制禁用缓解措施的逻辑处理器上,RDRAND 和 RDSEED 的执行时间不会延长,也不会影响同级逻辑处理器内存访问的性能。选择退出机制不影响 Intel SGX 飞地(包括在飞地内执行 RDRAND 或 RDSEED,以及 EGETKEY 执行)。
IA32_MCU_OPT_CTRL MSR 定义¶
除了此问题的缓解措施外,英特尔还添加了一个新的线程范围 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 飞地外部执行的 RDRAND 和 RDSEED 的缓解措施。选择退出特定逻辑处理器的缓解措施不会影响其他逻辑处理器的 RDRAND 和 RDSEED 缓解措施。
请注意,在 Intel SGX 飞地内部,无论 RNGDS_MITG_DS 的值如何,都会应用缓解措施。
内核命令行上的缓解控制¶
内核命令行允许在启动时使用选项“srbds=”控制 SRBDS 缓解。此选项是
off
此选项禁用受影响平台上 RDRAND 和 RDSEED 的 SRBDS 缓解。
SRBDS 系统信息¶
Linux 内核通过 sysfs 提供漏洞状态信息。对于 SRBDS,可以通过以下 sysfs 文件访问:/sys/devices/system/cpu/vulnerabilities/srbds
此文件中可能包含的值为
未受影响
处理器不受漏洞影响
易受攻击
处理器易受攻击且缓解措施已禁用
易受攻击:没有微代码
处理器易受攻击,并且微代码缺少缓解措施
缓解:微代码
处理器易受攻击,并且缓解措施正在生效。
缓解:TSX 已禁用
仅当启用 TSX 时,处理器才易受攻击,而此系统在启动时禁用了 TSX。
未知:取决于
虚拟机管理程序状态
在受影响的虚拟来宾处理器上运行,但无法知道主机处理器是否已缓解或易受攻击。
SRBDS 默认缓解措施¶
此新微代码在执行 RDRAND、RDSEED 期间对处理器访问进行序列化,确保在释放共享缓冲区以供重用之前将其覆盖。使用“srbds=off”内核命令行禁用 RDRAND 和 RDSEED 的缓解措施。