標籤:
第一章TrustZone的硬體結構1. 系統結構
TrustZone硬體架構旨在提供安全架構,從而使裝置能夠抵禦將遇到的眾多特地威脅。
TrustZone技術可提供允許SoC設計人員從大量可在安全環境中實現特定功能的組件中進行選擇的基礎結構,而不提供固定且一成不變的安全解決方案。
架構的主要安全目標是支援構建可程式化環境,以防止資產的機密性和完整性受到特定的攻擊。具備這些特性的平台可用於構建一組範圍廣泛的安全解決方案,而使用傳統方法構建這些解決方案將費時費力。
可通過以下方式確保系統安全:隔離所有SoC硬體和軟體資源,使他們分別處於兩個地區(用於安全子系統的安全區域以及用於儲存其他所有的內容的普通地區)中。支援TrustZone的AMBA3 AXITM匯流排構造中的硬體邏輯可確保普通地區組件無法訪問安全區域資源,從而在這兩個地區之間構建強大邊界。將敏感資源放入安全區域的設計,以及在安全的處理器核心中可靠運行軟體可確保資產能夠抵禦眾多潛在攻擊,包括那些通常難以防護的攻擊(例如,使用鍵盤或觸控螢幕輸入密碼)。通過在硬體中隔離安全敏感的外設,設計人員可限制需要通過安全評估的子系統的數目,從而在提交安全認證裝置時節省成本。
TrustZone硬體架構的第二個方面是在一些ARM處理器核心中實現擴充。通過這些額外增加的擴充,單個處理器核心能夠以時間片的方式安全有效地同時從普通地區和安全區域實行代碼。這樣,使無需使用專用安全處理器核心,從而節省了晶片面積和能源,並且允許高效能安全軟體與普通地區作業環境一起運行。 更改當前啟動並執行虛擬處理器後,這兩個虛擬處理器通過新處理器模式(監控模式)來實現環境切換。
物理處理器用於從普通地區進入監控地區的機制受到密切控制,並且這些機制始終被視為監控模式軟體的異常。要監視的項可由執行專用指令(安全監控調用(SMC)指令)的軟體觸發,或由硬體異常機制的子集觸發。可對IRQ、FIQ、外部資料中止和外部預取中止異常進行配置,以使處理器切換到監控模式。
在監控模式中執行的軟體是實現定義的,但它通常儲存目前範圍的狀態,並還原切換到的地區位置的狀態。然後,它將執行從異常返回的操作,以在已還原地區中重新啟動處理過程。TrustZone硬體架構的最後一個方面是安全感知調試基礎結構,它可控制對安全區域調試的訪問,而不會削弱普通地區的調試可視化。
1.1 AMBA3 AXI 系統匯流排
為了支援TrustZone技術,AXI匯流排上每個讀寫通道都增加了一個額外的控制訊號: AWPROT[1]:匯流排寫事務控制訊號—低電平為安全寫事物,高電平為非安全寫事物。 ARPROT[1]:匯流排讀事物控制訊號—低電平為安全讀事物,高電平為非安全讀事物。
當主裝置向匯流排提出讀寫事物請求時必須將控制訊號發送到匯流排上。匯流排或者從裝置的解碼邏輯必須能夠解釋這些訊號,確保安全從裝置不被非安全的主裝置訪問。如果非安全主裝置訪問安全從裝置,則訪問失敗。訪問失敗時可能會產生一個錯誤訊號,也可能什麼也不做,這依賴於具體硬體實現。錯誤訊號可能由從裝置或者匯流排產生,取決於外設的硬體設計和匯流排配置。
1.2 AMBA3 APB 外圍匯流排
TrustZone架構一個最有用的特性就是其有保護外設安全的能力,比如:中斷控制器、計時器及使用者I/O裝置。這使得安全環境能夠解決比僅僅提供一個安全的資料處理環境更廣泛的安全問題。安全中斷控制器和計數器允許非中斷安全任務來監控系統,安全時鐘源保證了堅固的DRM,安全鍵盤使得使用者密碼輸入能夠得到安全保障。
AMBA3 規範包含了一個低門數,低頻寬的外設匯流排,被稱作進階外設匯流排(APB),APB通過AXI-to-APB橋串連到系統匯流排上。APB匯流排沒有帶對應的NS位,這使得已經存在的AMBA2 APB外設與實現了TrustZone技術的系統相容。AXI-to-APB負責管理APB外設的安全。
1.3 記憶體隔離
Cache tags所攜帶的額外的NS位,可以看作是第33根地址線。處理器訪存時,除了將記憶體位址發送到AXI匯流排上之外,還需要將AWPROT或ARPROT控制訊號發送到匯流排上,以表明本次訪存是安全事務還是非安全事務。如果當前系統處於安全狀態,控制訊號電平的高低取決於頁表項的NSTID值。如果當前系統處於非安全狀態,控制訊號始終為高電平,即非安全事務。
TrustZone通過兩個裝置來保障實體記憶體的安全,一個是TrustZone地址空間控制器(TZASC),另一個是TrustZone儲存適配器(TZMA):
1> TZASC是AXI的一個主裝置,用來將它的從裝置的地址空間劃分為一系列記憶體空間。通過運行在安全環境的安全軟體,可以將這些區間配置為安全的或者非安全的。TZASC可以拒絕非安全的事物訪問安全記憶體區間。可以劃分的記憶體區間數以及TZASC AXI介面的匯流排寬度取決於具體的SoC設計。使用TZASC的主要目的是用來將一個AXI從裝置進行分區為幾個安全裝置,比如說片外DRAM。因為多串連一塊DRAM晶片需要額外的引腳和印刷電路板面積,並且記憶體本身也是要一定費用,所有通過對記憶體進行分區,使它能夠包含安全和非安全分區,比兩個執行環境各採用一塊單獨的記憶體更經濟。ARM動態記憶體控制器(DMC),它本身並不支援建立安全和非安全分區。為了建立安全分區,可以將DMC接到TZASC上。TZASC只用來支援儲存映射裝置,不能用於塊裝置,比如NAND FLASH。
2> TZMA使得可以對片上靜態記憶體RAM或者片上ROM劃分安全分區。將單獨的一個大記憶體劃分為安全區和非安全區比為每一個執行環境提供一個單獨的記憶體要經濟。TZMA支援為最大2M的靜態記憶體劃分分區低地址部分為安全的分區,高低地部分為不安全的分區。安全分區和非安全分區的分界點是4KB的整數倍,分區的具體大小通過TZMA的輸入訊號ROSIZE控制,這個訊號來自於TrustZone保護控制器(TZPC)的輸出訊號TZPCROSIZE。通過對TZPC編程可以動態地配置安全區大小。TZMA不能用來對動態記憶體進行分區,也不能用在要求幾個分區的情況,這些情況可以使用TZASC。
2 處理器結構
每個帶TrustZone安全擴充的處理器核都有兩個虛擬處理器核,每個處理器核分屬不同的執行環境(安全和非安全),並引入了一個特殊的機制——監控模式,負責不同執行環境間的切換。非安全虛擬處理器能僅僅訪問非安全系統資源,但安全虛擬處理器能訪問所有的資源,2-1所示
2.1 監控器和監控模式
在帶TrustZone安全擴充的ARM處理器的CP15副處理器中有一個安全配置寄存器(SCR),該寄存器中有一個NS位,這個NS位指明當前系統的狀態,寄存器的格式2-2所示。如果NS為0,則當前系統處於安全態;如果NS為1,則當前系統處於非安全態。但當系統處於監控模式時,不管NS位是否為0,都可以訪問安全環境的資源。這個NS位不僅影響CPU核心和記憶體子系統,還可以影響片內外設的工作。NS位是TrustZone對系統所做的關鍵擴充。系統的安全狀態與系統的使用者模式和特權模式無關,也就是說使用者態程式也可以運行在安全態,而運行特權態程式時系統也可能處於非安全態。NS位只能被運行在安全態且處於特權模式的軟體改變,系統在非安全狀態時不能訪問SCR寄存器。安全環境的軟體在安全態下運行,普通環境軟體在非安全態下運行。因此,在切換執行環境時,同時需要改變系統的安全狀態。
從非安全狀態可以通過三種異常進入監控模式:
1. 執行SMC指令,SMC指令是一條特殊指令,它類似於軟體中斷指令(SWI),通過它來調用監控器常式; 2. 外部中止,包括預取指外部中止和資料外部中止,外部中止是在訪問儲存系統時發生但不會被MMU檢測到的異常,通常發生在普通環境訪問安全環境的資源時; 3. 中斷,包括FIQ中斷和IRQ中斷。
其中,第一種進入監控模式的方式是無條件的,後兩種情況依賴於SCR寄存器的配置。與監控模式相關的SCR寄存器各個欄位的定義如下:
1> EA,預設為0,表示發生外部中止時處理器進入中止模式,如果為1,表示發生外部中止時處理器進入
監控模式;
2> IRQ,預設為0,表示發生IRQ中斷時處理進入中止模式,如果為1,表示發生IRQ中斷時處理器進入監
控模式;
3> FIQ,預設為0,表示發生FIQ中斷時處理進入中止模式,如果為1,表示發生FIQ中斷時處理器進入監 控模式。
通過以上三種異常進入監控模式都會觸發監控器的例外處理常式,監控器的具體功能,是由軟體開發人員定義的,但執行環境的切換都是通過監控器進行的。
如果安全環境的軟體在非監控模式下直接將SCR的NS位設定為1,則系統直接進入非安全狀態,這使得非安全狀態有了看到正在流水線的指令,以及正在寄存器中的資料的可能。如果這些指令和資料都是敏感資訊的話,這將給系統帶來安全威脅。因此,通常只有監控可以直接修改SCR的NS位。
2.2 對Cache和MMU的擴充
在帶TrustZone安全擴充的處理器核心中,為每個tag域增加了一個NS位,用來標識這一行的安全狀態。如果NS為0,則這一行處於安全態;如果NS為1,則這一行為非安全態。不管Cache行的安全狀態如何,只要沒被鎖住,都可以被換出到主存中,為新的緩衝資料留出儲存空間。處於安全狀態的Cache行把處於非安全態的Cache行換出,處於非安全態的Cache行把處於安全態的Cache行換出都是可能的。
在帶TrustZone安全擴充的處理器中,有兩個頁表基地址寄存器,不同安全狀態使用不同的頁表基地址寄存器,相當於有兩個虛擬MMU,每個虛擬MMU分屬不同的虛擬處理器核,這使得每個執行環境有一個本地的頁表集,各個執行環境從虛地址到物理地址的轉換是獨立的,在切換執行環境時,不需要切換頁表。
在帶TrustZone安全擴充的處理器的頁表項中包含一個NS標位,即非安全性識別碼(NSTID),如果當前系統處於非安全狀態,則忽略NSTID。一般安全環境的記憶體頁表項的NSTID設定為0,屬於普通環境的記憶體頁表項的NSTID設定為1。與此相對應,TLB也作了相應的擴充,每行的tag域也增加了一個NSTID。訪問記憶體時需要將虛擬位址和頁表中的NSTID與TLB的tag域中的虛擬位址和NSTID值進行比較。在TLB中增加的NSTID用來標誌這一行是對來自哪個執行環境的虛擬位址的轉換,這使得兩個執行環境的地址轉換資料可以同時在TLB中存在,執行環境切換時不需要重新整理TLB,加快了執行環境的切換速度。
圖2-3展示了帶TrustZone安全擴充的ARM處理器訪問儲存空間的過程。
1> 處理器執行訪存指令,硬體將虛擬位址以及NSTID給TLB,使它產生一次地址轉換;
2> TLB將虛擬位址和NSTID與TLB各行tag域中的虛擬位址和NSTID值進行比較,如果匹配則載入與虛擬位址和NSTID對應的物理地址和NS值;如果沒有找到匹配項,則由MMU尋找頁表,並將尋找結果緩衝到TLB中。如果當前系統處於非安全狀態,在將MMU頁表尋找結果緩衝到TLB中時,必須強制NS為1,如果當前系統處於安全狀態,NS的值取決於NSTID的值。
3> Cache行的tag與來自TLB的物理地址與NS進行匹配,如果匹配成功,將從Cache行中返回資料,否則從外部儲存系統中載入Cache行。
2.3安全中斷
監控器有在沒有任何執行環境的代碼協助下就能夠直接捕獲FIQ和IRQ的能力,這可以為安全中斷源建立一個靈活的中斷模型。當執行流到達監控器的時候,監控器能夠將插斷要求路由到相應的中斷處理常式,如果和安全中斷控制器結合起來就可以讓安全中斷源發出的中斷不能被普通環境軟體操作。
ARM推薦使用IRQ作為普通的環境中斷源,FIQ作為安全環境中斷源。大多數的作業系統都採用IRQ作為中斷源,所以採用FIQ作為安全中斷源意味著對普通環境作業系統的改動最少。如果中斷髮生在相應的執行環境,則不需要進行執行環境的切換,否則陷入到監控器中,由監控器切換執行環境。一般情況下,執行監控器代碼的時候應該關中斷。
為了防止普通環境的惡意軟體屏蔽掉安全環境的中斷,在CP15副處理器中包含了一個配置寄存器,能夠用來阻止普通環境軟體修改CPSR的F位(FIQmask)和A位(externalabortmask)。這個控制寄存器只能夠被安全環境的軟體訪問。當然,普通環境有屏蔽IRQ中斷的權利。
2.3.1TrustZone異常向量表
在帶TrustZone安全擴充的處理器帶有三個異常向量表,一個是普通環境的異常向量表,一個是安全環境的異常向量表,還有一個是監控器的異常向量表。
在系統開機時,安全環境的異常向量表的基地址取決於處理器輸入訊號VINITHI,如果該訊號是低電平,則異常向量表的基地址為低地址,記0x00000000,如果該訊號是高電平,則異常向量表的基地址為高,即0xffff0000。其它向量表的基地址在開機的時候是未定義的,在使用前必須由軟體佈建。
與以前的普通ARM處理器不同,每個異常向量表的位置在運行時可以動態地移動,只需要將新的異常向量表基地址寫入到CP15副處理器的向量基地址寄存器(VBAR)就能完成。
普通環境和安全環境異常向量表基地址除了與向量基地址寄存器有關外,還與處理器控制器的V位有關。如果V位被設定了,則異常向量表基地址採用高地址,而與VBAR無關。安全狀態下和非安全狀態下的V位是獨立的,這使得安全環境和普通環境可以獨立的設定向量表基地址是否採用高地址。V位只是用於安全環境和普通環境,監控器的異常向量表的基地址有監控器的異常向量表基地址寄存器指定。
2.3.2TrustZone中斷控制器
TrustZone的中斷控制器(TZIC)用來配置和截獲安全中斷源的中斷訊號,為安全中斷系統提供軟體介面。可以將TZIC與傳統的向量中斷控制器(VIC)通過菊花鏈的方式串連組成兩級中斷控制系統,完成普通中斷與安全中斷的隔離。TZIC是第一級中斷控制器,所有中斷源的插斷要求都是串連在TZIC上的,它最先截獲裝置的插斷要求。通過對TZIC的TZICIntSelect寄存器進行編程,可以對中斷源產生的中斷類型進行設定。如果TZICIntSelect中的某一位為1,則相應中斷源的插斷要求被配置為FIQ中斷,如果為0,則該中斷源的插斷要求將交由第二級中斷控制器VIC處理。凡是由TZICIntSelect配置為FIQ中斷的中斷源提出的插斷要求都將繞過VIC而直接交由TZIC處理,經過TZIC的中斷屏蔽和中斷判優後向處理器提出插斷要求。沒有被TZICIntSelect設定為FIQ中斷的中斷源具體會被設定為FIQ還是IRQ這將由VIC的VICIntSelect寄存器來決定了,當然一般情況下應該配置為IRQ,如果被配置為FIQ,插斷要求又將被反饋給TZIC。TZICIntSelect寄存器的複位值為0,也就是說預設所有的中斷都交給VIC處理,這樣對不支援TrustZone的系統來說,可以把TZIC看作是完全透明的。
2.3.3外設保護
APB匯流排沒有與AXI那樣的與TrustZone安全狀態相關的控制訊號,因此不需要改變原有的外設設計,可以直接將原有外設串連到APB匯流排上。APB匯流排上的外設的安全由AXI-to-APB橋來負責,AXI-to-APB橋既提供了AXI匯流排介面由提供APB匯流排介面。
AXI-to-APB橋包含了地址解碼邏輯,用來在AXI匯流排發出一個事務的時候選中相應的外設。AXI-to-APB橋包含了一個TZPCDECPORT輸入訊號,對應於每個匯流排上的外設。這個訊號用來決定外設是配置為安全的還是非安全的,AXI-to-APB橋會拒絕非安全事務訪問安全外設。TZPCDECPORT輸入訊號可以在SoC設計時靜態地設定,也可以通過對TrustZone保護控制器(TZPC)進行編程,在程式運行時動態地設定。
圖2-5展示了一個AXI-to-APB橋控制了4個外設,TZPC的安全狀態是在SoC設計時確定的,它被設定為安全裝置,只能被安全的軟體環境使用。定時器和系統時鐘在SoC設計時被設定為非安全的,鍵盤和滑鼠介面的安裝狀態是可以動態改變的。安全環境的軟體可以在運行時對TZPC進行編程,來改變輸入到AXI-to-APB橋的訊號,從而將鍵盤滑鼠介面在安全和非安全之間切換。這樣設計使得外設大部分時間都處於非安全狀態,可以被普通環境使用。然後又可以將他們短暫地切換到安全狀態,成為安全環境的裝置。比如鍵盤,通常情況下都被用於普通環境,但是需要在安全環境下輸入密碼的時候又可以將其設定為安全裝置。
2.3.4安全處理器配置
ARM副處理器附屬於ARM處理器,一個副處理器通過擴充指令集或者提供配置寄存器來擴充核心的功能。其中最重要的副處理器是CP15副處理器,用來控制Cache、TCM和儲存空間管理。副處理器的某些寄存器是有備份的,也就是普通環境和安全環境各有一個這樣的寄存器。對這種能夠寄存器的修改,只會對它所在執行環境起作用。有的副處理器是沒有備份的,對它的修改影響到全域,比如說控制對Cache進行鎖定操作的寄存器。對這種寄存器的訪問必須嚴格控制,一般只對安全環境提供讀寫權限,而普通環境只能讀取。
ARM提供了一個非安全存取控制寄存器(NSACR)來配置非安全執行環境下對那些具有全域影響的副處理器的存取權限。NSACR的各欄位定義如下:
1> CP0-CP13(13:0):控制相應的副處理器的存取權限,如果為0,則只能被安全環境訪問,如果為1,則安全環境和普通環境都可以訪問。
2> CL(16):ARM核心可以為Cache鎖定分配固定的Cache單元,CL用來確定普通環境下是否有許可權在L2Cache中分配Cache鎖定單元,預設為0,即普通環境不能在L2中執行Cache鎖定操作。
3> TL(17):TLB的地址轉換時資料可以被鎖定,如果某一行被鎖定,則當執行TLB清除指令時,它仍然保留在TLB中。TL欄位用來確定在普通環境下是否有許可權執行TLB鎖定操作。預設情況下為0,即不執行TLB鎖定操作。
4> PLE(18):用來決定普通環境下是否有許可權訪問PLE寄存器,預設為0,即不能訪問PLE寄存器。
2.4系統IP支援
安全性是整個系統的屬性,而不僅僅是某個組件的屬性,採用TrustZone技術可更加輕鬆對系統進行分區,以確保安全,同時保持對安全子系統的硬體支援保護。使用TrustZone技術設計安全子系統不僅需要支援TrustZone技術的處理器核心,還需要匯流排構造、安全記憶體和安全外設。ARM可提供眾多構造和外設組件,以提供安全子系統的基礎。
第2章TrustZone軟體結構
在SoC硬體中實現安全區域要求在其中運行某些安全軟體,並利用儲存在其中的敏感資產。 可能有許多支援TrustZone的處理器核心上的安全區域軟體堆棧可實現的軟體架構。最進階的軟體架構是專用安全區域作業系統;最簡單的是放置在安全區域的同步程式碼程式庫。這兩個極端架構之間有許多中間選項。
1 安全核心
專用安全核心可能是一種複雜但強大的設計。它可以類比多個獨立安全區域應用程式的並發執行、新安全應用程式的運行時下載以及完全與普通地區環境獨立的安全域任務。
這些設計與將在SoC中看到的軟體堆棧非常類似,它們在非對稱式多處理(AMP)配置中使用兩個單獨的物理處理器。在每個虛擬處理器上啟動並執行軟體是獨立的作業系統,並且每個地區使用硬體中斷來搶佔當前啟動並執行地區和獲得處理器時間。
使用將安全區域任務與請求這些任務的普通地區威脅相關聯的通訊協定的緊密整合設計可提供對稱式多處理(SMP)設計的許多優點。例如,在這些設計中,安全區域應用程式可繼承它支援的普通地區任務的優先順序。這將導致對媒體應用程式做出某些形式的軟即時響應。安全擴充是ARM架構的開放式組件,因此任何開發人員都可建立自訂安全區域軟體環境,以滿足其要求。
由於實現安全作業系統實際上非常複雜,並且可能需要驗證其功能,因此許多夥伴傾向於與此領域中的專業公司(如Gieseke&Devrient或TrustedLogic)進行合作。
2 安全系統啟動
裝置上電時,帶TrustZone的處理器會在安全環境中啟動。這樣使得在普通環境有機會修改系統之前進行一次敏感的安全核查。典型的啟動流程2所示。
3 中斷響應切換模式處理過程
處在安全世界下,收到IRQ中斷:
處在非安全世界下,收到FIQ中斷:
TrustZone軟硬體架構