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