eBPF 中可能繞過 Spectre 4 攻擊防護的漏洞

Linux 核心中已發現兩個漏洞,允許使用 eBPF 子系統繞過針對 Spectre v4 攻擊的保護(SSB,推測儲存繞過)。 使用非特權 BPF 程序,攻擊者可以為某些操作的推測執行創造條件,並確定內核記憶體任意區域的內容。 核心中 eBPF 子系統的維護者獲得了原型漏洞的存取權限,該漏洞演示了在實踐中進行攻擊的能力。 這些問題已以補丁 (1, 2) 的形式修復,並將包含在下一個 Linux 核心更新中。 分發包中的更新尚未建立(Debian、RHEL、SUSE、Arch、Fedora、Ubuntu)。

Spectre 4 攻擊方法是基於在使用間接尋址處理交替寫入和讀取操作時丟棄推測執行操作的結果後恢復儲存在處理器快取中的資料。 當讀取操作在寫入操作之後(例如,mov [rbx + rcx], 0x0; mov rax, [rdx + rsi])時,由於正在執行類似的操作(讀取操作是執行更頻繁,並且可以從快取執行讀取)且處理器可以在寫入之前推測性地執行讀取,而無需等待計算寫入的間接偏移量。

如果在計算偏移之後,偵測到用於寫入和讀取的儲存區域的交集,則處理器將簡單地丟棄已經推測獲得的讀取結果並重複該操作。 此功能允許讀取指令在儲存操作尚未完成時存取某個位址的舊值。 在丟棄不成功的推測操作之後,其執行痕跡保留在高速緩存中,之後可以使用用於確定高速緩存內容的方法之一來基於對高速緩存和未高速緩存資料的存取時間的變化的分析來檢索它。

第一個漏洞(CVE-2021-35477)是由 BPF 程式驗證機制的缺陷所引起的。 為了防止 Spectre 4 攻擊,驗證程式在可能有問題的儲存到記憶體後添加一條附加指令,該指令儲存空值以替換先前操作的痕跡。 寫空操作預計會非常快速且會阻止推測執行,因為它僅依賴指向 BPF 堆疊幀的指標。 但事實上,事實證明可以創造條件,在該條件下導致推測執行的指令設法在搶佔存儲操作之前執行。

第二個漏洞 (CVE-2021-3455) 是由於當 BPF 驗證程式識別潛在危險的記憶體保存作業時,它沒有考慮 BPF 堆疊的未初始化區域,即第一個寫入操作不受保護。 此功能導致在執行儲存指令之前根據未初始化的記憶體區域執行推測性讀取操作的可能性。 為 BPF 堆疊分配新記憶體時無需檢查已分配記憶體中的內容,並且在 BPF 程式運行之前有一種方法可以操作隨後將為 BPF 堆疊分配的記憶體區域的內容。

來源: opennet.ru

添加評論