處理器MMIO陳舊資料漏洞

處理器MMIO陳舊資料漏洞是一類記憶體對映I/O(MMIO)漏洞,可以暴露資料。暴露資料的操作序列範圍從簡單到非常複雜。由於大多數漏洞要求攻擊者能夠訪問MMIO,因此許多環境不受影響。使用虛擬化的系統環境,如果MMIO訪問提供給不受信任的客戶機,可能需要緩解。這些漏洞不是瞬態執行攻擊。然而,這些漏洞可能會將陳舊資料傳播到核心填充緩衝區中,然後未緩解的瞬態執行攻擊可以推斷出這些資料。這些漏洞的緩解措施包括微程式碼更新和軟體更改的組合,具體取決於平臺和使用模型。其中一些緩解措施類似於用於緩解微架構資料取樣(MDS)或特殊暫存器緩衝區資料取樣(SRBDS)的措施。

資料傳播器

傳播器是導致陳舊資料從一個微架構緩衝區或暫存器複製或移動到另一個的操作。處理器MMIO陳舊資料漏洞是可能導致陳舊資料直接讀入架構上軟體可見狀態或從緩衝區或暫存器中取樣的操作。

填充緩衝區陳舊資料傳播器(FBSDP)

在某些非一致性寫入時,陳舊資料可能會從填充緩衝區(FB)傳播到un-core的非一致性部分。填充緩衝區傳播本身不會使陳舊資料在架構上可見。陳舊資料必須傳播到可以讀取或採樣它的位置。

邊帶陳舊資料傳播器(SSDP)

邊帶陳舊資料傳播器(SSDP)僅限於客戶端(包括Intel Xeon伺服器E3)un-core實現。邊帶響應緩衝區由所有客戶端核心共享。對於前往邊帶目的地的非一致性讀取,un-core邏輯會從事務緩衝區和邊帶響應緩衝區返回64位元組的資料到核心,包括請求的資料和未請求的陳舊資料。結果,來自邊帶響應和事務緩衝區的陳舊資料現在可能駐留在核心填充緩衝區中。

主陳舊資料傳播器(PSDP)

主陳舊資料傳播器(PSDP)僅限於客戶端(包括Intel Xeon伺服器E3)un-core實現。類似於邊帶響應緩衝區,主響應緩衝區由所有客戶端核心共享。對於某些處理器,MMIO主讀取將返回64位元組的資料到核心填充緩衝區,包括請求的資料和未請求的陳舊資料。這與邊帶陳舊資料傳播器類似。

漏洞

裝置暫存器部分寫入(DRPW)(CVE-2022-21166)

某些端點MMIO暫存器錯誤地處理小於暫存器大小的寫入。它不會中止寫入或僅複製正確的位元組子集(例如,2位元組寫入的2位元組),而是可能將比寫入事務指定更多的位元組寫入暫存器。在受FBSDP影響的處理器上,這可能會從建立寫入事務的核心填充緩衝區中暴露陳舊資料。

共享緩衝區資料取樣(SBDS)(CVE-2022-21125)

在傳播器可能已在un-core中移動資料並將陳舊資料複製到客戶端核心填充緩衝區之後,受MFBDS影響的處理器可以從填充緩衝區洩漏資料。它僅限於客戶端(包括Intel Xeon伺服器E3)un-core實現。

共享緩衝區資料讀取(SBDR)(CVE-2022-21123)

它與共享緩衝區資料取樣(SBDS)類似,不同之處在於資料直接讀入架構上軟體可見的狀態。它僅限於客戶端(包括Intel Xeon伺服器E3)un-core實現。

受影響的處理器

並非所有CPU都受所有變體影響。例如,大多數伺服器市場處理器(不包括Intel Xeon E3處理器)僅受裝置暫存器部分寫入(DRPW)影響。

以下是受影響的英特爾處理器列表[1]

通用名稱

家族_型號

步進

HASWELL_X

06_3FH

2,4

SKYLAKE_L

06_4EH

3

BROADWELL_X

06_4FH

所有

SKYLAKE_X

06_55H

3,4,6,7,11

BROADWELL_D

06_56H

3,4,5

SKYLAKE

06_5EH

3

ICELAKE_X

06_6AH

4,5,6

ICELAKE_D

06_6CH

1

ICELAKE_L

06_7EH

5

ATOM_TREMONT_D

06_86H

所有

LAKEFIELD

06_8AH

1

KABYLAKE_L

06_8EH

9 到 12

ATOM_TREMONT

06_96H

1

ATOM_TREMONT_L

06_9CH

0

KABYLAKE

06_9EH

9 到 13

COMETLAKE

06_A5H

2,3,5

COMETLAKE_L

06_A6H

0,1

ROCKETLAKE

06_A7H

1

如果CPU在受影響的處理器列表中,但不受某個變體影響,則由MSR IA32_ARCH_CAPABILITIES中的新位指示。如後面章節所述,所有變體的緩解措施大體相同,即透過VERW指令清除CPU填充緩衝區。

MSR中的新位

較新的處理器和現有受影響處理器的微程式碼更新在IA32_ARCH_CAPABILITIES MSR中添加了新位。這些位可用於列舉處理器MMIO陳舊資料漏洞的特定變體和緩解能力。

MSR IA32_ARCH_CAPABILITIES

位 13 - SBDR_SSDP_NO - 當設定時,處理器不受以下影響:

共享緩衝區資料讀取(SBDR)漏洞或邊帶陳舊資料傳播器(SSDP)。

位 14 - FBSDP_NO - 當設定時,處理器不受填充緩衝區

