昨天我們在博客上發布了關於 Aya,用於創建 eBPF 驅動程序的庫 在 Rust 中,這樣做的目的是創建更安全的驅動程序或 Prossimo 項目保證內存 使用 Rust 的 Linux 內核(這兩個偉大的項目將在接下來的幾個月中進行很多討論)。
它 在很短的時間內,已經報告了各種漏洞 在其中 利用 eBPF 中的錯誤 這是一個內核開發人員沒有停止工作的問題,也許 Rust 是解決方案。
觸及這個話題的原因是 最近有消息稱,他們已經確定 Linux 內核中的“其他”漏洞(CVE-2021,33624) 繞過針對 Spectre 級漏洞的保護, 因為這允許使用 eBPF 子系統能夠確定內存的內容,作為為某些操作的推測執行創建條件的結果。
提到漏洞 它是由驗證器失敗引起的,驗證器用於檢測 BPF 程序中的錯誤和無效活動. 驗證器列出可能的代碼執行路徑,但忽略從指令集架構語義的角度來看無效的任何分支選項。
在運行 BPF 程序時,驗證器未考慮的分支選項可能會被處理器錯誤地預測並以推測模式執行。
在受影響的系統上,無特權的 BPF 程序可以利用此漏洞通過側通道過濾任意內核內存(以及所有物理內存)的內容。
例如: 在分析“加載”操作時,驗證器假定指令使用寄存器 具有其值始終在指定範圍內的地址, 但攻擊者可以創造條件 在其中 處理器將投機性地嘗試執行交易 地址不符合驗證條件。
幽靈攻擊 需要在特權代碼中存在特定腳本,導致指令的推測執行。 通過操縱傳入執行的 BPF 程序,可以在 eBPF 中生成此類指令,並通過側通道過濾內核內存和物理內存的任意區域的內容。
另外, 您可以標記有關性能影響的註釋 資產 以防止 Spectre 類漏洞。
本筆記總結了結果 rr(記錄和重播)調試器優化,曾經由 Mozilla 創建,用於調試 Firefox 中難以重複的錯誤。 緩存用於驗證目錄存在的系統調用將測試項目的“rr 源”操作從 3 分 19 秒減少到 36 秒。
優化作者決定查一下 會有多大變化 禁用 Spectre 保護後的性能. 使用參數 «mitigations = off» 啟動系統後,未優化的 «rr sources» 的執行時間為 2 分 5 秒(快 1.6 倍),優化為 33 秒(快 9%)。
奇怪的是 禁用 Spectre 保護不僅會減少運行時間 內核級代碼的 1.4 倍(從 2 分 9 秒到 1 分 32 秒), 它還將用戶空間中的執行時間減半 (從 1 分鐘 9 秒到 33 秒),大概是由於啟用 Spectre 保護時 CPU 緩存和 TLB 被重置的效率降低。
這個問題從 4.15 內核發布開始就出現了 已以補丁的形式修復,目前仍未覆蓋所有發行版,因此建議用戶現在在收到通知後立即進行相關更新。
Si 您想了解更多,您可以查看詳細信息 在下面的鏈接中。