趙波,袁安琪,安楊
(1. 武漢大學國家網絡安全學院,湖北 武漢 430072;2. 武漢大學計算機學院,湖北 武漢 430079)
隨著互聯網在人們日常生活中扮演著越來越重要的角色,信息安全問題越來越多,無論是智能手機,還是新興起的無人駕駛、網絡電視等都存在著不同程度、不同方面的安全問題。小到個人隱私信息,大到國家軍事機密,各個層面產生的安全問題復雜煩瑣,沒有統一的解決方法,但可信計算的出現使從根本上防范信息安全問題的產生成為可能。
在這樣的大環境下,英特爾公司產生了研發SGX(software guard extensions)技術的靈感,SGX作為英特爾開發的可信計算技術,旨在以硬件安全為強制性保障,不依賴于固件和軟件的安全狀態,通過一組新的指令集擴展與訪問控制機制,實現包含敏感數據的程序和普通程序間的隔離運行,為包含敏感數據的程序提供可信執行環境,保障用戶關鍵代碼和數據的機密性與完整性不受惡意軟件的破壞。與其他可信計算技術不同的是SGX的可信計算基(TCB,trusted computing base)僅包括硬件,避免了基于軟件的TCB自身存在軟件安全漏洞與威脅的缺陷,極大地提升了對系統安全的保障能力;此外,SGX可以保障可信執行環境運行時的安全,惡意代碼無法訪問與篡改其他程序在安全區內部運行的內容,進一步增強了系統的安全性;基于指令集的擴展與獨立的認證方式,使應用程序可以靈活地調用這一安全功能并進行驗證[1]。
SGX的獨特架構讓它能夠在計算平臺上提供一個可靠的空間,保障用戶關鍵代碼和數據的機密性、完整性和安全區本身,SGX作為英特爾公司為可信計算推出的一種技術,在被提出后吸引了學術界和工業界大量研究者的關注,并被應用在很多領域。SGX被大量應用在云計算安全領域,如構建云平臺應用安全隔離執行環境、構建安全容器、構建云平臺大數據安全可信計算環境和網絡功能虛擬化的狀態保護。例如,Baumann等[2]提出Haven,它利用Intel SGX的硬件保護來防御特權代碼和物理攻擊,是第一個在商用OS和商用硬件上屏蔽執行未修改的遺留應用程序的系統。Arnautov等[3]設計了SCONE,一個用于Docker的安全容器環境,使用SGX技術來保護Docker容器內的進程免受外部攻擊。Schuster等[4]提出基于SGX的VC3框架,在保持代碼和數據機密性的同時允許用戶在云中運行分布式MapReduce計算,并確保結果的正確性和完整性。Shih等[5]提出了S-NFV方案,結合了SGX對網絡功能虛擬化產生的狀態進行安全隔離保護,來達到安全隔離NFV應用程序狀態的目的。
除了應用于云計算外,許多解決方案受益于SGX提供的安全保護,包括多方計算、機器學習、區塊鏈、人工智能、生物識別技術保護等。例如,UCloud[6]引入了與區塊鏈相連接的英特爾SGX技術,為智能合約提供了區塊鏈所不能提供的機密性,可拓展的計算節點解決了區塊鏈本身無法應對復雜應用場景的問題,通過可信硬件執行機密性高、需要相對復雜計算能力的程序,并通過區塊鏈對執行結果進行記錄和驗證,實現可追溯的特性。
SGX技術目前被廣泛地應用到各個領域,但作為可信計算技術而誕生的SGX技術現階段在可信計算領域的應用程度并沒有達到相對應的高度。本文針對這一現象,對現有的SGX在可信計算領域的研究和應用進展進行了分析,總結出當前階段SGX在可信計算領域難以普及應用的原因及應對方法,并對SGX在可信計算領域未來的發展趨勢進行了展望。
計算機系統處理著快速增長的重要、敏感和有價值的信息,這些信息需要被保護起來,從而避免被篡改和竊取。大量的應用程序需要在平臺上保密運行,從而保證用戶的敏感數據只能由指定接收人訪問。因此,Intel SGX作為一種新加入英特爾架構的指令集和內存訪問技術應運而生。通過應用這項技術可以有效減少攻擊面。有無Intel SGX安全區(enclave),攻擊面的不同情況如圖1所示[7]。

