最近有消息說 發現了兩個漏洞 在 linux 內核中 允許使用 子系統 eBPF 繞過針對 Spectre 4 攻擊的保護 (SSB,投機存儲繞過)。 提到通過使用非特權 BPF 程序,攻擊者可以為某些操作的推測執行創造條件,並確定內核內存任意區域的內容。
幽靈攻擊方法4 依賴於恢復被困在處理器緩存中的數據 在使用間接尋址處理交錯讀寫操作時,丟棄操作推測執行的結果後。
當讀操作跟隨寫操作時, 由於類似的操作,可能已經知道讀取方向的偏移量 (讀取操作執行得更頻繁,讀取可以從緩存中完成)並且處理器可以在寫入之前推測讀取,而無需等待計算間接寫入方向偏移。
如果在計算出偏移量後,檢測到寫入和讀取的內存區域相交,則處理器將簡單地丟棄已經推測獲得的讀取結果並重複該操作。 這個函數允許讀指令在保存操作仍然掛起時在某個方向訪問先前的值。
排除失敗的投機交易後,其執行的痕跡保留在緩存中,之後 確定緩存內容的方法之一可用於檢索它 基於對緩存訪問時間和緩存數據變化的分析。
請注意,每個主題都可以獨立於其他主題被濫用,依賴於 在不重疊的錯誤中。
PoC 已與 BPF 子系統的維護者私下共享 幫助安排發展。
第一個漏洞 CVE-2021-35477:它是由 BPF 程序的驗證機制中的缺陷引起的. 為了防範 Spectre 4 攻擊,檢查器在內存中可能出現麻煩的保存操作之後添加了一條額外的指令,存儲一個零值以抵消先前操作的痕跡。
假設零寫入操作將非常快並且會阻止推測執行,因為它僅取決於 BPF 堆棧幀指針。 但是,事實上,有可能創造條件,使導致推測執行的指令有時間在預防性保存操作之前執行。
第二個漏洞 CVE-2021-3455:與以下事實有關:當 BPF 檢查器檢測到內存中存在潛在危險的保存操作時,BPF 堆棧的未初始化區域,即未受保護的第一個寫操作,將被忽略。
此功能導致在執行存儲指令之前根據未初始化的內存區域執行推測性讀取操作的可能性。 BPF棧的新內存是在不檢查已經分配內存中的內容的情況下分配的,並且在BPF程序啟動之前的階段,有一種方法可以管理內存區域的內容,然後將其分配給BPF 堆棧。
可用的解決方案重新實施緩解技術以繼續 由 CPU 供應商推薦並在主線內核中可用 git 存儲庫。
最後,提到內核中 eBPF 子系統的維護人員獲得了一個利用原型的訪問權限,該原型證明了在實踐中進行攻擊的可能性。
這些問題以補丁的形式修復,補丁將包含在下一個 Linux 內核更新中,因此不同發行版的更新將在接下來的幾天內開始到來。