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