圖1 有無英特爾SGX安全區時攻擊面的差異Figure 1 Differences in attack surfaces with and without Intel SGX enclaves
2.1.1SGX設計原理
英特爾軟件防護擴展SGX是一項面向應用程序開發人員的英特爾技術,其目標是對機密信息啟用高級別的保護。英特爾從第6代英特爾酷睿處理器平臺開始引入了英特爾軟件防護擴展新指令集,受保護的內存區域稱為安全區,使用特殊指令和軟件可將應用程序代碼放入一個安全區中執行。它通過在代碼和數據駐留的地方分配硬件保護的內存來實現安全區和非安全區的隔離。安全區內存中的數據只能由同樣駐留在安全區內存空間中的代碼訪問。從安全區的角度來看,操作系統和VMM也不是可信的組件。安全區代碼可以通過特殊的指令調用。安全區可以構建并加載為DLL文件。通過這種機制,安全區可以提供一個隔離的可信執行環境,防止惡意軟件影響安全區內的代碼和數據,從而保障用戶的關鍵代碼和數據的機密性和完整性。在安全區中運行的受保護程序還擁有一個密碼學測度,用來發送給客戶端驗證程序的可信執行,或者為遠程終端或不可信平臺提供認證服務,來實現安全區間的可信性校驗。
這種隔離由引導期間留出的處理器保留存儲器強制執行。該存儲器僅可由SGX微碼和在安全區內運行的程序訪問,并且被分成4 kB的簇,這些頁統稱為安全區頁面緩存(EPC,enclave page cache)。EPC中的頁面與特定的安全區相關聯,并且只能由該安全區訪問。從EPC分頁到常規DRAM的信息在硬件派生密鑰下加密[7]。
安全區具有多個屬性:
1) 通過CPU強制執行的內存訪問控制機制,將安全區與其他不受信任的應用程序(包括更高權限的應用程序)隔離開;
2) 內存加密用于防御物理攻擊并保護交換的安全區頁面;
3) 安全區支持安全區實例層面的遠程認證。
2.1.2SGX關鍵技術
(1)認證
在Intel SGX架構中,認證是指證明在平臺上建立特定安全區的過程,向其他實體演示以正確的方式實例化特定的環境。SGX的認證功能目前有兩種認證機制。
本地認證:本地認證是指在同一平臺上的兩個安全區在交換信息之前使用Intel SGX報告機制彼此進行認證。在 SGX應用程序中,當應用程序具有多個需要一起工作以完成任務的安全區,或者當兩個單獨的應用程序必須在安全區之間傳遞數據時,可以使用本地認證功能。每個安全區必須驗證另一個安全區以確認它們都是可信的。在兩個安全區驗證對方是可信的之后,可以在受保護的通道上交換信息,該通道可以提供機密性、完整性和重放保護。完成后,兩個安全區會建立受保護的會話并使用ECDH密鑰交換來共享會話密鑰。該會話密鑰可用于加密必須在兩個安全區之間共享的數據。
遠程認證:遠程認證是指將Inter SGX軟件和平臺硬件的信息組合起來用于生成評價,然后將該評價發送到第三方服務器以建立信任。該軟件包括應用程序的安全區,以及由Intel 提供的QE(quoting enclave)和PvE(provisioning enclave)。在證明硬件是支持Intel SGX的CPU后,軟件信息的摘要會與來自硬件平臺的唯一非對稱密鑰組合以生成評價,該評價通過經認證的信道發送到遠程服務器。如果遠程服務器確定該安全區已正確實例化并且正在支持正版Intel SGX的處理器上運行,則它可以信任該安全區并選擇使用經過身份驗證的通道向其提供機密信息。
(2)密封數據
一個安全區被實例化之后,硬件層面會對數據提供保護,但當安全區被關閉時,安全區內部的所有數據都將丟失,如果數據之后仍然需要使用,那么安全區必須要對這部分數據進行特殊安排,使它們能夠存儲在安全區外。為了保護和保存數據,SGX建立了一種機制,允許安全區軟件檢索該安全區的唯一密鑰。此密鑰只能由特定平臺上的安全區生成。安全區軟件使用該密鑰加密平臺上的數據或解密平臺上已經存在的數據。英特爾將這些加密和解密操作分別稱為密封和解封操作,因為數據是通過加密方式密封到安全區和平臺的。密封數據就是對數據進行加密的過程,以便將其寫入不受信任的內存或存儲,而不泄露數據內容,且對應的安全區可以將數據讀出并解密。加密密鑰是按需內部派生的,不會暴露在安全區中。當前SGX有兩種密封數據的方法。
密封到安全區標識:此方法生成某一安全區的唯一指定密鑰。當密封到安全區標識時,密鑰對于密封數據的特定安全區是唯一的,并且影響其簽名的安全區的任何改變都將導致產生新密鑰。使用這種方法,由一個版本的安全區密封的數據是其他版本的安全區無法訪問的,所以這種方法的副作用是密封數據無法遷移到應用程序及其安全區的較新版本。它是專為密封的舊數據不應被新版應用使用的應用而設計的。
密封到密封標識:此方法生成一個基于安全區密封授權方標識的密鑰。來自同一簽名授權方的多個安全區可以導出相同的密鑰。當密封到密封標識時,來自同一授權方的多個安全區可以透明地密封和解封彼此的數據。這允許來自一個版本的安全區的數據被遷移到另一個版本,或者在自同一軟件供應商的多個應用程序之間共享安全區中的數據。
如果需要阻止較舊版本的軟件和安全區訪問由較新的應用程序版本密封的數據,則授權機構可以在簽署安全區時選擇包含軟件版本號(SVN)。早于指定SVN的安全區版本將無法派生密封密鑰,因此無法對數據進行解封[7]。
2.2.1SGX內存管理機制
SGX定義了一種全新的數據結構用于維持需要用SGX進行保護的關鍵信息。Enclave關鍵數據結構和組件如表1所示。

表1 Enclave關鍵數據結構和組件Table 1 Enclave data structures and components
為了能完整地支持SGX的內存保護功能,相應的數據結構和硬件結構是必要的。為此,英特爾設計了EPC,EPC是PRM中操作系統分配的裝載應用程序數據和代碼的4 kB大小內存的集合,是一個內存存儲安全區的頁和SGX數據結構的受保護內存,這段內存可以同時阻止硬件和軟件的訪問。處理器會維持整個架構的安全性并對數據進行訪問信息控制。如果安全區執行內存訪問EPC時,處理器決定是否允許訪問。
在硬件結構中,EPC的一個頁在硬件結構上稱作EPCM(enclave page cache map)。EPCM維護EPC的入口地址,并且包含CPU跟蹤EPC內存頁元數據的狀態表。它保證每個EPC由一個安全區獨享[7]。
2.2.2SGX線程管理機制
任何能夠將EPC頁映射到其虛擬地址空間的進程都能夠執行安全區代碼。當CPU執行安全區代碼時稱為enclave模式,此時CPU可以訪問駐留在PRM中的EPC頁面。線程數由安全區作者決定,然后決定有多少線程可以并發地執行安全區代碼。
初始化后的安全區使用EENTER指令來跳轉進入安全區執行受保護的程序。只有在RING3的程序才能夠使用EENTER指令,EENTER并不執行特權切換,CPU依舊在RING3的enclave模式下執行。EENTER指令用于在程序控制下進入安全區,需要保存調用者的執行上下文以便在安全區代碼返回時恢復跳轉前的狀態。
EENTER需要TCS的虛擬地址作為輸入,接著這條指令將RIP(EIP)寄存器修改為TCS中保存的入口偏移地址。這個入口點是由安全區應用開發者定義的,任何對此地址的修改都會導致在初始化安全區時產生不一致的密碼學測度。這樣保證了安全區中的代碼只會在被定義好的地址上通過ECALL來調用。實際上,入口點只是安全區內存范圍內的函數,安全區作者已顯式地將該內存范圍定義為安全區代碼的入口點。
2.2.3 Intel SGX SDK
Intel(R) Software Guard Extensions SDK提供了以下工具。
1) Edger8r工具:用于在不受信任的組件和安全區之間生成接口。它通過讀取用戶提供的安全區描述語言(EDL)文件來生成邊緣例程。這些邊緣例程定義不受限于信任的應用程序和安全區之間的接口。通常,該工具作為安全區構建過程的一部分自動運行。但是,高級安全區編寫器可以手動調用Edger8r。
2) Enclave簽名工具:Intel(R)軟件保護擴展SDK提供了一個名為sgx_ sign的工具,用于對安全區進行簽名。通常,對安全區進行簽名的過程涉及生成包含安全區屬性(如安全區度量)的簽名結構,一旦在這種結構中對安全區簽名,就可以檢測到對安全區文件(如代碼、數據、簽名等)的修改。簽名工具還會評估安全區映像的潛在錯誤,并警告用戶潛在的安全危險。sgx_sign通常是由Intel(R) SGX SDK中包含的一種配置工具設置的,并在構建過程結束時自動運行。在加載過程中,將檢查簽名以確認安全區沒有被篡改,并且已正確加載。此外,簽名工具可用于報告已簽名的安全區的元數據信息,并生成對安全區簽名者白名單所需的SIGStruct文件。
3) Enclave調試器:幫助調試安全區。只有調試模式的安全區可以用Intel(R) SGX調試器進行調試。
4) 性能測量:使用Intel(R) VTune放大器有助于測量安全區代碼的性能。Intel(R) VTune放大器應用程序支持一種新的分析類型,稱為SGX熱點,可用于配置英特爾SGX安全區應用程序。可以使用SGX熱點的默認設置來分析應用程序和安全區代碼。精確的基于事件的采樣(PEBS)有助于配置Intel SGX安全區代碼。
5) Enclave內存測量工具:幫助測量安全區在運行時對受保護內存的使用情況。安全區是一個孤立的環境。Intel(R) Software Guard Extensions SDK提供了sgx_emmt工具,用于測量安全區在運行時對受保護內存的實際使用情況。目前,安全區內存測量工具提供以下兩個功能:獲取安全區的堆棧峰值使用值和獲取安全區的堆峰值使用值。
6) CPUSVN配置工具:有助于在不修改硬件的情況下模擬CPUSVN升級/降級場景。CPUSVN表示CPU的安全版本號,它影響密鑰派生和報表生成過程。CPUSVN不是一個數字概念,會隨著硬件升級/降級而升級/降級。為了在不修改硬件的情況下模擬CPUSVN升級/降級,Intel(R) Software Guard Extensions SDK提供了一個CPUSVN配置工具,用于配置CPUSVN[7]。
SGX技術的問世,在學術界和工業界引發了研究的浪潮,并在近年來逐漸成熟,SGX能夠構建可信計算環境的特性在各個方向得到了廣泛應用和結合。SGX技術目前在可信計算領域的應用主要分為3種,分別是利用SGX增強系統的安全性、利用SGX增強應用程序的安全性和利用SGX增強開發語言的安全性。
(1)SGX與TPM結合
由于SGX技術尚具有局限性和不足之處,可以通過將SGX和其他技術結合起來以提高系統整體的安全性,達到設計目標。為了提高SGX的安全性,Dhiman等[8]提出了TGX,如圖2所示,通過將SGX和TPM結合,幫助SGX安全地將加密操作和安全存儲外包給TPM,TPM提供了一個具有更強隔離性的專用芯片。通過EAP和SGX對某些TPM位置的唯一訪問,以及SGX創建的度量等功能協同工作既可以增強對SGX的關鍵加密操作的隔離,又可以使TPM管理的憑證得到進一步的保護,這種結構還可以規避針對SGX的微架構攻擊。TGX使SGX能夠將其簽名和驗證機制從處理器移動到TPM,從而使安全敏感信息在TPM之外永遠不可用。通過SGX和TPM的結合構造了一個安全性更強的可信執行環境。

