阿姆斯特丹自由大學的一組研究人員發現了一種名為「Native BHI」(CVE-2024-2201) 的新攻擊方法,該方法允許採用Intel 處理器的系統在用戶空間執行漏洞時確定Linux 內核內存的內容。如果攻擊應用於虛擬化系統,來自客戶系統的攻擊者可以確定主機環境或其他客戶系統的記憶體內容。
本機 BHI 方法提供了一種不同的技術來利用 BHI 漏洞(分支歷史記錄注入,CVE-2022-0001),該技術繞過了先前實施的保護方法。 2022 年提出的 BHI 攻擊方法涉及利用單一權限等級內的漏洞,該漏洞的利用是基於執行用戶在核心中載入的 eBPF 程式。要阻止漏洞,限制普通用戶對 eBPF 程式碼執行的存取就足夠了。
新的本機 BHI 方法不需要存取 eBPF,並且允許非特權使用者從使用者空間進行攻擊。該方法基於內核程式碼中存在的小工具的執行 - 導致指令推測執行的命令序列。為了在核心中搜尋合適的gadget,開發了一個特殊的工具包InSpectre Gadget,在分析6.6-rc4核心時,辨識出1511個Spectre gadget和2105個輔助調度gadget。

根據發現的小工具,研究人員準備了一個漏洞利用程序,可以從內核緩衝區中提取一個字串,其中包含從 /etc/shadow 檔案載入的 root 使用者密碼的雜湊值。從核心記憶體檢索資料的速度約為每秒 3.5 KB。

BHI方法是Spectre-v2攻擊的擴展版本,其中為了繞過附加保護(Intel eIBRS和Arm CSV2)並導致資料洩露,在分支歷史緩衝區中使用值替換,在CPU中使用以改進預測透過考慮過去轉換的歷史來準確分支。在攻擊期間,透過對轉換歷史記錄的操作,為轉換的錯誤預測和必要指令的推測執行創建條件,其結果最終出現在快取中。
與 Spectre-v2 攻擊的差異在於使用分支歷史緩衝區而不是分支目標緩衝區。為了從記憶體中提取數據,攻擊者必須創造條件,在執行推測操作時,將從需要確定的區域中獲取位址。執行推測間接跳轉後,從記憶體讀取的跳轉位址保留在快取中,之後可以使用確定快取內容的方法之一基於對快取和未快取的存取時間變化的分析來檢索它資料。
針對Native BHI攻擊,利用Intel IBT(間接分支追蹤)指令和Linux核心中實現的混合FineIBT指令流保護機制,該機制結合了使用硬體IBT指令和軟體保護kCFI(核心控制流完整性)來阻止違反正常執行順序(控制流)。 FineIBT 僅在跳到位於函數最開頭的 ENDBR 指令的情況下才允許透過間接跳到執行。此外(與 kCFI 機制類比),也會檢查雜湊值以確保指標的不變性。
為了防範這種新的攻擊變種,Linux 核心增加了一項更改,實現了額外的保護模式,該模式利用了 Intel 提出的硬體保護 (BHI_DIS_S) 或為保護虛擬機器管理程式而實現的替代軟體保護。 KVMXen 虛擬機器管理程式開發人員也發布了一個基於 BHI_DIS_S 模式的修復程序,該模式限制了基於分支歷史的預測。從 Intel Alder Lake 開始的處理器以及從 Intel Sapphire Rapids 開始的伺服器 CPU 均支援 BHI_DIS_S。此外,還提供了一種基於使用序列刷新分支歷史緩衝區的軟體保護模式,但這種模式會導致更明顯的效能損失。
來源: opennet.ru
