谷歌展示了通過在瀏覽器中執行 JavaScript 來利用 Spectre 漏洞

谷歌已經發布了多個利用原型,顯示了在瀏覽器中執行 JavaScript 代碼時利用 Spectre 類漏洞的可能性,繞過了之前添加的保護方法。 漏洞可用於訪問正在處理當前選項卡中的 Web 內容的進程的內存。 為了測試該漏洞的運行情況,我們啟動了leaky.page 網站,並在 GitHub 上發布了描述工作邏輯的代碼。

該原型旨在攻擊 Linux 和 Chrome 7 環境中採用 Intel Core i6500-88U 處理器的系統。需要進行更改才能將該漏洞應用到其他環境。 該漏洞利用方法並非針對英特爾處理器,經過適當調整後,該漏洞被證實可以在其他製造商的 CPU 系統上運行,包括基於 ARM 架構的 Apple M1。 經過細微調整,該漏洞也適用於其他操作系統和基於 Chromium 引擎的瀏覽器。

在基於標準 Chrome 88 和 Intel Skylake 處理器的環境中,數據從當前 Chrome 選項卡中負責處理 Web 內容的進程(渲染器進程)中洩露,洩漏速度為每秒 1 KB。 此外,還開發了替代原型,例如,一種漏洞利用程序,以降低穩定性為代價,在使用精度為8 微秒(5 毫秒)的Performance.now() 計時器時,將洩漏率提高到0.005kB /s 。 還準備了一種變體,其計時器精度為一毫秒,可用於以每秒約 60 字節的速度組織對另一個進程的內存的訪問。

發布的演示代碼由三部分組成。 第一部分校準計時器,以估計恢復由於 CPU 指令的推測執行而留在處理器高速緩存中的數據所需的操作的執行時間。 第二部分確定分配 JavaScript 數組時使用的內存佈局。

第三部分直接利用Spectre漏洞來確定當前進程的內存內容,為某些操作的推測執行創造條件,其結果在確定預測不成功後被處理器丟棄,但執行跟踪存儲在通用緩存中,並且可以通過分析緩存和非緩存數據的訪問時間變化的第三方渠道使用確定緩存內容的方法來恢復。

所提出的利用技術消除了通過 Performance.now() API 提供的高精度計時器,並且不支持 SharedArrayBuffer 類型,該類型允許在共享內存中創建數組。 該漏洞利用包括 Spectre 小工具(它會導致受控推測代碼執行)和側通道洩漏分析器(它確定在推測執行期間獲取的進入緩存的數據)。

該小工具是使用JavaScript數組實現的,其中嘗試訪問緩衝區邊界之外的區域,由於編譯器(處理器,向前看)添加的緩衝區大小檢查而影響分支預測塊的狀態,推測性地執行訪問,但在檢查後回滾狀態)。 為了分析定時器精度不足的情況下緩存的內容,提出了一種欺騙處理器中使用的Tree-PLRU緩存驅逐策略的方法,並允許通過增加週期數來顯著增加返回一個值時的時間差。緩存中的值以及緩存中沒有值時。

值得注意的是,谷歌發布了一個原型漏洞利用程序,以展示利用 Spectre 類漏洞進行攻擊的真實性,並鼓勵 Web 開發人員使用可最大限度降低此類攻擊風險的技術。 與此同時,谷歌認為,如果不對所提出的原型進行重大修改,就不可能創建不僅可供演示而且可供廣泛使用的通用漏洞利用程序。

為了降低風險,鼓勵網站所有者使用最近實施的跨源開放器策略 (COOP)、跨源嵌入器策略 (COEP)、跨源資源策略 (CORP)、獲取元數據請求、X-Frame-Options、 X -Content-Type-Options 和SameSite Cookie。 這些機制不能直接防止攻擊,但可以隔離站點數據,防止其洩漏到可以執行攻擊者 JavaScript 代碼的進程中(洩漏發生在當前進程的內存中,其中除了攻擊者的代碼之外,還包括數據)來自在同一選項卡中打開的另一個站點)。 主要思想是在不同的進程中將站點代碼的執行與從不可靠來源獲得的第三方代碼(例如通過 iframe 包含)分開。



來源: opennet.ru

添加評論