利用 Chrome 中 Spectre 漏洞的新技術

來自美國、澳洲和以色列大學的一組研究人員提出了一種新的側通道攻擊技術,用於利用基於 Chromium 引擎的瀏覽器中的 Spectre 級漏洞。 此攻擊代號為Spook.js,可讓您透過執行JavaScript程式碼來繞過網站隔離機制,並讀取目前進程的整個位址空間的內容,即存取在其他標籤中執行但在同一進程中處理的頁面的資料。

由於 Chrome 在不同的進程中運行不同的站點,因此進行實際攻擊的能力僅限於允許不同使用者託管其頁面的服務。 該方法允許從攻擊者有機會嵌入其 JavaScript 程式碼的頁面確定用戶從同一網站打開的其他頁面是否存在,並從中提取機密信息,例如,替換的憑證或銀行詳細信息通過網絡表單中的自動填充字段系統。 作為演示,它展示瞭如果 Tumblr 服務的所有者在另一個選項卡中打開同一服務上託管的攻擊者博客,您可以如何攻擊 Tumblr 服務上的其他人的博客。

使用該方法的另一種選擇是對瀏覽器加載項進行攻擊,當安裝由攻擊者控制的加載項時,它允許從其他加載項中提取資料。 作為範例,我們展示如何透過安裝惡意外掛程式來從 LastPass 密碼管理器中提取機密資訊。

研究人員發布了一個漏洞原型,該漏洞可在配備 CPUIntel i89-7K 和 i6700-7U 的系統上的 Chrome 7600 中運行。 在創建漏洞時,Google 之前發布的 JavaScript 程式碼原型被用來執行 Spectre 級攻擊。 值得注意的是,研究人員能夠為基於英特爾和蘋果 M1 處理器的系統準備工作漏洞,從而能夠以每秒 500 位元組的速度組織記憶體讀取,準確率達到 96%。 假設該方法也適用於 AMD 處理器,但不可能準備出功能齊全的漏洞利用程式。

此攻擊適用於任何基於 Chromium 引擎的瀏覽器,包括 Google Chrome、Microsoft Edge 和 Brave。 研究人員還認為,該方法可以適用於 Firefox,但由於 Firefox 引擎與 Chrome 非常不同,因此創建此類漏洞的工作留待將來進行。

為了防止與指令推測執行相關的基於瀏覽器的攻擊,Chrome 實現了地址空間分段 - 沙箱隔離允許 JavaScript 僅使用 32 位指針,並在不相交的 4GB 堆中共享處理程序的內存。 為了提供對整個進程位址空間的存取並繞過 32 位元限制,研究人員使用了一種稱為類型混淆的技術,該技術強制 JavaScript 引擎處理類型不正確的對象,從而可以形成 64 位元基於兩個32位值的組合的指標。

該攻擊的本質是,當在 JavaScript 引擎中處理專門設計的惡意物件時,會建立導致推測性執行存取陣列的指令的條件。 選擇物件的方式是將攻擊者控制的欄位放置在使用 64 位元指標的區域中。 由於惡意物件的類型與正在處理的陣列的類型不匹配,因此在正常情況下,Chrome 中的一種用於存取陣列的程式碼去優化的機制會阻止此類操作。 為了解決這個問題,類型混淆攻擊的程式碼被放置在條件「if」區塊中,該區塊在正常情況下不會激活,而是在處理器錯誤地預測進一步分支時以推測模式執行。

因此,處理器推測性地存取生成的 64 位元指針,並在確定預測失敗後回滾狀態,但執行痕跡仍保留在共享快取中,並且可以使用旁通道快取檢測方法來恢復,該方法分析快取和未快取資料的存取時間。 為了在JavaScript中可用的計時器精度不夠的情況下分析快取的內容,使用了Google提出的方法,該方法欺騙了處理器中使用的Tree-PLRU快取驅逐策略,並允許透過增加週期數來分析緩存的內容。顯著增加快取中存在和不存在值時的時間差異。

來源: opennet.ru

添加評論