Trustzone硬件架構(gòu)詳解
一、硬件架構(gòu)
1、AXI總線
(1)通過系統(tǒng)總線的NS位保護(hù),為1表示Non-Secure,為0代表Secure
(2)通過AXI-to-APB bridge保護(hù)外設(shè)安全,安全的連接外設(shè)
(3)內(nèi)存混疊:cache增加了一個(gè)tag位,標(biāo)志著Secure和Non-Secure,由32位地址擴(kuò)充到33位地址(要注意保持?jǐn)?shù)據(jù)的連貫性),數(shù)據(jù)分兩份分別保存在Secure和Non-Secure中,在修改的時(shí)候要注意保持?jǐn)?shù)據(jù)的一致。
2、處理器架構(gòu)
2.1 世界切換:
(1) 用時(shí)間片劃分的方式使用兩個(gè)虛擬內(nèi)核,通過monitor mode進(jìn)行切換。
(2) 通過SMC指令、IRQ、FIQ或者異常(需要配置)進(jìn)入monitor mode
(3) Monitor用于保存上下文,恢復(fù)被切換的世界
(4) 除非位于monitor,否則CP15中的SCR中的NS位標(biāo)志著world。當(dāng)位于monitor mode時(shí),都是處于安全世界,但是當(dāng)NS為1時(shí),可以接受normal world的數(shù)據(jù)。
(5) 如果在Secure模式中把NS置為1,將會(huì)變?yōu)閚ormal模式,使得normal看見secure中的敏感數(shù)據(jù)(不建議)。
2.2 L1高速緩存系統(tǒng):
(1) L1 memory中最主要的部分是MMU,對(duì)兩個(gè)世界的虛擬地址進(jìn)行映射,分別獨(dú)立。
(2) Non-Secure在進(jìn)行地址映射時(shí),忽略NS位(因?yàn)樗荒茏x取到NS=1的數(shù)據(jù)),Secure選擇一個(gè)memory進(jìn)行讀取,這使得secure可以讀取到Non-Secure世界和Secure世界的數(shù)據(jù)。
(3) 為了快速轉(zhuǎn)換世界,在TLB上標(biāo)記了入口,不同世界執(zhí)行不同路徑,切換世界之后不用重置TLB。
(4) Cache上加了一個(gè)tag位,可動(dòng)態(tài)改變,Cache動(dòng)態(tài)更新時(shí),Secure和Non-Secure可以任意驅(qū)逐。
(5) Non-Secure和Secure通過World-shared memory共享數(shù)據(jù),使得可以不用重置cache。
(6) TCM:緊耦合內(nèi)存,和Cache功能差不多,程序代碼可以精確地控制什么函數(shù)或代碼放在哪兒(RAM里)。當(dāng)然TCM永遠(yuǎn)不會(huì)被踢出主存儲(chǔ)器,因此,他會(huì)有一個(gè)被用戶預(yù)設(shè)的性能,而不是象cache那樣是統(tǒng)計(jì)特性的性能提高。 TCM對(duì)于以下幾種情況的代碼是非常有用、也是需要的:可預(yù)見的實(shí)時(shí)處理(中斷處理)、時(shí)間可預(yù)見(加密算法)、避免cache分析(加密算法)、或者只是要求高性能的代碼(編解碼功能)。它有兩個(gè)獨(dú)立塊,可以分別分給Secure和Non-Secure,也可以分別獨(dú)立控制。
(7) ACP:加速一致性接口,允許過程化語言對(duì)CPU存儲(chǔ)空間的一致性訪問,是AXI的衍生接口。ACP代表著處理器處理外部(可選),使ARM處理器中Cache層次定位到外設(shè),減少了對(duì)Cache的清理,改善了與外設(shè)共享信息的軟件的執(zhí)行速度,如DMA。
(8) AXI衍生系統(tǒng)通過ARIDMx、AWIDMx區(qū)分processor內(nèi)部處理和以ACP為代表的外部處理。
2.3 安全中斷:
(1) 允許對(duì)安全中斷進(jìn)行靈活的配置,安全中斷不能被normal世界復(fù)制,建議用IRQ進(jìn)入normal world,用FIQ進(jìn)入secure world,如果處理器正在使用正確的內(nèi)核,那么monitor不用切換世界。
(2) 為了防止惡意軟件掩蓋安全世界的敏感中斷,CP15中有一個(gè)配置寄存器,防止更改F(FIQ mask)位和A(external abort mask)位,這個(gè)控制寄存器只能被Secure world接觸。
(3) 有三個(gè)額外的中斷表,分別代表Normal world、Monitor、Secure world。
(4) Secure world的基地址使用VINITHI重置,未維護(hù)的話是0x00000000,否則就是0xFFFF0000
(5) 各個(gè)向量表可以在運(yùn)行時(shí)變化,通過VBAR實(shí)現(xiàn)。
(6) V位可以控制搞地質(zhì)向量能否被使用,如果設(shè)置了V位,處理器異??偸菑膕taring(0xFFFF0000)開始,V位是堆積的,是得Normal world和Secure可以獨(dú)立配置向量表,而Monitor異常表總是被明確定義在MVBAR中。
(7) 各種配置選項(xiàng)被當(dāng)作是敏感數(shù)據(jù),只有Secure可以修改,Normal只能read,而設(shè)置是非敏感的,可以被任意世界加載,使得各個(gè)世界可以獨(dú)立控制。有一些只有安全世界可以修改的全局配置,但是可以影響Norma world。尤其是在一些低級(jí)硬件中,比如Cache lockdown,合法的軟件在normal world中執(zhí)行時(shí)需要的很少或者不用改變。
(8) ARM可以支持多處理器(1-4),可選SMP和AMP模式,都需要維護(hù)數(shù)據(jù)一致性。多處理器系統(tǒng)一般有ACP,每個(gè)世界都有Secure和Normal,通過MMU進(jìn)行獨(dú)立控制。
(9) 一個(gè)明確的軟件回喜安智安全世界的并發(fā)執(zhí)行,減少安全風(fēng)險(xiǎn),一致性硬件會(huì)使用Cache tag,要Secure和Norma保持一致。
(10) SCU(偵測(cè)控制單元)中有一個(gè)決定自己配置的配置寄存器,SCU中的ACR決定哪個(gè)處理器可以改變SCU配置寄存器以及是否可以重新編制。
(11) TrustZone-aware允許處理Secure和Non-secure中斷,禁止非安全內(nèi)存讀取或修改安全中斷配置,當(dāng)一個(gè)中斷被配置為安全世界的中斷,Non-secure就不能修改配置了,安全世界中斷的優(yōu)先級(jí)大于normal中斷,防止Secure使用中斷時(shí)被normal world攻擊。
(12) 只產(chǎn)生FIQ和IRQ中斷,其他中斷可以被配置為FIQ和IRQ。
2.4 調(diào)試架構(gòu):
分處理器調(diào)試和系統(tǒng)調(diào)試,debug control signal可以配置為全局允許或不允許,但是debug需要很多資源,為了防止被攻擊,建議全局不允許。
(1) 處理器中斷可以分別獨(dú)立控制為SPIDEN、SPNIDEN、SUIDEN、SUNIDE,具體見3-17。
(2) 全局調(diào)試允許信號(hào),DBGEN/NIDEN,著可以使核的可視化調(diào)試不可用,包括normal world的調(diào)試。
(3) 多處理器系統(tǒng)中,各個(gè)處理器獨(dú)立控制,在SMP模式下,侵略性debug處理器可以修改不可侵略debug處理器的數(shù)據(jù)。
(4) 執(zhí)行分析:CP15中有一個(gè)執(zhí)行監(jiān)視器,在運(yùn)行時(shí)間對(duì)代碼計(jì)時(shí)和對(duì)處理器事件計(jì)數(shù),如Cache的調(diào)入調(diào)出。
(5) System debug用的是ARM CoreSight和跟蹤技術(shù),CoreSight不用標(biāo)準(zhǔn)的AXI-to-APB,它需要接受Non-secure內(nèi)存事物。
(6) Debug模式會(huì)使normal直接影響secure和monitor。