TrustZone
恩智浦基于Cortex M33內(nèi)核的MCU,LPC55S6x/LPC55S1x, RT600/RT500等產(chǎn)品提供了對TrustZone的支持,并在SOC上提供了安全AHB控制器等功能,旨在幫助客戶完成良好的安全隔離,并建立可信執(zhí)行環(huán)境。
在產(chǎn)品設(shè)計(jì)之初,我們就要有一個(gè)基本的“隔離”的概念。
需要考慮的問題大致有以下兩個(gè)方面:
產(chǎn)品中的哪些功能和模塊應(yīng)該放在安全區(qū)?(這部分代碼往往是核心且精簡,且經(jīng)過安全審查的,安全區(qū)的內(nèi)容不允許非安全區(qū)的代碼觸碰);
哪些功能應(yīng)該放在非安全區(qū)?(這樣放在非安全區(qū)中的代碼,即使出現(xiàn)安全漏洞(例如棧溢出漏洞等等)后被攻擊,MCU的安全區(qū)中的資源和外設(shè)也無法被攻擊者利用)。
令人頭疼的HardFault
對于MCU工程師,TrustZone是一個(gè)比較新的技術(shù),在開發(fā)調(diào)試過程中,由于TrustZone配置問題,時(shí)常遇到各種意料之外的HardFault,我們也經(jīng)常調(diào)侃,這個(gè)TrustZone也太安全了,連我們自己都進(jìn)不去。
其實(shí)這種問題往往是由于在開發(fā)階段,我們實(shí)際的行為和我們對TrustZone的劃分不一致。
平常我們認(rèn)為正常的行為與操作,對于TrustZone來說,已經(jīng)越界違規(guī)了,這就會(huì)使TruztZone觸發(fā)HardFault,并阻止違規(guī)行為。
在這種情況下,我們就需要找到導(dǎo)致HardFault的原因,并調(diào)整對于TrustZone的配置。
注:TrustZone相關(guān)的故障會(huì)觸發(fā)SecureFault異常。在芯片上電后的默認(rèn)情況下,SecureFault異常并沒有被使能,因此,此異常會(huì)被“升級”為HardFault。在通常情況下,建議使用默認(rèn)的設(shè)置,因?yàn)镠ardFault擁有更高的中斷優(yōu)先級,可以使故障在第一時(shí)間被響應(yīng)。
獲取違規(guī)操作的蛛絲馬跡
Cortex M33內(nèi)核本身在SAU中提供了兩個(gè)寄存器:SFSR(Secure FaultStatus Register,安全故障狀態(tài)寄存器)和SFAR(Secure Fault Address Register,安全故障地址寄存器)。
SFSR寄存器用于指示出現(xiàn)錯(cuò)誤的類型,例如非安全區(qū)試圖訪問安全區(qū),從安全區(qū)到非安全區(qū)的非法跳轉(zhuǎn)等。
SFAR寄存器用于指示出現(xiàn)錯(cuò)誤的內(nèi)存地址。
看起來這兩個(gè)寄存器就足以幫助我們查到問題的根源了。但是,有時(shí)候,我們從這兩個(gè)寄存器拿到了錯(cuò)誤的原因和地址,仔細(xì)檢查后發(fā)現(xiàn)無論是安全區(qū)還是非安全區(qū)的程序,都沒有顯式的訪問這個(gè)地址。
這是由于MCU系統(tǒng)愈發(fā)復(fù)雜,總線上除了M33內(nèi)核之外,還有許許多多的其他的外設(shè),例如DMA,USB等等。肇事者不一定是M33內(nèi)核,還有可能是其他的外設(shè),例如DMA。
下面是一種常見的事故:被劃分為非安全的DMA在工作中訪問了安全區(qū)的地址或外設(shè),違反了TrustZone的配置,造成了HardFault。
恩智浦的MCU在SOC層面提供了一個(gè)安全AHB控制器,能夠幫我們偵查肇事現(xiàn)場,找出肇事者的蛛絲馬跡。
其實(shí)原理很簡單,安全AHB控制器提供了三個(gè)寄存器,SEC_VIO_INFO_VALID,SEC_VIO_MISC_INFO和SEC_VIO_ADDR。
SEC_VIO_INFO_VALID用來指示肇事現(xiàn)場,這個(gè)寄存器中存儲(chǔ)了肇事現(xiàn)場的AHB 的端口號(hào)(port number),端口號(hào)與外設(shè)的對應(yīng)關(guān)系參見用戶手冊的”Memory map overview”章節(jié)。
每一個(gè)AHB端口都相應(yīng)有一個(gè)SEC_VIO_MISC_INFO寄存器,用來指示肇事的信息,例如違規(guī)操作是讀操作引起的還是寫操作引起的等等,最重要的是會(huì)指出肇事者的身份:
每個(gè)AHB端口還有一個(gè)SEC_VIO_ADDR,用來指示肇事現(xiàn)場的地址。
有了上述信息,我們就捉到了真正的肇事者。在開發(fā)階段,我們就可以利用這些信息去調(diào)整我們的TrustZone的配置。
更進(jìn)一步
當(dāng)然,上述功能不只能在開發(fā)階段幫我們排查HardFault。我們也可以利用這個(gè)機(jī)制在產(chǎn)品出廠之后為我們提供防御措施。
產(chǎn)品出廠后,當(dāng)我們檢測到由TrustZone產(chǎn)生的HardFault的原因之后,可以將其記錄,以便于后續(xù)分析。如果設(shè)備有聯(lián)網(wǎng)能力,可以將其傳輸至服務(wù)器。利用這些信息我們可以發(fā)現(xiàn)產(chǎn)品的哪些模塊受到了攻擊,方便我們后續(xù)針對性地進(jìn)行OTA升級。云端和設(shè)備本地也可在此時(shí)檢測鏡像以及存儲(chǔ)介質(zhì)的完整性,以檢查程序和存儲(chǔ)介質(zhì)是否被惡意篡改。
小結(jié)
綜上所述,利用SAU和安全AHB控制器調(diào)查HardFault的方法并不復(fù)雜,NXP的MCUXpresso SDK也提供了一個(gè)完整的demo。
以LPC55S69為例,demo的路徑如下:SDKoardslpcxpresso55s69 rustzone_examplessecure_faults。
這個(gè)demo中,人為制造了幾種TrustZone觸發(fā)HardFault的案例,在產(chǎn)生HardFault后,使用上文描述的方法,處理相關(guān)寄存器并打印事故信息。
通常來說,在開發(fā)階段,我們可以參考demo中HardFault的處理代碼,按需移植到自己的工程中。
責(zé)任編輯:haq
-
mcu
+關(guān)注
關(guān)注
147文章
18924瀏覽量
398032 -
控制器
+關(guān)注
關(guān)注
114文章
17787瀏覽量
193090 -
恩智浦
+關(guān)注
關(guān)注
14文章
6095瀏覽量
147145
原文標(biāo)題:調(diào)試TrustZone時(shí),如何處理HardFault
文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
立宏安全#SM-602可編程安全控制器#LHS可編程安全控制器
PWM控制器的控制方法
Cortex-M0+處理器的HardFault錯(cuò)誤介紹
codesys 3.5版本控制器聯(lián)機(jī)指導(dǎo):如何進(jìn)行RS232聯(lián)機(jī)?#codesys編程控制器 #控制器
一文詳解AHB-Lite協(xié)議
Codesys 3.5 版本控制器聯(lián)機(jī)指導(dǎo):如何進(jìn)行CAN聯(lián)機(jī)?#can總線 #codesys控制器
MAXQ1741用于磁卡讀卡器的DeepCover安全微控制器技術(shù)手冊
工程機(jī)械控制器廠家 控制器國產(chǎn)替代 #國產(chǎn)控制器#控制器廠家#控制器品牌
利用SAU和安全AHB控制器調(diào)查HardFault的方法
評論