趙波,袁安琪,安楊
(1. 武漢大學(xué)國家網(wǎng)絡(luò)安全學(xué)院,湖北 武漢 430072;2. 武漢大學(xué)計算機(jī)學(xué)院,湖北 武漢 430079)
隨著互聯(lián)網(wǎng)在人們?nèi)粘I钪邪缪葜絹碓街匾慕巧?,信息安全問題越來越多,無論是智能手機(jī),還是新興起的無人駕駛、網(wǎng)絡(luò)電視等都存在著不同程度、不同方面的安全問題。小到個人隱私信息,大到國家軍事機(jī)密,各個層面產(chǎn)生的安全問題復(fù)雜煩瑣,沒有統(tǒng)一的解決方法,但可信計算的出現(xiàn)使從根本上防范信息安全問題的產(chǎn)生成為可能。
在這樣的大環(huán)境下,英特爾公司產(chǎn)生了研發(fā)SGX(software guard extensions)技術(shù)的靈感,SGX作為英特爾開發(fā)的可信計算技術(shù),旨在以硬件安全為強(qiáng)制性保障,不依賴于固件和軟件的安全狀態(tài),通過一組新的指令集擴(kuò)展與訪問控制機(jī)制,實(shí)現(xiàn)包含敏感數(shù)據(jù)的程序和普通程序間的隔離運(yùn)行,為包含敏感數(shù)據(jù)的程序提供可信執(zhí)行環(huán)境,保障用戶關(guān)鍵代碼和數(shù)據(jù)的機(jī)密性與完整性不受惡意軟件的破壞。與其他可信計算技術(shù)不同的是SGX的可信計算基(TCB,trusted computing base)僅包括硬件,避免了基于軟件的TCB自身存在軟件安全漏洞與威脅的缺陷,極大地提升了對系統(tǒng)安全的保障能力;此外,SGX可以保障可信執(zhí)行環(huán)境運(yùn)行時的安全,惡意代碼無法訪問與篡改其他程序在安全區(qū)內(nèi)部運(yùn)行的內(nèi)容,進(jìn)一步增強(qiáng)了系統(tǒng)的安全性;基于指令集的擴(kuò)展與獨(dú)立的認(rèn)證方式,使應(yīng)用程序可以靈活地調(diào)用這一安全功能并進(jìn)行驗(yàn)證[1]。
SGX的獨(dú)特架構(gòu)讓它能夠在計算平臺上提供一個可靠的空間,保障用戶關(guān)鍵代碼和數(shù)據(jù)的機(jī)密性、完整性和安全區(qū)本身,SGX作為英特爾公司為可信計算推出的一種技術(shù),在被提出后吸引了學(xué)術(shù)界和工業(yè)界大量研究者的關(guān)注,并被應(yīng)用在很多領(lǐng)域。SGX被大量應(yīng)用在云計算安全領(lǐng)域,如構(gòu)建云平臺應(yīng)用安全隔離執(zhí)行環(huán)境、構(gòu)建安全容器、構(gòu)建云平臺大數(shù)據(jù)安全可信計算環(huán)境和網(wǎng)絡(luò)功能虛擬化的狀態(tài)保護(hù)。例如,Baumann等[2]提出Haven,它利用Intel SGX的硬件保護(hù)來防御特權(quán)代碼和物理攻擊,是第一個在商用OS和商用硬件上屏蔽執(zhí)行未修改的遺留應(yīng)用程序的系統(tǒng)。Arnautov等[3]設(shè)計了SCONE,一個用于Docker的安全容器環(huán)境,使用SGX技術(shù)來保護(hù)Docker容器內(nèi)的進(jìn)程免受外部攻擊。Schuster等[4]提出基于SGX的VC3框架,在保持代碼和數(shù)據(jù)機(jī)密性的同時允許用戶在云中運(yùn)行分布式MapReduce計算,并確保結(jié)果的正確性和完整性。Shih等[5]提出了S-NFV方案,結(jié)合了SGX對網(wǎng)絡(luò)功能虛擬化產(chǎn)生的狀態(tài)進(jìn)行安全隔離保護(hù),來達(dá)到安全隔離NFV應(yīng)用程序狀態(tài)的目的。
除了應(yīng)用于云計算外,許多解決方案受益于SGX提供的安全保護(hù),包括多方計算、機(jī)器學(xué)習(xí)、區(qū)塊鏈、人工智能、生物識別技術(shù)保護(hù)等。例如,UCloud[6]引入了與區(qū)塊鏈相連接的英特爾SGX技術(shù),為智能合約提供了區(qū)塊鏈所不能提供的機(jī)密性,可拓展的計算節(jié)點(diǎn)解決了區(qū)塊鏈本身無法應(yīng)對復(fù)雜應(yīng)用場景的問題,通過可信硬件執(zhí)行機(jī)密性高、需要相對復(fù)雜計算能力的程序,并通過區(qū)塊鏈對執(zhí)行結(jié)果進(jìn)行記錄和驗(yàn)證,實(shí)現(xiàn)可追溯的特性。
SGX技術(shù)目前被廣泛地應(yīng)用到各個領(lǐng)域,但作為可信計算技術(shù)而誕生的SGX技術(shù)現(xiàn)階段在可信計算領(lǐng)域的應(yīng)用程度并沒有達(dá)到相對應(yīng)的高度。本文針對這一現(xiàn)象,對現(xiàn)有的SGX在可信計算領(lǐng)域的研究和應(yīng)用進(jìn)展進(jìn)行了分析,總結(jié)出當(dāng)前階段SGX在可信計算領(lǐng)域難以普及應(yīng)用的原因及應(yīng)對方法,并對SGX在可信計算領(lǐng)域未來的發(fā)展趨勢進(jìn)行了展望。
計算機(jī)系統(tǒng)處理著快速增長的重要、敏感和有價值的信息,這些信息需要被保護(hù)起來,從而避免被篡改和竊取。大量的應(yīng)用程序需要在平臺上保密運(yùn)行,從而保證用戶的敏感數(shù)據(jù)只能由指定接收人訪問。因此,Intel SGX作為一種新加入英特爾架構(gòu)的指令集和內(nèi)存訪問技術(shù)應(yīng)運(yùn)而生。通過應(yīng)用這項技術(shù)可以有效減少攻擊面。有無Intel SGX安全區(qū)(enclave),攻擊面的不同情況如圖1所示[7]。
圖1 有無英特爾SGX安全區(qū)時攻擊面的差異Figure 1 Differences in attack surfaces with and without Intel SGX enclaves
2.1.1SGX設(shè)計原理
英特爾軟件防護(hù)擴(kuò)展SGX是一項面向應(yīng)用程序開發(fā)人員的英特爾技術(shù),其目標(biāo)是對機(jī)密信息啟用高級別的保護(hù)。英特爾從第6代英特爾酷睿處理器平臺開始引入了英特爾軟件防護(hù)擴(kuò)展新指令集,受保護(hù)的內(nèi)存區(qū)域稱為安全區(qū),使用特殊指令和軟件可將應(yīng)用程序代碼放入一個安全區(qū)中執(zhí)行。它通過在代碼和數(shù)據(jù)駐留的地方分配硬件保護(hù)的內(nèi)存來實(shí)現(xiàn)安全區(qū)和非安全區(qū)的隔離。安全區(qū)內(nèi)存中的數(shù)據(jù)只能由同樣駐留在安全區(qū)內(nèi)存空間中的代碼訪問。從安全區(qū)的角度來看,操作系統(tǒng)和VMM也不是可信的組件。安全區(qū)代碼可以通過特殊的指令調(diào)用。安全區(qū)可以構(gòu)建并加載為DLL文件。通過這種機(jī)制,安全區(qū)可以提供一個隔離的可信執(zhí)行環(huán)境,防止惡意軟件影響安全區(qū)內(nèi)的代碼和數(shù)據(jù),從而保障用戶的關(guān)鍵代碼和數(shù)據(jù)的機(jī)密性和完整性。在安全區(qū)中運(yùn)行的受保護(hù)程序還擁有一個密碼學(xué)測度,用來發(fā)送給客戶端驗(yàn)證程序的可信執(zhí)行,或者為遠(yuǎn)程終端或不可信平臺提供認(rèn)證服務(wù),來實(shí)現(xiàn)安全區(qū)間的可信性校驗(yàn)。
這種隔離由引導(dǎo)期間留出的處理器保留存儲器強(qiáng)制執(zhí)行。該存儲器僅可由SGX微碼和在安全區(qū)內(nèi)運(yùn)行的程序訪問,并且被分成4 kB的簇,這些頁統(tǒng)稱為安全區(qū)頁面緩存(EPC,enclave page cache)。EPC中的頁面與特定的安全區(qū)相關(guān)聯(lián),并且只能由該安全區(qū)訪問。從EPC分頁到常規(guī)DRAM的信息在硬件派生密鑰下加密[7]。
安全區(qū)具有多個屬性:
1) 通過CPU強(qiáng)制執(zhí)行的內(nèi)存訪問控制機(jī)制,將安全區(qū)與其他不受信任的應(yīng)用程序(包括更高權(quán)限的應(yīng)用程序)隔離開;
2) 內(nèi)存加密用于防御物理攻擊并保護(hù)交換的安全區(qū)頁面;
3) 安全區(qū)支持安全區(qū)實(shí)例層面的遠(yuǎn)程認(rèn)證。
2.1.2SGX關(guān)鍵技術(shù)
(1)認(rèn)證
在Intel SGX架構(gòu)中,認(rèn)證是指證明在平臺上建立特定安全區(qū)的過程,向其他實(shí)體演示以正確的方式實(shí)例化特定的環(huán)境。SGX的認(rèn)證功能目前有兩種認(rèn)證機(jī)制。
本地認(rèn)證:本地認(rèn)證是指在同一平臺上的兩個安全區(qū)在交換信息之前使用Intel SGX報告機(jī)制彼此進(jìn)行認(rèn)證。在 SGX應(yīng)用程序中,當(dāng)應(yīng)用程序具有多個需要一起工作以完成任務(wù)的安全區(qū),或者當(dāng)兩個單獨(dú)的應(yīng)用程序必須在安全區(qū)之間傳遞數(shù)據(jù)時,可以使用本地認(rèn)證功能。每個安全區(qū)必須驗(yàn)證另一個安全區(qū)以確認(rèn)它們都是可信的。在兩個安全區(qū)驗(yàn)證對方是可信的之后,可以在受保護(hù)的通道上交換信息,該通道可以提供機(jī)密性、完整性和重放保護(hù)。完成后,兩個安全區(qū)會建立受保護(hù)的會話并使用ECDH密鑰交換來共享會話密鑰。該會話密鑰可用于加密必須在兩個安全區(qū)之間共享的數(shù)據(jù)。
遠(yuǎn)程認(rèn)證:遠(yuǎn)程認(rèn)證是指將Inter SGX軟件和平臺硬件的信息組合起來用于生成評價,然后將該評價發(fā)送到第三方服務(wù)器以建立信任。該軟件包括應(yīng)用程序的安全區(qū),以及由Intel 提供的QE(quoting enclave)和PvE(provisioning enclave)。在證明硬件是支持Intel SGX的CPU后,軟件信息的摘要會與來自硬件平臺的唯一非對稱密鑰組合以生成評價,該評價通過經(jīng)認(rèn)證的信道發(fā)送到遠(yuǎn)程服務(wù)器。如果遠(yuǎn)程服務(wù)器確定該安全區(qū)已正確實(shí)例化并且正在支持正版Intel SGX的處理器上運(yùn)行,則它可以信任該安全區(qū)并選擇使用經(jīng)過身份驗(yàn)證的通道向其提供機(jī)密信息。
(2)密封數(shù)據(jù)
一個安全區(qū)被實(shí)例化之后,硬件層面會對數(shù)據(jù)提供保護(hù),但當(dāng)安全區(qū)被關(guān)閉時,安全區(qū)內(nèi)部的所有數(shù)據(jù)都將丟失,如果數(shù)據(jù)之后仍然需要使用,那么安全區(qū)必須要對這部分?jǐn)?shù)據(jù)進(jìn)行特殊安排,使它們能夠存儲在安全區(qū)外。為了保護(hù)和保存數(shù)據(jù),SGX建立了一種機(jī)制,允許安全區(qū)軟件檢索該安全區(qū)的唯一密鑰。此密鑰只能由特定平臺上的安全區(qū)生成。安全區(qū)軟件使用該密鑰加密平臺上的數(shù)據(jù)或解密平臺上已經(jīng)存在的數(shù)據(jù)。英特爾將這些加密和解密操作分別稱為密封和解封操作,因?yàn)閿?shù)據(jù)是通過加密方式密封到安全區(qū)和平臺的。密封數(shù)據(jù)就是對數(shù)據(jù)進(jìn)行加密的過程,以便將其寫入不受信任的內(nèi)存或存儲,而不泄露數(shù)據(jù)內(nèi)容,且對應(yīng)的安全區(qū)可以將數(shù)據(jù)讀出并解密。加密密鑰是按需內(nèi)部派生的,不會暴露在安全區(qū)中。當(dāng)前SGX有兩種密封數(shù)據(jù)的方法。
密封到安全區(qū)標(biāo)識:此方法生成某一安全區(qū)的唯一指定密鑰。當(dāng)密封到安全區(qū)標(biāo)識時,密鑰對于密封數(shù)據(jù)的特定安全區(qū)是唯一的,并且影響其簽名的安全區(qū)的任何改變都將導(dǎo)致產(chǎn)生新密鑰。使用這種方法,由一個版本的安全區(qū)密封的數(shù)據(jù)是其他版本的安全區(qū)無法訪問的,所以這種方法的副作用是密封數(shù)據(jù)無法遷移到應(yīng)用程序及其安全區(qū)的較新版本。它是專為密封的舊數(shù)據(jù)不應(yīng)被新版應(yīng)用使用的應(yīng)用而設(shè)計的。
密封到密封標(biāo)識:此方法生成一個基于安全區(qū)密封授權(quán)方標(biāo)識的密鑰。來自同一簽名授權(quán)方的多個安全區(qū)可以導(dǎo)出相同的密鑰。當(dāng)密封到密封標(biāo)識時,來自同一授權(quán)方的多個安全區(qū)可以透明地密封和解封彼此的數(shù)據(jù)。這允許來自一個版本的安全區(qū)的數(shù)據(jù)被遷移到另一個版本,或者在自同一軟件供應(yīng)商的多個應(yīng)用程序之間共享安全區(qū)中的數(shù)據(jù)。
如果需要阻止較舊版本的軟件和安全區(qū)訪問由較新的應(yīng)用程序版本密封的數(shù)據(jù),則授權(quán)機(jī)構(gòu)可以在簽署安全區(qū)時選擇包含軟件版本號(SVN)。早于指定SVN的安全區(qū)版本將無法派生密封密鑰,因此無法對數(shù)據(jù)進(jìn)行解封[7]。
2.2.1SGX內(nèi)存管理機(jī)制
SGX定義了一種全新的數(shù)據(jù)結(jié)構(gòu)用于維持需要用SGX進(jìn)行保護(hù)的關(guān)鍵信息。Enclave關(guān)鍵數(shù)據(jù)結(jié)構(gòu)和組件如表1所示。
表1 Enclave關(guān)鍵數(shù)據(jù)結(jié)構(gòu)和組件Table 1 Enclave data structures and components
為了能完整地支持SGX的內(nèi)存保護(hù)功能,相應(yīng)的數(shù)據(jù)結(jié)構(gòu)和硬件結(jié)構(gòu)是必要的。為此,英特爾設(shè)計了EPC,EPC是PRM中操作系統(tǒng)分配的裝載應(yīng)用程序數(shù)據(jù)和代碼的4 kB大小內(nèi)存的集合,是一個內(nèi)存存儲安全區(qū)的頁和SGX數(shù)據(jù)結(jié)構(gòu)的受保護(hù)內(nèi)存,這段內(nèi)存可以同時阻止硬件和軟件的訪問。處理器會維持整個架構(gòu)的安全性并對數(shù)據(jù)進(jìn)行訪問信息控制。如果安全區(qū)執(zhí)行內(nèi)存訪問EPC時,處理器決定是否允許訪問。
在硬件結(jié)構(gòu)中,EPC的一個頁在硬件結(jié)構(gòu)上稱作EPCM(enclave page cache map)。EPCM維護(hù)EPC的入口地址,并且包含CPU跟蹤EPC內(nèi)存頁元數(shù)據(jù)的狀態(tài)表。它保證每個EPC由一個安全區(qū)獨(dú)享[7]。
2.2.2SGX線程管理機(jī)制
任何能夠?qū)PC頁映射到其虛擬地址空間的進(jìn)程都能夠執(zhí)行安全區(qū)代碼。當(dāng)CPU執(zhí)行安全區(qū)代碼時稱為enclave模式,此時CPU可以訪問駐留在PRM中的EPC頁面。線程數(shù)由安全區(qū)作者決定,然后決定有多少線程可以并發(fā)地執(zhí)行安全區(qū)代碼。
初始化后的安全區(qū)使用EENTER指令來跳轉(zhuǎn)進(jìn)入安全區(qū)執(zhí)行受保護(hù)的程序。只有在RING3的程序才能夠使用EENTER指令,EENTER并不執(zhí)行特權(quán)切換,CPU依舊在RING3的enclave模式下執(zhí)行。EENTER指令用于在程序控制下進(jìn)入安全區(qū),需要保存調(diào)用者的執(zhí)行上下文以便在安全區(qū)代碼返回時恢復(fù)跳轉(zhuǎn)前的狀態(tài)。
EENTER需要TCS的虛擬地址作為輸入,接著這條指令將RIP(EIP)寄存器修改為TCS中保存的入口偏移地址。這個入口點(diǎn)是由安全區(qū)應(yīng)用開發(fā)者定義的,任何對此地址的修改都會導(dǎo)致在初始化安全區(qū)時產(chǎn)生不一致的密碼學(xué)測度。這樣保證了安全區(qū)中的代碼只會在被定義好的地址上通過ECALL來調(diào)用。實(shí)際上,入口點(diǎn)只是安全區(qū)內(nèi)存范圍內(nèi)的函數(shù),安全區(qū)作者已顯式地將該內(nèi)存范圍定義為安全區(qū)代碼的入口點(diǎn)。
2.2.3 Intel SGX SDK
Intel(R) Software Guard Extensions SDK提供了以下工具。
1) Edger8r工具:用于在不受信任的組件和安全區(qū)之間生成接口。它通過讀取用戶提供的安全區(qū)描述語言(EDL)文件來生成邊緣例程。這些邊緣例程定義不受限于信任的應(yīng)用程序和安全區(qū)之間的接口。通常,該工具作為安全區(qū)構(gòu)建過程的一部分自動運(yùn)行。但是,高級安全區(qū)編寫器可以手動調(diào)用Edger8r。
2) Enclave簽名工具:Intel(R)軟件保護(hù)擴(kuò)展SDK提供了一個名為sgx_ sign的工具,用于對安全區(qū)進(jìn)行簽名。通常,對安全區(qū)進(jìn)行簽名的過程涉及生成包含安全區(qū)屬性(如安全區(qū)度量)的簽名結(jié)構(gòu),一旦在這種結(jié)構(gòu)中對安全區(qū)簽名,就可以檢測到對安全區(qū)文件(如代碼、數(shù)據(jù)、簽名等)的修改。簽名工具還會評估安全區(qū)映像的潛在錯誤,并警告用戶潛在的安全危險。sgx_sign通常是由Intel(R) SGX SDK中包含的一種配置工具設(shè)置的,并在構(gòu)建過程結(jié)束時自動運(yùn)行。在加載過程中,將檢查簽名以確認(rèn)安全區(qū)沒有被篡改,并且已正確加載。此外,簽名工具可用于報告已簽名的安全區(qū)的元數(shù)據(jù)信息,并生成對安全區(qū)簽名者白名單所需的SIGStruct文件。
3) Enclave調(diào)試器:幫助調(diào)試安全區(qū)。只有調(diào)試模式的安全區(qū)可以用Intel(R) SGX調(diào)試器進(jìn)行調(diào)試。
4) 性能測量:使用Intel(R) VTune放大器有助于測量安全區(qū)代碼的性能。Intel(R) VTune放大器應(yīng)用程序支持一種新的分析類型,稱為SGX熱點(diǎn),可用于配置英特爾SGX安全區(qū)應(yīng)用程序。可以使用SGX熱點(diǎn)的默認(rèn)設(shè)置來分析應(yīng)用程序和安全區(qū)代碼。精確的基于事件的采樣(PEBS)有助于配置Intel SGX安全區(qū)代碼。
5) Enclave內(nèi)存測量工具:幫助測量安全區(qū)在運(yùn)行時對受保護(hù)內(nèi)存的使用情況。安全區(qū)是一個孤立的環(huán)境。Intel(R) Software Guard Extensions SDK提供了sgx_emmt工具,用于測量安全區(qū)在運(yùn)行時對受保護(hù)內(nèi)存的實(shí)際使用情況。目前,安全區(qū)內(nèi)存測量工具提供以下兩個功能:獲取安全區(qū)的堆棧峰值使用值和獲取安全區(qū)的堆峰值使用值。
6) CPUSVN配置工具:有助于在不修改硬件的情況下模擬CPUSVN升級/降級場景。CPUSVN表示CPU的安全版本號,它影響密鑰派生和報表生成過程。CPUSVN不是一個數(shù)字概念,會隨著硬件升級/降級而升級/降級。為了在不修改硬件的情況下模擬CPUSVN升級/降級,Intel(R) Software Guard Extensions SDK提供了一個CPUSVN配置工具,用于配置CPUSVN[7]。
SGX技術(shù)的問世,在學(xué)術(shù)界和工業(yè)界引發(fā)了研究的浪潮,并在近年來逐漸成熟,SGX能夠構(gòu)建可信計算環(huán)境的特性在各個方向得到了廣泛應(yīng)用和結(jié)合。SGX技術(shù)目前在可信計算領(lǐng)域的應(yīng)用主要分為3種,分別是利用SGX增強(qiáng)系統(tǒng)的安全性、利用SGX增強(qiáng)應(yīng)用程序的安全性和利用SGX增強(qiáng)開發(fā)語言的安全性。
(1)SGX與TPM結(jié)合
由于SGX技術(shù)尚具有局限性和不足之處,可以通過將SGX和其他技術(shù)結(jié)合起來以提高系統(tǒng)整體的安全性,達(dá)到設(shè)計目標(biāo)。為了提高SGX的安全性,Dhiman等[8]提出了TGX,如圖2所示,通過將SGX和TPM結(jié)合,幫助SGX安全地將加密操作和安全存儲外包給TPM,TPM提供了一個具有更強(qiáng)隔離性的專用芯片。通過EAP和SGX對某些TPM位置的唯一訪問,以及SGX創(chuàng)建的度量等功能協(xié)同工作既可以增強(qiáng)對SGX的關(guān)鍵加密操作的隔離,又可以使TPM管理的憑證得到進(jìn)一步的保護(hù),這種結(jié)構(gòu)還可以規(guī)避針對SGX的微架構(gòu)攻擊。TGX使SGX能夠?qū)⑵浜灻万?yàn)證機(jī)制從處理器移動到TPM,從而使安全敏感信息在TPM之外永遠(yuǎn)不可用。通過SGX和TPM的結(jié)合構(gòu)造了一個安全性更強(qiáng)的可信執(zhí)行環(huán)境。
圖2 基于TPM在SGX中建立安全區(qū)Figure 2 Secure enclave build in SGX using TPM
(2)SGX與vTPM結(jié)合
隨著云計算技術(shù)的廣泛應(yīng)用,SGX技術(shù)已經(jīng)成為提高云基礎(chǔ)設(shè)施虛擬化環(huán)境安全性的重要手段。根據(jù)TPM規(guī)范,一種vTPM的實(shí)現(xiàn)框架被提出,為虛擬化環(huán)境vTPM的設(shè)計和實(shí)現(xiàn)奠定了基礎(chǔ),但該框架對實(shí)例的非易失存儲文件NVRAM缺少了有效保護(hù);攻擊者可以直接讀取NVRAM文件獲取vTPM實(shí)例中的敏感數(shù)據(jù),此外vTPM與虛擬機(jī)之間不存在綁定關(guān)系,攻擊者甚至可以直接讀取其他虛擬機(jī)的vTPM實(shí)例數(shù)據(jù)。針對這一安全問題,嚴(yán)飛等[9]依據(jù)原有架構(gòu),將SGX的安全特性與vTPM結(jié)合,提出了vTSE,其架構(gòu)如圖3所示。硬件層上,使用了支持Intel SGX擴(kuò)展的處理器;SGX 安全區(qū)實(shí)例中的代碼和數(shù)據(jù)及SGX相關(guān)的數(shù)據(jù)結(jié)構(gòu)都存儲在EPC中,其范圍和大小在系統(tǒng)啟動時由BIOS進(jìn)行設(shè)置。內(nèi)核層上,通過英特爾提供的SGX驅(qū)動程序,為應(yīng)用層提供創(chuàng)建安全區(qū),實(shí)現(xiàn)添加/移除安全區(qū)頁面、銷毀安全區(qū)等功能。應(yīng)用層上,虛擬機(jī)硬件由Qemu模擬,通過調(diào)用運(yùn)行在SGX安全區(qū)中的vTPM庫為客戶機(jī)虛擬出TPM設(shè)備,由SGX為vTPM庫提供動態(tài)保護(hù)。
圖3 vTSE架構(gòu)Figure 3 vTSE architecture
(3)SGX與Hybrid Memory Safety內(nèi)存安全技術(shù)結(jié)合
當(dāng)前對于數(shù)據(jù)安全和隱私保護(hù)的合規(guī)性要求日漸提升,如何對用戶隱私進(jìn)行保護(hù)、對數(shù)據(jù)安全可控已經(jīng)成為廣泛的需求,MesaTEE正是應(yīng)運(yùn)而生的一個創(chuàng)新性的通用計算平臺。百度與英特爾聯(lián)合,將SGX以及其他可信計算技術(shù)和混合內(nèi)存安全技術(shù)結(jié)合在一起,構(gòu)建了完整的FaaS通用計算框架,形成了一個可信計算平臺MesaTEE,通過利用包括Intel SGX在內(nèi)的TEE,安全地將云用戶的數(shù)據(jù)和代碼執(zhí)行隔離、加密。即使云計算環(huán)境中的操作系統(tǒng)、虛擬機(jī)管理器或相鄰的其他虛擬機(jī)被攻破,這些數(shù)據(jù)代碼的完整性和保密性能夠得到保障,用戶也可以遠(yuǎn)程對這些安全保護(hù)進(jìn)行驗(yàn)證。除了遠(yuǎn)程可驗(yàn)證的隔離手段,MesaTEE還實(shí)現(xiàn)了全球首次在SGX TEE中使用內(nèi)存安全語言和不可繞過編程范式,確保SGX安全區(qū)中的代碼不會因?yàn)閮?nèi)存問題被攻破,從內(nèi)外兩個維度封殺了攻擊者突防的可能性[10]。
Intel SGX在應(yīng)用程序中的部署主要分為本地、服務(wù)端和客戶端。對于獨(dú)立運(yùn)行在本地的程序,SGX無須與遠(yuǎn)程進(jìn)行交互。目前主要用Intel SGX存儲服務(wù)器的敏感數(shù)據(jù)。在客戶端的應(yīng)用較少,主要通過SGX對客戶端軟件的完整性和安全性進(jìn)行校驗(yàn)。同時部署在客戶端和服務(wù)器端的應(yīng)用可以通過SGX實(shí)現(xiàn)遠(yuǎn)程認(rèn)證。
(1)SGX應(yīng)用于本地
SGX本身作為一種可信計算技術(shù),能夠很好地與系統(tǒng)功能融合,保障系統(tǒng)敏感數(shù)據(jù)的存儲安全。例如,系統(tǒng)日志作為捕獲操作系統(tǒng)或程序行為的最大法證資產(chǎn),一旦系統(tǒng)受到威脅,系統(tǒng)日志通常是下一個立即受到攻擊的目標(biāo),因此保護(hù)它們至關(guān)重要?;谶@一出發(fā)點(diǎn),Vishal等[11]將SGX與日志系統(tǒng)結(jié)合,設(shè)計出SGX-Log,這是一種新的日志記錄系統(tǒng)SGX-Log,可確保日志數(shù)據(jù)的完整性和機(jī)密性,其關(guān)鍵思想是利用SGX提供的具有密封和啟封原語的安全區(qū)域,保護(hù)內(nèi)存和磁盤中的程序代碼和數(shù)據(jù)不被未經(jīng)授權(quán)修改。SGX-Log使用客戶端和服務(wù)器架構(gòu)??蛻魴C(jī)是一個日志請求組件,它發(fā)出各種日志消息,而日志服務(wù)器執(zhí)行安全日志服務(wù)。SGX-Log提供了啟用SGX的日志服務(wù)器的詳細(xì)設(shè)計、實(shí)現(xiàn)和評估。由于SGX安全區(qū)可用的內(nèi)存有限,以及與不可信代碼交互的成本,必須設(shè)計一個日志系統(tǒng)來適應(yīng)這種情況。SGX-Log為如何有效地利用SGX對日志進(jìn)行保護(hù)提供了具體的結(jié)果和見解。
(2)SGX應(yīng)用于服務(wù)器端
SGX具有最高安全權(quán)限的特性使SGX在保證敏感數(shù)據(jù)安全性、完整性方面具有巨大的優(yōu)勢,而這種優(yōu)勢可以用來為服務(wù)器中用戶信息和證書之類的敏感信息提供安全存儲的服務(wù)。
相對于傳統(tǒng)支付而言,區(qū)塊鏈具有無須受信任的授權(quán)即可進(jìn)行操作的能力以及保障用戶隱私的功能。但是,區(qū)塊鏈支付的驗(yàn)證要求用戶下載并處理整個鏈,這對于資源受限的設(shè)備而言是不可行的。為了解決這個問題,大多數(shù)的區(qū)塊鏈系統(tǒng)支持輕量級客戶端,這些客戶端將大部分計算和存儲負(fù)擔(dān)外包給了完整的區(qū)塊鏈節(jié)點(diǎn)。但是,這樣的驗(yàn)證會泄露有關(guān)客戶交易的關(guān)鍵信息,從而破壞用戶隱私。Sinisa等[12]利用SGX安全區(qū)的可信執(zhí)行功能提出了一種保護(hù)比特幣中輕量客戶端隱私的新方法,來保護(hù)比特幣中輕量客戶端隱私,他們設(shè)計并實(shí)現(xiàn)了一個稱為BITE的系統(tǒng),該系統(tǒng)中的完整節(jié)點(diǎn)上的安全區(qū)可滿足輕客戶端的隱私保護(hù)請求。核心思想是在完整的節(jié)點(diǎn)中利用SGX 安全區(qū)的可信計算能力,讓一個不受信任的實(shí)體運(yùn)行帶有SGX安全區(qū)的完整節(jié)點(diǎn),并且SGX安全區(qū)對來自客戶端的交易確認(rèn)提供請求服務(wù),通過SGX技術(shù)提供代碼完整性和數(shù)據(jù)機(jī)密性。圖4展示了由完整節(jié)點(diǎn)組成的系統(tǒng)模型。當(dāng)輕量級客戶端想要獲取關(guān)于它的事務(wù)或地址時,可以連接到任何支持服務(wù)的完整節(jié)點(diǎn)FNj,并承載一個enclave Ej。完整節(jié)點(diǎn)下載并本地存儲整個區(qū)塊鏈(BC),基于它維護(hù)一個數(shù)據(jù)庫,其中包含所有未使用的事務(wù)輸出(UTXO)。
圖4 輕量級客戶機(jī)向安全區(qū)請求事務(wù)驗(yàn)證的工作流程Figure 4 Workflow for lightweight clients to request transaction validation from enclave
除了敏感信息之外,服務(wù)器端的數(shù)據(jù)庫也存在安全隱患,通過將數(shù)據(jù)庫納入SGX的保護(hù)下可以有效避免對數(shù)據(jù)庫的RING0攻擊。為此,Priebe等[13]研發(fā)了EnclaveDB,EnclaveDB通過將敏感數(shù)據(jù)(表、索引和其他元數(shù)據(jù))放置在受信任硬件(如Intel SGX)保護(hù)的安全區(qū)中來實(shí)現(xiàn)即使數(shù)據(jù)庫管理員是惡意的,攻擊者入侵了操作系統(tǒng)或虛擬機(jī)管理程序,或數(shù)據(jù)庫在不受信任的主機(jī)中運(yùn)行,EnclaveDB仍可以保證數(shù)據(jù)庫安全性的目的。EnclaveDB具有類似于傳統(tǒng)關(guān)系數(shù)據(jù)庫的編程模型,經(jīng)過授權(quán)的用戶可以創(chuàng)建表和索引,并使用SQL表示的存儲過程查詢表。與傳統(tǒng)數(shù)據(jù)庫不同,EnclaveDB提供了抵御黑客、惡意服務(wù)器管理員和數(shù)據(jù)庫管理員攻擊的安全性。如圖5所示,EnclaveDB通過將所有敏感數(shù)據(jù)(表、索引、查詢和其他中間狀態(tài))托管在enclave內(nèi)存中來保護(hù)數(shù)據(jù)庫狀態(tài)。這種設(shè)計選擇是可行的,因?yàn)镈RAM成本迅速下降,而且支持大型集群的系統(tǒng)的預(yù)期可用性很高。
圖5 EnclaveDB的體系結(jié)構(gòu)Figure 5 EnclaveDB’s architecture
(3)SGX應(yīng)用于客戶端
SGX在客戶端的應(yīng)用雖然較少,但是可以滿足軟件在客戶端的完整性和安全性認(rèn)證,可用于開發(fā)商向用戶客戶端的Intel SGX中下放許可證等版權(quán)信息。SGX客戶端應(yīng)用包括SGX的分布式客戶端應(yīng)用。
長期以來,計算機(jī)游戲的完整性和保密性一直是游戲開發(fā)商關(guān)注的問題,為了防止玩家作弊或獲得未經(jīng)授權(quán)的軟件復(fù)制,游戲廠商在反逆向上付出了大量的精力,Bauman等[14]利用SGX基于硬件的保證且可以維護(hù)軟件運(yùn)行態(tài)安全的功能來保護(hù)游戲的機(jī)密性和完整性,而且可能被廣泛部署在用戶機(jī)器上的特點(diǎn),提出了基于SGX保護(hù)游戲完整性和機(jī)密性的一般框架,該原型框架可以集成到現(xiàn)有的游戲中。
對于游戲軟件完整性的保證,由于不同的游戲有不同種類的信息,為了防止作弊,必須保護(hù)這些信息。為了完整性而必須保護(hù)的實(shí)際代碼或數(shù)據(jù)取決于被保護(hù)的特定游戲,找到目標(biāo)游戲的這些敏感代碼或數(shù)據(jù)后,必須將其轉(zhuǎn)移到安全區(qū)內(nèi)。當(dāng)用戶啟動應(yīng)用程序時,安全區(qū)將與受信任的服務(wù)器聯(lián)系并執(zhí)行遠(yuǎn)程認(rèn)證。通過驗(yàn)證的安全區(qū)則認(rèn)為其中的代碼和數(shù)據(jù)沒有被修改。保證敏感數(shù)據(jù)和代碼完整性的機(jī)制具體如圖6所示。
圖6 保證敏感數(shù)據(jù)和代碼完整性的機(jī)制Figure 6 Mechanisms to ensure the integrity of sensitive data and code
對于游戲軟件機(jī)密性的保證,如何處理游戲資產(chǎn)有兩種選擇。第一個選項是將解密的代碼或數(shù)據(jù)直接保存在安全區(qū)中,這對于少量關(guān)鍵代碼或數(shù)據(jù)非常適用。如果數(shù)據(jù)是加密的圖像,那么一次性將其全部保存在安全區(qū)中是不可行的。因此,第二個選項是立即將解密的數(shù)據(jù)返回到主內(nèi)存中的主應(yīng)用程序。在這種情況下,需要被隱藏的敏感數(shù)據(jù)并不是圖像,而是解密密鑰和加載機(jī)制。對于通常存儲在磁盤上的大型資產(chǎn),安全區(qū)可以簡單地密封解密密鑰。這通常不需要任何外部連接的單人游戲只需要一個連接來驗(yàn)證服務(wù)器并獲取解密密鑰。之后,就可以自動操作,而無須再次與服務(wù)器簽入。保證敏感數(shù)據(jù)和代碼機(jī)密性的機(jī)制如圖7所示。
圖7 保證敏感數(shù)據(jù)和代碼機(jī)密性的機(jī)制Figure 7 Mechanisms to ensure the confidentiality of sensitive data and code
客戶端JavaScript在Web應(yīng)用程序中無處不在,用于改善用戶體驗(yàn)和減少服務(wù)器負(fù)載。由于客戶端不受信任,服務(wù)器不能依賴客戶端JavaScript代碼和它操作的數(shù)據(jù)的機(jī)密性或完整性,如必須在服務(wù)器端重復(fù)客戶端輸入驗(yàn)證,并且不能卸載機(jī)密業(yè)務(wù)邏輯。所以,Goltzsche等[15]提出了TRUSTJS框架,利用由Intel SGX提供的可信硬件支持,以保護(hù)JavaScript的客戶端執(zhí)行,實(shí)現(xiàn)了Web應(yīng)用程序代碼的靈活分區(qū),使JavaScript可以在商品瀏覽器中可靠地執(zhí)行。
(4)SGX應(yīng)用于服務(wù)器端和客戶端
當(dāng)SGX同時部署在服務(wù)器端和客戶端時,SGX的遠(yuǎn)程認(rèn)證功能可以在同時具有SGX功能的服務(wù)器端和客戶端之間實(shí)現(xiàn)安全通信,馮達(dá)等[16]利用SGX可以存儲敏感數(shù)據(jù)并進(jìn)行遠(yuǎn)程認(rèn)證的功能,實(shí)現(xiàn)了服務(wù)器端和客戶端之間證書的安全交互,將SGX技術(shù)與數(shù)字簽名、加密技術(shù)相融合,實(shí)現(xiàn)了證書可信性驗(yàn)證與軟件安全簽發(fā)系統(tǒng)。
在多方計算領(lǐng)域,SGX的出現(xiàn)提供了新的安全思路。Olga等[17]提出了一種基于可信SGX處理器的保密性多方機(jī)器學(xué)習(xí)系統(tǒng)。在該系統(tǒng)中,多方在一個聯(lián)合的機(jī)器學(xué)習(xí)任務(wù)上執(zhí)行它們的聚合數(shù)據(jù),并在一個啟用SGX的數(shù)據(jù)中心上運(yùn)行該任務(wù)。每一方都獨(dú)立地與安全區(qū)建立一個安全通道,用于對自己進(jìn)行身份驗(yàn)證,并可以獨(dú)立地與云提供商交互,使用遠(yuǎn)程認(rèn)證的功能來確認(rèn)SGX處理器是該數(shù)據(jù)中心的一部分,檢查加載到安全區(qū)的代碼和靜態(tài)數(shù)據(jù)的完整性。每一方都使用一個單獨(dú)的、本地生成的密鑰來加密自己的輸入數(shù)據(jù)集,并使用其安全通道與安全區(qū)共享該密鑰。如圖8所示,基于這個系統(tǒng)可以實(shí)現(xiàn)多家醫(yī)院用不同的密鑰加密患者數(shù)據(jù)集。醫(yī)院在云數(shù)據(jù)中心的安全區(qū)中部署一種商定的機(jī)器學(xué)習(xí)算法,并與安全區(qū)共享它們的數(shù)據(jù)密鑰。安全區(qū)處理聚合數(shù)據(jù)集并輸出加密后的機(jī)器學(xué)習(xí)模型。
圖8 多家醫(yī)院用不同的密鑰加密患者數(shù)據(jù)集Figure 8 Multiple hospitals encrypt patient data sets with different keys
雖然研究人員提出了許多基于SGX提高應(yīng)用程序安全性的解決方案,但思路大多是保護(hù)本機(jī)代碼應(yīng)用程序,而腳本語言并不受保護(hù)。為了填補(bǔ)這一空白,Wang等[18]提出了SCRIPTSHIELD,這是一個能夠向后兼容的應(yīng)用程序執(zhí)行框架,通過在SGX enclaves內(nèi)執(zhí)行腳本語言解釋器,自動確保腳本的機(jī)密性和完整性,核心思想是自定義腳本解釋器,使其在SGX安全區(qū)中運(yùn)行并將腳本傳遞給它。
雖然對SGX的研究進(jìn)行了多年,技術(shù)已經(jīng)趨于成熟,甚至已經(jīng)投入工業(yè)界的實(shí)際使用,但現(xiàn)階段SGX在可信計算領(lǐng)域的開發(fā)和應(yīng)用并沒有呈現(xiàn)出與它熱度相匹配的前景,這主要有兩個原因,一個是SGX本身的開發(fā)和應(yīng)用難度限制了研究人員對它的應(yīng)用,另一個是SGX與其他可信技術(shù)相比在應(yīng)用中有較多問題需要解決。
SGX技術(shù)自推出以來受到了學(xué)術(shù)界和工業(yè)界的極大關(guān)注,目前在很多領(lǐng)域得到了廣泛的應(yīng)用,SGX技術(shù)在研究中暴露出了很多缺陷和問題,如各類針對SGX的側(cè)信道攻擊表明SGX技術(shù)當(dāng)前還存在很多安全隱患。事實(shí)上,除了安全性問題,SGX在研究過程中還暴露出了許多性能瓶頸、開發(fā)和部署困難、功能局限等諸多應(yīng)用方面的問題。當(dāng)前以SGX作為可信基的系統(tǒng)設(shè)計及應(yīng)用主要面臨性能、安全性、開發(fā)難度和應(yīng)用3個方向的挑戰(zhàn)。
4.1.1性能
SGX作為可信基的性能開銷,主要是從模式切換、Enclave頁替換和內(nèi)存加密3個方面產(chǎn)生的[19]。
(1)模式切換
模式切換是SGX最主要的性能開銷,但也是SGX能夠在安全區(qū)中執(zhí)行代碼的基本保障機(jī)制。系統(tǒng)進(jìn)入或退出安全區(qū)都會產(chǎn)生模式切換,模式切換開銷的主要原因是出于對安全性的保證,每一次模式切換都要進(jìn)行復(fù)雜的狀態(tài)保存和安全檢查、保存和恢復(fù) CPU 狀態(tài),并在安全區(qū)和不可信軟件進(jìn)行上下文切換時刷新CPU核心的TLB,由此產(chǎn)生了大量的性能消耗。
當(dāng)SGX作為可信計算基時,對安全區(qū)內(nèi)數(shù)據(jù)和代碼的每一次訪問和執(zhí)行都會導(dǎo)致模式切換的產(chǎn)生,如果系統(tǒng)被設(shè)計為需要在安全區(qū)和非安全區(qū)之間進(jìn)行大量的數(shù)據(jù)調(diào)用,那么產(chǎn)生的性能開銷相對會較高。
降低模式切換開銷的技術(shù)主要有:無切換調(diào)用[20]、增加操作系統(tǒng)庫和函數(shù)庫減少模式切換[21]和輕量級細(xì)粒度的并行減少安全區(qū)之間模式轉(zhuǎn)換[22]。
(2)Enclave頁替換
由于安全區(qū)內(nèi)存空間比較小,SGX支持從EPC到主內(nèi)存的頁替換,以滿足不適合EPC的安全區(qū),所以當(dāng)程序代碼數(shù)量和規(guī)模增大時,敏感頁面會在內(nèi)存中的EPC和非EPC區(qū)域之間頻繁交換,從而產(chǎn)生了開銷巨大的Enclave頁替換開銷。內(nèi)存要求超過 EPC大小的應(yīng)用程序必須在EPC和未受保護(hù)的內(nèi)存之間替換頁面。出于對安全性的要求,EPC頁必須在被復(fù)制到外部內(nèi)存之前被加密和完整性保護(hù),工作量較大,代價高昂。為了防止地址轉(zhuǎn)換攻擊,需要替換協(xié)議中所有enclave線程并刷新TLB。不僅如此,頁替換還會導(dǎo)致enclave模式的切換,進(jìn)而產(chǎn)生模式切換開銷。
雖然SGX的開發(fā)原則中始終強(qiáng)調(diào)最小特權(quán)原則,但是當(dāng)SGX作為可信計算基時,并不僅僅起著對數(shù)據(jù)進(jìn)行安全存儲的作用,它還能夠?yàn)榘踩珔^(qū)內(nèi)運(yùn)行的程序提供機(jī)密性和完整性的保護(hù)。通過在安全區(qū)內(nèi)存儲盡量多的數(shù)據(jù)和運(yùn)行的代碼量,來減少安全區(qū)和非安全區(qū)之間的交互,雖然可以提升性能,但是增加了攻擊面。如何在安全性和性能之間進(jìn)行平衡是基于SGX的系統(tǒng)在設(shè)計中亟待解決的重點(diǎn)、難點(diǎn)。
針對頁替換開銷的主要技術(shù)是高效的完整性驗(yàn)證結(jié)構(gòu)、減少分頁開銷技術(shù)和安全用戶管理虛擬內(nèi)存技術(shù),未來,這一性能開銷限制可能會從根本上得到改善:雖然目前SGX v1版本支持的安全區(qū)最大為128 MB,應(yīng)用程序?qū)嶋H的使用量一旦超過93 MB就會觸發(fā)頻繁的頁替換,增加安全風(fēng)險和性能開銷,但在SGX v2[23]中可能可以支持安全區(qū)擴(kuò)展到整個內(nèi)存。
(3)內(nèi)存加密
SGX通過內(nèi)存加密技術(shù)保護(hù)程序運(yùn)行時的安全,MEE必須加密和解密高速緩存線,會導(dǎo)致加密內(nèi)存訪問存在高昂的開銷,安全區(qū)代碼也會由于寫入內(nèi)存和高速緩存未命中產(chǎn)生開銷,這就是內(nèi)存加密開銷。
SGX作為可信計算基除了存儲敏感數(shù)據(jù)的功能外,和其他傳統(tǒng)可信計算技術(shù)相比,最大的優(yōu)勢就是能夠保證安全區(qū)內(nèi)程序運(yùn)行過程中的安全,而這一重要功能必須靠內(nèi)存加密技術(shù)來保障,無法繞過內(nèi)存加密產(chǎn)生的性能開銷問題。SCONE[3]使用SGX SDK微基準(zhǔn)測試評估了在安全區(qū)中進(jìn)行順序讀/寫和隨機(jī)讀/寫操作的時間開銷,得出“在EPC大小范圍內(nèi)幾乎沒有內(nèi)存訪問開銷,而超出EPC大小的內(nèi)存訪問有2倍左右性能開銷”的結(jié)論。Eleos[24]通過生成10萬個隨機(jī)數(shù)證明內(nèi)存隨機(jī)訪問和連續(xù)訪問,以及讀和寫操作的開銷相近,介于5.6倍到9.5倍開銷之間。這些實(shí)驗(yàn)說明了內(nèi)存加密開銷是SGX設(shè)計本身導(dǎo)致的,難以進(jìn)一步優(yōu)化。
基于SGX的應(yīng)用目前只能通過減少對安全區(qū)的不必要使用和使用節(jié)省空間的數(shù)據(jù)結(jié)構(gòu)或?qū)⑤^小的數(shù)據(jù)塊加載到安全區(qū)中來緩解開銷。安全程序設(shè)計應(yīng)盡量減少對安全區(qū)內(nèi)存的使用和訪問來降低內(nèi)存訪問開銷。如果必須使用安全區(qū)內(nèi)存,則盡量采用連續(xù)訪問的數(shù)據(jù)結(jié)構(gòu),避免采用隨機(jī)訪問的數(shù)據(jù)結(jié)構(gòu)。
4.1.2安全性
在安全性方面,SGX雖然在原則上可以作為可信執(zhí)行環(huán)境,但是近年來大量的工作表明,SGX自身的機(jī)制導(dǎo)致它的安全區(qū)很容易被各類攻擊攻破,通過攻擊獲得的敏感數(shù)據(jù)可以幫助攻擊者繞過SGX提供的數(shù)據(jù)機(jī)密性保證。一旦可信計算機(jī)基的某個構(gòu)件出現(xiàn)程序錯誤或者安全隱患,會對整個系統(tǒng)的安全造成危害,SGX的設(shè)計目的是為安全區(qū)內(nèi)的敏感數(shù)據(jù)提供機(jī)密性和完整性保證,現(xiàn)階段它在實(shí)際應(yīng)用中依然會面臨諸多的安全漏洞和威脅,這也是SGX無法投入實(shí)際應(yīng)用的重要原因之一。
(1)SGX自身安全缺陷
由于SGX的設(shè)計機(jī)制和微架構(gòu)帶來的安全問題,針對SGX本身的安全攻擊主要分為側(cè)信道攻擊和高低電壓攻擊高低頻率攻擊兩類。
基于SGX常見的側(cè)信道攻擊有6類,分別是基于頁表的攻擊、基于TLB的攻擊、基于Cache的攻擊、基于DRAM的攻擊、基于CPU內(nèi)部結(jié)構(gòu)的攻擊和混合側(cè)信道攻擊,如較為經(jīng)典的Meltdown[25]、SgxPectre[26]、Foreshadow[27]和RIDL[28]攻擊。
現(xiàn)階段針對側(cè)信道攻擊的解決方法主要有4種:第一種是在源碼層次修改源碼,主要思路是隱藏控制流和數(shù)據(jù)流、改善加密算法;第二種是在系統(tǒng)層次利用一些系統(tǒng)特性來防御或檢測SGX側(cè)信道,如隨機(jī)化技術(shù)、檢測可疑異常和中斷、檢測時間異常、對Cache隔離;第3種是在應(yīng)用層面引入安全機(jī)制,防范側(cè)信道攻擊(如Oleksii 等[29]提出了Varys系統(tǒng)),它可以保護(hù)在SGX安全區(qū)中運(yùn)行的未修改的程序免受緩存計時和頁表側(cè)通道攻擊,Varys通過將物理內(nèi)核嚴(yán)格保留給安全敏感的線程,從而防止攻擊者在安全區(qū)執(zhí)行期間訪問共享的CPU資源;第4種是在硬件層面進(jìn)行硬件分割或者硬件隔離,但是這種方法會顯著增加硬件復(fù)雜度,影響功耗和性能。
除了側(cè)信道攻擊外,高低電壓攻擊高低頻率攻擊也能通過恢復(fù)加密密鑰或在以前安全的軟件中引入錯誤來達(dá)到破壞SGX安全性的目的。現(xiàn)代處理器正以更快的速度運(yùn)行,隨之而來的是熱量和功耗的增加。為了平衡速度和性能,許多芯片制造商允許用戶在需要時調(diào)整頻率和電壓,但是隨之而來的安全問題是用來修改頻率和電壓的特權(quán)軟件界面,可能會被利用來破壞系統(tǒng)的安全性。例如,Plundervolt[30]攻擊會通過執(zhí)行安全區(qū)計算時的電壓,破壞處理器上 SGX的完整性。在安全區(qū)計算期間,Plundervolt會仔細(xì)控制處理器的電源電壓,從而在處理器封裝內(nèi)引起可預(yù)測的故障。因此,即使是Intel SGX的內(nèi)存加密/身份驗(yàn)證技術(shù)也無法防范Plundervolt攻擊。
針對這一攻擊,英特爾發(fā)布了相關(guān)微代碼和BIOS更新。這些更新為管理員提供了一個新的BIOS選項,可以在管理員認(rèn)為Plundervolt構(gòu)成真正風(fēng)險的情況下禁用系統(tǒng)上的電壓和頻率控制界面。
(2)基于SGX軟件的安全缺陷
除了SGX自身設(shè)計機(jī)制帶來的攻擊以外,基于SGX的應(yīng)用可能由于設(shè)計過程中的忽略而存在安全缺陷,如接口安全和反匯編產(chǎn)生的敏感代碼安全性問題。
很多基于SGX的應(yīng)用軟件及框架設(shè)計有眾多缺陷。這些軟件架構(gòu)設(shè)計上的疏忽使攻擊者無須權(quán)限,即可繞過SGX安全區(qū)的嚴(yán)密封鎖,獲取存儲在SGX安全區(qū)中的核心敏感數(shù)據(jù)。Coin Attack[31]的出現(xiàn),揭示了SGX在接口安全的維度的弱點(diǎn)。
針對這一對接口安全進(jìn)行攻擊的方式,百度安全實(shí)驗(yàn)室開發(fā)了一個名為Coin Attack的檢測框架,通過符號執(zhí)行的方法,可以捕獲各種各樣的漏洞,強(qiáng)調(diào)了基于SGX的應(yīng)用不能僅依賴于SGX的強(qiáng)隔離保證,還需要對軟件架構(gòu)細(xì)心設(shè)計,確保健壯安全的接口調(diào)用方式。開發(fā)者如果忽視軟件中的接口安全,整個SGX安全區(qū)的安全保障都會喪失。
雖然Intel SGX提供了一個安全的區(qū)域,其中的代碼和數(shù)據(jù)對外界是隱藏的,包括特權(quán)代碼,但在默認(rèn)情況下,初始化之前的安全區(qū)代碼可以反匯編,因此二進(jìn)制代碼中不能嵌入任何秘密。對于希望保護(hù)代碼機(jī)密的開發(fā)人員來說,這是一個問題。對此,Bauman等[32]開發(fā)了SGXElide,這是一個幾乎透明的框架,可實(shí)現(xiàn)安全區(qū)代碼的機(jī)密性。SGXElide通過將程序代碼視為數(shù)據(jù),并在初始化安全區(qū)域后動態(tài)還原機(jī)密來提供一種機(jī)制,可以在開發(fā)人員控制的受信任遠(yuǎn)程方的協(xié)助下安全地解密或傳遞密碼。
4.1.3開發(fā)和應(yīng)用難度
在開發(fā)和應(yīng)用難度方面,SGX作為最新的可信計算技術(shù),雖然在思想和部分機(jī)制上借鑒了傳統(tǒng)的可信計算技術(shù),但是在開發(fā)和應(yīng)用上要求更為煩瑣,較難上手。同時,基于SGX技術(shù)開發(fā)的軟件在設(shè)計上要求做到性能和安全性之間的平衡,在不影響用戶體驗(yàn)的前提下保證敏感數(shù)據(jù)都被存儲在安全區(qū)內(nèi),這對程序員對程序安全性的劃分能力要求較高。對于已經(jīng)完成的系統(tǒng),需要對系統(tǒng)代碼進(jìn)行修改才能在SGX上使用,可移植性較差。
(1)開發(fā)環(huán)境
對于一些研究人員缺乏SGX開發(fā)環(huán)境的問題,Jain等[33]開發(fā)了名為OpenSGX的開源平臺,該平臺在指令級別上模擬Intel SGX硬件組件,并提供了全面TEE探索所需的新系統(tǒng)軟件組件。這個開源平臺開發(fā)了Intel SGX的全功能,指令兼容的仿真器,用于探索軟件/硬件設(shè)計空間以及開發(fā)安全區(qū)程序。OpenSGX為SGX開發(fā)提供了一個平臺,不僅提供仿真,而且提供操作系統(tǒng)組件、安全區(qū)程序加載器/打包器、OpenSGX用戶庫、調(diào)試和性能監(jiān)控。由于其用戶模式仿真,其系統(tǒng)級別的支持在很大限度上受到限制。針對使用OpenSGX無法進(jìn)行需要系統(tǒng)功能或設(shè)備仿真實(shí)驗(yàn)的問題,Choi等[34]推出優(yōu)化了System-OpenSGX(S-OpenSGX),該系統(tǒng)利用QEMU的系統(tǒng)仿真為研究人員提供全面的系統(tǒng)級支持,以探索基于SGX安全區(qū)的編程。
(2)開發(fā)語言
對于SGX開發(fā)語言類型有限的問題,開發(fā)人員開發(fā)出了Rust SGX SDK[35]、MesaPy[36]、GOTEE[37]等安全開發(fā)語言。百度安全實(shí)驗(yàn)室將Rust語言和SGX技術(shù)結(jié)合,開發(fā)出了Rust SGX SDK,開發(fā)人員使用Rust語言可以快速開發(fā)出沒有內(nèi)存安全漏洞的SGX應(yīng)用程序,避免敏感數(shù)據(jù)被竊取。MesaPy是百度安全實(shí)驗(yàn)室開發(fā)的一個內(nèi)存安全的Python實(shí)現(xiàn)。通過使用內(nèi)存安全語言重寫外部庫和形式化驗(yàn)證保障代碼的內(nèi)存安全等方法全面提升Python解釋器的安全性,避免內(nèi)存問題引發(fā)的高危安全漏洞。基于這些安全特性,MesaPy可以讓開發(fā)者使用Python輕松地進(jìn)行SGX開發(fā)。Ghosn等通過擴(kuò)展Go語言,允許開發(fā)人員依靠編譯器自動提取安全代碼和數(shù)據(jù),將可信執(zhí)行環(huán)境繼承到了語言中,增強(qiáng)了SGX的可用性。
(3)開發(fā)難度
對于SGX技術(shù)缺少針對安全區(qū)間交互的適當(dāng)編程支持,并且要求將可信執(zhí)行的確切使用方式硬編碼到應(yīng)用程序中的限制問題,Sartakov等[22]提出了EActor框架,這種為SGX量身定做的Actor框架能夠提供對可信執(zhí)行的更無縫、更靈活和更高效的使用,支持低成本的多安全區(qū)編程和交互。
(4)可移植性
對于已經(jīng)編寫完成的程序,開發(fā)人員推出了Haven[2]、Panoply[38]和Graphene-SGX[39],能夠讓傳統(tǒng)App不需要修改代碼即可在SGX中運(yùn)行。其中較為完善的是螞蟻集團(tuán)使用Rust語言編寫的Occlum[40],將庫操作系統(tǒng)引入了SGX,從而使遺留應(yīng)用程序可以在安全區(qū)域內(nèi)運(yùn)行而幾乎不需要修改的基礎(chǔ)上,通過將LibOS流程實(shí)現(xiàn)為SFI隔離流程的方式增加安全高效的多任務(wù)處理功能。
除了SGX自身在性能、安全性和開發(fā)及應(yīng)用方面的問題以外,和其他的可信基相比,SGX獨(dú)特的機(jī)制既帶來了優(yōu)勢,也導(dǎo)致了它在開發(fā)和應(yīng)用上存在局限性。
(1)TPM/TCM
在開發(fā)和應(yīng)用方面,TPM是當(dāng)前可信計算領(lǐng)域應(yīng)用最為常見的可信基,廣泛部署在商用計算機(jī)上,不需要對CPU進(jìn)行修改,僅依賴于一個輔助的抗篡改芯片,而SGX直接集成在CPU內(nèi)部,性能較TPM得到了提升。相比于SGX,TPM的可信計算基范圍更大,TPM信任計算機(jī)上的所有軟件,而SGX僅信任安全區(qū),可信計算基的范圍雖然使TPM可度量的范圍更大,但也導(dǎo)致認(rèn)證簽名中包含的度量覆蓋了整個OS內(nèi)核和所有內(nèi)核模塊,因此需要隨著軟件更新持續(xù)維護(hù)對應(yīng)的可接受測量的哈希表,實(shí)際應(yīng)用較為煩瑣復(fù)雜。
在安全性方面,由于TPM晶片沒有為計算機(jī)上的軟件提供任何隔離,所以基于TPM的系統(tǒng)容易受到物理訪問機(jī)器的攻擊者的攻擊[41],且TPM作為外掛部件只能被動調(diào)用,不能進(jìn)行主動度量[42]。SGX在安全性方面雖然也有很多攻擊問題亟待解決,但與TPM相比,SGX不僅可以保障敏感數(shù)據(jù)存儲安全,還可以確保安全區(qū)內(nèi)部軟件運(yùn)行態(tài)的安全。
(2)Intel TXT
在開發(fā)和應(yīng)用方面,英特爾的可信執(zhí)行技術(shù)(TXT)使用了TPM的軟件認(rèn)證模型和輔助抗篡改芯片,但將安全容器內(nèi)的軟件減少為一個虛擬機(jī),由CPU的硬件虛擬化特性(VMX[43])托管,主要用于配合英特爾新一代的虛擬化技術(shù)來保護(hù)虛擬化運(yùn)算環(huán)境下的數(shù)據(jù)。TXT技術(shù)保護(hù)的對象可以理解為整個操作系統(tǒng),而SGX技術(shù)保護(hù)的對象是應(yīng)用程序運(yùn)行時的一部分代碼和相應(yīng)的地址空間。與Intel TXT技術(shù)相比,由于SGX的可信范圍較小,只支持RING3指令,導(dǎo)致SGX無法實(shí)現(xiàn)在不受信任的操作系統(tǒng)下訪問磁盤的這類操作,所以TXT的適用范圍相較于SGX而言更廣。
在安全性方面,TXT沒有實(shí)現(xiàn)DRAM加密或HMAC,因此容易受到物理DRAM攻擊,而且hypervisor潛在的軟件漏洞可能威脅到整個系統(tǒng),運(yùn)行在系統(tǒng)管理模式下的軟件可以繞過VMX使用的限制來提供隔離。但與SGX相比TXT攻擊面較少,且TXT能夠檢測VMM的運(yùn)行狀況,保證虛擬設(shè)備的正常運(yùn)行,而SGX對于運(yùn)行在安全區(qū)內(nèi)部的軟件并沒有監(jiān)管能力。
(3)ARM TrustZone
在開發(fā)和應(yīng)用方面,與開放了SDK的SGX相比,TrustZone需要硬件廠商的簽名驗(yàn)證才能運(yùn)行在安全執(zhí)行環(huán)境,這限制了開發(fā)人員基于TrustZone進(jìn)行研究和開發(fā)。TrustZone為程序提供了TEE和REE兩種隔離的執(zhí)行環(huán)境,只有一個可信環(huán)境,而SGX可以同時運(yùn)行多個可信環(huán)境,這限制了TrustZone的應(yīng)用面。雖然在開發(fā)上有限制,但是TrustZone被設(shè)計為在系統(tǒng)加電后優(yōu)先獲得控制權(quán),并且擁有比主機(jī)更高的訪問和控制權(quán)限[44],因此TrustZone比SGX更貼合可信計算3.0“主動防御體系”對主機(jī)系統(tǒng)進(jìn)行主動訪問和監(jiān)控以及系統(tǒng)上電時代碼可信性的功能要求,在可信計算3.0領(lǐng)域具有設(shè)計上的優(yōu)勢。
在安全性方面,SGX與TrustZone相比雖然可以多個安全區(qū)并發(fā)執(zhí)行,且原則上即使某個安全區(qū)中存在惡意程序,也無法訪問或篡改其他安全區(qū)內(nèi)被保護(hù)的內(nèi)容,使隔離環(huán)境的安全性雖然有所提高,但是依然有缺陷。TrustZone具有對非安全世界進(jìn)行監(jiān)視的系統(tǒng),這些監(jiān)視系統(tǒng)擁有高權(quán)限,可以動態(tài)地檢查Android系統(tǒng)的內(nèi)核本身[45],也可以代替Android內(nèi)核來管理非安全世界的內(nèi)存。而SGX缺乏對平臺上惡意軟件的識別和隔離,這就導(dǎo)致實(shí)際應(yīng)用時無法檢測安全區(qū)內(nèi)部運(yùn)行著的是否為惡意程序,也無法對惡意程序可能竊取其他安全區(qū)的敏感數(shù)據(jù)的行為進(jìn)行阻止。
(4)AMD SEV
在開發(fā)和應(yīng)用方面,SEV的最小可信基比SGX更大,包含整個操作系統(tǒng)或者虛擬機(jī),所以在設(shè)計上SEV比SGX更適合用來保護(hù)大規(guī)模的計算環(huán)境,且SEV允許每個虛擬機(jī)使用自己的密鑰選擇性地加密內(nèi)存,這使SEV能夠?yàn)椴豢尚旁骗h(huán)境下的數(shù)據(jù)提供安全保護(hù)[46],更適用于云計算的應(yīng)用場景。
在安全性方面,相比SGX通過內(nèi)存管理單元來實(shí)現(xiàn)內(nèi)存安全,SEV使用了安全內(nèi)存加密(SME)來加密VM內(nèi)存,防止物理攻擊和特權(quán)軟件攻擊。但SEV較大的信任范圍導(dǎo)致了較大的攻擊面,當(dāng)SEV的應(yīng)用環(huán)境為不可信的虛擬機(jī)管理程序時,惡意的虛擬機(jī)監(jiān)控器可以通過修改相關(guān)的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)繞過甚至直接關(guān)閉SEV的保護(hù)機(jī)制。雖然SME對內(nèi)存進(jìn)行了加密保護(hù),但SEV缺乏對主存儲器逐頁加密的完整性保護(hù)機(jī)制,由此產(chǎn)生的SEVered攻擊使攻擊者能夠訪問經(jīng)由SEV加密之后虛擬機(jī)上的明文內(nèi)存數(shù)據(jù)。并且,SEV提供的保護(hù)不足以覆蓋虛擬機(jī)的整個生命周期,在設(shè)計上同樣沒有考慮到側(cè)信道攻擊,存在較大的安全隱患。
綜上所述,雖然SGX與其他可信計算技術(shù)相比在設(shè)計機(jī)制上更加靈活,且便于開發(fā)者進(jìn)行應(yīng)用開發(fā),但是可信根范圍的局限性和亟待解決的安全性問題導(dǎo)致SGX與其他可信計算技術(shù)相比沒有突出優(yōu)勢,在很多場景下其他的可信計算技術(shù)更符合場景要求,以至于SGX在可信計算領(lǐng)域并沒有呈現(xiàn)出與其熱度相匹配的應(yīng)用量。
自2013年英特爾公司推出SGX技術(shù)以來,SGX技術(shù)在學(xué)術(shù)界和工業(yè)界引發(fā)了廣泛的研究浪潮,并被陸續(xù)應(yīng)用到了很多領(lǐng)域。目前,雖然SGX作為可信計算基,在以云計算為代表的各領(lǐng)域內(nèi)開發(fā)和應(yīng)用發(fā)展迅速,但是在可信計算領(lǐng)域的研究并沒有達(dá)到符合預(yù)期的水平,尚缺乏安全、有效、徹底的應(yīng)用方案?;谝陨涎芯窟M(jìn)展,本文提出了SGX在可信計算研究領(lǐng)域的進(jìn)一步應(yīng)用需求和研究方向。
SGX本身的安全漏洞是SGX在可信計算領(lǐng)域發(fā)展中面臨的最根本問題,如果無法解決安全問題,SGX就不能作為可信計算基為上層架構(gòu)提供安全保證。如何有效解決SGX 應(yīng)用面臨的側(cè)信道攻擊、內(nèi)存攻擊等安全威脅,增強(qiáng)SGX應(yīng)用的安全性依然是該技術(shù)應(yīng)用研究的重要研究方向。由于SGX在安全區(qū)和非安全區(qū)之間共享資源而產(chǎn)生了攻擊面的設(shè)計機(jī)制,當(dāng)前的SGX自身無法抵御側(cè)信道攻擊?,F(xiàn)階段,在軟件層面打補(bǔ)丁以及升級微碼等解決方案無法從根本上解決SGX應(yīng)對側(cè)信道攻擊的問題,而通過引入安全機(jī)制來防范側(cè)信道攻擊又會引發(fā)額外的性能開銷,故可以通過將SGX與外界的輸入輸出進(jìn)行加密、創(chuàng)建檢查點(diǎn)等方式提高SGX應(yīng)對攻擊的能力。
除了要面對外部諸如電源攻擊之類的威脅,SGX還需要面對安全區(qū)內(nèi)部惡意程序的威脅。SGX無法對運(yùn)行在安全區(qū)中的軟件進(jìn)行監(jiān)管,惡意軟件可能會在安全區(qū)內(nèi)執(zhí)行其惡意代碼,來達(dá)到獲取敏感數(shù)據(jù)甚至安全區(qū)密鑰的目的,從而能夠有效地繞過SGX提供的整體安全性措施。針對這一問題,未來的發(fā)展可以參考TrustZone的監(jiān)管模式,引入監(jiān)控的思想,如當(dāng)監(jiān)控器檢測到可能導(dǎo)致攻擊行為的異常指令時,強(qiáng)制開啟AEX,中止安全區(qū)的運(yùn)行,思路如圖9所示。
圖9 SGX監(jiān)控模式流程Figure 9 Flow chart of SGX monitoring mode
隨著SGX v2對性能的提升以及廣大研究人員不斷開發(fā)出降低性能損耗的技術(shù),基于SGX開發(fā)的應(yīng)用在性能上的消耗減少了很多。但對于需要進(jìn)行安全區(qū)和非安全區(qū)多次交互的程序,為了保證安全性,需要對頁面進(jìn)行完整性和機(jī)密性保障,這導(dǎo)致SGX的模式切換消耗依然很高。SGX現(xiàn)階段的密鑰管理同樣面臨著性能問題,即較為復(fù)雜的場景中實(shí)用性較低,未來需要更高效的解決方案。當(dāng)SGX作為可信計算基在對系統(tǒng)或軟件進(jìn)行完整性校驗(yàn)、對敏感數(shù)據(jù)進(jìn)行存取和安全區(qū)內(nèi)代碼運(yùn)行時都會產(chǎn)生大量的性能消耗,如果這些性能消耗問題無法得到優(yōu)化,那么用戶體驗(yàn)會受到較為明顯的影響??梢酝ㄟ^優(yōu)化加密內(nèi)存頁管理或改良頁面完整性校驗(yàn)方法等手段減少性能消耗。
SGX技術(shù)自誕生以來,自身設(shè)計和對Intel ME一些代碼模塊的依賴以及處理器架構(gòu)產(chǎn)生的漏洞對安全性的影響,讓用戶無法完全信任SGX技術(shù)。并且,SGX遠(yuǎn)程認(rèn)證功能的實(shí)現(xiàn)需要以信任Intel為前提,依賴于Intel IAS進(jìn)行遠(yuǎn)程認(rèn)證,但用戶并無法對ISA進(jìn)行監(jiān)管,這使用戶對SGX的可信性和安全區(qū)內(nèi)數(shù)據(jù)的安全性會產(chǎn)生懷疑。雖然在后續(xù)工作中英特爾通過引入新特性FLC(flexible launch control)開放了第三方證明服務(wù),開始支持第三方的加載和遠(yuǎn)程認(rèn)證技術(shù),使開發(fā)者可以脫離Intel IAS管控的相關(guān)限制。但固件的不可審計依然令很多用戶感到擔(dān)憂,現(xiàn)階段的SGX無法讓用戶應(yīng)對硬件廠商在出售設(shè)備時植入惡意代碼的情況,未來可以針對固件建立機(jī)密性、完整性和可用性的安全性評估,如固件中是否包含需要保護(hù)的秘密(如BIOS密碼),系統(tǒng)上運(yùn)行的固件是否是正確的、最新的固件,是否被破壞或修改;安全區(qū)是否可以訪問其固件并正常運(yùn)行,根據(jù)評估完成對固件的安全審計,增強(qiáng)用戶對SGX的信任度。
將SGX與可信計算技術(shù)結(jié)合來達(dá)到提升安全性目的的研究工作,自SGX被提出以來就一直在不斷地進(jìn)行。SGX技術(shù)相比其他可信計算技術(shù),除了具有安全存儲的功能,更重要的是可以從硬件層面對軟件運(yùn)行時的環(huán)境進(jìn)行隔離,保障軟件運(yùn)行態(tài)的安全。如果將這一功能應(yīng)用到可信環(huán)境的構(gòu)建,把SGX與其他可信計算技術(shù)相結(jié)合,能夠達(dá)到保障可信應(yīng)用運(yùn)行態(tài)安全性的目的。例如,將TPM與SGX技術(shù)進(jìn)行結(jié)合,從而構(gòu)建更安全的可信計算環(huán)境的設(shè)計已經(jīng)出現(xiàn),正如上文中提到的TGX。雖然將SGX技術(shù)與TPM結(jié)合來提高安全性的想法在設(shè)計上成功,但是想要實(shí)際投入使用還有很多問題需要考慮,如接口層面和數(shù)據(jù)流傳輸過程中信息的安全性如何保障、引入其他可信計算技術(shù)對本就較為嚴(yán)重的性能消耗問題該如何解決,以及將SGX與可信計算技術(shù)結(jié)合產(chǎn)生更大的攻擊面會不會對安全性產(chǎn)生影響。
SGX相比其他可信計算技術(shù)在可信啟動領(lǐng)域具有更大的優(yōu)勢。作為保護(hù)主機(jī)安全的重要技術(shù)手段,可信計算利用物理平臺上的可信芯片作為物理可信根,在系統(tǒng)引導(dǎo)階段根據(jù)度量配置策略,在系統(tǒng)啟動前對系統(tǒng)進(jìn)行度量,然后通過比較度量值與基準(zhǔn)值是否相等來判斷當(dāng)前主機(jī)是否可信。當(dāng)SGX作為物理可信根應(yīng)用在可信啟動階段時,SGX局部可信的機(jī)制和集成在CPU中的便捷性讓它相比傳統(tǒng)可信計算技術(shù)更具優(yōu)勢。傳統(tǒng)的可信啟動使用的物理可信根的TCB較大,效率也較低;而SGX不要求整個主機(jī)是可信的,只要求SGX所管理的安全區(qū)可信?;赟GX實(shí)現(xiàn)的可信啟動可分為硬件平臺的引導(dǎo)階段和操作系統(tǒng)的啟動階段兩部分。硬件平臺的引導(dǎo)階段從平臺加電開始,到BIOS將控制權(quán)交給Boot之前結(jié)束。在硬件平臺的引導(dǎo)期要保證SGX的可信性。操作系統(tǒng)的啟動階段從主引導(dǎo)區(qū)調(diào)入操作系統(tǒng)裝載程序開始,到操作系統(tǒng)內(nèi)核運(yùn)行完畢并運(yùn)行Init進(jìn)程之前。該階段需要使用SGX技術(shù)保證系統(tǒng)啟動過程的可信性。
以SGX作為可信根可以構(gòu)建可信安全計算框架,為其他領(lǐng)域提供可信計算支持。SGX具有可以保障數(shù)據(jù)的安全存儲和軟件運(yùn)行態(tài)安全的特點(diǎn),使數(shù)據(jù)代碼的完整性和保密性能夠得到芯片級的安全保障,且允許用戶遠(yuǎn)程對這些安全保護(hù)進(jìn)行驗(yàn)證。百度在此基礎(chǔ)上將SGX和FaaS云計算模型的優(yōu)點(diǎn)進(jìn)行有機(jī)結(jié)合,提出了全球首個通用安全計算平臺MesaTEE,并增加了內(nèi)存安全保障和高兼容性支持,使金融、自動駕駛和醫(yī)療等安全敏感服務(wù)能夠安全地在遠(yuǎn)程平臺上處理數(shù)據(jù),通過SGX為人工智能、大數(shù)據(jù)分析、區(qū)塊鏈以及機(jī)器學(xué)習(xí)等領(lǐng)域提供可信安全計算平臺,MesaTEE在多個領(lǐng)域具有較好的應(yīng)用前景。MesaTEE作為下一代可信安全計算框架,在未來仍需要研究人員共同努力,豐富SGX技術(shù)生態(tài),為用戶提供更多的功能。
本文首先介紹了SGX技術(shù)的產(chǎn)生背景和相關(guān)機(jī)制,然后回顧了近年來學(xué)術(shù)界和工業(yè)界在可信計算研究領(lǐng)域通過SGX技術(shù)增強(qiáng)系統(tǒng)、應(yīng)用程序和腳本語言的安全性的主要成果,對其性能、安全性和開發(fā)及應(yīng)用方面的研究瓶頸和對應(yīng)的解決方法進(jìn)行了詳細(xì)研究,最后通過分析現(xiàn)有研究指明了未來研究的趨勢。本文對SGX技術(shù)在可信計算領(lǐng)域的研究與分析進(jìn)行了深入分析和總結(jié)。期望通過這項工作,能夠給以后的研究者提供有益的借鑒與參考,為SGX技術(shù)未來的應(yīng)用和發(fā)展做出貢獻(xiàn)。