圖2 基于TPM在SGX中建立安全區Figure 2 Secure enclave build in SGX using TPM
(2)SGX與vTPM結合
隨著云計算技術的廣泛應用,SGX技術已經成為提高云基礎設施虛擬化環境安全性的重要手段。根據TPM規范,一種vTPM的實現框架被提出,為虛擬化環境vTPM的設計和實現奠定了基礎,但該框架對實例的非易失存儲文件NVRAM缺少了有效保護;攻擊者可以直接讀取NVRAM文件獲取vTPM實例中的敏感數據,此外vTPM與虛擬機之間不存在綁定關系,攻擊者甚至可以直接讀取其他虛擬機的vTPM實例數據。針對這一安全問題,嚴飛等[9]依據原有架構,將SGX的安全特性與vTPM結合,提出了vTSE,其架構如圖3所示。硬件層上,使用了支持Intel SGX擴展的處理器;SGX 安全區實例中的代碼和數據及SGX相關的數據結構都存儲在EPC中,其范圍和大小在系統啟動時由BIOS進行設置。內核層上,通過英特爾提供的SGX驅動程序,為應用層提供創建安全區,實現添加/移除安全區頁面、銷毀安全區等功能。應用層上,虛擬機硬件由Qemu模擬,通過調用運行在SGX安全區中的vTPM庫為客戶機虛擬出TPM設備,由SGX為vTPM庫提供動態保護。

圖3 vTSE架構Figure 3 vTSE architecture
(3)SGX與Hybrid Memory Safety內存安全技術結合
當前對于數據安全和隱私保護的合規性要求日漸提升,如何對用戶隱私進行保護、對數據安全可控已經成為廣泛的需求,MesaTEE正是應運而生的一個創新性的通用計算平臺。百度與英特爾聯合,將SGX以及其他可信計算技術和混合內存安全技術結合在一起,構建了完整的FaaS通用計算框架,形成了一個可信計算平臺MesaTEE,通過利用包括Intel SGX在內的TEE,安全地將云用戶的數據和代碼執行隔離、加密。即使云計算環境中的操作系統、虛擬機管理器或相鄰的其他虛擬機被攻破,這些數據代碼的完整性和保密性能夠得到保障,用戶也可以遠程對這些安全保護進行驗證。除了遠程可驗證的隔離手段,MesaTEE還實現了全球首次在SGX TEE中使用內存安全語言和不可繞過編程范式,確保SGX安全區中的代碼不會因為內存問題被攻破,從內外兩個維度封殺了攻擊者突防的可能性[10]。
Intel SGX在應用程序中的部署主要分為本地、服務端和客戶端。對于獨立運行在本地的程序,SGX無須與遠程進行交互。目前主要用Intel SGX存儲服務器的敏感數據。在客戶端的應用較少,主要通過SGX對客戶端軟件的完整性和安全性進行校驗。同時部署在客戶端和服務器端的應用可以通過SGX實現遠程認證。
(1)SGX應用于本地
SGX本身作為一種可信計算技術,能夠很好地與系統功能融合,保障系統敏感數據的存儲安全。例如,系統日志作為捕獲操作系統或程序行為的最大法證資產,一旦系統受到威脅,系統日志通常是下一個立即受到攻擊的目標,因此保護它們至關重要。基于這一出發點,Vishal等[11]將SGX與日志系統結合,設計出SGX-Log,這是一種新的日志記錄系統SGX-Log,可確保日志數據的完整性和機密性,其關鍵思想是利用SGX提供的具有密封和啟封原語的安全區域,保護內存和磁盤中的程序代碼和數據不被未經授權修改。SGX-Log使用客戶端和服務器架構。客戶機是一個日志請求組件,它發出各種日志消息,而日志服務器執行安全日志服務。SGX-Log提供了啟用SGX的日志服務器的詳細設計、實現和評估。由于SGX安全區可用的內存有限,以及與不可信代碼交互的成本,必須設計一個日志系統來適應這種情況。SGX-Log為如何有效地利用SGX對日志進行保護提供了具體的結果和見解。
(2)SGX應用于服務器端
SGX具有最高安全權限的特性使SGX在保證敏感數據安全性、完整性方面具有巨大的優勢,而這種優勢可以用來為服務器中用戶信息和證書之類的敏感信息提供安全存儲的服務。
相對于傳統支付而言,區塊鏈具有無須受信任的授權即可進行操作的能力以及保障用戶隱私的功能。但是,區塊鏈支付的驗證要求用戶下載并處理整個鏈,這對于資源受限的設備而言是不可行的。為了解決這個問題,大多數的區塊鏈系統支持輕量級客戶端,這些客戶端將大部分計算和存儲負擔外包給了完整的區塊鏈節點。但是,這樣的驗證會泄露有關客戶交易的關鍵信息,從而破壞用戶隱私。Sinisa等[12]利用SGX安全區的可信執行功能提出了一種保護比特幣中輕量客戶端隱私的新方法,來保護比特幣中輕量客戶端隱私,他們設計并實現了一個稱為BITE的系統,該系統中的完整節點上的安全區可滿足輕客戶端的隱私保護請求。核心思想是在完整的節點中利用SGX 安全區的可信計算能力,讓一個不受信任的實體運行帶有SGX安全區的完整節點,并且SGX安全區對來自客戶端的交易確認提供請求服務,通過SGX技術提供代碼完整性和數據機密性。圖4展示了由完整節點組成的系統模型。當輕量級客戶端想要獲取關于它的事務或地址時,可以連接到任何支持服務的完整節點FNj,并承載一個enclave Ej。完整節點下載并本地存儲整個區塊鏈(BC),基于它維護一個數據庫,其中包含所有未使用的事務輸出(UTXO)。

