不要慌,U4 內核已防範「幽靈」漏洞
近日,來自Google Zero Project 安全研究團隊披露的 Spectre CPU漏洞,台式機、筆記本電腦、手機平板的 CPU 都會波及到,這個漏洞可能通過 Web 頁面(如 JS 代碼)進行利用,也就是說,用戶可能因為訪問某個網頁而被提取信息,包括存儲在密碼管理器或瀏覽器中的密碼!!!
但是!!大家不要慌,抱緊發布菌,U4 內核已上線緊急修復代碼,阻止來自該漏洞的攻擊。各位小夥伴可以升級你們手機或其他移動設備上的的 手淘、天貓、支付寶、釘釘、UC......
我們來科普下 Spectre 漏洞:
Spectre 是利用現代 CPU 設計的漏洞,獲取當前內存上下文的任意地址上的任意數據的漏洞。它主要分為兩部分。
- 利用預測執行機制,對微架構產生副作用;
- 從預測執行的副作用中恢複數據。
預測執行是現代 CPU 為了增加吞吐量,減少停頓等待數據的一個通用的做法。被各大 CPU 廠商使用。比如比較內存上的值和寄存器的值,傳統的CPU會等待內存匯流排的響應,還要等待用於比較的邏輯電路的響應才能繼續執行指令。對於現代的,有分支預測、多發射的、亂序執行的 CPU,會根據分支預測的結果,立刻選擇一條分支執行,這種執行叫做 Speculative Execution。執行的順序可以是亂序的,並發的。當分支預測結果是錯誤的,CPU 需要回滾計算結果,內存的讀寫也不會 commit 回內存。但是 Speculative Execution 會產生副作用,副作用會在 CPU 微架構保留下來,比如讀寫內存產生的 cache hit。
Spectre 利用這種設計,精巧的利用了分支預測、多發射的、亂序執行的特點,使得內存越界讀可以在 Speculative Execution 裡面執行,並從 cache hit 的副作用恢複數據。
從 cache hit 的副作用裡面恢復,需要找到 cache hit 的奇點。
比如說每次需要讀取任意地址的一個位元組,需要準備 256 頁。在 Speculative Execution 使用 index store 擊中了某一頁的第一個位元組後,可以通過比較每一頁讀取第一個位元組位置的速度,得出奇點的位置。
下面是一個位元組數據的奇點數據:
可以看到奇點發生在 (50,100) 之間,可以確定數據位元組是 (50,100) 之間的一個數字。實際的結果並不會是範圍的,只不過從上面圖片裡面讀不出精確的結果而已。
之所以有奇點,是因為 Speculative Execution 產生過 cache hit,別的頁面沒有發生過這種操作。因此產生過 cache hit 操作的頁的讀操作會顯著快於沒有產生過的。
我們的修復在於擾亂奇點的比較,讓讀取的時間趨於平凡。其中,Performance API 的 JS 的高精度時間介面 performance.now 是主要的修復對象。
performance.now 方法返回當前網頁自從 performance.timing.navigationStart 到當前時間之間的微秒數(毫秒的千分之一)。也就是說,它的精度可以達到 100 萬分之一秒。
根據測試,火狐的 20us 精度調整對於 PC 的效果還可以,但是對於移動設備效果非常差。這是由於移動設備由於電能的限制,內存匯流排的傳輸速度顯著慢於 CPU 的緩存傳輸速度,所以PC 影響的不會像移動設備那麼顯著。
再次聲明,本次漏洞利用的 Web 攻擊會是最最最危險的,因為這種形態下攻擊太容易實現了,大家一定要趕緊升級設備上的應用。
推薦閱讀: