TAA - TSX 非同步中止¶
TAA 是一種硬體漏洞,它允許非特權推測性訪問透過在 Intel TSX 事務區域內使用非同步中止,訪問各種 CPU 內部緩衝區中可用的資料。
受影響的處理器¶
此漏洞僅影響支援 Intel 事務同步擴充套件 (TSX) 的 Intel 處理器,當 IA32_ARCH_CAPABILITIES MSR 中的 TAA_NO 位(第 8 位)為 0 時。在 IA32_ARCH_CAPABILITIES MSR 中 MDS_NO 位(第 5 位)為 0 的處理器上,現有的 MDS 緩解措施也對 TAA 有效。
處理器是否受影響可以透過 sysfs 中的 TAA 漏洞檔案讀取。請參閱 TAA 系統資訊。
問題¶
執行儲存、載入或 L1 重新填充操作時,處理器將資料寫入臨時微架構結構(緩衝區)。這些緩衝區中的資料可以作為最佳化轉發到載入操作。
Intel TSX 是 x86 指令集架構的擴充套件,它增加了硬體事務記憶體支援,以提高多執行緒軟體的效能。TSX 允許處理器透過動態避免不必要的同步來暴露和利用應用程式中隱藏的併發性。
TSX 支援原子記憶體事務,這些事務要麼提交(成功)要麼中止。中止期間,事務區域內發生的操作會被回滾。非同步中止會在其他情況下發生,例如當不同執行緒訪問事務區域內也使用的快取行時,如果該訪問可能導致資料競爭。
在未完成的非同步中止之後,某些推測性執行的載入可能會立即從這些內部緩衝區讀取資料並將其傳遞給依賴操作。然後這可以用於透過快取側通道攻擊推斷值。
由於緩衝區可能在超執行緒 (Hyper-Threads) 之間共享,因此跨超執行緒攻擊是可能的。
惡意行為的受害者不需要使用 TSX。只有攻擊者需要啟動 TSX 事務並引發非同步中止,這反過來可能洩露儲存在緩衝區中的資料。
更詳細的技術資訊可在 TAA 特定的 x86 架構部分中找到:Documentation/arch/x86/tsx_async_abort.rst。
攻擊場景¶
針對 TAA 漏洞的攻擊可以由在主機或訪客上執行的非特權應用程式實施。
與 MDS 類似,攻擊者無法控制可能洩露的記憶體地址。只有受害者負責將資料帶到 CPU。因此,惡意行為者必須儘可能多地取樣資料,然後對其進行後處理,以嘗試從中推斷出任何有用的資訊。
潛在攻擊者只能讀取資料。此外,使用此技術沒有直接的許可權升級。
TAA 系統資訊¶
Linux 核心提供了一個 sysfs 介面,用於列舉已緩解系統的當前 TAA 狀態。相關的 sysfs 檔案是
/sys/devices/system/cpu/vulnerabilities/tsx_async_abort
此檔案中的可能值為
‘易受攻擊’ |
CPU 受此漏洞影響,並且微程式碼和核心緩解措施未應用。 |
‘易受攻擊:嘗試清除 CPU 緩衝區,無微程式碼’ |
處理器易受攻擊,但微程式碼未更新。緩解措施以盡力而為的方式啟用。 如果處理器易受攻擊,但透過 CPUID 未宣佈基於微程式碼的緩解機制的可用性,則核心會選擇盡力而為的緩解模式。此模式呼叫緩解指令,但不保證它們會清除 CPU 緩衝區。 這樣做是為了解決虛擬化場景,其中主機已應用微程式碼更新,但管理程式尚未更新以向訪客暴露 CPUID。如果主機已更新微程式碼,則保護生效;否則會無意義地浪費一些 CPU 週期。 |
‘緩解:清除 CPU 緩衝區’ |
微程式碼已更新以清除緩衝區。TSX 仍然啟用。 |
‘緩解:TSX 已停用’ |
TSX 已停用。 |
‘不受影響’ |
CPU 不受此問題影響。 |
緩解機制¶
核心檢測受影響的 CPU 和所需的微程式碼是否存在。如果 CPU 受影響且微程式碼可用,則核心預設啟用緩解措施。
緩解措施可以在啟動時透過核心命令列選項控制。請參閱 核心命令列上的緩解控制。
虛擬化緩解¶
主機具有 TAA 微程式碼且此前透過停用 TSX 已緩解 TAA 的受影響系統,無論 VM 的狀態如何,都不會受到攻擊。
在所有其他情況下,如果主機沒有 TAA 微程式碼或核心未緩解,則系統可能易受攻擊。
核心命令列上的緩解控制¶
核心命令列允許在啟動時透過選項“tsx_async_abort=”控制 TAA 緩解措施。此選項的有效引數為
off
此選項在受影響的平臺上停用 TAA 緩解措施。如果系統啟用了 TSX(請參閱下一個引數)並且 CPU 受影響,則系統易受攻擊。
full
TAA 緩解已啟用。如果 TSX 已啟用,在受影響的系統上,它將在環轉換時清除 CPU 緩衝區。在受 MDS 影響並部署 MDS 緩解措施的系統上,TAA 也得到緩解。在此類系統上指定此選項將無效。
full,nosmt
與 tsx_async_abort=full 相同,但對已啟用 TSX 的易受攻擊 CPU 停用 SMT。這是完整的緩解措施。當 TSX 被停用時,SMT 不會被停用,因為 CPU 不易受到跨執行緒 TAA 攻擊。
不指定此選項等同於“tsx_async_abort=full”。對於同時受 TAA 和 MDS 影響的處理器,僅指定“tsx_async_abort=off”而不附帶“mds=off”將無效,因為兩種漏洞使用相同的緩解措施。
核心命令列還允許在支援 TSX 控制的 CPU 上使用引數“tsx=”控制 TSX 功能。MSR_IA32_TSX_CTRL 用於控制 TSX 功能以及 CPUID 中 TSX 功能位(RTM 和 HLE)的列舉。
有效選項為
off
停用系統上的 TSX。
請注意,此選項僅在不受 MDS 影響的較新 CPU 上生效,即具有 MSR_IA32_ARCH_CAPABILITIES.MDS_NO=1 並透過微程式碼更新獲得新的 IA32_TSX_CTRL MSR 的 CPU。這個新的 MSR 允許可靠地停用 TSX 功能。
on
啟用 TSX。
儘管所有已知的安全漏洞都有緩解措施,但 TSX 已知是幾個先前與推測相關的 CVE 的加速器,因此啟用它可能存在未知的安全風險。
auto
如果存在 X86_BUG_TAA,則停用 TSX;否則,在系統上啟用 TSX。
不指定此選項等同於“tsx=off”。
以下“tsx_async_abort”和“tsx”的組合是可能的。對於受影響的平臺,tsx=auto 等同於 tsx=off,結果將是
tsx=on
tsx_async_abort=full
系統將使用 VERW 清除 CPU 緩衝區。在 SMT 機器上,跨執行緒攻擊仍然可能。
tsx=on
tsx_async_abort=full,nosmt
如上所述,SMT 上的跨執行緒攻擊已緩解。
tsx=on
tsx_async_abort=off
系統易受攻擊。
tsx=off
tsx_async_abort=full
如果微程式碼提供了 TSX 控制 MSR,則 TSX 可能會被停用。如果是這樣,系統將不會受到攻擊。
tsx=off
tsx_async_abort=full,nosmt
同上
tsx=off
tsx_async_abort=off
同上
對於未受影響的平臺,“tsx=on”和“tsx_async_abort=full”不會清除 CPU 緩衝區。對於沒有 TSX 控制(MSR_IA32_ARCH_CAPABILITIES.MDS_NO=0)的平臺,“tsx”命令列引數無效。
對於受影響的平臺,下表顯示了 CPUID 位 MD_CLEAR 和 IA32_ARCH_CAPABILITIES MSR 位 MDS_NO 和 TSX_CTRL_MSR 組合的緩解狀態。
MDS_NO
MD_CLEAR
TSX_CTRL_MSR
狀態
0
0
0
易受攻擊(需要微程式碼)
0
1
0
MDS 和 TAA 透過 VERW 緩解
1
1
0
MDS 已修復,如果 TSX 啟用,TAA 易受攻擊,因為 MD_CLEAR 沒有意義且 VERW 不保證清除緩衝區
1
X
1
MDS 已修復,TAA 可以透過 VERW 或 TSX_CTRL_MSR 緩解
緩解選擇指南¶
1. 受信任的使用者空間和訪客¶
如果所有使用者空間應用程式都來自受信任的來源且不執行外部提供的不可信程式碼,則可以停用緩解措施。這同樣適用於具有受信任訪客的虛擬化環境。
2. 不受信任的使用者空間和訪客¶
如果系統上存在不可信的應用程式或訪客,啟用 TSX 可能會允許惡意行為者從主機或在同一物理核心上執行的其他程序中洩露資料。
如果微程式碼可用且主機上停用了 TSX,即使 VM 未明確啟用緩解措施,也能在虛擬化環境中防止攻擊。
預設緩解措施¶
核心對易受攻擊處理器的預設操作是
部署 TSX 停用緩解措施 (tsx_async_abort=full tsx=off)。