美國時間 5 月 14 日,安全研究人員在英特爾芯片中發現了一種新的漏洞,如果利用這種漏洞,可以直接從處理器中竊取敏感信息,詳情可見鏈聞先前收錄的文章《Intel 再曝殭屍負載漏洞:直接獲取密碼、2011 年後電腦都受影響》。英特爾公司和多方研究人員表示,該漏洞暫無影響,無需恐慌。

但是,這種名爲「ZombieLoad」的漏洞究竟是什麼?這種漏洞是否會對基於 Intel SGX 的可信執行環境(TEE)系統產生影響?要知道,越來越多的區塊鏈項目正在嘗試利用基於 TEE 的技術來實現數據隱私保護

爲了回答該問題,鏈聞邀請了提供 Layer-2 隱私計算方案的 TEEX 團隊成員撰文,一文說明該漏洞本質,以及可能產生的影響。

撰文: TEEX 團隊

什麼是 ZombieLoad?

ZombieLoad 是由包括 Intel、格拉茨技術大學、伍斯特理工學院、魯汶大學在內的多家機構發現的一種新型處理器硬件漏洞。該漏洞目前僅在 Intel 的處理器中被發現。漏洞於美國時間 5 月 14 日披露,同時 Intel 也發佈了針對該漏洞的修復補丁,包括微軟、蘋果、谷歌、亞馬遜在內的各家公司,都已經對他們提供的操作系統或雲服務進行漏洞修復。

ZombieLoad 能做什麼?

一句話來說,ZombieLoad 能夠竊取到攻擊發生時受害者正在訪問的內存內容。需要注意的是,ZombieLoad 並不能讀取攻擊者指定的某個特定內存。其能夠讀取到的內容完全取決於當前被害者訪問了哪些內存。這些內存可能是某些不重要的數據,又或者是程序代碼,攻擊者不能直接對讀到的內容進行區分。

ZombieLoad 的攻擊能力有多強?

在漏洞發現者的論文中,ZombieLoad 漏洞被定義爲一種數據採樣的方法。每次攻擊能夠從目標程序中採樣獲得 1 byte 的內容。之後需要通過各種手段從採樣數據中過濾無效數據、程序代碼等,從而獲得部分零散的目標數據。這些數據經過進一步處理分析才能夠(可能)得到完整目標數據。因此在實際攻擊過程中,攻擊者需要對目標程序運行時的所有狀態擁有深入、完整的瞭解,同時需配合如 side-channel 在內的多種其他攻擊手段

ZombieLoad 能夠繞開進程間隔離機制,虛擬機間隔離機制以及特權級別隔離機制,竊取目標程序正在訪問的數據。

我們將 ZombieLoad 與「熔斷」漏洞進行比較。「熔斷」是近年來最廣爲人知的處理器漏洞之一,其能夠讓攻擊者在無任何特權的情況下,直接讀取任意指定的操作系統內存;而 ZombieLoad 只能作爲一種數據採樣方法,攻擊者需要深入瞭解被攻擊算法、實現方式等,同時結合大量現有攻擊手段,纔有可能進行數據竊取。因此,ZombieLoad 的攻擊難度遠高於熔斷漏洞;同時 Intel 也已經發布了修復補丁,因此對實際系統的安全影響較爲有限。

ZombieLoad 的基本原理是什麼?

在 CPU 內部,存在着諸多存儲單元,也就是大家知道的 CPU 緩存 (CPU cache)。這些緩存之間會通過一些緩存通信通道(line-fill buffer, LFB)連接。同時在 CPU 內的最末級緩存(Last-Level Cache, LLC)也通過緩存通信通道與 CPU 外部的內存連接。該通道每次能夠傳遞 64 bytes 的數據塊,通道中也會緩存有近幾次傳遞的數據塊。每個 CPU 核心(CPU core)中都有自己獨立的緩存通信通道(LFB)。此次 ZombieLoad 漏洞就是從這些通信通道中竊取數據。

在 CPU 運行的過程中,經常會發生一些異常或者錯誤。此時 CPU 會將當前正在執行的指令標記爲無效,並進行異常處理。對於這些無效指令,CPU 仍然會允許其繼續執行,但是會在執行完成之後對其運算結果進行回滾。

在上述過程中,如果無效指令包含一條內存讀取指令,那麼它將能夠從 CPU 內部的緩存通信通道(LFB)中讀取到殘留的數據塊,即使其沒有相應的訪問權限。之後,攻擊者能夠利用和「熔斷」漏洞相同的側信道技術,獲取該數據內容。由於 CPU 會快速回滾這些無效指令,每次能夠竊取的數據量非常有限。漏洞發現者在論文中提到,每次攻擊僅能夠從 64 bytes 的數據塊中竊取 1 byte 的數據。

由於每個 CPU 核心擁有自己的緩存通信通道,因此攻擊者必須和受害程序運行在同一個 CPU 核心當中。對於啓用了超線程技術的 CPU,攻擊者可以運行在和受害程序相同 CPU 核心的不同 CPU 線程當中。

利用 ZombieLoad 的攻擊有什麼限制?

ZombieLoad 的攻擊窗口很小。ZombieLoad 在攻擊時只能夠讀取目標程序正在使用的數據。攻擊者必須深入瞭解目標程序的算法、實現等,並且精確判斷目標數據在何時被使用,從而對其進行攻擊。

ZombieLoad 要求攻擊者和受害程序同時運行在同一 CPU 核心上,從而能夠通過 CPU 核心中的緩存通信通道(LFB)竊取數據。

ZombieLoad 無法直接獲取目標數據。ZombieLoad 只能夠以每次一個 byte 的速率對目標程序進行數據採樣。並且沒有辦法對採樣得到的數據進行區分。因此其需要配合諸如 side-channel 在內的各種攻擊一同使用。

在通過採樣數據逆向真實數據的過程中,往往需要對目標程序算法、實現方式等擁有非常深入的瞭解。基於 ZombieLoad 的攻擊難以對不開源,或者經過代碼混淆的二進制程序使用。

目前 Intel 已經提供了 ZombieLoad 攻擊的修復補丁,並且已經聯合各大操作系統提供方,雲服務提供方進行了漏洞修復。攻擊無法在進行過修復的系統中實現。

ZombieLoad 對基於 Intel SGX 的 TEE 系統有什麼影響?

SGX 是目前飽受關注的一項硬件安全技術,其提供了多個稱爲 enclave 的安全執行環境。漏洞發現者在論文中提到:如果希望利用 ZombieLoad 對 SGX enclave 進行數據採樣,唯一的方法是將攻擊者的程序和目標 enclave 同時運行在一個 CPU 核心的兩個不同線程上

然而,目前 Intel 官方要求:爲了安全使用 SGX 技術,必須關閉超線程;同時 Intel 提供了驗證 enclave 所運行宿主機是否關閉超線程的方法。因此,在實現遠程驗證的前提下,ZombieLoad 並不會影響到基於 Intel SGX 的 TEE 系統的安全性。