王玉麗
(蘇州工業(yè)園區(qū)職業(yè)技術(shù)學(xué)院,江蘇 蘇州 215123)
Kinetis系列MCU的保密和保護(hù)特性剖析
王玉麗
(蘇州工業(yè)園區(qū)職業(yè)技術(shù)學(xué)院,江蘇 蘇州 215123)
為應(yīng)對(duì)安全攻擊,Kinetis系列MCU提供了保密和Flash保護(hù)特性、UID特性等很多機(jī)制,但這些機(jī)制較為復(fù)雜且必須深度掌握,才能滿足應(yīng)用的安全設(shè)計(jì)要求。針對(duì)這一問題,文章對(duì)其保密和保護(hù)特性進(jìn)行了深入研究,從工作機(jī)理、應(yīng)用場(chǎng)合、配置方法、注意事項(xiàng)等多方面進(jìn)行了分析和比對(duì),為靈活應(yīng)用這些機(jī)制奠定了基礎(chǔ)。
Kinetis;MCU;Flash;UID
在嵌入式產(chǎn)品領(lǐng)域,有效地應(yīng)對(duì)各種安全攻擊至關(guān)重要。安全攻擊主要是指:人為地試圖獲取或者破壞芯片內(nèi)容而獲取利益,例如復(fù)制軟件進(jìn)而克隆系統(tǒng)、竊取關(guān)鍵信息(如數(shù)據(jù)庫等)、惡意篡改或者重新編程制作“流氓”軟件等。
目前嵌入式應(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ā)表,只在部分書籍/網(wǎng)絡(luò)資料中有簡述),給開發(fā)者帶來了困擾。因此本文針對(duì)Kinetis的保密和保護(hù)特性進(jìn)行了研究,深入剖析了保密特性(包括工作原理、保密等級(jí)、整體擦除、后門機(jī)制、對(duì)外部接口的影響、保密設(shè)置方法等),分析了保護(hù)特性(原理、保護(hù)與解除保護(hù)策略等),綜合比對(duì)了二者的異同與關(guān)聯(lián),為基于Kinetis應(yīng)用的安全設(shè)計(jì)奠定了技術(shù)基礎(chǔ)。
1.1 保密特性概述
Kinetis的保密特性使得它可以工作在保密Secure和非保密Unsecure兩種模式下,區(qū)別在于是否允許通過外部接口訪問芯片內(nèi)部存儲(chǔ)器[1]。保密模式下,不能通過外部接口(如JTAG/SWD調(diào)試接口、EzPort、FlexBus)對(duì)芯片內(nèi)部存儲(chǔ)器進(jìn)行任何操作(整體擦除Mass Erase指令除外)[2-3]。非保密模式則無此限制。
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所示。
圖1 Kinetis的Flash配置區(qū)域FCF結(jié)構(gòu)
在芯片復(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所示。
表1 FTFL_FSEC寄存器結(jié)構(gòu)
保密狀態(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禁用了整體擦除和工廠訪問功能,只能通過后門機(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):
(1)在保密狀態(tài)且KEYEN使能情況下,可通過后門密碼暫時(shí)解除保密狀態(tài),后門密碼必須在FCF中配置,且不能全0或全1,否則驗(yàn)證命令會(huì)報(bào)錯(cuò)。
(2)沒有預(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 保密模式對(duì)外部接口及FlexBus的影響
保密模式下,調(diào)試接口JTAG/SWD被禁止調(diào)試,是否允許整體擦除通過MEEN位控制,除JTAG掃描和調(diào)試寄存器MDM-AP外,其他寄存器無法訪問;同樣,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中有對(duì)應(yīng)的中斷向量地址信息,修改圖2中fe信息即可完成保密模式的修改,修改完成后可通過查看生成的s19文件確認(rèn)保密字節(jié)是否修改成功。需要特別注意的是IAR6.6之后,其自帶的flashloader默認(rèn)對(duì)0x40C~0x40F段進(jìn)行了保護(hù),所以會(huì)導(dǎo)致修改失效,因此在燒寫前需要首先對(duì)flashloader進(jìn)行配置:打開Flash Loader Configuration在extra parameters部分輸入-enable_config_write,保存設(shè)置然后再燒寫即可。
圖2 通過FCF保密字節(jié)進(jìn)行保密設(shè)置
2.1 保護(hù)概述
Kinetis提供的保護(hù)機(jī)制主要用于防止CPU對(duì)Flash的誤操作,例如燒寫bootloader、防止誤操作Flash中的配置參數(shù)等,用戶可以選定Flash區(qū)域進(jìn)行保護(hù),受保護(hù)的區(qū)域CPU擁有只讀權(quán)限。
2.2 保護(hù)原理
Kinetis提供了3個(gè)寄存器分別針對(duì)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ù),對(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位就被忽略掉了,其他情況依次類推。
2.3 保護(hù)設(shè)置與解除
保護(hù)與保密設(shè)置方法類似,可通過修改FCF的保護(hù)字節(jié)完成,不再贅述。Flash配置區(qū)域一旦被保護(hù),就不能通過常規(guī)Flash擦寫指令修改,只能通過EzPort執(zhí)行塊擦除指令(bulk erase)或運(yùn)用Segger J-Link的命令行工具運(yùn)行“unlock Kinetis”指令來擦除。
保密與保護(hù)雖然都是安全機(jī)制,但二者差異顯著,綜合比對(duì)如下:
(1)配置字節(jié):二者均駐留在Flash配置域FCF中,分別對(duì)應(yīng)保密和保護(hù)字節(jié)。
(2)作用范圍:保密特性針對(duì)整個(gè)芯片,對(duì)Flash本身影響很?。槐Wo(hù)特性則只影響選定的部分/全部Flash區(qū)域,對(duì)處理器的其余部分沒有影響。
(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對(duì)內(nèi)部Flash意外擦除和寫入。
(4)方向性:保密針對(duì)外部接口,保護(hù)針對(duì)CPU。
(5)寄存器與讀寫性:保密特性基于FTFL_FSEC,保護(hù)特性基于FTFL_FPROTn。FTFL_FSEC寄存器是只讀的,F(xiàn)PROTn寄存器是可讀可寫的,在運(yùn)行過程中可以更改其內(nèi)部配置,具體方法與工作模式有關(guān)。
本文深入分析了Kinetis系列MCU的保密和保護(hù)特性,闡述了保密和保護(hù)的工作原理、應(yīng)用場(chǎng)合、配置方法與注意事項(xiàng)等。保密特性禁用外部端口,使得軟件固件被鎖定,免受外部攻擊,保護(hù)特性可防止對(duì)特定Flash區(qū)域進(jìn)行擦除,免受內(nèi)部CPU誤操作的影響,二者結(jié)合可以應(yīng)對(duì)多種安全問題,保密和保護(hù)機(jī)制的靈活應(yīng)用可為基于Kinetis的應(yīng)用在安全設(shè)計(jì)方面提供良好的技術(shù)基礎(chǔ)。
[1] 王宜懷,吳瑾,蔣銀珍.嵌入式系統(tǒng)原理與實(shí)踐-ARMCortex-M4Kinetis微控制器[M].北京:電子工業(yè)出版社,2012.
[2] 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.
[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.
Analysis of security and protection features of Kinetis series MCUs
Wang Yuli
(Suzhou Industrial Park Institute of Vocational Technology, Suzhou 215123, China)
In order to deal with security attacks, Kinetis series MCUs provide a lot of mechanisms such as security and Flash protection features,uid features,etc. But these mechanisms are complex and must be mastered in order to meet the application requirements of safety design. To solve this problem, this paper made a deep study of security and Flash protection features, and made an analysis and comparison from the working mechanism, application situations, configuration method, attention and other aspects, laid the foundation for the flexible application of these mechanisms.
Kinetis;MCU;Flash;UID
TP3
A
10.19358/j.issn.1674- 7720.2017.03.008
王玉麗.Kinetis系列MCU的保密和保護(hù)特性剖析[J].微型機(jī)與應(yīng)用,2017,36(3):26-28,32.
2016-10-11)
王玉麗(1984-),女,工學(xué)碩士,講師,主要研究方向:嵌入式系統(tǒng)應(yīng)用。