圖4 輕量級客戶機向安全區請求事務驗證的工作流程Figure 4 Workflow for lightweight clients to request transaction validation from enclave
除了敏感信息之外,服務器端的數據庫也存在安全隱患,通過將數據庫納入SGX的保護下可以有效避免對數據庫的RING0攻擊。為此,Priebe等[13]研發了EnclaveDB,EnclaveDB通過將敏感數據(表、索引和其他元數據)放置在受信任硬件(如Intel SGX)保護的安全區中來實現即使數據庫管理員是惡意的,攻擊者入侵了操作系統或虛擬機管理程序,或數據庫在不受信任的主機中運行,EnclaveDB仍可以保證數據庫安全性的目的。EnclaveDB具有類似于傳統關系數據庫的編程模型,經過授權的用戶可以創建表和索引,并使用SQL表示的存儲過程查詢表。與傳統數據庫不同,EnclaveDB提供了抵御黑客、惡意服務器管理員和數據庫管理員攻擊的安全性。如圖5所示,EnclaveDB通過將所有敏感數據(表、索引、查詢和其他中間狀態)托管在enclave內存中來保護數據庫狀態。這種設計選擇是可行的,因為DRAM成本迅速下降,而且支持大型集群的系統的預期可用性很高。

圖5 EnclaveDB的體系結構Figure 5 EnclaveDB’s architecture
(3)SGX應用于客戶端
SGX在客戶端的應用雖然較少,但是可以滿足軟件在客戶端的完整性和安全性認證,可用于開發商向用戶客戶端的Intel SGX中下放許可證等版權信息。SGX客戶端應用包括SGX的分布式客戶端應用。
長期以來,計算機游戲的完整性和保密性一直是游戲開發商關注的問題,為了防止玩家作弊或獲得未經授權的軟件復制,游戲廠商在反逆向上付出了大量的精力,Bauman等[14]利用SGX基于硬件的保證且可以維護軟件運行態安全的功能來保護游戲的機密性和完整性,而且可能被廣泛部署在用戶機器上的特點,提出了基于SGX保護游戲完整性和機密性的一般框架,該原型框架可以集成到現有的游戲中。
對于游戲軟件完整性的保證,由于不同的游戲有不同種類的信息,為了防止作弊,必須保護這些信息。為了完整性而必須保護的實際代碼或數據取決于被保護的特定游戲,找到目標游戲的這些敏感代碼或數據后,必須將其轉移到安全區內。當用戶啟動應用程序時,安全區將與受信任的服務器聯系并執行遠程認證。通過驗證的安全區則認為其中的代碼和數據沒有被修改。保證敏感數據和代碼完整性的機制具體如圖6所示。

圖6 保證敏感數據和代碼完整性的機制Figure 6 Mechanisms to ensure the integrity of sensitive data and code
對于游戲軟件機密性的保證,如何處理游戲資產有兩種選擇。第一個選項是將解密的代碼或數據直接保存在安全區中,這對于少量關鍵代碼或數據非常適用。如果數據是加密的圖像,那么一次性將其全部保存在安全區中是不可行的。因此,第二個選項是立即將解密的數據返回到主內存中的主應用程序。在這種情況下,需要被隱藏的敏感數據并不是圖像,而是解密密鑰和加載機制。對于通常存儲在磁盤上的大型資產,安全區可以簡單地密封解密密鑰。這通常不需要任何外部連接的單人游戲只需要一個連接來驗證服務器并獲取解密密鑰。之后,就可以自動操作,而無須再次與服務器簽入。保證敏感數據和代碼機密性的機制如圖7所示。

圖7 保證敏感數據和代碼機密性的機制Figure 7 Mechanisms to ensure the confidentiality of sensitive data and code
客戶端JavaScript在Web應用程序中無處不在,用于改善用戶體驗和減少服務器負載。由于客戶端不受信任,服務器不能依賴客戶端JavaScript代碼和它操作的數據的機密性或完整性,如必須在服務器端重復客戶端輸入驗證,并且不能卸載機密業務邏輯。所以,Goltzsche等[15]提出了TRUSTJS框架,利用由Intel SGX提供的可信硬件支持,以保護JavaScript的客戶端執行,實現了Web應用程序代碼的靈活分區,使JavaScript可以在商品瀏覽器中可靠地執行。
(4)SGX應用于服務器端和客戶端
當SGX同時部署在服務器端和客戶端時,SGX的遠程認證功能可以在同時具有SGX功能的服務器端和客戶端之間實現安全通信,馮達等[16]利用SGX可以存儲敏感數據并進行遠程認證的功能,實現了服務器端和客戶端之間證書的安全交互,將SGX技術與數字簽名、加密技術相融合,實現了證書可信性驗證與軟件安全簽發系統。
在多方計算領域,SGX的出現提供了新的安全思路。Olga等[17]提出了一種基于可信SGX處理器的保密性多方機器學習系統。在該系統中,多方在一個聯合的機器學習任務上執行它們的聚合數據,并在一個啟用SGX的數據中心上運行該任務。每一方都獨立地與安全區建立一個安全通道,用于對自己進行身份驗證,并可以獨立地與云提供商交互,使用遠程認證的功能來確認SGX處理器是該數據中心的一部分,檢查加載到安全區的代碼和靜態數據的完整性。每一方都使用一個單獨的、本地生成的密鑰來加密自己的輸入數據集,并使用其安全通道與安全區共享該密鑰。如圖8所示,基于這個系統可以實現多家醫院用不同的密鑰加密患者數據集。醫院在云數據中心的安全區中部署一種商定的機器學習算法,并與安全區共享它們的數據密鑰。安全區處理聚合數據集并輸出加密后的機器學習模型。

