天天看點

ARM TrustZone技術簡介(一)

轉自:http://blog.csdn.net/Alex___Zhao/article/details/76647377

有幸做過将近1年時間的TrustZone OS,這裡對通用的TrustZone硬體技術做一點記錄,來記錄自己曾經工作過的領域。

TrustZone是ARM處理器特有的一個安全特性,其簡介可以在ARM的官方網站上找到

https://www.arm.com/products/security-on-arm/trustzone

從最簡單抽象的層面來一句話介紹TrustZone就是,将一個實體處理器分時複用為兩個邏輯處理器,一半是Rich Execution Environment 另一半是Trusted Execution Environment。 是以其本質上的原理很簡單,在安全界還有很多類似的想法,例如在一個虛拟化的環境中,一個虛拟機運作Rich System,另外一個虛拟機運作Trust System。這兩種是同一個道理。

目前使用TrustZone技術的主要集中在機頂盒,車載裝置還有最常見的隻能手機,由于其硬體隔離的特性,從Rich Execution Environment很難直接操作Trust那邊的代碼和資源,是以能夠極大的提高各種基于ARM的應用環境的安全性。  這裡面有一個奇葩的例外 iOS雖然使用ARM處理器但不使用TrustZone技術,其硬體設計中有一個而外的處理器叫Secure Enclave來處理器安全相關的任務,詳情請見

https://www.blackhat.com/docs/us-16/materials/us-16-Mandt-Demystifying-The-Secure-Enclave-Processor.pdf

而對于Android系統的裝置,TrustZone是廣泛使用的,例如高通家的qcomsee,三星家的trustonic,還有google目前的trusty 以及ARM Linaro自己家的op-tee都是TrustZone上運作的系統,其中trusty和op-tee是完全開源的,想深入學習trustzone的可以拿來學習和參考。

從這裡來看實際上一個ARMv8的處理器上可以運作兩個獨立的作業系統,一個是運作在Rich Execution Environment上的Linux,另外一個就是運作在Trusted Execution Environment之上的小核心, 為什麼是個小核心呢 :-), 小意味結構簡單,結構簡單意味着代碼少,代碼少意味着整體的bug少,攻擊面小,進而安全性才有提高, TrustZone隻是一個硬體隔離技術,如果願意完全可以在上面另外再跑一個Linux核心,但是這樣的話其打開了一個巨大無匹的攻擊面,是以對安全所做的努力就付諸東流了。而TrustZone上的系統也是越小,越緊湊,目的越單純越安全。

如下圖所示

ARM TrustZone技術簡介(一)

ARMv8處理器包括一共4個運作級别, 其中EL3運作級将一個實體處理器分割為兩個邏輯處理器,在Rich側,有EL0/EL1/EL2三個運作級别分别對應一個作業系統的使用者态,核心态,虛拟化态。 而在Trusted側,隻有EL0/EL1兩個運作級别,對應的作業系統的使用者态和核心态,是以在ARM處理器的Trust側并不支援硬體虛拟化。

而在Rich和Trust之間切換需要ARM處理器的硬體指令SMC觸發硬體異常,其會使系統從 EL1切換到EL3運作級由運作在EL3中的optee開源Secure Monitor的代碼儲存目前側的硬體上下文,然後切換另一側的緩存上下文到硬體寄存器中進而完成Rich和Trust之間的切換,其邏輯就像一個單純的核心線程上下文切換。

是以要使用一個完整的帶TrustZone支援的Linux,你需要在Linux側有驅動程式發出SMC指令進而切換到Trust側的OS,而在Trust側的OS處理完成之後同樣需要通過SMC(驅動或者系統調用)指令切換回Rich側的Linux。

而對Trust側系統的實作,國際組織GP對其有一部分規範和要求,可以參考

https://github.com/OP-TEE/optee_os/blob/master/documentation/globalplatform_api.md

這裡是op-tee對其的GP支援的一部分總結。