《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > Kinetis系列MCU的保密和保護(hù)特性剖析
Kinetis系列MCU的保密和保護(hù)特性剖析
2017年微型機(jī)與應(yīng)用第3期
王玉麗
蘇州工業(yè)園區(qū)職業(yè)技術(shù)學(xué)院,江蘇 蘇州 215123
摘要: 為應(yīng)對(duì)安全攻擊,Kinetis系列MCU提供了保密和Flash保護(hù)特性、UID特性等很多機(jī)制,但這些機(jī)制較為復(fù)雜且必須深度掌握,才能滿足應(yīng)用的安全設(shè)計(jì)要求。針對(duì)這一問(wèn)題,文章對(duì)其保密和保護(hù)特性進(jìn)行了深入研究,從工作機(jī)理、應(yīng)用場(chǎng)合、配置方法、注意事項(xiàng)等多方面進(jìn)行了分析和比對(duì),為靈活應(yīng)用這些機(jī)制奠定了基礎(chǔ)。
關(guān)鍵詞: kinetis MCU Flash UID
Abstract:
Key words :

  王玉麗

  (蘇州工業(yè)園區(qū)職業(yè)技術(shù)學(xué)院,江蘇 蘇州 215123)

       摘要:為應(yīng)對(duì)安全攻擊,Kinetis系列MCU提供了保密和Flash保護(hù)特性、UID特性等很多機(jī)制,但這些機(jī)制較為復(fù)雜且必須深度掌握,才能滿足應(yīng)用的安全設(shè)計(jì)要求。針對(duì)這一問(wèn)題,文章對(duì)其保密和保護(hù)特性進(jìn)行了深入研究,從工作機(jī)理、應(yīng)用場(chǎng)合、配置方法、注意事項(xiàng)等多方面進(jìn)行了分析和比對(duì),為靈活應(yīng)用這些機(jī)制奠定了基礎(chǔ)。

  關(guān)鍵詞:Kinetis;MCU;Flash;UID

  中圖分類(lèi)號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.1674-7720.2017.03.008

  引用格式:王玉麗.Kinetis系列MCU的保密和保護(hù)特性剖析[J].微型機(jī)與應(yīng)用,2017,36(3):26-28,32.

0引言

  在嵌入式產(chǎn)品領(lǐng)域,有效地應(yīng)對(duì)各種安全攻擊至關(guān)重要。安全攻擊主要是指:人為地試圖獲取或者破壞芯片內(nèi)容而獲取利益,例如復(fù)制軟件進(jìn)而克隆系統(tǒng)、竊取關(guān)鍵信息(如數(shù)據(jù)庫(kù)等)、惡意篡改或者重新編程制作“流氓”軟件等。

  目前嵌入式應(yīng)用中Freescale公司基于ARM CortexM內(nèi)核的32位Kinetis系列MCU應(yīng)用非常廣泛,它提供了一系列應(yīng)對(duì)安全攻擊的機(jī)制,包括保密特性、Flash保護(hù)特性、芯片唯一標(biāo)識(shí)符UID特性等,由于這些機(jī)制比較復(fù)雜,設(shè)置視具體應(yīng)用而異,靈活多變,并涉及大量寄存器,加上Kinetis產(chǎn)品面世時(shí)間短,安全機(jī)制方面的中文資料稀缺(尚未有相關(guān)論文發(fā)表,只在部分書(shū)籍/網(wǎng)絡(luò)資料中有簡(jiǎn)述),給開(kāi)發(fā)者帶來(lái)了困擾。因此本文針對(duì)Kinetis的保密和保護(hù)特性進(jìn)行了研究,深入剖析了保密特性(包括工作原理、保密等級(jí)、整體擦除、后門(mén)機(jī)制、對(duì)外部接口的影響、保密設(shè)置方法等),分析了保護(hù)特性(原理、保護(hù)與解除保護(hù)策略等),綜合比對(duì)了二者的異同與關(guān)聯(lián),為基于Kinetis應(yīng)用的安全設(shè)計(jì)奠定了技術(shù)基礎(chǔ)。

