一.前言
本文對(duì)TrustZone 進(jìn)行簡(jiǎn)單的介紹,不涉及具體的技術(shù)細(xì)節(jié),旨在有一個(gè)概念性的感性的理解,后面有機(jī)會(huì)再分享幾篇更詳細(xì)的技術(shù)細(xì)節(jié)介紹和實(shí)際應(yīng)用案例。
本文后續(xù)內(nèi)容以瑞薩的RA系列為例,不同廠家芯片可能不同需要參考對(duì)應(yīng)的手冊(cè)。
二.TrustZone介紹
Arm TrustZone 技術(shù)是Armv8-M 架構(gòu)一個(gè)可選的架構(gòu)擴(kuò)展。
其核心思想就是樸素的硬件隔離思想,系統(tǒng)和軟件劃分為安全區(qū)域和非安全區(qū)域,安全軟件可以訪問(wèn)安全和非安全存儲(chǔ)器和資源,而非安全軟件只能訪問(wèn)非安全存儲(chǔ)器和資源。安全與非安全狀態(tài)與現(xiàn)有的線程和處理模式組合,即有四種處理器狀態(tài),如下所示:
系統(tǒng)實(shí)現(xiàn)了安全擴(kuò)展,則系統(tǒng)默認(rèn)以安全狀態(tài)啟動(dòng)的,即啟動(dòng)時(shí)是無(wú)所不能的,一般此時(shí)對(duì)應(yīng)bootrom完全相關(guān)工作,然后跳轉(zhuǎn)到用戶非安全程序運(yùn)行。如果未實(shí)現(xiàn)安全擴(kuò)展,則系統(tǒng)始終處于非安全狀態(tài)。
注意安全是一個(gè)系統(tǒng)工程,Arm TrustZone只是提供了一種實(shí)現(xiàn)安全的隔離技術(shù),并未包括安全的所有方面,比如他就不涉及加密等,也并不是說(shuō)使用Arm TrustZone就安全了,安全是需要系統(tǒng)考慮的,任何一處不安全整個(gè)系統(tǒng)就不安全,符合木桶原理。打個(gè)比方,武俠小說(shuō)中很牛逼的反派人物,練就了金鐘罩鐵布衫刀槍不入,但是往往會(huì)有一個(gè)弱點(diǎn)就是比如足下或者腋下很脆弱,這就不是安全系統(tǒng),木桶原理導(dǎo)致其很容易從非安全處被攻破,所以最后大決戰(zhàn)階段正派一開始被暴擊,最后快要掛了時(shí),對(duì)準(zhǔn)反派的弱點(diǎn)比如足下一擊,立馬KO。所以安全的考慮要系統(tǒng)的考慮,而不僅僅是考慮使用一種什么技術(shù),及你就能考慮處理器就可以達(dá)到的。
三.關(guān)鍵組件
隔離的目的就是要隔離關(guān)鍵組件(資源),使得其受保護(hù),不能被非信任軟件直接訪問(wèn),避免被攻擊。
關(guān)鍵組件包括以下內(nèi)容:
l安全自舉程序,即前面提到的bootrom程序,因?yàn)橄到y(tǒng)啟動(dòng)默認(rèn)是安全狀態(tài)的(能不能啟動(dòng)時(shí)不是安全狀態(tài)呢?不能,如果此時(shí)不是安全狀態(tài)則沒(méi)法配置安全資源,沒(méi)法進(jìn)行初始化配置,所以啟動(dòng)時(shí)必須是安全狀態(tài),此時(shí)無(wú)所不能)。所以啟動(dòng)程序要保證受保護(hù),不會(huì)被攻破。
l密鑰,這個(gè)不用說(shuō),密鑰肯定是要保證不能被非法獲取的,否則別人有了你家的鑰匙,你再牛逼的防盜門也沒(méi)啥用。
l閃存編程支持,這也很重要,因?yàn)槌绦蜃罱K是要寫入FLASH的,如何保證程序燒錄的安全,不被篡改,不燒錄非授信程序等都是保證安全的前提。
l高價(jià)值資產(chǎn),其他的,比如用戶信息數(shù)據(jù)等都是需要受保護(hù)的。
四.安全系統(tǒng)
要構(gòu)建安全硬件平臺(tái),安全注意事項(xiàng)不僅僅要考慮處理器級(jí)別,而是需要考慮系統(tǒng)級(jí)別,所以一再?gòu)?qiáng)調(diào)的是系統(tǒng)安全,而不是處理器安全,主要包括:
存儲(chǔ)器系統(tǒng)
總線系統(tǒng)
外設(shè)
調(diào)試系統(tǒng)等。
4.1存儲(chǔ)器系統(tǒng)
前面提到了TrustZone 技術(shù)的核心是隔離,所以針對(duì)存儲(chǔ)器系統(tǒng)就是劃分不同的區(qū)域?qū)?yīng)不同的屬性。代碼閃存、數(shù)據(jù)閃存和 SRAM 分為 安全 (S)、非安全 (NS) 和非安全可調(diào)用 (NSC) 區(qū)域,比如瑞薩的RA系列MCU這個(gè)劃分是通過(guò)IDAU控制的。
如下圖所示:
代碼閃存和SRAM都可以執(zhí)行程序所以有非安全可調(diào)用區(qū)域,而數(shù)據(jù)閃存不可執(zhí)行程序只有非安全和安全區(qū)域之分。
當(dāng)器件生命周期為安全軟件開發(fā) (SSD) 狀態(tài)時(shí),可通過(guò)使用串行編程命令將這些存儲(chǔ)器安全屬性編程到非易失性存儲(chǔ)器中。
安全區(qū)域,執(zhí)行安全程序,具備最高權(quán)限可以訪問(wèn)所有資源。
安全地址用于只能由安全代碼或安全 master 訪問(wèn)的內(nèi)存和外設(shè)。安全事務(wù)是那些由 master 發(fā)起并在安全狀態(tài)下運(yùn)行的事務(wù)。
非安全區(qū)域,執(zhí)行非安全程序,只能訪問(wèn)非安全資源,也可以調(diào)用非安全可調(diào)用區(qū)域API,執(zhí)行一些安全程序的接口。
非安全地址用于設(shè)備上運(yùn)行的所有軟件均可訪問(wèn)的內(nèi)存和外設(shè)。非?安全事務(wù)源自以非安全方式運(yùn)行的 master或訪問(wèn)非安全地址的安全 master(僅數(shù)據(jù)事務(wù),非獲取指令)。僅允許非安全事務(wù)訪問(wèn)非?安全地址。非安全事務(wù)不能訪問(wèn)安全地址。
非安全可調(diào)用區(qū)域NSC,即中間地帶,提供非安全程序可調(diào)用的安全API。
NSC 是一種特殊類型的安全位置。這種類型的內(nèi)存是 Armv8-M 處理器允許為其保留 SG(安全門)指令的唯一類型,該指令允許軟件從非安全狀態(tài)轉(zhuǎn)為安全狀態(tài)。該 SG 指令可用于防止非安全應(yīng)用程序從分支進(jìn)入無(wú)效入口點(diǎn)。
當(dāng)非安全代碼調(diào)用安全端函數(shù)時(shí):
– API 中的第一條指令必須是 SG 指令。
– SG 指令必須在 NSC 區(qū)域內(nèi)。
安全代碼還提供非安全可調(diào)用函數(shù),為非安全代碼提供安全服務(wù)訪問(wèn)。
基于 TrustZone 區(qū)域 的代碼和數(shù)據(jù)閃存安全功能
從非安全區(qū)域讀取代碼和數(shù)據(jù)閃存區(qū)域?qū)⑸?TrustZone 安全故障。
代碼和數(shù)據(jù)閃存 編程和擦除 (P/E) 模式入口可以配置為僅通過(guò)安全軟件實(shí)現(xiàn),也可以配置為通過(guò)安全和非安全軟件實(shí)現(xiàn)。默認(rèn)情況下,MCU 將代碼和數(shù)據(jù)閃存 P/E 功能配置為僅通過(guò)安全軟件實(shí)現(xiàn)。閃存驅(qū)動(dòng)程序可以置于安全分區(qū) 中,并且可以配置為非安全可調(diào)用,以允許非安全應(yīng)用程序執(zhí)行閃存 P/E 操作。
支持安全區(qū)域和非安全區(qū)域的臨時(shí)和永久閃存塊保護(hù)。
SRAM
SRAM 存儲(chǔ)器可以通過(guò)存儲(chǔ)器安全屬性 (MSA) 分為安全/非安全 可調(diào)用/非安全狀態(tài),并且可以防止非安全訪問(wèn)。當(dāng) MSA 指示 SRAM 存儲(chǔ)區(qū)域處于安全或非安全可調(diào)用狀態(tài) 時(shí),非安全訪問(wèn)無(wú)法覆寫它們。
4.2總線系統(tǒng)
直接存儲(chǔ)器訪問(wèn)控制器 (DMAC) 和數(shù)據(jù)傳輸控制器 (DTC) 由主 TrustZone 過(guò)濾器監(jiān)控。在訪問(wèn)總線之前,會(huì)提 前檢測(cè)閃存和 SRAM 的 TrustZone 違例區(qū)域。DMAC 和 DTC 中的主 TrustZone 過(guò)濾器可以檢測(cè) IDAU 定義的閃 存區(qū)域(代碼閃存和數(shù)據(jù)閃存)和 SRAM 區(qū)域的安全區(qū)域。當(dāng)非安全通道訪問(wèn)這些地 址時(shí),主 TrustZone 過(guò)濾器會(huì)檢測(cè)到安全違例,不允許訪問(wèn)違例地址。
以太網(wǎng)DMA控制器
EDMAC RAM 緩沖區(qū)置于 TrustZone 的非安全 RAM 中。EDMAC 被硬編碼為 TrustZone 非安 全總線主器件。這些硬件特性允許以下兩個(gè)以太網(wǎng)程序分區(qū)選項(xiàng):
在安全區(qū)域中運(yùn)行以太網(wǎng)程序 ,在非安全區(qū)域中放置 EDMAC RAM 緩沖區(qū)
在非安全區(qū)域中運(yùn)行以太網(wǎng)程序 EDMAC RAM 緩沖區(qū)。
MPU
總線主 MPU 可用于除 CPU 外的每個(gè)總線主器件的存儲(chǔ)器保護(hù)功能。安全軟件可以設(shè)置總線主 MPU 的安全 屬性。
4.3外設(shè)
MCU 中的大多數(shù)外設(shè)都可以配置為安全或非安全,但CS 區(qū)域控制器、QSPI、OSPI、ETHERC 和 EDMAC始終是非安全。
外設(shè)分為兩種類型。 類型 1 外設(shè)具有一種安全屬性,對(duì)所有寄存器的訪問(wèn)由一種安全屬性控制。安全應(yīng)用程序?qū)㈩愋?1 外設(shè)安 全屬性設(shè)置到外設(shè)安全屬性寄存器(PSARx:x = B 至 E)。外設(shè)的不同通道可以采用不同的安全屬性。例如,UART 通道 0 和通道 1 可以具有不同的安全或非安 全屬性。
類型 2 外設(shè)具有每個(gè)寄存器或每個(gè)位的安全屬性,根據(jù)這些安全屬性控制對(duì)每個(gè)寄存器或位域的訪問(wèn)。安 全應(yīng)用程序?qū)㈩愋?2 外設(shè)安全屬性設(shè)置到每個(gè)模塊中的安全屬性寄存器。
總結(jié)一下就是外設(shè)類型1顆粒度更大,所有寄存器一起控制安全屬性,類型2顆粒度更小。
時(shí)鐘生成電路針對(duì)每個(gè)時(shí)鐘樹控制都有單獨(dú)的安全屬性??墒褂靡幌聲r(shí)鐘控制方案。
整個(gè)時(shí)鐘樹僅通過(guò)安全項(xiàng)目進(jìn)行控制,在非安全項(xiàng)目中被鎖定。
整個(gè)時(shí)鐘樹可通過(guò)非安全項(xiàng)目和安全項(xiàng)目進(jìn)行控制。
4.4調(diào)試系統(tǒng)
開發(fā)階段希望有更強(qiáng)大的調(diào)試功能,以方便進(jìn)行各種調(diào)試分析,而發(fā)布階段希望關(guān)閉調(diào)試功能以放置通過(guò)調(diào)試系統(tǒng)被攻破。所以調(diào)試功能分為了不同級(jí)別
調(diào)試功能分為 DBG0、DBG1 和 DBG2 三個(gè)級(jí)別,以 對(duì)支持 TrustZone 技術(shù)的調(diào)試功能提供支持,并為開發(fā)、生產(chǎn)和部署的產(chǎn)品提供安全性。
DBG2:允許調(diào)試器連接,無(wú)限制訪問(wèn)存儲(chǔ)器和外設(shè)。
DBG1:允許調(diào)試器連接,但僅限訪問(wèn)非安全存儲(chǔ)區(qū)域和外設(shè)
DBG0:不允許調(diào)試器連接
調(diào)試級(jí)別根據(jù)產(chǎn)品的器件生命周期狀態(tài)確定。通過(guò)器件生命周期管理系統(tǒng)可以實(shí)現(xiàn)調(diào)試級(jí)別的回退。
五.器件生命周期管理
使用 TrustZone 技術(shù)功能和安全加密引擎 9 (SCE9) 實(shí)現(xiàn)增強(qiáng)型器件 生命周期管理系統(tǒng)。器件生命周期管理在啟用 TrustZone 技術(shù)的應(yīng)用程序開發(fā)、生產(chǎn)和部署階段非常重要,主要實(shí)現(xiàn)以下功能:
根據(jù)器件生命周期狀態(tài)定義和切換,在開發(fā)和生產(chǎn)階段創(chuàng)建、安 裝和使用器件生命周期管理密鑰等。
六.參考
《TrustZone technology for Armv8-M Architecture Version 2.1》
《Renesas RA Family Security Design with Arm TrustZone - IP Protection》
審核編輯 黃宇
-
處理器
+關(guān)注
關(guān)注
68文章
19259瀏覽量
229648 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7484瀏覽量
163760 -
trustzone
+關(guān)注
關(guān)注
0文章
20瀏覽量
12535
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論