在基於 Zen+ 和 Zen 2 微架構的 AMD 處理器中發現了 Meltdown 類漏洞

德勒斯登工業大學的一組研究人員在基於 Zen+ 和 Zen 2020 微架構的 AMD 處理器中發現了一個漏洞 (CVE-12965-2),該漏洞允許 Meltdown 類攻擊。 最初假設 AMD Zen+ 和 Zen 2 處理器不易受到 Meltdown 漏洞的影響,但研究人員發現了一個功能,該功能會導致在使用非規範虛擬位址時對受保護記憶體區域進行推測性存取。

AMD64架構只使用虛擬位址的前48位,忽略其餘16位。 指定位元 48 至 63 必須始終複製位元 47(符號位元擴展)的值。 如果違反此條件並嘗試存取具有任意高位值的位址,則處理器會產生異常。 重複填充高位元​​會導致可用位址空間被分成兩個區塊 - 低位元區塊(從 0 到 00007FFFFFFFFFFFFF),其中高位元被設定為 800000000000,以及高位元區塊(從 FFFF1 到 FFFFFFFFFFFFFFFFFF),其中所有高位元都設定為 XNUMX。均設定為XNUMX。

落在指定區塊內的位址稱為規範位址,具有任意高位元內容的不正確位址稱為非規範位址。 規範位址的較低範圍通常分配給進程數據,較高範圍用於核心數據(從用戶空間對這些位址的存取在權限分離層級被阻止)。

經典的 Meltdown 漏洞基於以下事實:在指令的推測執行期間,處理器可以存取私有資料區域,然後丟棄結果,因為設定的權限禁止使用者進程進行此類存取。 在程式中,推測執行的區塊透過條件分支與主程式碼分開,該條件分支在實際情況下總是觸發,但由於條件語句使用處理器在搶佔執行期間不知道的計算值程式碼中,所有分支選項都是推測執行的。

由於推測執行的操作使用與正常執行的指令相同的緩存,因此在推測執行期間可以在緩存中設置反映私有內存區域中各個位的內容的標記,然後在正常執行的代碼中通過計時確定它們的值分析存取快取和未快取的資料。

影響 AMD Zen+ 和 Zen 2 處理器的新漏洞的一個特點是,CPU 允許推測性讀寫操作,使用無效的非規範位址存取內存,而忽略高 16 位元。 因此,在推測程式碼執行期間,處理器始終僅使用低 48 位,並單獨檢查位址的有效性。 如果在關聯轉換緩衝區 (TLB) 中將非規範虛擬位址轉換為實體位址時,在位址的規格部分偵測到匹配,則推測載入作業將傳回該值,而不考慮內容高16 位元的值,允許繞過線程之間的記憶體共享。 隨後,該操作將被視為無效並被丟棄,但記憶體存取將完成並且資料將最終進入快取。

在實驗過程中,利用確定FLUSH+RELOAD快取內容的技術,研究人員能夠以每秒125位元組的速度組織隱藏資料傳輸的通道。 除了 AMD 晶片外,該問題還影響所有 Intel 處理器,這些處理器容易受到經典 Meltdown 漏洞的影響。 可以使用有助於阻止 Meltdown 攻擊的相同技術(例如使用 LFENCE 指令)來防範這種新型攻擊。 例如,如果英特爾處理器包含針對 Meltdown 的硬體保護或系統啟用了軟體保護,則此類配置不易受到新攻擊變體的影響。

同時,研究人員指出,與英特爾處理器相比,AMD處理器的架構限制了真正攻擊的可能性,但不排除使用新方法與其他微架構攻擊結合來提高其有效性。 特別是,所提出的攻擊不允許確定核心和其他進程的記憶體區域的內容,但僅限於存取在同一虛擬記憶體空間中運行的同一程式的其他執行緒的能力。

由於沒有漏洞的程式能夠存取其線程,因此從實際角度來看,該方法對於繞過沙箱隔離並組織對允許執行第三方的程式中其他線程工作的干擾很有意義。程式碼,例如網路瀏覽器和JIT 引擎。 研究人員檢查了SpiderMonkey JavaScript引擎和Linux核心的易受攻擊的漏洞,但沒有發現可用於實施攻擊的易受攻擊的程式碼序列。 除了攻擊應用程式之外,該方法還可用於在處理器的微架構元素之間強制執行不可接受的資料流,同時利用其他微架構漏洞。

來源: opennet.ru

添加評論