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