eBPF 子系統中存在允許繞過 Spectre 攻擊防護的漏洞

Linux 核心中已發現一個漏洞 (CVE-2021-33624),該漏洞允許使用 eBPF 子系統繞過針對 Spectre 類別漏洞的保護,從而可以透過為某些操作的推測執行。 Spectre 攻擊要求特權程式碼中存在特定的命令序列,從而導致指令的推測執行。 透過操縱傳輸執行的 BPF 程序,可以在 eBPF 中產生類似的指令,並透過側通道洩漏內核記憶體和實體記憶體的任意區域的內容。

此漏洞是由驗證器中的缺陷引起的,驗證器用於檢測 BPF 程式中的錯誤和不可接受的活動。 驗證器列舉可能的程式碼執行路徑,但跳過從指令集架構的語意的角度來看不可接受的分支選項。 當執行 BPF 程序時,驗證器未考慮的此類分支選項可能會被處理器錯誤地預測並以推測模式執行。 例如,在分析「載入」操作時,驗證者期望該指令使用的暫存器的位址值始終在指定的邊界內,但攻擊者可以創造條件,使處理器嘗試推測性地執行操作不符合驗證條件的位址。

該問題自內核4.15發布以來就一直出現,並已以補丁的形式修復(1)。 該漏洞在發行版(Debian、RHEL、Ubuntu、Fedora、SUSE、Arch)中仍未修復。

此外,您還可以注意有關防止 Spectre 漏洞的工具的效能影響的說明。 該說明總結了 rr(記錄和重播)調試器的優化結果,該調試器曾在 Mozilla 中創建,用於調試 Firefox 中難以重複的錯誤。 快取用於檢查目錄是否存在的系統呼叫將測試項目的「rrsources」操作從 3 分 19 秒減少到 36 秒。

優化作者決定檢查禁用 Spectre 保護後效能會如何變化。 使用「mitigations=off」參數啟動系統後,未經優化的「rrsources」的執行時間為2分5秒(快1.6倍),經過優化後為33秒(快9%)。 有趣的是,停用Spectre 保護不僅使核心層級的程式碼執行時間減少了1.4 倍(從2m9s 減少到1m32s),而且還使用戶空間的執行時間減少了一半(從1m9s 減少到0m33s),這可能是由於CPU 快取操作和TLB 效率降低所致當幽靈保護啟用時重置。

來源: opennet.ru

添加評論