1Kinetis的保密特性

  1.1保密特性概述

  Kinetis的保密特性使得它可以工作在保密Secure和非保密Unsecure兩種模式下,區(qū)別在于是否允許通過(guò)外部接口訪問(wèn)芯片內(nèi)部存儲(chǔ)器[1]。保密模式下,不能通過(guò)外部接口(如JTAG/SWD調(diào)試接口、EzPort、FlexBus)對(duì)芯片內(nèi)部存儲(chǔ)器進(jìn)行任何操作(整體擦除Mass Erase指令除外) [23]。非保密模式則無(wú)此限制。

  1.2保密特性工作原理

  Kinetis的保密特性基于Flash保密寄存器FTFL_FSEC和Flash配置區(qū)域(Flash Configuration Field,FCF)共同實(shí)現(xiàn)。FTFL_FSEC控制著所有與保密相關(guān)的位。FCF是位于0x400~0x40F地址區(qū)間的一個(gè)獨(dú)立的16 B配置區(qū)域,用來(lái)存儲(chǔ)保密/保護(hù)及MCU啟動(dòng)的一些配置信息。FCF結(jié)構(gòu)如圖1所示。

  

001.jpg

  在芯片復(fù)位完成前,位于FCF中的保密字節(jié)FSEC(地址0x40C)會(huì)被自動(dòng)加載到FTFL_FSEC寄存器中,通過(guò)寄存器中的保密狀態(tài)位SEC位來(lái)設(shè)定芯片的保密狀態(tài)。這種機(jī)制會(huì)引發(fā)兩個(gè)問(wèn)題:

  (1)在芯片運(yùn)行過(guò)程中,即使修改了FCF中的保密字節(jié)FSEC,如果未復(fù)位則不會(huì)生效。

  (2)在芯片運(yùn)行過(guò)程中,即使通過(guò)特定方式臨時(shí)解除了保密狀態(tài),如果FCF中的保密字節(jié)FSEC未修改,則芯片復(fù)位后,F(xiàn)lash依然處于保密狀態(tài)。

  1.3保密等級(jí)

  FTFL_FSEC寄存器內(nèi)容將影響保密程度,寄存器結(jié)構(gòu)如表1所示。

