張亞暉,趙 敏,韓 歡
(1.陸軍工程大學(xué),重慶 400035; 2.陸軍工程大學(xué),江蘇 南京 210007)
計算機(jī)和互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展已極大地改變了人們的生活方式,但在此過程中的計算機(jī)安全防護(hù)和隱私數(shù)據(jù)保護(hù)一直是學(xué)術(shù)界和工業(yè)界研究的熱難點問題。目前無論是個人計算機(jī)還是第三方云計算平臺,它們所采用的都是基于分層構(gòu)建的安全模型,即從下到上分別為物理硬件(如CPU、內(nèi)存)、特權(quán)軟件(如操作系統(tǒng)、hypervisor[1,2])、軟件堆棧(如數(shù)據(jù)庫、網(wǎng)絡(luò)協(xié)議)、用戶程序等。分層的安全模型要求特權(quán)級軟件可以訪問用戶程序,而用戶程序只能有限地調(diào)用特權(quán)軟件開放的接口。其目的就是為了保護(hù)特權(quán)軟件免受用戶程序(通常被視為不受信任代碼)的攻擊,但這種模型的負(fù)作用就是用戶的隱私信息不能免受特權(quán)軟件的訪問。因此,用戶的隱私信息在個人計算平臺或者第三方云計算平臺中,通?;谝韵录僭O(shè):(1)計算平臺所提供的軟件和硬件都是可信的;(2)計算平臺的工作人員都是可信的;(3)計算平臺所處的司法地域隱私保護(hù)法是可信的。
2013年,Intel提出的處理器安全技術(shù)SGX[3-5]是Intel實現(xiàn)可信執(zhí)行環(huán)境(TEE)的方式,目的是為在所有特權(quán)軟件都可能是惡意的計算機(jī)上執(zhí)行的安全敏感計算提供完整性和機(jī)密性保護(hù)。文中對目前針對SGX的攻擊與防御技術(shù)進(jìn)行了梳理,文章組織結(jié)構(gòu)為:第1部分介紹了SGX的威脅模型,第2部分總結(jié)分析了針對SGX的攻擊類型,第3部分指出了針對SGX攻擊的防御措施,第4部分探討了針對SGX的攻擊與防御技術(shù)可能的發(fā)展方向,最后對文章進(jìn)行了總結(jié)。
SGX攻擊的目標(biāo)是破壞運行在enclave中應(yīng)用的機(jī)密性和完整性,攻擊者來自non-enclave部分,包括應(yīng)用程序和系統(tǒng)軟件。系統(tǒng)軟件包括操作系統(tǒng),hypervisor,SMM,BIOS等特權(quán)級軟件。
針對SGX的攻擊通常假設(shè)攻擊者已經(jīng)獲取到了除enclave包以外的所有資源,如硬件設(shè)備、完全訪問OS資源、ROOT權(quán)限等;同時攻擊者可以安裝任意的內(nèi)核模塊并配置計算機(jī)的啟動參數(shù)。攻擊者利用獲得的ROOT權(quán)限和其他資源可以分析程序的源代碼或二進(jìn)制執(zhí)行程序,從而知道目標(biāo)enclave程序可能的控制流;任意時刻、次數(shù)地中斷目標(biāo)enclave程序的執(zhí)行;為目標(biāo)enclave程序的執(zhí)行指定特定的物理核心;訪問配置其他的硬件資源或性能統(tǒng)計監(jiān)視器等等。
SGX的攻擊者通過破壞enclave的機(jī)密性可以獲得存儲在enclave中的用戶隱私代碼或數(shù)據(jù),此類攻擊方式主要有側(cè)信道攻擊、代碼重用攻擊和硬件漏洞攻擊。而攻擊者破壞enclave的完整性則只能進(jìn)行拒絕服務(wù)攻擊。其中側(cè)信道攻擊主要利用了CPU緩存來獲取enclave中的控制流和數(shù)據(jù)流,基于Cache的側(cè)信道攻擊要比其他類型的側(cè)信道攻擊粒度更小,最小粒度可以做到一個Cache line,從而獲取更多的信息。代碼重用攻擊主要利用了現(xiàn)代編程中不可避免的軟件漏洞來獲取隱私數(shù)據(jù),相比其他類型攻擊,代碼重用攻擊更加隱蔽。硬件漏洞攻擊主要利用了CPU硬件中的漏洞,該類攻擊雖然危害性更大但通??梢约皶r消除。拒絕服務(wù)攻擊則主要利用了SGX本身的安全機(jī)制,雖然該類攻擊不能獲取用戶的隱私數(shù)據(jù),但會給公共云提供商帶來極大威脅。
2.1.1 基于cache的攻擊
在現(xiàn)代計算環(huán)境中,硬件資源的普遍共享使得并行計算得到了廣泛的應(yīng)用,但這卻帶來了新的安全隱患——基于cache的側(cè)信道攻擊。Intel SGX依賴于硬件,即使操作系統(tǒng)和其他軟件堆棧是惡意的,SGX也可以做到有效的隔離保護(hù),但它卻無法防御基于cache的側(cè)信道攻擊?;赾ache的側(cè)信道攻擊通常采用Prime+Probe[6-7]攻擊技術(shù),攻擊成功與否的關(guān)鍵在于降低攻擊過程中的噪聲。Prime+Probe攻擊的方法為:Prime,攻擊者用預(yù)先準(zhǔn)備的數(shù)據(jù)填充特定的多個cache組;Trigger,攻擊者等待目標(biāo)進(jìn)程響應(yīng)服務(wù)請求,將cache數(shù)據(jù)更新;Probe,攻擊者重新讀取Prime階段填充的數(shù)據(jù),度量并記錄各個cache組讀取時間,如果攻擊者觀察到較高的探測時間,則推斷受害者使用了這部分緩存,否則未使用。降低噪聲的方式通常有:(1)分配一個特定的物理核心用于攻擊進(jìn)程和enclave的執(zhí)行;(2)提高攻擊的時空分辨率。
文獻(xiàn)[8]實現(xiàn)了一個名為CacheZoom的側(cè)信道攻擊工具,它應(yīng)用Prime+Probe技術(shù)攻擊L1緩存來收集目標(biāo)enclave的內(nèi)存訪問信息。CacheZoom通過分配一個專用的物理核心,并通過減少enclave在兩個中斷之間的內(nèi)存訪問次數(shù)實現(xiàn)了一個低噪聲的側(cè)信道。
文獻(xiàn)[9]通過分配專用物理核心,對L1緩存執(zhí)行Prime+Probe攻擊并采用較高頻率的性能監(jiān)視計數(shù)器PMC對其進(jìn)行監(jiān)測,實現(xiàn)了不需中斷enclave執(zhí)行的側(cè)信道攻擊技術(shù)。該方案可以避開目前已知的側(cè)信道攻擊檢測方法,且不需要攻擊過程與enclave進(jìn)程同步。
2.1.2 基于頁表的攻擊
在計算機(jī)系統(tǒng)中,CPU只能通過邏輯地址訪問進(jìn)程,但內(nèi)存僅能識別物理地址。而頁表是用來存儲邏輯地址和物理地址之間映射的數(shù)據(jù)結(jié)構(gòu)。
文獻(xiàn)[10]介紹了一種新型的針對SGX的無噪聲的側(cè)信道攻擊,稱為受控信道攻擊。Intel SGX允許操作系統(tǒng)完全控制SGX程序的頁表,而頁表可以映射或取消映射SGX程序的內(nèi)存頁,這使得惡意操作系統(tǒng)能夠通過監(jiān)視頁面錯誤而準(zhǔn)確地知道受攻擊的SGX程序試圖訪問哪些內(nèi)存頁面。作者使用該受控信道從廣泛使用的文字處理工具(FreeType和Hunspell)中提取出了文本文檔,獲得了由libjpeg解壓的JPEG圖像的輪廓,并可以撤消windows風(fēng)格的ASLR。在每種情況下,只要運行受害者的代碼,就足以泄漏受保護(hù)應(yīng)用程序中的數(shù)據(jù)。作者在Haven[11]和InkTag[12]兩個屏蔽系統(tǒng)中進(jìn)行了驗證。
文獻(xiàn)[13]指出在針對Intel SGX的攻擊中,基于頁表攻擊所帶來的威脅已超出了傳統(tǒng)的基于頁面的攻擊。文獻(xiàn)基于強(qiáng)對抗假設(shè),包括攻擊者能夠完全控制特權(quán)軟件和OS的調(diào)度策略、可以反復(fù)的中斷enclave包以及知道目標(biāo)應(yīng)用程序的(編譯)源代碼,提出了一種新的基于頁表的攻擊技術(shù),可以在指令級粒度上精確地中斷一個enclave;并且提出了兩個新的攻擊向量:頁表條目監(jiān)控,重復(fù)訪問監(jiān)控。它們可以從頁表屬性以及不受保護(hù)的頁表內(nèi)存的緩存行為中推斷出enclave的內(nèi)存訪問。文獻(xiàn)通過從流行的Libgcrypt加密軟件套件中恢復(fù)很少甚至沒有噪聲的EdDSA會話密鑰演示了該攻擊的有效性。
2.1.3 基于LBR的攻擊
分支預(yù)測是現(xiàn)代流水線處理器最重要的特性之一。通常指令流水線由四個主要階段組成:獲取、解碼、執(zhí)行和回寫。這種流水線結(jié)構(gòu)使處理器執(zhí)行一條指令的同時可以獲取/解碼下一條指令,并將上一條指令的結(jié)果存儲到內(nèi)存(或緩存)中,即處理器可以并行執(zhí)行多條指令,這樣有利于提高處理器的效率。Intel提供了一個專門的硬件特性LBR(last branch record)來記錄這些分支信息。
文獻(xiàn)[14]中作者介紹了一種新型的針對Intel SGX的側(cè)信道攻擊,它可以識別一個運行在SGX硬件上的enclave程序的細(xì)粒度(塊級)控制流,稱為分支追蹤攻擊。這種攻擊的原理是當(dāng)處理器從enclave模式切換到non-enclave模式時,Intel SGX沒有清除分支歷史信息,并通過分支預(yù)測側(cè)信道將細(xì)粒度的跟蹤信息留給了外部不可信系統(tǒng)。但該攻擊存在兩個挑戰(zhàn):(1)根據(jù)定時來度量分支預(yù)測/誤預(yù)測對于區(qū)分細(xì)粒度控制流的變化很不準(zhǔn)確;(2)需要對enclave進(jìn)行精細(xì)復(fù)雜的控制來使得它執(zhí)行攻擊者感興趣的代碼塊。為了克服這些挑戰(zhàn),作者開發(fā)了兩種新的攻擊技術(shù):(1)利用Intel PT和LBR來正確識別分支歷史;(2)調(diào)整本地APIC定時器來精確控制一個飛地內(nèi)的執(zhí)行,從而使分支追蹤攻擊非常精確。作者演示了利用分支追蹤攻擊來推斷Intel SGX SDK、mbed TLS、LIBSVM和Apache中的細(xì)粒度的控制流且在此過程中不會引發(fā)頁面錯誤,并且對于保護(hù)Intel SGX免受頁面錯誤和緩存定時攻擊的一些方案(如確定性多路復(fù)用[15]、T-SGX[16]、SGX-Shield[17]和Sanctum[18]),分支追蹤攻擊同樣有效。
2.1.4 基于DRAM的攻擊
DRAM[19]一般由channel,DIMM,rank,bank等部分構(gòu)成,每個bank又由columns、rows和row buffer組成,其中row buffer用來緩存最近訪問過的一個row。與CPU的緩存訪問模式類似,在進(jìn)行DRAM訪問時,如果訪問的row已經(jīng)被row buffer緩存,則直接從row buffer中讀取,否則將整個row加載到row buffer中再進(jìn)行讀取。如果row buffer中已緩存了其他row,則需要先換出row buffer的內(nèi)容再加載新的row進(jìn)行讀取。這幾種訪問模式的速度均不同,攻擊者可以利用訪問時間的差異判斷當(dāng)前訪問的row是否在row buffer中或被換出。
文獻(xiàn)[20]演示了一個運行在SGX enclave中的惡意軟件,因為所有的enclave都位于相同的物理EPC中,所以運行惡意軟件的enclave可以對其他enclave執(zhí)行基于DRAM的攻擊以竊取用戶的敏感數(shù)據(jù)。該方案不需要依賴惡意的操作系統(tǒng),即攻擊者也只是一個非特權(quán)應(yīng)用程序,唯一的要求是攻擊進(jìn)程和enclave進(jìn)程位于同一主機(jī)中。
計算機(jī)軟件的發(fā)展經(jīng)驗表明,任何應(yīng)用程序都存在著安全漏洞。在傳統(tǒng)環(huán)境中,此類漏洞通常允許攻擊者完全地控制系統(tǒng)。雖然SGX聲明可以對軟件提供強(qiáng)有力的保護(hù),但如果在enclave代碼中存在著安全漏洞會有什么后果和危害?
文獻(xiàn)[21]全面分析了針對enclave內(nèi)部漏洞的利用技術(shù),提出了一種新的基于面向返回編程的代碼重用攻擊方法Dark-ROP。Dark-ROP通過構(gòu)建可以通知攻擊者enclave執(zhí)行狀態(tài)的oracle,從而在代碼和數(shù)據(jù)都隱藏時啟動ROP攻擊。(1)從enclave內(nèi)存中獲取隱私代碼和數(shù)據(jù);(2)繞過本地和遠(yuǎn)程的enclave認(rèn)證;(3)解密和生成正確加密的數(shù)據(jù)。此外,Dark-ROP可以通過構(gòu)建一個由攻擊者完全控制的shadow enclave,并將受害enclave中的代碼和數(shù)據(jù)提取到其中來模擬受害enclave,如讀取enclave的SGX加密密鑰。
文獻(xiàn)[22]基于弱對抗假設(shè),即不需要擁有內(nèi)核特權(quán),提出了針對SGX的第一個用戶空間內(nèi)存的代碼重用攻擊。作者提出了兩個新的開發(fā)原語:ORET和CONT,它們能夠利用SGX異常處理的內(nèi)在特性以及enclave代碼與不可信代碼的交互過程來實現(xiàn)對所有CPU寄存器的訪問。同時,攻擊能夠破壞現(xiàn)有的細(xì)粒度隨機(jī)化方案而又不至于使任何的飛地崩潰,如SGX-shield,且它適用于Linux或Windows Intel SGX SDK開發(fā)的enclave。
L1TF[23]是2018年發(fā)現(xiàn)的一種Intel處理器安全漏洞,在使用推測執(zhí)行的微處理器和英特爾SGX的系統(tǒng)中可能在未經(jīng)授權(quán)的情況下就將本地用戶訪問的enclave駐留在L1數(shù)據(jù)緩存中的信息泄露給攻擊者。L1TF的發(fā)現(xiàn)者利用該漏洞開發(fā)了名為Foreshadow[24]的攻擊,它可以在沒有ROOT特權(quán),不知道受攻擊enclave代碼的情況下發(fā)起攻擊;甚至如果攻擊者獲得了ROOT特權(quán),不需要受害enclave的執(zhí)行就可獲取enclave中的敏感信息。L1TF漏洞破壞了SGX的安全保證,但它最嚴(yán)重的后果是L1TF可以轉(zhuǎn)儲L1數(shù)據(jù)緩存的全部內(nèi)容,而不管數(shù)據(jù)的所有者是誰。
Intel在Foreshadow之后發(fā)現(xiàn)了兩種密切相關(guān)的變體,統(tǒng)稱它們?yōu)镕oreshadow-NG[25],這是第一個完全破除虛擬內(nèi)存沙箱的瞬態(tài)執(zhí)行攻擊,傳統(tǒng)的頁表隔離已不足以防止未經(jīng)制授權(quán)的內(nèi)存訪問。文獻(xiàn)[25]中討論并分析了三種Foreshadow攻擊變體:Foreshadow-OS、Foreshadow-VMM和Foreshadow-SGX。其中Foreshadow-OS的機(jī)理是執(zhí)行用戶空間代碼的無特權(quán)攻擊者控制第一個頁表遍歷的虛擬地址輸入,當(dāng)需要將內(nèi)存中的頁面交換到磁盤時,攻擊者只需要等待操作系統(tǒng)清除某些PTE條目中的PTE表示位就可以導(dǎo)致終端錯誤。此時,可以使用瞬態(tài)無序指令讀取位于PTE條目所指向的物理地址的任何緩存內(nèi)容。Foreshadow-VMM的機(jī)理是惡意客戶虛擬機(jī)控制第一個地址映射,因此可以通過清除客戶頁表中的當(dāng)前位直接觸發(fā)終端錯誤。由于終端故障行為跳過了主機(jī)地址轉(zhuǎn)換步驟,并立即將客戶物理地址傳遞給了L1緩存,因此攻擊者可以臨時讀取系統(tǒng)上任何緩存的物理內(nèi)存,包括屬于其他虛擬機(jī)或管理程序本身的內(nèi)存。Foreshadow-SGX的攻擊機(jī)理如文獻(xiàn)[24]中所演示的,控制最終地址轉(zhuǎn)換輸出的攻擊者在對緩存的enclave機(jī)密進(jìn)行瞬時計算時,可以濫用終端錯誤來繞過SGX中斷頁面語義機(jī)制。攻擊者可以通過清除頁表當(dāng)前位(例如,通過mprotect系統(tǒng)調(diào)用)或在攻擊者控制的飛地中設(shè)置惡意內(nèi)存映射來觸發(fā)終端錯誤。
Intel SGX的完整性是使用完整性樹來進(jìn)行驗證的,當(dāng)處理器檢測到任何完整性違規(guī)時,會進(jìn)行處理器鎖定,以防止進(jìn)一步的損壞,此時,若想恢復(fù)系統(tǒng)只能對系統(tǒng)進(jìn)行冷啟動。通常想要破壞飛地的完整性只能采用硬件攻擊的手段,但如果攻擊者有基于軟件的方法來破壞飛地的完整性,那么處理器鎖將會導(dǎo)致嚴(yán)重的拒絕服務(wù)攻擊。
文獻(xiàn)[26]提出了第一個破壞飛地完整性的基于軟件的攻擊—SGX-Bomb。它可以對enclave內(nèi)存發(fā)起Rowhammer攻擊[27]以觸發(fā)處理器鎖定。它首先在同一個DRAM庫中發(fā)現(xiàn)沖突的行地址,然后重復(fù)訪問它們,如果由于Rowhammer攻擊而在enclave內(nèi)發(fā)生任意位翻轉(zhuǎn),則對enclave內(nèi)存的任何讀取操作都會導(dǎo)致飛地的完整性檢查失敗,從而導(dǎo)致處理器被鎖定,此時,只能通過重新啟動系統(tǒng)處理。這對公共云提供商而言是極具威脅的。因為這些提供商從客戶端接收到未知的enclave程序并運行,但這些程序卻可能會關(guān)閉與其他客戶共享的服務(wù)器。而且SGX-Bomb基于非常簡單的假設(shè),不需要有ROOT特權(quán),不需要有物理接觸,只需計算機(jī)處理器支持SGX,計算機(jī)的DRAM模塊具有Rowhammer漏洞以及用戶級別的enclave執(zhí)行環(huán)境。作者利用DDR4 DRAM在真實環(huán)境中對SGX-Bomb攻擊的有效性進(jìn)行了評估,使用默認(rèn)的DRAM刷新率(64 ms)花費了283秒就使整個系統(tǒng)停止了響應(yīng)。
針對上述介紹的SGX攻擊方式,目前學(xué)術(shù)界研究的SGX防御技術(shù)主要包括:基于enclave執(zhí)行頻繁被打斷特征的異常檢測技術(shù)、基于指令集和地址空間布局隨機(jī)化的隨機(jī)化技術(shù)、隔離SGX的整個攻擊面的增強(qiáng)隔離技術(shù),以及修改源碼實現(xiàn)隱藏enclave程序的控制流和數(shù)據(jù)流的源碼重構(gòu)技術(shù)。具體如表1所示。
表1 SGX防御技術(shù)
其中異常檢測技術(shù)可防御側(cè)信道攻擊,隨機(jī)化技術(shù)可防御代碼重用攻擊,增強(qiáng)隔離技術(shù)可防御側(cè)信道和應(yīng)用層的攻擊,源碼重構(gòu)技術(shù)可防御側(cè)信道和應(yīng)用層的攻擊。
很多針對SGX的側(cè)信道攻擊需要不斷地打斷受害enclave的執(zhí)行來提高時間分辨率,這些攻擊導(dǎo)致的異常中斷很容易被T-SGX[16]和Déjá Vu系統(tǒng)[28]檢測到。
Intel處理器從Haswell系列開始引入了事務(wù)同步擴(kuò)展(TSX)組件,它的一個關(guān)鍵特性是TSX中斷會禁止向底層操作系統(tǒng)發(fā)出錯誤通知,這意味著操作系統(tǒng)無法知道在事務(wù)中是否發(fā)生了頁面錯誤。T-SGX基于一個修改過的LLVM編譯器,可以自動地將enclave程序轉(zhuǎn)換為安全版本,所有的代碼和數(shù)據(jù)頁都用TSX包裝。同時,T-SGX將回退處理程序和其他事務(wù)控制代碼的特定頁面(稱為跳板)與原始程序的代碼和數(shù)據(jù)頁面隔離,以確保包括頁面錯誤和計時器中斷在內(nèi)的異常只能在跳板上觸發(fā)。操作系統(tǒng)雖然可以確定在跳板處是否發(fā)生了異常,但這不會顯示任何有意義的信息,從而實現(xiàn)了異常的檢測和隔離。T-SGX對于典型的受控側(cè)信道攻擊,如libjpeg、Hunspell和FreeType等,具有較好的防御效果。但T-SGX不足以應(yīng)對使用LLC的異步緩存定時攻擊和頁表與緩存的并發(fā)攻擊。
Déjá Vu系統(tǒng)實現(xiàn)了一種新的軟件參考時鐘,它根據(jù)這個時鐘對自己的執(zhí)行步驟計時,以檢測在其中一個步驟中是否發(fā)生了異?;蛑袛?。同時為了避免由于計算機(jī)上發(fā)生的正常中斷和頁面錯誤而導(dǎo)致的時鐘異常,Déjá Vu系統(tǒng)利用Intel TSX技術(shù)對該軟件時間進(jìn)行保護(hù)。通過設(shè)置合理的AEXs閾值,攻擊者若中斷或減緩enclave的執(zhí)行,該受保護(hù)的時鐘會檢測出時間異常,而且目前絕大多數(shù)的側(cè)信道攻擊為了提高攻擊的時空分辨率都會引起時間異常,因此該方案是檢測和防御側(cè)信道攻擊的一個較有效的方法。
地址空間布局隨機(jī)化(ASLR)[29-30]無論是在傳統(tǒng)執(zhí)行環(huán)境還是SGX可信環(huán)境中都是防御代碼重用攻擊的有效手段,但將ASLR應(yīng)用于SGX程序卻會帶來新的挑戰(zhàn):(1)SGX強(qiáng)大的攻擊模型將enclave內(nèi)存布局暴露給不可信的系統(tǒng)軟件,使得SGX程序完全不受ASLR的保護(hù);(2)SGX只為飛地提供有限的內(nèi)存,SGX的ASLR不能充分利用虛擬地址空間,極大地限制了ASLR的隨機(jī)性和安全性;(3)ASLR需要動態(tài)重定位來實現(xiàn)代碼和數(shù)據(jù)的相關(guān)地址,但這與SGX的認(rèn)證過程相沖突,因為SGX在enclave執(zhí)行開始之前就需要完成完整性度量,但ASLR的重定位需要在enclave執(zhí)行之后進(jìn)行;(4)SGX對enclave中的某些安全關(guān)鍵數(shù)據(jù)使用了固定地址,且出于安全考慮,SGX使一個飛地中的部分?jǐn)?shù)據(jù)結(jié)構(gòu)不可變,這使得攻擊程序可以利用這些數(shù)據(jù)結(jié)構(gòu)來繞過ASLR。
SGX-Shield[17]將隨機(jī)化技術(shù)應(yīng)用在了SGX環(huán)境中,并克服了上述SGX與隨機(jī)化“水土不服”的一些技術(shù)缺陷。SGX-Shield引入了多級加載器,可以向攻擊者隱藏ASLR的相關(guān)操作,同時SGX-Shield采用了一種細(xì)粒度的隨機(jī)化方法并集成了粗粒度的軟件故障隔離,可以克服EPC有限內(nèi)存問題并保護(hù)固定位置且敏感的數(shù)據(jù)結(jié)構(gòu)。為了解決ASLR需要動態(tài)重定位的問題,SGX-Shield實現(xiàn)了一個軟件數(shù)據(jù)執(zhí)行保護(hù)來執(zhí)行飛地代碼頁中的W⊕X。SGX-Shield可以有效地防御文獻(xiàn)[21]的Dark-ROP攻擊,但對文獻(xiàn)[22]中的攻擊無能為力。
文獻(xiàn)[31]提出了一種稱為語義無關(guān)的數(shù)據(jù)隨機(jī)化防御方法,可以用于對抗基于緩存的針對SGX的側(cè)信道攻擊。該方法設(shè)計并實現(xiàn)了一個名為DR.SGX的基于編譯器的工具,DR.SGX采用CPU的加密硬件加速單元將置換計算為小域加密,可以以緩存行粒度安全地隨機(jī)置換enclave數(shù)據(jù)的內(nèi)存位置。同時為了防止重復(fù)內(nèi)存訪問的相關(guān)性,在enclave進(jìn)程執(zhí)行期間還會不斷地重新隨機(jī)化所有enclave數(shù)據(jù)。
側(cè)信道攻擊可以破壞SGX提供的數(shù)據(jù)機(jī)密性保證,可以利用異常檢測(3.1節(jié))的方法來檢測和隔離部分側(cè)信道攻擊,但卻沒有消除側(cè)信道的攻擊面。而增強(qiáng)隔離是在SGX為用戶程序提供機(jī)密性和完整性保證的基礎(chǔ)上,隔離SGX的整個攻擊面來防御側(cè)信道攻擊。
Varys[32]通過限制L1和L2緩存等核心資源的共享為SGX飛地提供了一個側(cè)信道保護(hù)的執(zhí)行環(huán)境,該環(huán)境確保時間片或并發(fā)緩存計時以及頁表攻擊都不能成功。為了建立這樣的增強(qiáng)隔離環(huán)境,Varys實現(xiàn)了兩種機(jī)制:(1)可信內(nèi)核保留,將物理內(nèi)核嚴(yán)格保留給enclave線程,這樣攻擊者就不能在enclave線程運行時訪問它們共享的內(nèi)核資源,也不能在運行后從內(nèi)核的L1和L2緩存中恢復(fù)任何的秘密,這可以有效地防止對內(nèi)核共享資源的任何并發(fā)攻擊,如分支預(yù)測器和浮點單元,還可以防止頁表屬性上的無退出SCAs(因為它需要訪問內(nèi)核的TLB);(2)異步enclave退出監(jiān)控,限制AEX退出的頻率(該頻率通常比無攻擊執(zhí)行中的退出頻率要高得多但比所有已知攻擊又要小,這樣可以最小化誤報的概率),一旦超出頻率范圍就終止enclave的執(zhí)行,這可以防止更廣泛的側(cè)信道攻擊,包括基于LLC的攻擊。
Sanctum[18]的隔離機(jī)制專門用于防御針對SGX的軟件攻擊,它可防御已知的緩存定時攻擊和被動地址轉(zhuǎn)換攻擊,主要解決了在相互不信任的應(yīng)用程序之間共享一臺計算機(jī)所產(chǎn)生的安全問題,但Sanctum方案需要對硬件進(jìn)行微小的改動且無法防御DoS攻擊和利用硬件錯誤的軟件攻擊(如Rowhammer)。Sanctum是一種聯(lián)合設(shè)計,它將最小侵入性的硬件修改與受信任的軟件安全監(jiān)視器結(jié)合在一起,該軟件安全監(jiān)視器能夠進(jìn)行嚴(yán)格的分析,并且不使用密鑰執(zhí)行加密操作。
以上所介紹的異常檢測(3.1節(jié))、隨機(jī)化技術(shù)(3.2節(jié))和增強(qiáng)隔離(3.3節(jié))雖然可以在某些方面防御針對SGX的攻擊,但這些措施要么有較高的執(zhí)行成本,要么對某些攻擊變體無效,最大的不利之處就是增大了SGX的可信計算基(TCB)。本來Intel開發(fā)SGX的初衷就是要以硬件安全為強(qiáng)制性保障,為用戶提供可信的執(zhí)行環(huán)境。SGX的可信計算基是僅包括硬件(CPU和enclave)的,但上述的防御措施卻又破壞了這一點,使得SGX的可信計算基又包含了軟件等。
而源碼重構(gòu)則主要是通過修改源碼,小心地隱藏enclave程序的控制流和數(shù)據(jù)流,從而防御側(cè)信道攻擊。重構(gòu)源碼并未增大SGX的可信計算基,仍僅需信任硬件安全即可。如文獻(xiàn)[33]使用oblivious store隱藏if-else控制流,使用ORAM[34-35]隱藏數(shù)據(jù)流。文獻(xiàn)[36]使用硬件事務(wù)內(nèi)存(HTM)的事務(wù)原子性來確保與機(jī)密相關(guān)的控制流和數(shù)據(jù)訪問都保留在CPU緩存中,若事務(wù)失敗則會清除與事務(wù)相關(guān)的緩存,從而實現(xiàn)了控制流和數(shù)據(jù)流的隱藏。也可以在enclave程序執(zhí)行過程中嚴(yán)格地審查地址映射防止敏感信息地址外泄、優(yōu)化調(diào)度算法以防止不安全的共享、主動刪除遺留在緩存中的敏感信息等。但源碼重構(gòu)相對復(fù)雜,需要對應(yīng)用進(jìn)行嚴(yán)密的分析與設(shè)計,很難在一個通用的計算環(huán)境中實現(xiàn),且源碼重構(gòu)無法防御基于硬件漏洞的攻擊。
上述提及的針對SGX的攻擊主要是單一的攻擊方式,隨著SGX攻擊面的不斷發(fā)掘,綜合運用多種攻擊方式的組合實現(xiàn)混合多層次攻擊將會成為攻擊SGX的新手段?;旌隙鄬哟喂糇畲蟮膬?yōu)勢在于可以放大不同層次不同攻擊方式的差異來提高攻擊的準(zhǔn)確度。如已有的Cache和DRAM混合攻擊[37]可以將精度由row(8 kB)粒度提高到Cache line(64 B)。但已有的混合攻擊重點關(guān)注于內(nèi)存管理與地址轉(zhuǎn)換方面,未來新的混合多層次攻擊可以嘗試更多類型攻擊方式的組合或結(jié)合其他方面的信息,重點是CPU新特性,如Intel TSX-NI(transactional synchronization extensions-new instructions),Intel MPX (memory protection extensions),Intel CAT(cache allocation technology)等等。
未來針對SGX攻擊的防御措施可以從enclave的加載執(zhí)行時間方面進(jìn)行綜合分析?,F(xiàn)有的異常檢測主要是檢測enclave的執(zhí)行中斷異常頻次,但如何依靠終端的執(zhí)行環(huán)境對enclave加載執(zhí)行時間進(jìn)行綜合分析是檢測SGX攻擊的新思路,如利用人工智能技術(shù)訓(xùn)練enclave加載執(zhí)行時間模型來進(jìn)行異常檢測。
Intel SGX是一項有著廣泛應(yīng)用前景的安全技術(shù)。文中介紹了針對SGX的威脅模型,總結(jié)了針對SGX的攻擊類型,探討了目前針對SGX攻擊的一些防御措施以及SGX攻擊與防御可能的發(fā)展方向。