可信執行環境介紹——ARM的TrustZone
近年來,互聯設備日益普及,迫使設備製造商們更加認真嚴肅的對待設備出現的安全問題。為了解決這些問題,專家們制定了一個新的規範,並且定義了一種方法來確保執行了該方法的設備上運行數據的完整性和機密性。
可信執行環境
可信執行環境(TEE)是主處理器內的安全區域。它運行在一個獨立的環境中且與操作系統並行運行。它確保TEE中載入的代碼和數據的機密性和完整性都得到保護。通過同時使用硬體和軟體來保護數據和代碼,這個並行系統比傳統系統(即REE,也就是富執行環境)更加安全。在TEE中運行的受信任應用程序可以訪問設備主處理器和內存的全部功能,而硬體隔離保護這些組件不受主操作系統中運行的用戶安裝應用程序的影響。TEE中的軟體和加密隔離相互保護不同的受信任應用程序。
ARM的TrustZone硬體技術可以支持TEE實現,本文將具體講解TrustZone,包括它的技術和問題。
具有TrustZone的ARM處理器實現了體系架構的安全擴展,其中每個物理處理器內核提供兩個虛擬內核,一個被認為是不安全的,稱為「non secure world」(不安安環境),另一個被認為是安全的,稱為「secure world」(安全環境),還有一種在兩者之間進行切換的機制,也就是監控模式。ARM結構圖如下:
如圖所示,TrustZone包含監視器,可選操作系統和可選應用程序,都運行在secure world中。TrustZone實現可以包括所有這些組件,像Qualcomm或Trustonic實現那樣,也可以像Nintendo Switch實現那樣,只有一個監視器。
實現TrustZone操作系統為添加可信功能提供了更加靈活的模型,該模型旨在為normal world(正常環境)提供額外的安全服務。
這些功能可以作為簽名的第三方應用程序(比如trustlet)使用,並在secure OS(安全操作系統)的安全環境下載入和執行,安全操作系統即運行在TrustZone上的操作系統。
trustlet完整性檢查是非常標準的,由hash表組成,每個hash代表著ELF二進位文件一個片段的hash,然後由trustlet發布者對hash表進行簽名,並且可以通過簽名下方的證書鏈來對簽名進行驗證。這種信任鏈可以通過FUSE(用戶控制項文件系統)中採用SHA256加密的根證書進行驗證,從而確保其完整性,如圖:
TrustZone用途寬廣,包括DRM技術(數字版權管理),訪問平台硬體特性,比如eFuse中存儲的RSA公鑰hash,硬體憑據存儲,安全引導和安全元素模擬等等。
安全環境和正常環境—環境切換機制
處理器當前運行的環境可以通過安全配置寄存器中的非安全位來確定。通過執行專用指令Secure Monitor Call(安全監視調用),可以觸發物理處理器從非安全環境進入監控模式的機制,它可以被視為監控模式軟體的異常。此外,主內存也被標記為非安全位,允許安全環境和非安全環境之間的內存隔離。
ARMv7的異常處理
ARMv7中的異常處理要求安全環境註冊一個向量的地址,當遇到SMC指令時,處理器將跳轉到這個地址。這個handler位於ARMv7中存儲在監視器向量基地址寄存器(MVBAR)中的地址的偏移量0x8處。
ARMv8的異常處理
在ARMv8中,引入了一個新的異常模型,它定義了異常級別的概念。
異常級別確定運行軟體組件的許可權級別(PL0到PL3)以及應使用哪種處理器模式(非安全和安全)來運行它。異常執行級別ELn與許可權級別PLn相對應,n越大執行級別的許可權越大。當異常發生時,處理器會定位到異常向量表並運行對應的處理器。
SMC生成的同步異常,由存儲在VBAR_EL3+0x600(即同步EL3異常處理器)處的處理器進行處理。
TrustZone商業實現
人們已經開發了幾種商業實現,移動平台上最常見的三種實現方式如下:
·Trustonic的Kinibi
·Qualcomm的QSEE
·TrustedCore(華為TEE操作系統)
在TrustZone的不同實現中發現了許多漏洞,而且在多個平台的安全引導中也發現了幾個漏洞,允許在TrustZone中進行代碼執行。下面討論其中的一些漏洞及其影響。
TrustZone自身漏洞
高通漏洞
Gal Beniamini發現了一些漏洞,包括安全環境用戶空間中的代碼執行和許可權提升,通過SMC處理程序或SVC(ARM中的系統調用)處理程序,在安全環境內核中進行代碼執行,從而導致KeyMaster Keys提取,TrustZone里的Linux內核劫持和解鎖BootLoader等。
Azimuth Security團隊發現了兩個漏洞,高通TrustZone中的write primitive內存寫入漏洞和任意代碼執行漏洞。
還有一個漏洞,允許向TrustZone內核的任何地址寫入值為0的dword。它可用于禁用TrustZone中memcpy函數的內存邊界驗證,精心構造任意的write primitive函數進行內存寫入。
另外,高通TrustZone還存在單點故障,TrustZone中存在很多獨立角色,但是其中一個角色出了錯誤會影響到其他所有組件。一個任意內存寫入漏洞,尤其在安全環境內核中,會導致整個安全模型崩潰。
Trustonic漏洞
與QSEE不同,Trustonic開發的TrustZone以前稱為t-base,後來改名為Kinibi,它有一個微內核,這意味著不再存在單點故障。雖然對Trustonic的TrustZone的公共研究較少,但有一些文章詳細介紹了t-base 內部漏洞以及安全環境用戶空間的一些漏洞。
從Qualcomm TrustZone獲取TEE操作系統要比Trustonic容易一些。比如,Qualcomm TrustZone可以直接從/dev/block目錄下的Block塊獲取,而Trustonic TrustZone必須通過逆向sboot才能獲取。
TrustZone強化的缺點
為了獲得良好的安全性能和減緩逆向和利用過程,TrustZone強化至關重要。然後,下面列出的幾點卻並不適用:
·兩種實現在生產中都存在許多調試字元串。
·在Kinibi上沒有ASLR,在QSEE上ASLR只有9位。
·Kinibi上沒有Stack Cookies。相反,QSEE上有Stack Cookies。
值得注意的是,一些TrustZone實現(例如為Nintendo Switch開發的實現)被加密存儲並在引導過程中被解密,這給攻擊者增加了額外的難度。
結論
一方面,使用TrustZone技術實現的安全模型通過安全環境和正常環境的分離提供了額外的分割,使得DRM解決方案有一定的保護作用,可以對抗惡意環境,如用戶端和內核端的感染系統。
另一方面,整個操作系統的開發是一項艱巨的任務,通常會存在很多bug。TrustZone中的操作系統也不例外。一個導致安全環境內核內存損壞的開發錯誤會導致安全環境整個系統的崩潰,讓它變得不再安全。同時,它也完全損壞了從安全環境可以訪問到的正常環境。
最後,如果在安全引導鏈中發現了漏洞,那麼在TEE操作系統啟動之前就可以對其進行入侵損壞,這種情況已經發生了幾次了。
下一篇文章我們將講解如何攻擊ARM的TrustZone,敬請期待。


TAG:嘶吼RoarTalk |