003.jpg

  保密狀態(tài)下,根據(jù)寄存器中KEYEN、MEEN、FSLACC的不同,對(duì)應(yīng)多種保密方案,通常保密等級(jí)可分為4級(jí):等級(jí)0,禁止KEYEN;等級(jí)1,全部啟用;等級(jí)2,禁止FSLACC;等級(jí)3,禁止FSLACC和MEEN。由于等級(jí)3禁用了整體擦除和工廠訪問(wèn)功能,只能通過(guò)后門(mén)機(jī)制解密,而如果程序中沒(méi)有加入后門(mén)解密功能,會(huì)導(dǎo)致芯片代碼再也無(wú)法重新編程或修改,所以使用時(shí)務(wù)必先確認(rèn)后門(mén)功能完好再啟用保密。

  1.4后門(mén)訪問(wèn)機(jī)制原理與注意事項(xiàng)

  后門(mén)訪問(wèn)為開(kāi)發(fā)者提供了一種便利的訪問(wèn)途徑,使得保密后,使用后門(mén)訪問(wèn)密碼(Backdoor Cccess Key)經(jīng)驗(yàn)證后門(mén)指令(Verify Backdoor Command)驗(yàn)證成功,即可通過(guò)調(diào)試接口再次訪問(wèn)Flash。其無(wú)需整體擦除Flash,常用于固件升級(jí)。

  后門(mén)機(jī)制需要開(kāi)發(fā)者預(yù)先將一個(gè)8 B的后門(mén)密碼燒寫(xiě)到Flash配置區(qū)域FCF中的后門(mén)密碼字節(jié)處(地址0x400~0x407),并編寫(xiě)好驗(yàn)證代碼。在芯片進(jìn)入保密模式后,用戶通過(guò)外部串行口將密碼輸入MCU,然后通過(guò)驗(yàn)證指令進(jìn)行驗(yàn)證,驗(yàn)證一致則MCU解密。使用后門(mén)訪問(wèn)時(shí)需要注意以下事項(xiàng):

 ?。?)在保密狀態(tài)且KEYEN使能情況下,可通過(guò)后門(mén)密碼暫時(shí)解除保密狀態(tài),后門(mén)密碼必須在FCF中配置,且不能全0或全1,否則驗(yàn)證命令會(huì)報(bào)錯(cuò)。

  (2)沒(méi)有預(yù)設(shè)機(jī)制用于獲取后門(mén)密碼并運(yùn)行驗(yàn)證,需要自行編碼,接收用戶輸入的密碼來(lái)進(jìn)行驗(yàn)證。

 ?。?)驗(yàn)證失敗,再次驗(yàn)證需要上電復(fù)位。

 ?。?)通過(guò)后門(mén)只能暫時(shí)解除保密狀態(tài),復(fù)位后會(huì)重回保密狀態(tài),除非更改了FCF中的保密設(shè)置。

  1.5保密模式對(duì)外部接口及FlexBus的影響

  保密模式下,調(diào)試接口JTAG/SWD被禁止調(diào)試,是否允許整體擦除通過(guò)MEEN位控制,除JTAG掃描和調(diào)試寄存器MDMAP外,其他寄存器無(wú)法訪問(wèn);同樣,Ezport是否允許整體擦除指令通過(guò)MEEN位控制,除EzPort狀態(tài)寄存器外,其他寄存器無(wú)法訪問(wèn);保密模式下默認(rèn)阻塞所有外部訪問(wèn)FlexBus的操作,但可通過(guò)SIM_SOPT2[FBSL]編程控制保密時(shí)允許進(jìn)行哪些操作,可以選擇只允許數(shù)據(jù)存取,或者同時(shí)允許數(shù)據(jù)和操作碼的訪問(wèn),如果都允許,則不管是否保密,F(xiàn)lexBus控制器將同樣運(yùn)作。

  1.6保密設(shè)置方法

  保密模式需要通過(guò)修改FCF中的保密字節(jié)實(shí)現(xiàn),IAR環(huán)境下FCF信息存放在”/工程目錄/src/cpu/”文件夾下的vectors.c和vectors.h文件中。vectors.h文件的末尾部分存放著CONFIG_1~CONFIG_4字段(共計(jì)16 B),如下圖2所示。vectors.c中有對(duì)應(yīng)的中斷向量地址信息,修改圖2中fe信息即可完成保密模式的修改,修改完成后可通過(guò)查看生成的s19文件確認(rèn)保密字節(jié)是否修改成功。需要特別注意的是IAR6.6之后,其自帶的flashloader默認(rèn)對(duì)0x40C~0x40F段進(jìn)行了保護(hù),所以會(huì)導(dǎo)致修改失效,因此在燒寫(xiě)前需要首先對(duì)flashloader進(jìn)行配置:打開(kāi)Flash Loader Configuration在extra parameters部分輸入-enable_config_write,保存設(shè)置然后再燒寫(xiě)即可?!?/p>

002.jpg

2Kinetis的Flash保護(hù)機(jī)制

  2.1保護(hù)概述

  Kinetis提供的保護(hù)機(jī)制主要用于防止CPU對(duì)Flash的誤操作,例如燒寫(xiě)bootloader、防止誤操作Flash中的配置參數(shù)等,用戶可以選定Flash區(qū)域進(jìn)行保護(hù),受保護(hù)的區(qū)域CPU擁有只讀權(quán)限。

  2.2保護(hù)原理

  Kinetis提供了3個(gè)寄存器分別針對(duì)3種類(lèi)型的存儲(chǔ)空間進(jìn)行保護(hù):程序Flash(PFlash)、數(shù)據(jù)Flash(DFlash)和EEPROM[1]。3種類(lèi)型的Flash保護(hù)機(jī)制類(lèi)似,本文以PFlash為例進(jìn)行闡述。PFlash的保護(hù)基于PFlash保護(hù)寄存器FTFL_FPROTn和FCF共同實(shí)現(xiàn)。在芯片復(fù)位完成前會(huì)把FCF中的PFlash保護(hù)字節(jié)(地址0x408~0x40B)加載到Kinetis的4個(gè)保護(hù)寄存器FTFL_FPROT0~FTFL_FPROT3中,根據(jù)位設(shè)置進(jìn)行保護(hù)。4個(gè)保護(hù)寄存器中的32個(gè)位將PFlash等分成32個(gè)區(qū)域進(jìn)行保護(hù)配置,每個(gè)位控制1/32區(qū)域?qū)懕Wo(hù),對(duì)應(yīng)位為1則不保護(hù),為0則保護(hù)。這種機(jī)制使得Flash最小可配置保護(hù)單元大小取決于芯片的Flash容量,比如容量512 KB其最小保護(hù)單元為512/32=16 KB,32 KB則為32/32=1 KB。系統(tǒng)所支持的最小保護(hù)單元為1 KB,容量小于32 KB的,以24 KB為例,32位中的后8位就被忽略掉了,其他情況依次類(lèi)推。

  2.3保護(hù)設(shè)置與解除

  保護(hù)與保密設(shè)置方法類(lèi)似,可通過(guò)修改FCF的保護(hù)字節(jié)完成,不再贅述。Flash配置區(qū)域一旦被保護(hù),就不能通過(guò)常規(guī)Flash擦寫(xiě)指令修改,只能通過(guò)EzPort執(zhí)行塊擦除指令(bulk erase)或運(yùn)用Segger JLink的命令行工具運(yùn)行“unlock Kinetis”指令來(lái)擦除。

