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 指令期間,來自其他邏輯處理器的脫核訪問將被延遲,直到特殊暫存器讀取完成且共享暫存緩衝區中的秘密資料被覆蓋。

這會對效能產生三個影響

  1. RDRAND、RDSEED 或 EGETKEY 指令具有更高的延遲。

  2. 在多個邏輯處理器上同時執行 RDRAND 將被序列化,導致 RDRAND 最大頻寬的整體下降。

  3. 執行 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 的緩解措施。