圖8 多家醫院用不同的密鑰加密患者數據集Figure 8 Multiple hospitals encrypt patient data sets with different keys
雖然研究人員提出了許多基于SGX提高應用程序安全性的解決方案,但思路大多是保護本機代碼應用程序,而腳本語言并不受保護。為了填補這一空白,Wang等[18]提出了SCRIPTSHIELD,這是一個能夠向后兼容的應用程序執行框架,通過在SGX enclaves內執行腳本語言解釋器,自動確保腳本的機密性和完整性,核心思想是自定義腳本解釋器,使其在SGX安全區中運行并將腳本傳遞給它。
雖然對SGX的研究進行了多年,技術已經趨于成熟,甚至已經投入工業界的實際使用,但現階段SGX在可信計算領域的開發和應用并沒有呈現出與它熱度相匹配的前景,這主要有兩個原因,一個是SGX本身的開發和應用難度限制了研究人員對它的應用,另一個是SGX與其他可信技術相比在應用中有較多問題需要解決。
SGX技術自推出以來受到了學術界和工業界的極大關注,目前在很多領域得到了廣泛的應用,SGX技術在研究中暴露出了很多缺陷和問題,如各類針對SGX的側信道攻擊表明SGX技術當前還存在很多安全隱患。事實上,除了安全性問題,SGX在研究過程中還暴露出了許多性能瓶頸、開發和部署困難、功能局限等諸多應用方面的問題。當前以SGX作為可信基的系統設計及應用主要面臨性能、安全性、開發難度和應用3個方向的挑戰。
4.1.1性能
SGX作為可信基的性能開銷,主要是從模式切換、Enclave頁替換和內存加密3個方面產生的[19]。
(1)模式切換
模式切換是SGX最主要的性能開銷,但也是SGX能夠在安全區中執行代碼的基本保障機制。系統進入或退出安全區都會產生模式切換,模式切換開銷的主要原因是出于對安全性的保證,每一次模式切換都要進行復雜的狀態保存和安全檢查、保存和恢復 CPU 狀態,并在安全區和不可信軟件進行上下文切換時刷新CPU核心的TLB,由此產生了大量的性能消耗。
當SGX作為可信計算基時,對安全區內數據和代碼的每一次訪問和執行都會導致模式切換的產生,如果系統被設計為需要在安全區和非安全區之間進行大量的數據調用,那么產生的性能開銷相對會較高。
降低模式切換開銷的技術主要有:無切換調用[20]、增加操作系統庫和函數庫減少模式切換[21]和輕量級細粒度的并行減少安全區之間模式轉換[22]。
(2)Enclave頁替換
由于安全區內存空間比較小,SGX支持從EPC到主內存的頁替換,以滿足不適合EPC的安全區,所以當程序代碼數量和規模增大時,敏感頁面會在內存中的EPC和非EPC區域之間頻繁交換,從而產生了開銷巨大的Enclave頁替換開銷。內存要求超過 EPC大小的應用程序必須在EPC和未受保護的內存之間替換頁面。出于對安全性的要求,EPC頁必須在被復制到外部內存之前被加密和完整性保護,工作量較大,代價高昂。為了防止地址轉換攻擊,需要替換協議中所有enclave線程并刷新TLB。不僅如此,頁替換還會導致enclave模式的切換,進而產生模式切換開銷。
雖然SGX的開發原則中始終強調最小特權原則,但是當SGX作為可信計算基時,并不僅僅起著對數據進行安全存儲的作用,它還能夠為安全區內運行的程序提供機密性和完整性的保護。通過在安全區內存儲盡量多的數據和運行的代碼量,來減少安全區和非安全區之間的交互,雖然可以提升性能,但是增加了攻擊面。如何在安全性和性能之間進行平衡是基于SGX的系統在設計中亟待解決的重點、難點。
針對頁替換開銷的主要技術是高效的完整性驗證結構、減少分頁開銷技術和安全用戶管理虛擬內存技術,未來,這一性能開銷限制可能會從根本上得到改善:雖然目前SGX v1版本支持的安全區最大為128 MB,應用程序實際的使用量一旦超過93 MB就會觸發頻繁的頁替換,增加安全風險和性能開銷,但在SGX v2[23]中可能可以支持安全區擴展到整個內存。
(3)內存加密
SGX通過內存加密技術保護程序運行時的安全,MEE必須加密和解密高速緩存線,會導致加密內存訪問存在高昂的開銷,安全區代碼也會由于寫入內存和高速緩存未命中產生開銷,這就是內存加密開銷。
SGX作為可信計算基除了存儲敏感數據的功能外,和其他傳統可信計算技術相比,最大的優勢就是能夠保證安全區內程序運行過程中的安全,而這一重要功能必須靠內存加密技術來保障,無法繞過內存加密產生的性能開銷問題。SCONE[3]使用SGX SDK微基準測試評估了在安全區中進行順序讀/寫和隨機讀/寫操作的時間開銷,得出“在EPC大小范圍內幾乎沒有內存訪問開銷,而超出EPC大小的內存訪問有2倍左右性能開銷”的結論。Eleos[24]通過生成10萬個隨機數證明內存隨機訪問和連續訪問,以及讀和寫操作的開銷相近,介于5.6倍到9.5倍開銷之間。這些實驗說明了內存加密開銷是SGX設計本身導致的,難以進一步優化。
基于SGX的應用目前只能通過減少對安全區的不必要使用和使用節省空間的數據結構或將較小的數據塊加載到安全區中來緩解開銷。安全程序設計應盡量減少對安全區內存的使用和訪問來降低內存訪問開銷。如果必須使用安全區內存,則盡量采用連續訪問的數據結構,避免采用隨機訪問的數據結構。
4.1.2安全性
在安全性方面,SGX雖然在原則上可以作為可信執行環境,但是近年來大量的工作表明,SGX自身的機制導致它的安全區很容易被各類攻擊攻破,通過攻擊獲得的敏感數據可以幫助攻擊者繞過SGX提供的數據機密性保證。一旦可信計算機基的某個構件出現程序錯誤或者安全隱患,會對整個系統的安全造成危害,SGX的設計目的是為安全區內的敏感數據提供機密性和完整性保證,現階段它在實際應用中依然會面臨諸多的安全漏洞和威脅,這也是SGX無法投入實際應用的重要原因之一。
(1)SGX自身安全缺陷
由于SGX的設計機制和微架構帶來的安全問題,針對SGX本身的安全攻擊主要分為側信道攻擊和高低電壓攻擊高低頻率攻擊兩類。
基于SGX常見的側信道攻擊有6類,分別是基于頁表的攻擊、基于TLB的攻擊、基于Cache的攻擊、基于DRAM的攻擊、基于CPU內部結構的攻擊和混合側信道攻擊,如較為經典的Meltdown[25]、SgxPectre[26]、Foreshadow[27]和RIDL[28]攻擊。
現階段針對側信道攻擊的解決方法主要有4種:第一種是在源碼層次修改源碼,主要思路是隱藏控制流和數據流、改善加密算法;第二種是在系統層次利用一些系統特性來防御或檢測SGX側信道,如隨機化技術、檢測可疑異常和中斷、檢測時間異常、對Cache隔離;第3種是在應用層面引入安全機制,防范側信道攻擊(如Oleksii 等[29]提出了Varys系統),它可以保護在SGX安全區中運行的未修改的程序免受緩存計時和頁表側通道攻擊,Varys通過將物理內核嚴格保留給安全敏感的線程,從而防止攻擊者在安全區執行期間訪問共享的CPU資源;第4種是在硬件層面進行硬件分割或者硬件隔離,但是這種方法會顯著增加硬件復雜度,影響功耗和性能。
除了側信道攻擊外,高低電壓攻擊高低頻率攻擊也能通過恢復加密密鑰或在以前安全的軟件中引入錯誤來達到破壞SGX安全性的目的。現代處理器正以更快的速度運行,隨之而來的是熱量和功耗的增加。為了平衡速度和性能,許多芯片制造商允許用戶在需要時調整頻率和電壓,但是隨之而來的安全問題是用來修改頻率和電壓的特權軟件界面,可能會被利用來破壞系統的安全性。例如,Plundervolt[30]攻擊會通過執行安全區計算時的電壓,破壞處理器上 SGX的完整性。在安全區計算期間,Plundervolt會仔細控制處理器的電源電壓,從而在處理器封裝內引起可預測的故障。因此,即使是Intel SGX的內存加密/身份驗證技術也無法防范Plundervolt攻擊。
針對這一攻擊,英特爾發布了相關微代碼和BIOS更新。這些更新為管理員提供了一個新的BIOS選項,可以在管理員認為Plundervolt構成真正風險的情況下禁用系統上的電壓和頻率控制界面。
(2)基于SGX軟件的安全缺陷
除了SGX自身設計機制帶來的攻擊以外,基于SGX的應用可能由于設計過程中的忽略而存在安全缺陷,如接口安全和反匯編產生的敏感代碼安全性問題。
很多基于SGX的應用軟件及框架設計有眾多缺陷。這些軟件架構設計上的疏忽使攻擊者無須權限,即可繞過SGX安全區的嚴密封鎖,獲取存儲在SGX安全區中的核心敏感數據。Coin Attack[31]的出現,揭示了SGX在接口安全的維度的弱點。
針對這一對接口安全進行攻擊的方式,百度安全實驗室開發了一個名為Coin Attack的檢測框架,通過符號執行的方法,可以捕獲各種各樣的漏洞,強調了基于SGX的應用不能僅依賴于SGX的強隔離保證,還需要對軟件架構細心設計,確保健壯安全的接口調用方式。開發者如果忽視軟件中的接口安全,整個SGX安全區的安全保障都會喪失。
雖然Intel SGX提供了一個安全的區域,其中的代碼和數據對外界是隱藏的,包括特權代碼,但在默認情況下,初始化之前的安全區代碼可以反匯編,因此二進制代碼中不能嵌入任何秘密。對于希望保護代碼機密的開發人員來說,這是一個問題。對此,Bauman等[32]開發了SGXElide,這是一個幾乎透明的框架,可實現安全區代碼的機密性。SGXElide通過將程序代碼視為數據,并在初始化安全區域后動態還原機密來提供一種機制,可以在開發人員控制的受信任遠程方的協助下安全地解密或傳遞密碼。
4.1.3開發和應用難度
在開發和應用難度方面,SGX作為最新的可信計算技術,雖然在思想和部分機制上借鑒了傳統的可信計算技術,但是在開發和應用上要求更為煩瑣,較難上手。同時,基于SGX技術開發的軟件在設計上要求做到性能和安全性之間的平衡,在不影響用戶體驗的前提下保證敏感數據都被存儲在安全區內,這對程序員對程序安全性的劃分能力要求較高。對于已經完成的系統,需要對系統代碼進行修改才能在SGX上使用,可移植性較差。
(1)開發環境
對于一些研究人員缺乏SGX開發環境的問題,Jain等[33]開發了名為OpenSGX的開源平臺,該平臺在指令級別上模擬Intel SGX硬件組件,并提供了全面TEE探索所需的新系統軟件組件。這個開源平臺開發了Intel SGX的全功能,指令兼容的仿真器,用于探索軟件/硬件設計空間以及開發安全區程序。OpenSGX為SGX開發提供了一個平臺,不僅提供仿真,而且提供操作系統組件、安全區程序加載器/打包器、OpenSGX用戶庫、調試和性能監控。由于其用戶模式仿真,其系統級別的支持在很大限度上受到限制。針對使用OpenSGX無法進行需要系統功能或設備仿真實驗的問題,Choi等[34]推出優化了System-OpenSGX(S-OpenSGX),該系統利用QEMU的系統仿真為研究人員提供全面的系統級支持,以探索基于SGX安全區的編程。
(2)開發語言
對于SGX開發語言類型有限的問題,開發人員開發出了Rust SGX SDK[35]、MesaPy[36]、GOTEE[37]等安全開發語言。百度安全實驗室將Rust語言和SGX技術結合,開發出了Rust SGX SDK,開發人員使用Rust語言可以快速開發出沒有內存安全漏洞的SGX應用程序,避免敏感數據被竊取。MesaPy是百度安全實驗室開發的一個內存安全的Python實現。通過使用內存安全語言重寫外部庫和形式化驗證保障代碼的內存安全等方法全面提升Python解釋器的安全性,避免內存問題引發的高危安全漏洞。基于這些安全特性,MesaPy可以讓開發者使用Python輕松地進行SGX開發。Ghosn等通過擴展Go語言,允許開發人員依靠編譯器自動提取安全代碼和數據,將可信執行環境繼承到了語言中,增強了SGX的可用性。
(3)開發難度
對于SGX技術缺少針對安全區間交互的適當編程支持,并且要求將可信執行的確切使用方式硬編碼到應用程序中的限制問題,Sartakov等[22]提出了EActor框架,這種為SGX量身定做的Actor框架能夠提供對可信執行的更無縫、更靈活和更高效的使用,支持低成本的多安全區編程和交互。
(4)可移植性
對于已經編寫完成的程序,開發人員推出了Haven[2]、Panoply[38]和Graphene-SGX[39],能夠讓傳統App不需要修改代碼即可在SGX中運行。其中較為完善的是螞蟻集團使用Rust語言編寫的Occlum[40],將庫操作系統引入了SGX,從而使遺留應用程序可以在安全區域內運行而幾乎不需要修改的基礎上,通過將LibOS流程實現為SFI隔離流程的方式增加安全高效的多任務處理功能。
除了SGX自身在性能、安全性和開發及應用方面的問題以外,和其他的可信基相比,SGX獨特的機制既帶來了優勢,也導致了它在開發和應用上存在局限性。
(1)TPM/TCM
在開發和應用方面,TPM是當前可信計算領域應用最為常見的可信基,廣泛部署在商用計算機上,不需要對CPU進行修改,僅依賴于一個輔助的抗篡改芯片,而SGX直接集成在CPU內部,性能較TPM得到了提升。相比于SGX,TPM的可信計算基范圍更大,TPM信任計算機上的所有軟件,而SGX僅信任安全區,可信計算基的范圍雖然使TPM可度量的范圍更大,但也導致認證簽名中包含的度量覆蓋了整個OS內核和所有內核模塊,因此需要隨著軟件更新持續維護對應的可接受測量的哈希表,實際應用較為煩瑣復雜。
在安全性方面,由于TPM晶片沒有為計算機上的軟件提供任何隔離,所以基于TPM的系統容易受到物理訪問機器的攻擊者的攻擊[41],且TPM作為外掛部件只能被動調用,不能進行主動度量[42]。SGX在安全性方面雖然也有很多攻擊問題亟待解決,但與TPM相比,SGX不僅可以保障敏感數據存儲安全,還可以確保安全區內部軟件運行態的安全。
(2)Intel TXT
在開發和應用方面,英特爾的可信執行技術(TXT)使用了TPM的軟件認證模型和輔助抗篡改芯片,但將安全容器內的軟件減少為一個虛擬機,由CPU的硬件虛擬化特性(VMX[43])托管,主要用于配合英特爾新一代的虛擬化技術來保護虛擬化運算環境下的數據。TXT技術保護的對象可以理解為整個操作系統,而SGX技術保護的對象是應用程序運行時的一部分代碼和相應的地址空間。與Intel TXT技術相比,由于SGX的可信范圍較小,只支持RING3指令,導致SGX無法實現在不受信任的操作系統下訪問磁盤的這類操作,所以TXT的適用范圍相較于SGX而言更廣。
在安全性方面,TXT沒有實現DRAM加密或HMAC,因此容易受到物理DRAM攻擊,而且hypervisor潛在的軟件漏洞可能威脅到整個系統,運行在系統管理模式下的軟件可以繞過VMX使用的限制來提供隔離。但與SGX相比TXT攻擊面較少,且TXT能夠檢測VMM的運行狀況,保證虛擬設備的正常運行,而SGX對于運行在安全區內部的軟件并沒有監管能力。
(3)ARM TrustZone
在開發和應用方面,與開放了SDK的SGX相比,TrustZone需要硬件廠商的簽名驗證才能運行在安全執行環境,這限制了開發人員基于TrustZone進行研究和開發。TrustZone為程序提供了TEE和REE兩種隔離的執行環境,只有一個可信環境,而SGX可以同時運行多個可信環境,這限制了TrustZone的應用面。雖然在開發上有限制,但是TrustZone被設計為在系統加電后優先獲得控制權,并且擁有比主機更高的訪問和控制權限[44],因此TrustZone比SGX更貼合可信計算3.0“主動防御體系”對主機系統進行主動訪問和監控以及系統上電時代碼可信性的功能要求,在可信計算3.0領域具有設計上的優勢。
在安全性方面,SGX與TrustZone相比雖然可以多個安全區并發執行,且原則上即使某個安全區中存在惡意程序,也無法訪問或篡改其他安全區內被保護的內容,使隔離環境的安全性雖然有所提高,但是依然有缺陷。TrustZone具有對非安全世界進行監視的系統,這些監視系統擁有高權限,可以動態地檢查Android系統的內核本身[45],也可以代替Android內核來管理非安全世界的內存。而SGX缺乏對平臺上惡意軟件的識別和隔離,這就導致實際應用時無法檢測安全區內部運行著的是否為惡意程序,也無法對惡意程序可能竊取其他安全區的敏感數據的行為進行阻止。
(4)AMD SEV
在開發和應用方面,SEV的最小可信基比SGX更大,包含整個操作系統或者虛擬機,所以在設計上SEV比SGX更適合用來保護大規模的計算環境,且SEV允許每個虛擬機使用自己的密鑰選擇性地加密內存,這使SEV能夠為不可信云環境下的數據提供安全保護[46],更適用于云計算的應用場景。
在安全性方面,相比SGX通過內存管理單元來實現內存安全,SEV使用了安全內存加密(SME)來加密VM內存,防止物理攻擊和特權軟件攻擊。但SEV較大的信任范圍導致了較大的攻擊面,當SEV的應用環境為不可信的虛擬機管理程序時,惡意的虛擬機監控器可以通過修改相關的關鍵數據結構繞過甚至直接關閉SEV的保護機制。雖然SME對內存進行了加密保護,但SEV缺乏對主存儲器逐頁加密的完整性保護機制,由此產生的SEVered攻擊使攻擊者能夠訪問經由SEV加密之后虛擬機上的明文內存數據。并且,SEV提供的保護不足以覆蓋虛擬機的整個生命周期,在設計上同樣沒有考慮到側信道攻擊,存在較大的安全隱患。
綜上所述,雖然SGX與其他可信計算技術相比在設計機制上更加靈活,且便于開發者進行應用開發,但是可信根范圍的局限性和亟待解決的安全性問題導致SGX與其他可信計算技術相比沒有突出優勢,在很多場景下其他的可信計算技術更符合場景要求,以至于SGX在可信計算領域并沒有呈現出與其熱度相匹配的應用量。
自2013年英特爾公司推出SGX技術以來,SGX技術在學術界和工業界引發了廣泛的研究浪潮,并被陸續應用到了很多領域。目前,雖然SGX作為可信計算基,在以云計算為代表的各領域內開發和應用發展迅速,但是在可信計算領域的研究并沒有達到符合預期的水平,尚缺乏安全、有效、徹底的應用方案。基于以上研究進展,本文提出了SGX在可信計算研究領域的進一步應用需求和研究方向。
SGX本身的安全漏洞是SGX在可信計算領域發展中面臨的最根本問題,如果無法解決安全問題,SGX就不能作為可信計算基為上層架構提供安全保證。如何有效解決SGX 應用面臨的側信道攻擊、內存攻擊等安全威脅,增強SGX應用的安全性依然是該技術應用研究的重要研究方向。由于SGX在安全區和非安全區之間共享資源而產生了攻擊面的設計機制,當前的SGX自身無法抵御側信道攻擊。現階段,在軟件層面打補丁以及升級微碼等解決方案無法從根本上解決SGX應對側信道攻擊的問題,而通過引入安全機制來防范側信道攻擊又會引發額外的性能開銷,故可以通過將SGX與外界的輸入輸出進行加密、創建檢查點等方式提高SGX應對攻擊的能力。
除了要面對外部諸如電源攻擊之類的威脅,SGX還需要面對安全區內部惡意程序的威脅。SGX無法對運行在安全區中的軟件進行監管,惡意軟件可能會在安全區內執行其惡意代碼,來達到獲取敏感數據甚至安全區密鑰的目的,從而能夠有效地繞過SGX提供的整體安全性措施。針對這一問題,未來的發展可以參考TrustZone的監管模式,引入監控的思想,如當監控器檢測到可能導致攻擊行為的異常指令時,強制開啟AEX,中止安全區的運行,思路如圖9所示。