3保密與保護(hù)特性對(duì)比

  保密與保護(hù)雖然都是安全機(jī)制,但二者差異顯著,綜合比對(duì)如下:

  (1)配置字節(jié):二者均駐留在Flash配置域FCF中,分別對(duì)應(yīng)保密和保護(hù)字節(jié)。

  (2)作用范圍:保密特性針對(duì)整個(gè)芯片,對(duì)Flash本身影響很?。槐Wo(hù)特性則只影響選定的部分/全部Flash區(qū)域,對(duì)處理器的其余部分沒(méi)有影響。

  (3)目的與用途:保密旨在防止惡意者通過(guò)外部接口非法讀出Flash內(nèi)容,不影響CPU讀寫(xiě)Flash。為防止芯片內(nèi)容被非法讀出后被“暴力”寫(xiě)入到同類(lèi)芯片運(yùn)行,Kinetis還提供了芯片唯一標(biāo)識(shí)符UID可進(jìn)行唯一性驗(yàn)證,可配合保密機(jī)制阻止非法程序運(yùn)行[4]。保護(hù)旨在防止CPU對(duì)內(nèi)部Flash意外擦除和寫(xiě)入。

  (4)方向性:保密針對(duì)外部接口,保護(hù)針對(duì)CPU。

  (5)寄存器與讀寫(xiě)性:保密特性基于FTFL_FSEC,保護(hù)特性基于FTFL_FPROTn。FTFL_FSEC寄存器是只讀的,F(xiàn)PROTn寄存器是可讀可寫(xiě)的,在運(yùn)行過(guò)程中可以更改其內(nèi)部配置,具體方法與工作模式有關(guān)。

4結(jié)論

  本文深入分析了Kinetis系列MCU的保密和保護(hù)特性,闡述了保密和保護(hù)的工作原理、應(yīng)用場(chǎng)合、配置方法與注意事項(xiàng)等。保密特性禁用外部端口,使得軟件固件被鎖定,免受外部攻擊,保護(hù)特性可防止對(duì)特定Flash區(qū)域進(jìn)行擦除,免受內(nèi)部CPU誤操作的影響,二者結(jié)合可以應(yīng)對(duì)多種安全問(wèn)題,保密和保護(hù)機(jī)制的靈活應(yīng)用可為基于Kinetis的應(yīng)用在安全設(shè)計(jì)方面提供良好的技術(shù)基礎(chǔ)。

參考文獻(xiàn)

 ?。?] 王宜懷,吳瑾,蔣銀珍.嵌入式系統(tǒng)原理與實(shí)踐ARMCortexM4Kinetis微控制器[M].北京:電子工業(yè)出版社,2012.

 ?。?] Freescale Semiconductor,Inc..K60 Subfamily reference manual Rev 6[DB/OL]. (2011-11-06)[2016-06-20].http://www.freescale.com.

  [3] Freescale Semiconductor,Inc..Using the Kinetis security and Flash protection features (AN4507)[DB/OL].(2012-01-06)[2016-06-20].http://www.freescale.com. 2012/2016.6.

 ?。?] NXP Semiconductors.How to address the challenge of security/privacy with Kinetis (REV 0) [DB/OL].[2016-06-10].http://www.nxp.com/.2014.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。