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