圖9 SGX監控模式流程Figure 9 Flow chart of SGX monitoring mode
隨著SGX v2對性能的提升以及廣大研究人員不斷開發出降低性能損耗的技術,基于SGX開發的應用在性能上的消耗減少了很多。但對于需要進行安全區和非安全區多次交互的程序,為了保證安全性,需要對頁面進行完整性和機密性保障,這導致SGX的模式切換消耗依然很高。SGX現階段的密鑰管理同樣面臨著性能問題,即較為復雜的場景中實用性較低,未來需要更高效的解決方案。當SGX作為可信計算基在對系統或軟件進行完整性校驗、對敏感數據進行存取和安全區內代碼運行時都會產生大量的性能消耗,如果這些性能消耗問題無法得到優化,那么用戶體驗會受到較為明顯的影響。可以通過優化加密內存頁管理或改良頁面完整性校驗方法等手段減少性能消耗。
SGX技術自誕生以來,自身設計和對Intel ME一些代碼模塊的依賴以及處理器架構產生的漏洞對安全性的影響,讓用戶無法完全信任SGX技術。并且,SGX遠程認證功能的實現需要以信任Intel為前提,依賴于Intel IAS進行遠程認證,但用戶并無法對ISA進行監管,這使用戶對SGX的可信性和安全區內數據的安全性會產生懷疑。雖然在后續工作中英特爾通過引入新特性FLC(flexible launch control)開放了第三方證明服務,開始支持第三方的加載和遠程認證技術,使開發者可以脫離Intel IAS管控的相關限制。但固件的不可審計依然令很多用戶感到擔憂,現階段的SGX無法讓用戶應對硬件廠商在出售設備時植入惡意代碼的情況,未來可以針對固件建立機密性、完整性和可用性的安全性評估,如固件中是否包含需要保護的秘密(如BIOS密碼),系統上運行的固件是否是正確的、最新的固件,是否被破壞或修改;安全區是否可以訪問其固件并正常運行,根據評估完成對固件的安全審計,增強用戶對SGX的信任度。
將SGX與可信計算技術結合來達到提升安全性目的的研究工作,自SGX被提出以來就一直在不斷地進行。SGX技術相比其他可信計算技術,除了具有安全存儲的功能,更重要的是可以從硬件層面對軟件運行時的環境進行隔離,保障軟件運行態的安全。如果將這一功能應用到可信環境的構建,把SGX與其他可信計算技術相結合,能夠達到保障可信應用運行態安全性的目的。例如,將TPM與SGX技術進行結合,從而構建更安全的可信計算環境的設計已經出現,正如上文中提到的TGX。雖然將SGX技術與TPM結合來提高安全性的想法在設計上成功,但是想要實際投入使用還有很多問題需要考慮,如接口層面和數據流傳輸過程中信息的安全性如何保障、引入其他可信計算技術對本就較為嚴重的性能消耗問題該如何解決,以及將SGX與可信計算技術結合產生更大的攻擊面會不會對安全性產生影響。
SGX相比其他可信計算技術在可信啟動領域具有更大的優勢。作為保護主機安全的重要技術手段,可信計算利用物理平臺上的可信芯片作為物理可信根,在系統引導階段根據度量配置策略,在系統啟動前對系統進行度量,然后通過比較度量值與基準值是否相等來判斷當前主機是否可信。當SGX作為物理可信根應用在可信啟動階段時,SGX局部可信的機制和集成在CPU中的便捷性讓它相比傳統可信計算技術更具優勢。傳統的可信啟動使用的物理可信根的TCB較大,效率也較低;而SGX不要求整個主機是可信的,只要求SGX所管理的安全區可信。基于SGX實現的可信啟動可分為硬件平臺的引導階段和操作系統的啟動階段兩部分。硬件平臺的引導階段從平臺加電開始,到BIOS將控制權交給Boot之前結束。在硬件平臺的引導期要保證SGX的可信性。操作系統的啟動階段從主引導區調入操作系統裝載程序開始,到操作系統內核運行完畢并運行Init進程之前。該階段需要使用SGX技術保證系統啟動過程的可信性。
以SGX作為可信根可以構建可信安全計算框架,為其他領域提供可信計算支持。SGX具有可以保障數據的安全存儲和軟件運行態安全的特點,使數據代碼的完整性和保密性能夠得到芯片級的安全保障,且允許用戶遠程對這些安全保護進行驗證。百度在此基礎上將SGX和FaaS云計算模型的優點進行有機結合,提出了全球首個通用安全計算平臺MesaTEE,并增加了內存安全保障和高兼容性支持,使金融、自動駕駛和醫療等安全敏感服務能夠安全地在遠程平臺上處理數據,通過SGX為人工智能、大數據分析、區塊鏈以及機器學習等領域提供可信安全計算平臺,MesaTEE在多個領域具有較好的應用前景。MesaTEE作為下一代可信安全計算框架,在未來仍需要研究人員共同努力,豐富SGX技術生態,為用戶提供更多的功能。
本文首先介紹了SGX技術的產生背景和相關機制,然后回顧了近年來學術界和工業界在可信計算研究領域通過SGX技術增強系統、應用程序和腳本語言的安全性的主要成果,對其性能、安全性和開發及應用方面的研究瓶頸和對應的解決方法進行了詳細研究,最后通過分析現有研究指明了未來研究的趨勢。本文對SGX技術在可信計算領域的研究與分析進行了深入分析和總結。期望通過這項工作,能夠給以后的研究者提供有益的借鑒與參考,為SGX技術未來的應用和發展做出貢獻。