MDS - 微架構資料取樣¶
微架構資料取樣是一種硬體漏洞,允許非特權推測性訪問 CPU 各種內部緩衝區中可用的資料。
受影響的處理器¶
此漏洞影響範圍廣泛的英特爾處理器。該漏洞不存在於以下處理器上:
來自 AMD、Centaur 和其他非英特爾供應商的處理器
CPU 系列小於 6 的較舊處理器型號
部分 Atom 處理器(Bonnell、Saltwell、Goldmont、GoldmontPlus)
在 IA32_ARCH_CAPABILITIES MSR 中設定了 ARCH_CAP_MDS_NO 位的英特爾處理器。
處理器是否受影響可以從 sysfs 中的 MDS 漏洞檔案中讀取。參見 MDS 系統資訊。
並非所有處理器都受 MDS 所有變體的影響,但它們的緩解措施是相同的,因此核心將它們視為單一漏洞。
問題¶
當執行儲存、載入、L1 填充操作時,處理器會將資料寫入臨時微架構結構(緩衝區)。緩衝區中的資料可以作為最佳化轉發到載入操作。
在某些條件下,通常是由載入操作引起的故障/輔助,與載入記憶體地址無關的資料可以從緩衝區中推測性地轉發。由於載入操作導致故障或輔助,其結果將被丟棄,因此轉發的資料不會導致程式執行錯誤或狀態更改。但惡意操作可能能夠將這些推測性資料轉發到洩露小工具,進而透過快取側通道攻擊推斷出值。
由於緩衝區可能在超執行緒(Hyper-Threads)之間共享,因此跨超執行緒攻擊是可能的。
更深入的技術資訊可在 MDS 特定的 x86 架構部分中找到:Documentation/arch/x86/mds.rst。
攻擊場景¶
針對 MDS 漏洞的攻擊可以由執行在主機或訪客機上的惡意非特權使用者空間應用程式發起。惡意的訪客作業系統顯然也可以發起攻擊。
與其他基於推測的漏洞不同,MDS 漏洞不允許攻擊者控制記憶體目標地址。因此,攻擊純粹是基於取樣的,但正如 TLBleed 攻擊所演示的那樣,樣本可以成功進行後處理。
Web 瀏覽器¶
目前尚不清楚是否可以透過 Web 瀏覽器發起攻擊。透過 JavaScript 進行利用被認為可能性很小,但其他廣泛使用的 Web 技術(如 Webassembly)可能會被濫用。
MDS 系統資訊¶
Linux 核心提供了一個 sysfs 介面,用於列舉系統的當前 MDS 狀態:系統是否易受攻擊以及哪些緩解措施處於活動狀態。相關的 sysfs 檔案是:
/sys/devices/system/cpu/vulnerabilities/mds
此檔案中可能的值是:
“不受影響”
處理器不易受攻擊
“易受攻擊”
處理器易受攻擊,但未啟用緩解措施
“易受攻擊:已嘗試清除 CPU 緩衝區,但無微碼”
處理器易受攻擊,但微碼未更新。緩解措施已盡力啟用。
如果處理器易受攻擊,但基於微碼的緩解機制的可用性未透過 CPUID 宣佈,則核心會選擇一種盡力緩解模式。此模式會呼叫緩解指令,但不保證它們能清除 CPU 緩衝區。
這樣做是為了解決虛擬化場景,即主機已應用微碼更新,但管理程式尚未更新以將 CPUID 暴露給訪客機。如果主機有更新的微碼,保護就會生效;否則會無謂地浪費一些 CPU 週期。
“緩解:清除 CPU 緩衝區”
處理器易受攻擊,且已啟用 CPU 緩衝區清除緩解措施。
如果處理器易受攻擊,則以下資訊會附加到上述資訊中:
“SMT 易受攻擊”
SMT 已啟用
“SMT 已緩解”
SMT 已啟用並得到緩解
“SMT 已停用”
SMT 已停用
“SMT 主機狀態未知”
核心在虛擬機器中執行,主機 SMT 狀態未知
緩解機制¶
核心會檢測受影響的 CPU 以及所需微碼的存在。
如果 CPU 受影響且微碼可用,則核心預設啟用緩解措施。該緩解措施可以在引導時透過核心命令列選項進行控制。參見 核心命令列上的緩解控制。
CPU 緩衝區清除¶
MDS 的緩解措施會在返回使用者空間和進入訪客機時清除受影響的 CPU 緩衝區。
如果啟用了 SMT,當 CPU 僅受 MSBDS 影響而未受任何其他 MDS 變體影響時,它還會在空閒進入時清除緩衝區,因為其他變體無法防止跨超執行緒攻擊。
對於僅受 MSBDS 影響的 CPU,使用者空間、訪客機和空閒轉換緩解措施已足夠,並且 SMT 不受影響。
虛擬化緩解¶
主機到訪客機轉換的保護取決於 CPU 的 L1TF 漏洞。
CPU 受 L1TF 影響
如果 L1D 重新整理緩解措施已啟用且有最新的微碼可用,則 L1D 重新整理緩解措施會自動保護訪客機轉換。
如果 L1D 重新整理緩解措施已停用,則在主機 MDS 緩解措施啟用時,會明確呼叫 MDS 緩解措施。
有關 L1TF 和虛擬化的詳細資訊,請參見:Documentation/admin-guide/hw-vuln//l1tf.rst。
CPU 不受 L1TF 影響
在主機 MDS 緩解措施啟用時,CPU 緩衝區會在進入訪客機前被重新整理。
主機到訪客機轉換的 MDS 保護矩陣
L1TF
MDS
VMX-L1FLUSH
主機 MDS
MDS 狀態
不關心
否
不關心
不適用
不受影響
是
是
已停用
關閉
易受攻擊
是
是
已停用
完整
已緩解
是
是
已啟用
不關心
已緩解
否
是
不適用
關閉
易受攻擊
否
是
不適用
完整
已緩解
這僅涵蓋主機到訪客機的轉換,即防止從主機到訪客機的洩漏,但不能在訪客機內部提供保護。訪客機需要有自己的保護措施。
XEON PHI 特定注意事項¶
XEON PHI 處理器家族受 MSBDS 影響,在進入空閒狀態時可能透過超執行緒被利用。某些 XEON PHI 變體允許在使用者空間(Ring 3)中使用 MWAIT,這為惡意使用者空間提供了潛在的攻擊向量。可以透過核心命令列選項 ‘ring3mwait=disable’ 停用此暴露。
XEON PHI 不受其他 MDS 變體的影響,並且 MSBDS 在 CPU 進入空閒狀態之前已得到緩解。由於 XEON PHI 也不受 L1TF 影響,因此不需要停用 SMT 即可獲得全面保護。
SMT 控制¶
除了 MSBDS 之外的所有 MDS 變體都可以透過超執行緒進行攻擊。這意味著在受 MFBDS 或 MLPDS 影響的 CPU 上,需要停用 SMT 才能獲得全面保護。這些是大多數受影響的 CPU;例外是 XEON PHI,參見 XEON PHI 特定注意事項。
停用 SMT 可能會對效能產生顯著影響,但影響程度取決於工作負載的型別。
有關詳細資訊,請參見 L1TF 緩解文件中的相關章節:Documentation/admin-guide/hw-vuln/l1tf.rst。
核心命令列上的緩解控制¶
核心命令列允許在引導時使用選項 “mds=” 控制 MDS 緩解措施。此選項的有效引數有:
full
如果 CPU 易受攻擊,則啟用所有可用的 MDS 漏洞緩解措施,包括退出使用者空間和進入虛擬機器時清除 CPU 緩衝區。如果啟用了 SMT,空閒轉換也會受到保護。
它不會自動停用 SMT。
full,nosmt
與 mds=full 相同,但會在易受攻擊的 CPU 上停用 SMT。這是完整的緩解措施。
off
完全停用 MDS 緩解措施。
未指定此選項等同於“mds=full”。對於同時受 TAA(TSX 非同步中止)和 MDS 影響的處理器,僅指定“mds=off”而不附帶“tsx_async_abort=off”將無效,因為兩種漏洞使用相同的緩解措施。
緩解選擇指南¶
1. 可信使用者空間¶
如果所有使用者空間應用程式都來自可信來源,並且不執行外部提供的不可信程式碼,則可以停用緩解措施。
2. 具有可信訪客機的虛擬化¶
與上述針對可信使用者空間相同考慮因素也適用。
3. 具有不可信訪客機的虛擬化¶
保護取決於 L1TF 緩解措施的狀態。參見 虛擬化緩解。
如果 MDS 緩解措施已啟用且 SMT 已停用,則可以防止訪客機到主機以及訪客機到訪客機的攻擊。
預設緩解措施¶
核心針對易受攻擊處理器的預設緩解措施是:
啟用 CPU 緩衝區清除
核心預設不強制停用 SMT,這使得 SMT 系統在執行不可信程式碼時容易受到攻擊。其原理與 L1TF 相同。參見 Documentation/admin-guide/hw-vuln//l1tf.rst。