L1TF漏洞對Intel SGX的影響及防禦方法

買賣虛擬貨幣
L1TF漏洞(Foreshadow)是Intel平臺近日爆出的嚴重安全漏洞,該漏洞影響極大、涉及範圍廣、利用難度低,尤其是對Intel SGX安全擴充套件帶來了衝擊,使許多依賴該安全特性的系統面臨極大的挑戰。TEEX團隊首先分析了該漏洞的技術原理以及Intel的官方應對方案,並在此基礎上提出了“虛擬化+SGX”安全增強設計,可有效抵禦L1TF漏洞,同時對SGX該如何應用於區塊鏈系統做了初步的討論。什麼是Intel L1TF漏洞?L1TF 漏洞允許一個低許可權的攻擊者竊取被載入至一級快取中且屬於特權級軟體的隱私資料。該漏洞有三個變種:


L1 Terminal Fault - SGX:一個使用者態攻擊者能夠竊取位於一級快取中的屬於Enclave的資料;

L1 Terminal Fault - OS/SMM:一個低許可權的攻擊者能夠竊取位於一級快取中的屬於更高許可權(OS或者SMM)的資料;
L1 Terminal Fault - VMM:一個惡意的客戶虛擬機器能夠竊取位於一級快取中的屬於虛擬機器監控器或者其他客戶虛擬機器的資料。L1TF 幾乎影響了所有擁有預測執行技術與頁表翻譯功能的 Intel 處理器,官方公開的受影響處理器列表幾乎包含了 Intel 近幾年釋出的所有 CPU 型號。1. 背景介紹:頁表、快取、預測執行與隱蔽通道頁表:頁表是 CPU 管理記憶體的核心機制。當頁表機制啟用時,CPU 指令採用虛擬地址(virtual address,又稱 linear address)訪問記憶體。隨後,CPU 利用頁表將該虛擬地址翻譯為實體地址(physical address),從而從實體記憶體中讀取/寫入資料。頁表中,每個虛擬地址頁(一般以 4KB 為粒度)都擁有一個自己的頁表項。一個頁表項中包含了該虛擬地址頁對應的實體地址頁,以及相應的許可權位與控制位。其中有兩個特殊位 P位 (present bit)以及預留位(reserved bit)與本次攻擊相關。P位表示當前頁表項是否有效(P位置零表示當前頁表項無效),同樣的對於預留位的檢查失敗也表示當前頁表項無效;快取:快取是 CPU 內部的一塊高速儲存區域。CPU 將實體記憶體中的資料載入到內部的快取中,之後對於該實體記憶體的訪問將直接在快取中進行,從而提升 CPU 訪問記憶體的速度。當前處理器的快取往往分為多個級別,一級快取、二級快取以及三級快取(也稱LLC:last level cache)。在多核處理器中,每個 CPU 核(core)都擁有自己的一級與二級快取。而三級快取往往是所有CPU核共享的;預測執行:預測執行是當前 CPU 加速指令處理的一項主要技術。當 CPU 執行某些引起控制流跳轉(間接跳轉、函式呼叫、中斷)時,並無法立刻獲得下一條指令時,CPU 將會預測性地繼續執行指令。如果預測正確,那麼就能有效提升指令處理速度。而如果預測出錯,那麼 CPU 將會回滾所有由於預測執行而產生的結果;
隱蔽通道:隱蔽通道(convert channel)是一種間接的資料傳輸方式。兩個被隔離的程式能夠透過控制某些系統狀態的變化,間接的傳遞資料,從而繞開諸多隔離機制。假如 A 希望向 B 傳遞一個隱私資料,那麼 A 首先根據該資料的內容,相應的更改系統狀態(例如根據值的不同,將快取中的不同區域填充)。而 B 之後能夠透過觀察系統狀態變化,從而間接獲得 A 傳遞過來的隱私資料。這種間接的資料傳遞方式被稱為隱蔽通道。2. L1TF 漏洞的詳細原理當 CPU 訪問某個虛擬地址時,會透過頁表將虛擬地址翻譯到實體地址。此時,如果頁表中的P位被置0,或者預留位被置上,那麼意味著該頁表項無效,即所對應的虛擬地址沒有被對映到實體地址。此時,CPU 中負責地址翻譯的模組將立即停止地址翻譯過程,並丟擲一個 Page Fault。這一特殊的 Page Fault 也被稱為 Terminal Fault。然而,當 Terminal Fault 發生之後,擁有預測執行特性的 CPU 並不會立即跳轉至錯誤處理函式,而是會預測執行觸發錯誤的指令。此時,CPU 會根據頁表項中的內容(即使該頁表項被標記為無效),預測性的將目標虛擬地址翻譯為實體地址,並且繼續訪問記憶體。具體來說,CPU 會從發生 Fault 的頁表項中讀取物理頁的起始地址,從訪問的虛擬地址中獲得頁內的地址偏移,最終組成一個實體地址。如果該實體地址中的資料已經被載入到當前 CPU 核的一級快取中,那麼該資料將被讀取,並且傳遞給之後的預測執行指令。雖然最終這些預測執行的指令執行結果都將被 CPU 回滾,但是 CPU 無法恢復這些指令對快取狀態產生的影響。因此,這些預測執行的指令能夠利用快取狀態建立一條隱蔽通道(Convert Channel)並將讀取的目標資料傳遞給攻擊者。由於 Terminal Fault 發生之後,CPU 訪問的實體地址是預測生成的,而不是透過頁表翻譯得出的,因此該次實體地址訪問將能夠繞過諸多記憶體訪問檢查,具體來說有三種:
繞開 Intel SGX 的 Enclave 記憶體保護檢查。Enclave 是 Intel SGX 提供的可信執行環境,Enclave 的資料在記憶體中會被加密,只有被載入至快取中時才會解密。當完成虛擬地址到實體地址的翻譯之後,CPU 會檢查目標地址是否屬於某一 Enclave 並且當前是否在該 Enclave 中執行;繞開 SMM 的記憶體保護檢查。SMM 模式是 Intel 的一個具有高許可權的執行模式。頁表翻譯完成之後,CPU 會檢查目標實體地址是否是屬於 SMM 模式的記憶體,並且檢查當前執行模式是否能夠對其進行訪問;繞開Intel虛擬化技術系統的擴充套件頁表(EPT)。在虛擬化環境中,完成頁表翻譯之後,得到的實體地址將被擴充套件頁表(EPT)進行第二次翻譯,從而得到最終用來進行記憶體訪問的實體地址。擴充套件頁表被廣泛用於保證不同虛擬機器之間的記憶體隔離。由於 L1TF 漏洞能夠繞開以上三類不同的檢查,因此該漏洞也被分為三個不同的變種,L1TF-SGX、L1TF-OS/SMM以及L1TF-VMM。3. L1TF漏洞有哪些依賴條件?L1TF漏洞要求攻擊程式碼所處的 CPU 核的以及快取中必須存有目標資料。目標資料可以是任何當前許可權級別或者使用者無法訪問的資料。同時 L1TF 要求攻擊者能夠在目標機器執行攻擊程式碼。
具體來說,L1TF 依賴於以下三個攻擊條件,只有這些條件均被滿足時,攻擊才能進行:1. 目標資料必須被載入至攻擊者所在 CPU 核的一級快取中;而一級快取的大小非常有限,並且內容更替頻繁,因此攻擊視窗非常小;2. 攻擊程式碼必須執行在一級快取中存有目標資料的 CPU 核中;同時,攻擊程式碼所用的頁表中必須存在能夠利用的頁表項,從而構造出目標資料的實體地址;3. 攻擊程式碼只能透過預測執行進行目標資料的讀取,並且必須透過隱秘通道(convert channel)才能最終獲得目標資料。條件1意味著攻擊者必須實現透過某些技術保證目標資料已經被載入到一級存中。條件2、3要求攻擊程式碼必須執行在目標資料所快取的 CPU 核中。在擁有 Hyperthead 技術的 Intel CPU 中,一個 CPU 核會擁有兩個能夠同時執行並且共享一級快取的物理執行緒(Physical Thread),因此攻擊程式碼僅需執行在目標CPU核中的任一物理執行緒之中。L1TF 對 Intel SGX 有什麼影響?
Intel SGX 是 Intel CPU 提供的硬體安全特性。SGX 提供了一種可信執行環境 Enclave,允許使用者將關鍵程式碼與資料執行在 Enclave 中並且保證安全性,同時提供了一些列指令用以建立、管理、銷燬 Enclave。Enclave 中的程式碼和資料均儲存在專用的實體記憶體區域 EPC(Enclave Page Cache)中,EPC 中的資料會以密文形式儲存在實體記憶體之中,只有當其被載入至CPU內部之後,EPC 中的資料才會被解密儲存在快取中。因此,Enclave 除了能夠防止來自高許可權級別的軟體攻擊之外,還能夠抵禦冷啟動攻擊、匯流排偵測攻擊等物理攻擊手段。1. 如何利用L1TF讀取Enclave中的加密記憶體?雖然 Enclave 中的資料在記憶體中是加密的,但是其在CPU快取中是以明文儲存的。L1TF 漏洞能夠繞開 CPU 對 Enclave 記憶體訪問的檢查,使得攻擊者能夠竊取被載入至一級快取中的Enclave資料。在今年的 USENIX Security 2018 大會上,L1TF 的發現者們發表了論文 “FORESHADOW: Extracting the Keys to the Intel SGX Kingdom with Transient Out-of-Order Execution“[1],闡述瞭如何利用 L1TF-SGX 漏洞竊取Enclave中的隱私資料。在論文中提到,L1TF 漏洞在攻擊 Enclave 時能夠被更加容易的實現。Intel SGX 提供了一條特殊指令 *eldu*,用以幫助不可信的作業系統安全的載入 Encalve 的記憶體。攻擊者發現,eldu 指令在載入 Enclave 記憶體時,會同時將其載入至當前 CPU 的以及快取之中。也就是說,攻擊者無需猜測目標資料何時會被載入至一級快取中。其能夠直接透過 eldu 指令,將任意 Enclave 記憶體載入至當前 CPU 核的一級快取,並且利用 L1TF-SGX 漏洞對其進行讀取。2. Intel 提供的L1TF漏洞補丁與防禦機制
針對 L1TF 漏洞,Intel 官方提供了微程式碼補丁。對於保護 SGX 而言,補丁主要做了兩處安全性增強:在進出 Enclave 時,清除當前 CPU 核的一級快取。保證在退出 Enclave 之後, Enclave 內部的資料不會殘留在一級快取之中,從而無法被竊取;在 Enclave 的遠端驗證資訊中加入當前是否啟用 Hyperthread 的報告,同時建議使用者拒絕相信執行在開啟 Hyperthread 平臺中的 Enclave。對於上文提到的 eldu 指令,Intel 的官方文件[2]裡並沒有提到是否對該指令打上補丁,以防止其被用來進行 L1TF 攻擊。如果該指令的行為未被修改,那麼攻擊者仍然能夠利用 L1TF 漏洞讀取 Enclave 內部的資料。本方法要求使用者拒絕將Enclave執行在開啟了 Hyperthread 的平臺之上。然而, Hyperthread 的控制主要由 BIOS 完成,無法在執行時動態開啟/關閉。這也就意味著,使用者為了使用 SGX 必須完全放棄 Hyperthread 技術。與此同時,某些硬體廠商的 BIOS 並不支援關閉 Hyperthread 的操作,導致使用者無法安全地在這些平臺上使用 SGX 技術。TEEX 團隊的“虛擬化+SGX”安全增強方案
考慮 eldu 指令是否被修補的未知隱患,以及部分機器可能未打上 Intel 的微程式碼補丁,同時為了管控 SGX 在將來可能存在的側通道攻擊等安全隱患,TEEX team 提出了一個基於虛擬化技術的 SGX 安全增強方案:TXVisor。該方案利用虛擬化技術,將不同的 Enclave 環境,以及 Enclave 與非 Enclave 環境相隔離,以保證使用者資料與程式碼邏輯不受類似 L1TF 等攻擊的影響。該方案包括以下技術點:L1 Cache 隔離:在每次退出 Enclave 時,TXVisor 都將清除當前 CPU 核的一級快取,從而避免攻擊者利用一級快取,在 Enclave 內外構建隱蔽通道,從根本上杜絕了 L1TF 攻擊,即使在沒有應用 Intel 補丁的硬體平臺也同樣適用;ELDU指令安全增強:對於 Intel 官方補丁中未提到的eldu指令,TXVisor 將透過“Trap-and-emulate”的方法,動態捕獲該指令的執行,在保證其原有功能的同時增加額外的安全檢查,從而防止其破壞一級快取的隔離;Hyperthread 模式下安全性增強:TXVisor 透過控制排程,防止攻擊者利用 Hyperthread 技術在執行時利用 L1TF 漏洞攻擊目標 Enclave。透過將 Enclave 環境與非 Enclave 環境的隔離,本方案既能夠保證 Enclave 安全,又允許使用者在 Enclave 外使用 Hyperthread 技術提升系統效能,從而進一步降低安全防護所帶來的效能損失;可信執行環境驗證:TXVisor 提出了軟硬體結合的雙重遠端認證方法,使得使用者能夠安全的驗證應用程式是否執行在受 SGX 與 TXVisor 保護的平臺之上。該方案可在沒有應用 Intel 硬體補丁的平臺上完全防禦類似 L1TF 等型別的攻擊;同時,我們還提出了若干系統最佳化的方法,以降低安全增強所帶來的效能損失。該工作也是繼 CHAOS [ISTR'07]、CloudVisor [SOSP']、HyperCoffer [HPCA']、TxIntro [HPCA] (獲當年最佳論文提名獎)、CrossOver [ISCA']、SeCage [CCS]、AdAttester [MobiSys]、Nexen [NDSS]、SGX Migration [DSN]、vTZ [USENIX Security]、VButton [MobiSys]、Fidelius [HPCA]、EPTI [USENIX ATC] 之後,在虛擬化與可信隔離環境方面的系列工作之一。
SGX與區塊鏈如何保證資料的隱私性一直是區塊鏈領域的難題之一。目前,諸多領域內的技術團隊正在探索如何利用 Intel SGX 等硬體安全技術,為區塊鏈提供隱私性保證。雖然當前還未有利用 Intel SGX 解決區塊鏈隱私問題的成熟方法,但研究人員在探索的過程中已經證明,SGX 技術能夠有效提升區塊鏈中資料與運算的隱私性。然而,SGX 技術並不是“不壞金身“。無論是此次的 L1TF-SGX 漏洞,還是之前的測通道攻擊(如Spectre),都揭示了 SGX 存在著安全隱患。因此,對於區塊鏈系統來說,一個合理的 SGX 使用方案,應當既能夠利用 SGX 技術提升區塊鏈的安全效能,也能夠在 SGX 存在漏洞的情況下,限制漏洞所造成的影響。現有的部分方案存在過分依賴 SGX 的問題,例如將區塊鏈的一致性協議完全依賴 SGX 的隱私性進行設計。一旦 SGX 的安全性存在漏洞,安全隱患將瞬間蔓延至整個區塊鏈,導致整個鏈的崩潰。TEEX 團隊在利用SGX保證使用者資料、計算邏輯安全性的同時,透過結合虛擬化等技術與區塊鏈本身的特性,能夠有效控制 SGX 出現漏洞後的影響範圍。在利用 SGX 提升區塊鏈隱私性的同時,也不過分依賴於其作為整個系統的安全根。綜上,我們認為 TEE 將會與密碼學一樣,成為區塊鏈的重要支撐技術之一。TEEX 團隊希望透過在 TEE 安全技術上的多年積累,為現有和將來的區塊鏈系統提供安全可靠的基礎架構服務,進而促進整體生態的繁榮。後續,TEEX會帶來更多TEE與區塊鏈結合的討論,敬請期待。更多區塊鏈資訊:www.qukuaiwang.com.cn/news

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;