王玉麗
(蘇州工業(yè)園區(qū)職業(yè)技術(shù)學(xué)院,,江蘇 蘇州 215123)
摘要:為應(yīng)對安全攻擊,,Kinetis系列MCU提供了保密和Flash保護(hù)特性、UID特性等很多機(jī)制,,但這些機(jī)制較為復(fù)雜且必須深度掌握,,才能滿足應(yīng)用的安全設(shè)計(jì)要求。針對這一問題,,文章對其保密和保護(hù)特性進(jìn)行了深入研究,,從工作機(jī)理、應(yīng)用場合,、配置方法,、注意事項(xiàng)等多方面進(jìn)行了分析和比對,為靈活應(yīng)用這些機(jī)制奠定了基礎(chǔ),。
關(guān)鍵詞:Kinetis,;MCU;Flash,;UID
中圖分類號(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)對各種安全攻擊至關(guān)重要,。安全攻擊主要是指:人為地試圖獲取或者破壞芯片內(nèi)容而獲取利益,,例如復(fù)制軟件進(jìn)而克隆系統(tǒng)、竊取關(guān)鍵信息(如數(shù)據(jù)庫等),、惡意篡改或者重新編程制作“流氓”軟件等,。
目前嵌入式應(yīng)用中Freescale公司基于ARM CortexM內(nèi)核的32位Kinetis系列MCU應(yīng)用非常廣泛,它提供了一系列應(yīng)對安全攻擊的機(jī)制,,包括保密特性,、Flash保護(hù)特性、芯片唯一標(biāo)識(shí)符UID特性等,,由于這些機(jī)制比較復(fù)雜,,設(shè)置視具體應(yīng)用而異,靈活多變,,并涉及大量寄存器,,加上Kinetis產(chǎn)品面世時(shí)間短,安全機(jī)制方面的中文資料稀缺(尚未有相關(guān)論文發(fā)表,,只在部分書籍/網(wǎng)絡(luò)資料中有簡述),,給開發(fā)者帶來了困擾。因此本文針對Kinetis的保密和保護(hù)特性進(jìn)行了研究,,深入剖析了保密特性(包括工作原理,、保密等級(jí)、整體擦除,、后門機(jī)制,、對外部接口的影響、保密設(shè)置方法等),,分析了保護(hù)特性(原理,、保護(hù)與解除保護(hù)策略等),綜合比對了二者的異同與關(guān)聯(lián),,為基于Kinetis應(yīng)用的安全設(shè)計(jì)奠定了技術(shù)基礎(chǔ),。
1Kinetis的保密特性
1.1保密特性概述
Kinetis的保密特性使得它可以工作在保密Secure和非保密Unsecure兩種模式下,區(qū)別在于是否允許通過外部接口訪問芯片內(nèi)部存儲(chǔ)器[1],。保密模式下,,不能通過外部接口(如JTAG/SWD調(diào)試接口、EzPort,、FlexBus)對芯片內(nèi)部存儲(chǔ)器進(jìn)行任何操作(整體擦除Mass Erase指令除外) [23],。非保密模式則無此限制。
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ū)域,,用來存儲(chǔ)保密/保護(hù)及MCU啟動(dòng)的一些配置信息。FCF結(jié)構(gòu)如圖1所示,。
在芯片復(fù)位完成前,,位于FCF中的保密字節(jié)FSEC(地址0x40C)會(huì)被自動(dòng)加載到FTFL_FSEC寄存器中,通過寄存器中的保密狀態(tài)位SEC位來設(shè)定芯片的保密狀態(tài),。這種機(jī)制會(huì)引發(fā)兩個(gè)問題:
(1)在芯片運(yùn)行過程中,,即使修改了FCF中的保密字節(jié)FSEC,如果未復(fù)位則不會(huì)生效,。
(2)在芯片運(yùn)行過程中,,即使通過特定方式臨時(shí)解除了保密狀態(tài),如果FCF中的保密字節(jié)FSEC未修改,,則芯片復(fù)位后,,F(xiàn)lash依然處于保密狀態(tài)。
1.3保密等級(jí)
FTFL_FSEC寄存器內(nèi)容將影響保密程度,,寄存器結(jié)構(gòu)如表1所示。
保密狀態(tài)下,,根據(jù)寄存器中KEYEN,、MEEN、FSLACC的不同,,對應(yīng)多種保密方案,,通常保密等級(jí)可分為4級(jí):等級(jí)0,禁止KEYEN;等級(jí)1,全部啟用;等級(jí)2,禁止FSLACC;等級(jí)3,禁止FSLACC和MEEN。由于等級(jí)3禁用了整體擦除和工廠訪問功能,,只能通過后門機(jī)制解密,,而如果程序中沒有加入后門解密功能,會(huì)導(dǎo)致芯片代碼再也無法重新編程或修改,,所以使用時(shí)務(wù)必先確認(rèn)后門功能完好再啟用保密,。
1.4后門訪問機(jī)制原理與注意事項(xiàng)
后門訪問為開發(fā)者提供了一種便利的訪問途徑,使得保密后,,使用后門訪問密碼(Backdoor Cccess Key)經(jīng)驗(yàn)證后門指令(Verify Backdoor Command)驗(yàn)證成功,,即可通過調(diào)試接口再次訪問Flash。其無需整體擦除Flash,,常用于固件升級(jí),。
后門機(jī)制需要開發(fā)者預(yù)先將一個(gè)8 B的后門密碼燒寫到Flash配置區(qū)域FCF中的后門密碼字節(jié)處(地址0x400~0x407),并編寫好驗(yàn)證代碼,。在芯片進(jìn)入保密模式后,,用戶通過外部串行口將密碼輸入MCU,然后通過驗(yàn)證指令進(jìn)行驗(yàn)證,,驗(yàn)證一致則MCU解密,。使用后門訪問時(shí)需要注意以下事項(xiàng):
?。?)在保密狀態(tài)且KEYEN使能情況下,可通過后門密碼暫時(shí)解除保密狀態(tài),,后門密碼必須在FCF中配置,,且不能全0或全1,否則驗(yàn)證命令會(huì)報(bào)錯(cuò),。
?。?)沒有預(yù)設(shè)機(jī)制用于獲取后門密碼并運(yùn)行驗(yàn)證,需要自行編碼,,接收用戶輸入的密碼來進(jìn)行驗(yàn)證,。
(3)驗(yàn)證失敗,,再次驗(yàn)證需要上電復(fù)位,。
(4)通過后門只能暫時(shí)解除保密狀態(tài),,復(fù)位后會(huì)重回保密狀態(tài),,除非更改了FCF中的保密設(shè)置。
1.5保密模式對外部接口及FlexBus的影響
保密模式下,,調(diào)試接口JTAG/SWD被禁止調(diào)試,,是否允許整體擦除通過MEEN位控制,除JTAG掃描和調(diào)試寄存器MDMAP外,,其他寄存器無法訪問,;同樣,Ezport是否允許整體擦除指令通過MEEN位控制,,除EzPort狀態(tài)寄存器外,,其他寄存器無法訪問;保密模式下默認(rèn)阻塞所有外部訪問FlexBus的操作,,但可通過SIM_SOPT2[FBSL]編程控制保密時(shí)允許進(jìn)行哪些操作,,可以選擇只允許數(shù)據(jù)存取,或者同時(shí)允許數(shù)據(jù)和操作碼的訪問,,如果都允許,,則不管是否保密,F(xiàn)lexBus控制器將同樣運(yùn)作,。
1.6保密設(shè)置方法
保密模式需要通過修改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中有對應(yīng)的中斷向量地址信息,修改圖2中fe信息即可完成保密模式的修改,,修改完成后可通過查看生成的s19文件確認(rèn)保密字節(jié)是否修改成功,。需要特別注意的是IAR6.6之后,,其自帶的flashloader默認(rèn)對0x40C~0x40F段進(jìn)行了保護(hù),所以會(huì)導(dǎo)致修改失效,,因此在燒寫前需要首先對flashloader進(jìn)行配置:打開Flash Loader Configuration在extra parameters部分輸入-enable_config_write,,保存設(shè)置然后再燒寫即可?!?/p>
2Kinetis的Flash保護(hù)機(jī)制
2.1保護(hù)概述
Kinetis提供的保護(hù)機(jī)制主要用于防止CPU對Flash的誤操作,,例如燒寫bootloader、防止誤操作Flash中的配置參數(shù)等,,用戶可以選定Flash區(qū)域進(jìn)行保護(hù),,受保護(hù)的區(qū)域CPU擁有只讀權(quán)限。
2.2保護(hù)原理
Kinetis提供了3個(gè)寄存器分別針對3種類型的存儲(chǔ)空間進(jìn)行保護(hù):程序Flash(PFlash),、數(shù)據(jù)Flash(DFlash)和EEPROM[1],。3種類型的Flash保護(hù)機(jī)制類似,本文以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ù),對應(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位就被忽略掉了,,其他情況依次類推,。
2.3保護(hù)設(shè)置與解除
保護(hù)與保密設(shè)置方法類似,可通過修改FCF的保護(hù)字節(jié)完成,,不再贅述,。Flash配置區(qū)域一旦被保護(hù),就不能通過常規(guī)Flash擦寫指令修改,,只能通過EzPort執(zhí)行塊擦除指令(bulk erase)或運(yùn)用Segger JLink的命令行工具運(yùn)行“unlock Kinetis”指令來擦除,。
3保密與保護(hù)特性對比
保密與保護(hù)雖然都是安全機(jī)制,但二者差異顯著,,綜合比對如下:
(1)配置字節(jié):二者均駐留在Flash配置域FCF中,,分別對應(yīng)保密和保護(hù)字節(jié),。
(2)作用范圍:保密特性針對整個(gè)芯片,對Flash本身影響很??;保護(hù)特性則只影響選定的部分/全部Flash區(qū)域,對處理器的其余部分沒有影響,。
(3)目的與用途:保密旨在防止惡意者通過外部接口非法讀出Flash內(nèi)容,,不影響CPU讀寫Flash。為防止芯片內(nèi)容被非法讀出后被“暴力”寫入到同類芯片運(yùn)行,,Kinetis還提供了芯片唯一標(biāo)識(shí)符UID可進(jìn)行唯一性驗(yàn)證,,可配合保密機(jī)制阻止非法程序運(yùn)行[4]。保護(hù)旨在防止CPU對內(nèi)部Flash意外擦除和寫入,。
(4)方向性:保密針對外部接口,,保護(hù)針對CPU。
(5)寄存器與讀寫性:保密特性基于FTFL_FSEC,,保護(hù)特性基于FTFL_FPROTn,。FTFL_FSEC寄存器是只讀的,F(xiàn)PROTn寄存器是可讀可寫的,,在運(yùn)行過程中可以更改其內(nèi)部配置,,具體方法與工作模式有關(guān)。
4結(jié)論
本文深入分析了Kinetis系列MCU的保密和保護(hù)特性,,闡述了保密和保護(hù)的工作原理,、應(yīng)用場合、配置方法與注意事項(xiàng)等,。保密特性禁用外部端口,,使得軟件固件被鎖定,免受外部攻擊,,保護(hù)特性可防止對特定Flash區(qū)域進(jìn)行擦除,,免受內(nèi)部CPU誤操作的影響,二者結(jié)合可以應(yīng)對多種安全問題,,保密和保護(hù)機(jī)制的靈活應(yīng)用可為基于Kinetis的應(yīng)用在安全設(shè)計(jì)方面提供良好的技術(shù)基礎(chǔ),。
參考文獻(xiàn)
[1] 王宜懷,,吳瑾,,蔣銀珍.嵌入式系統(tǒng)原理與實(shí)踐ARMCortexM4Kinetis微控制器[M].北京:電子工業(yè)出版社,2012.
?。?] Freescale Semiconductor,Inc..K60 Subfamily reference manual Rev 6[DB/OL]. (2011-11-06)[2016-06-20].http://www.freescale.com.
?。?] 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.
[4] NXP Semiconductors.How to address the challenge of security/privacy with Kinetis (REV 0) [DB/OL].[2016-06-10].http://www.nxp.com/.2014.