Retbleed 是針對 Intel 和 AMD CPU 推測執行機制的新攻擊

蘇黎世聯邦理工學院的一組研究人員發現了一種針對 CPU 中間接轉換的推測執行機制的新攻擊,該攻擊使得從核心記憶體中提取資訊或從虛擬機組織對主機系統的攻擊成為可能。 這些漏洞的代號為 Retbleed(CVE-2022-29900、CVE-2022-29901),本質上與 Spectre-v2 攻擊非常接近。 差別在於處理「ret」(返回)指令時對任意程式碼的推測執行的組織,該指令從堆疊中獲取要跳轉的位址,而不是使用「jmp」指令進行間接跳轉,從堆疊中載入位址記憶體或CPU暫存器。

攻擊者可以為不正確的轉換預測建立條件,並組織有針對性的推測性轉換到程式執行邏輯未提供的程式碼區塊。 最終,處理器將確定分支預測不合理,並將操作回滾到其原始狀態,但推測執行期間處理的資料最終將出現在高速緩存和微架構緩衝區中。 如果錯誤執行的區塊存取內存,則其推測執行將導致從內存讀取的資料存放在共享快取中。

為了確定推測操作後快取中剩餘的數據,攻擊者可以使用旁路技術來確定殘留數據,例如分析快取和未快取數據的存取時間的變化。 為了有目的地從另一個特權級別的區域(例如,從內核內存)提取信息,使用了“gadget”——內核中存在的命令序列,適合根據可能受以下因素影響的外部條件從內存中推測性地讀取資料:攻擊者。

為了防止使用條件和間接跳躍指令的經典 Spectre 類別攻擊,大多數作業系統使用「retpoline」技術,該技術基於以「ret」指令取代間接跳躍操作,對此處理器使用單獨的堆疊狀態預測單元.不使用分支預測區塊。 當 retpoline 在 2018 年推出時,人們認為類似 Spectre 的位址操作對於使用「ret」指令的推測分支來說並不實用。

開發 Retbleed 攻擊方法的研究人員證明了使用「ret」指令創建微架構條件來啟動推測轉換的可能性,並發布了現成的工具來識別適合利用 Linux 核心中的漏洞的指令序列(小工具),這些條件在其中表現出來。

在研究過程中,我們準備了一個有效的漏洞程序,允許在具有Intel CPU 的系統上以每秒219 位元組的速度和98% 的準確度從用戶空間中的非特權進程的核心記憶體中提取任意數據。 在 AMD 處理器上,該漏洞利用的效率要高得多,洩漏率為每秒 3.9 KB。 作為一個實際範例,我們展示瞭如何使用建議的漏洞來確定 /etc/shadow 檔案的內容。 在採用 Intel CPU 的系統上,確定 root 使用者密碼雜湊值的攻擊在 28 分鐘內完成,而在採用 AMD CPU 的系統上則需要 6 分鐘。

6 年第三季之前發布的第 8-3 代英特爾處理器(包括 Skylake)以及 2019 年第二季之前發布的基於 Zen 1、Zen 1+ 和 Zen 2 微架構的 AMD 處理器已確認受到攻擊。 在 AMD Zen2021 和 Intel Alder Lake 等較新的處理器型號以及 ARM 處理器中,現有的保護機制可以阻止問題。 例如,使用 IBRS(間接分支限制推測)指令有助於防止攻擊。

已經針對 Linux 核心和 Xen 虛擬機器管理程式準備了一系列更改,這將阻止舊 CPU 上的軟體問題。 建議的 Linux 核心補丁更改了 68 個文件,添加了 1783 行,刪除了 387 行。 不幸的是,這種保護會導致巨大的開銷成本 - 在 AMD 和 Intel 處理器上進行的測試中,效能估計下降了 14% 到 39%。 更可取的是使用基於 IBRS 指令的保護,該指令在新一代 Intel CPU 中可用,並從 Linux 核心 4.19 開始支援。

在 Intel 處理器上,由於返回堆疊緩衝區中的下限(下溢)發生溢位時出現的一項功能,可以執行推測性間接跳躍的位址替換。 當這種情況發生時,「ret」指令開始套用類似於正常間接跳躍所使用的位址選擇邏輯。 Linux 核心中有一千多個地方為啟動這種回流創造了條件,並且可以透過系統呼叫存取。

在AMD 處理器上,「ret」指令的推測執行是在不參考堆疊特定緩衝區(返回位址堆疊)的情況下執行的,並且分支預測單元不會將「ret」指令視為控制返回,而是將其視為間接分支,並相應地使用該資料來預測間接轉換。 在這些條件下,幾乎任何可透過系統呼叫實現的「ret」操作都可以被利用。

此外,AMD CPU 中還發現了與虛擬分支的實現相關的另一個問題(CVE-2022-23825,分支類型混亂)——即使沒有必要的分支指令,分支預測的條件也可能發生,從而影響分支預測緩衝區沒有指令“ret”。 此功能使保護的實現顯著複雜化,並且需要更主動地清理分支預測緩衝區。 為核心添加全面保護預計會使開銷增加 209%。

來源: opennet.ru

添加評論