1. 程式人生 > >ARM TrustZone技術簡介(一)

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上的系統也是越小,越緊湊,目的越單純越安全。

如下圖所示


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支援的一部分總結。