SGX的內部組件概述(一)
SGX介紹
SGX是Intel開發的新的處理器技術,可以在計算平台上提供一個可信的空間,保障用戶關鍵代碼和數據的機密性和完整性。SGX全稱Intel Software Guard Extensions,顧名思義,其是對因特爾體系(IA)的一個擴展,用於增強軟體的安全性。
SGX是在2015年推出的第六代英特爾酷睿處理器,基於Skylake微架構。可以通過執行帶有結構化擴展功能葉(Structured Extended Feature Leaf)標誌的CPUID指令來檢查SGX支持,並檢查EBX寄存器的第二位是否已設置。為了能夠使用SGX,它必須由BIOS啟動,並且目前,只有少數BIOS支持該技術,這是它沒有被廣泛使用的原因之一。
SGX的保護方式並不是識別和隔離平台上的所有惡意軟體,而是將合法軟體的安全操作封裝在一個enclave中,保護其不受惡意軟體的攻擊。而且執行SGX的許可權非常高,特權或者非特權的軟體都無法訪問enclave,也就是說,一旦軟體和數據位於enclave中,即便操作系統管理員和VMM(Hypervisor)也無法影響enclave裡面的代碼和數據。Enclave的安全邊界只包含CPU和它自身。SGX創建的enclave也可以理解為一個可信執行環境TEE(Trusted Execution Environment)。不過其與ARM TrustZone(TZ)還是有一點小區別的,TZ中通過CPU劃分為兩個隔離環境(安全的環境和正常的環境),兩者之間通過SMC指令通信;而SGX中一個CPU可以運行多個安全enclaves,並發執行亦可。當然,在TZ的安全的環境內部實現多個相互隔離的安全服務亦可達到同樣的效果。另外,SGX是針對桌面和伺服器平台的。
總結來說,Intel SGX的安全性能有以下3點:
1.把應用程序分為兩部分:安全應用程序和非安全應用程序;
2.將合法軟體的安全操作封裝在一個enclave中;
3.當調用enclave函數時,只有enclave內部的代碼才能查看其數據,並始終拒絕外部訪問;當調用結束時,enclave的數據會留在受保護的內存中。
安全執行環境是主機進程的一部分,這意味著:
1.應用程序包含自己的代碼,數據和enclave;
2.enclave也包含自己的代碼和自己的數據;
3.SGX保護enclave代碼和數據的機密性和完整性;
4. Enclave接入點是在編譯期間預先定義的;
5.支持多線程(但不能輕易實現);
6.enclave可以訪問其應用程序的內存,但應用程序的內存則無法訪問enclave。
指令介紹
·Intel SGX定義了18條新指令,其中13條由管理者使用,5條由用戶使用。所有這些指令都以微代碼實現,以便可以修改指令的具體行為。以下是18條新指令的完整說明:
·EADD:添加頁面;
·EENTER:進入enclave;
·EBLOCK:阻止EPC頁面;
·EEXIT:退出enclave;
·ECREATE:創建安全區;
·EGETKEY:創建加密密鑰;
·EDBGRD:通過調試器讀取數據;
·EREPORT:創建加密報告;
·EBDGWR:通過調試器寫入數據;
·ERESUME:重新進入安全區;
·EINIT:初始化enclave;
·ELDB:載入EPC頁面為已阻止;
·ELDU:載入EPC頁面為未阻止;
·EPA:添加版本數組(version array);
·EREMOVE:從EPC中刪除頁面;
·ETRACE:激活EBLOCK檢查;
·EWB:回寫或是讓EPC頁面無效;
其中EENTER, EEXIT, EGETKEY, EREPORT,ERESUME為用戶使用的指令。
數據結構
另外,Intel SGX還定義了13種新的數據結構,其中8種用於enclave管理,3種用於內存頁面管理,2種用於資源管理。以下是13種新的數據結構的完整說明:
·SGX Enclave控制結構(SECS);
·線程式控制制結構(TCS);
·存儲狀態區(SSA);
·頁面信息(PAGEINFO);
·安全信息(SECINFO);
·分頁加密元數據(PCMD);
·版本數組(VA);
·Enclave頁面緩存映射(EPCM);
·Enclave簽名結構(SIGSTRUCT);
·EINIT令牌結構(EINITTOKEN);
·報告(REPORT);
·報告目標信息(TARGETINFO)
·密鑰請求(KEYREQUEST)
我會在以下詳細介紹相關的這寫指令和數據結構,然後對它們如何實現哪種安全功能進行詳細解釋。
內存保護過程
enclave頁面緩存(EPC)
Enclave代碼和數據放置在被稱為Enclave Page Cache(EPC)的特殊內存區域中,該內存區域使用內存加密引擎(MEE)進行加密,該內存區域只存在於一種專用的晶元上。內存匯流排上的外部讀取只能觀察到加密數據。而頁面只會在處理器內核中才能被解密,這個密鑰只會在enclave頁面緩存啟動時生成並存儲在CPU中。
此時傳統頁面檢查已被擴展,以防止外部訪問EPC頁面。
Enclave頁面緩存映射(EPCM)
Enclave頁面緩存映射(EPCM)結構用於存儲頁面狀態,它位於受保護的內存中,其大小限制了EPC的大小(由BIOS設置,最大128MB)。EPCM包含了每個頁面的配置、許可權和類型。
內存管理
數據結構
頁面信息(PAGEINFO):
EPC管理指令會用以PAGEINFO結構的參數來引用頁面。這些參數包含頁面的線性和虛擬地址,以及指向SECINFO和SECS結構的指針。
安全信息(SECINFO):
SECINFO結構用於存儲頁面元數據,包括訪問許可權(讀/寫/執行)和類型(SECS,TCS,REG或VA)。
分頁加密元數據(PCMD):
PCMD結構用於跟蹤那些從EPC中被清除的頁面的相關聯的元數據,它包含頁面所屬的enclave標識,指向SECINFO結構和MAC的指針。
版本數組(VA):
VA結構用於存儲從EPC中被清除的頁面的版本號,它是一種特殊的頁面類型,包含512個8位元組的插槽來存儲版本號。
相關指令
EPA:該指令分配一個4KB的內存頁面,其中包含頁面版本號數組(VA)以防止重播。每個元素長64位。
EBLOCK:該指令會阻止被那些正準備從EPC中清除的頁面的所有訪問,將來對這些頁面的所有訪問都將導致頁面錯誤。
ETRACK:該指令負責從EPC中刪除頁面,不過前提是頁面必須被阻止訪問,並且不能被TLB引用。在將其寫入外部內存之前,要先對頁面進行加密,生成版本號和元數據,並執行最終的MAC。
ELDB/ELDU:該指令會將先前被清除的頁面載入到內存中,以檢測是它們否處于禁止訪問狀態。它會檢查元數據的MAC、版本號(來自相應的VA條目)和頁面加密內容。如果先前被清除的頁面處于禁止訪問狀態,則頁面內容被解密並放置在所選的EPC頁面內,並且相應的VA條目被刪除。
安全功能如何實現的過程
EPC內存由BIOS定義,大小有限。 不過SGX有一種方法可以從EPC中刪除頁面,將其放在不受保護的內存中,並稍後恢復它。由於EPC頁面管理指令允許加密頁面並生成其他元數據,因此頁面保持相同的安全屬性。在引用此頁面的所有緩存條目都已從所有處理器邏輯內核中刪除之前,不能刪除該頁面,且以頁面的粒度大小(4KB)導出或導入內容。
存儲內容
SGX Enclave控制結構(SECS):
每個enclave都與SECS結構相關聯,該結構將包含其元數據(例如其哈希值和大小)。任何安全或非安全代碼都無法訪問它,只能由處理器本身可以訪問。
線程式控制制結構(TCS):
每個enclave至少與一個TCS結構相關聯,該結構是進入enclave的執行點。由於SGX支持多線程,因此enclave可以使用與TCS一樣多的活動線程。與SECS結構一樣,它只能由處理器訪問。
存儲狀態區(SSA):
每個TCS至少與一個SSA結構相關聯,該結構可以在異常和中斷處理期間保存處理器的狀態。它在退出時寫入,在恢復時讀取。
棧和堆:
每個enclave都可以使用它的棧和堆,當進入和退出時,RBP和RSP寄存器會被保存,但它們的值不會被改變。堆不在內存內部進行處理,enclave有自己的分配器。
處理器保護過程
Enclave的創建和檢查過程
Enclave檢查(Enclave Measure):
每個enclave都由其屬性以及頁面的位置、內容和保護的哈希值表示。具有相同哈希的兩個enclave是相同的,該方法被稱為MRENCLAVE,用於檢查enclave的完整性。
簽名檢查(Signer Measure):
每個enclave也由其管理者進行簽名, MRSIGNER包含管理者公鑰的哈希值,MRENCLAVE和MRSIGNER使用SHA-256哈希函數生成。
數據結構
EINIT令牌結構(EINITTOKEN):
EINIT指令使用EINITTOKEN結構來檢查是否允許執行enclave。它包含enclave的屬性,哈希和簽名者身份,它使用啟動密鑰執行的HMAC進行身份驗證。
enclave簽名結構(SIGSTRUCT):
每個enclave都與一個SIGSTRUCT結構相關聯,該結構由管理者簽名並包含enclave方法,簽名者公鑰,版本號(ISV,反映安全級別)和產品標識符(ISVPRODID,以區分同一管理者的enclave) 。它負責確保enclave未被修改,然後使用其他密鑰重新簽名。
指令說明
ECREATE:該指令負責實例化一個新的enclave,定義其地址空間和信任root ,這些信息存儲在新分配的SECS中。
EADD:該指令允許向enclave添加新頁面,此時操作系統只負責選擇頁面及其內容。 EPCM的初始條目表示頁面類型及其保護。
EEXTEND:該指令允許通過256位元組的代碼塊將頁面內容添加到enclave檢查中,必須調用16次才能將完整頁面添加到enclave檢查中。
EINIT:該指令在初始化之前會檢查enclave是否與其EINITTOKEN(相同的檢查屬性)相對應,它還會檢查令牌是否已使用啟動密鑰簽名。
EREMOVE:該指令負責徹底從enclave中刪除頁面。
保護過程
1.應用程序會請求將其enclave載入到內存中;
2.ECREATE指令負責創建並填充SECS結構;
3.使用EADD指令將每個頁面載入到受保護的內存中;
4.使用EEXTEND指令將每個頁面添加到enclave檢查中;
5.EINIT指令最終完成對enclave的創建;


※iOS應用程序重打包和簽名詳盡指南Part 1
※Necurs殭屍網路的新變化
TAG:嘶吼RoarTalk |