陳舊資料傳播器(FBSDP)影響。

位 15 - PSDP_NO - 當設定時,處理器不受主陳舊資料

傳播器(PSDP)影響。

位 17 - FB_CLEAR - 當設定時,VERW指令將作為MD_CLEAR操作的一部分覆蓋CPU填充緩衝區

值。未列舉MDS_NO(意味著它們受MDS影響)但確實枚舉了L1D_FLUSH和MD_CLEAR支援的處理器,隱式地將FB_CLEAR作為其MD_CLEAR支援的一部分進行列舉。

位 18 - FB_CLEAR_CTRL - 處理器支援MSR的讀寫

IA32_MCU_OPT_CTRL[FB_CLEAR_DIS]。在此類處理器上,可以設定FB_CLEAR_DIS位,以使VERW指令不執行FB_CLEAR操作。並非所有支援FB_CLEAR的處理器都支援FB_CLEAR_CTRL。

MSR IA32_MCU_OPT_CTRL

位 3 - FB_CLEAR_DIS - 當設定時,VERW指令不執行FB_CLEAR操作。這在系統軟體認為有必要時(例如,當效能更關鍵,或者不受信任的軟體沒有MMIO訪問時)可能有助於減少FB_CLEAR的效能影響。請注意,FB_CLEAR_DIS對列舉沒有影響(例如,它不改變FB_CLEAR或MD_CLEAR列舉),並且可能並非所有列舉FB_CLEAR的處理器都支援它。

緩解措施

像MDS一樣,處理器MMIO陳舊資料漏洞的所有變體都採用相同的緩解策略,即在攻擊者提取秘密之前強制CPU清除受影響的緩衝區。

這透過結合微程式碼更新使用原本未使用且已過時的VERW指令實現。當VERW指令執行時,微程式碼會清除受影響的CPU緩衝區。

核心重用MDS函式來呼叫緩衝區清除

mds_clear_cpu_buffers()

在受MDS影響的CPU上,核心已經在核心/使用者空間、管理程式/客戶機和C狀態(空閒)轉換時呼叫CPU緩衝區清除。此類CPU上不需要額外的緩解措施。

對於不受MDS或TAA影響的CPU,僅當攻擊者具有MMIO能力時才需要緩解。因此,核心/使用者空間不需要VERW。對於虛擬化情況,僅當具有MMIO能力的客戶機在VMENTER時才需要VERW。

緩解點

返回使用者空間

當受MDS/TAA影響時,緩解措施與MDS相同,否則不需要緩解。

C狀態轉換

CPU在C狀態轉換期間的控制暫存器寫入可以將資料從填充緩衝區傳播到un-core緩衝區。在C狀態轉換前執行VERW以清除CPU填充緩衝區。

客戶機入口點

當處理器也受MDS/TAA影響時,緩解措施與MDS相同,否則僅對具有MMIO能力的客戶機在VMENTER時執行VERW。在不受MDS/TAA影響的CPU上,沒有MMIO訪問許可權的客戶機無法使用處理器MMIO陳舊資料漏洞提取秘密,因此不需要為此類客戶機執行VERW。

核心命令列上的緩解控制

核心命令列允許在啟動時透過“mmio_stale_data=”選項控制處理器MMIO陳舊資料緩解措施。此選項的有效引數為:

full

如果CPU易受攻擊,則啟用緩解措施;在退出使用者空間和進入虛擬機器時清除CPU緩衝區。空閒轉換也受到保護。它不會自動停用SMT。

full,nosmt

與full相同,在易受攻擊的CPU上停用SMT。這是完整的緩解措施。

off

完全停用緩解措施。

如果CPU受影響且核心命令列未提供mmio_stale_data=off,則核心選擇適當的緩解措施。

緩解狀態資訊

Linux核心提供一個sysfs介面,用於列舉系統的當前漏洞狀態:系統是否易受攻擊,以及哪些緩解措施處於活動狀態。相關sysfs檔案是:

/sys/devices/system/cpu/vulnerabilities/mmio_stale_data

此檔案中可能的值為:

‘未受影響’

處理器不易受攻擊

‘易受攻擊’

處理器易受攻擊,但未啟用緩解措施

‘易受攻擊:嘗試清除CPU緩衝區,但無微程式碼’

處理器易受攻擊,但微程式碼未更新。緩解措施已盡力啟用。

如果處理器易受攻擊,但基於微程式碼的緩解機制的可用性未透過CPUID通告,核心會選擇一種盡力而為的緩解模式。此模式會呼叫緩解指令,但不保證它們能清除CPU緩衝區。

這樣做是為了解決虛擬化場景,即主機已應用微程式碼更新,但管理程式尚未更新以向客戶機暴露CPUID。如果主機已更新微程式碼,則保護生效;否則會無意義地浪費一些CPU週期。

‘緩解措施:清除CPU緩衝區’

處理器易受攻擊,且CPU緩衝區清除緩解措施已啟用。

‘未知:無緩解措施’

處理器漏洞狀態未知,因為它已超出服務期。未嘗試緩解。

定義:

服務期:透過英特爾平臺更新(IPU)流程或其他類似機制,為英特爾處理器或平臺提供功能和安全更新的過程。

服務更新結束(ESU):ESU是英特爾不再提供服務(例如透過IPU或其他類似更新流程)的日期。ESU日期通常會與季度末對齊。

如果處理器易受攻擊,則以下資訊將附加到上述資訊中:

‘SMT易受攻擊’

SMT已啟用

‘SMT已停用’

SMT已停用

‘SMT主機狀態未知’

核心在虛擬機器中執行,主機SMT狀態未知

參考資料