Kinetis系列MCU的保密和保护特性剖析

2017-02-22 09:02王玉丽
网络安全与数据管理 2017年3期
关键词:后门寄存器字节

王玉丽

(苏州工业园区职业技术学院,江苏 苏州 215123)

Kinetis系列MCU的保密和保护特性剖析

王玉丽

(苏州工业园区职业技术学院,江苏 苏州 215123)

为应对安全攻击,Kinetis系列MCU提供了保密和Flash保护特性、UID特性等很多机制,但这些机制较为复杂且必须深度掌握,才能满足应用的安全设计要求。针对这一问题,文章对其保密和保护特性进行了深入研究,从工作机理、应用场合、配置方法、注意事项等多方面进行了分析和比对,为灵活应用这些机制奠定了基础。

Kinetis;MCU;Flash;UID

0 引言

在嵌入式产品领域,有效地应对各种安全攻击至关重要。安全攻击主要是指:人为地试图获取或者破坏芯片内容而获取利益,例如复制软件进而克隆系统、窃取关键信息(如数据库等)、恶意篡改或者重新编程制作“流氓”软件等。

目前嵌入式应用中Freescale公司基于ARM® Cortex®-M内核的32位Kinetis系列MCU应用非常广泛,它提供了一系列应对安全攻击的机制,包括保密特性、Flash保护特性、芯片唯一标识符UID特性等,由于这些机制比较复杂,设置视具体应用而异,灵活多变,并涉及大量寄存器,加上Kinetis产品面世时间短,安全机制方面的中文资料稀缺(尚未有相关论文发表,只在部分书籍/网络资料中有简述),给开发者带来了困扰。因此本文针对Kinetis的保密和保护特性进行了研究,深入剖析了保密特性(包括工作原理、保密等级、整体擦除、后门机制、对外部接口的影响、保密设置方法等),分析了保护特性(原理、保护与解除保护策略等),综合比对了二者的异同与关联,为基于Kinetis应用的安全设计奠定了技术基础。

1 Kinetis的保密特性

1.1 保密特性概述

Kinetis的保密特性使得它可以工作在保密Secure和非保密Unsecure两种模式下,区别在于是否允许通过外部接口访问芯片内部存储器[1]。保密模式下,不能通过外部接口(如JTAG/SWD调试接口、EzPort、FlexBus)对芯片内部存储器进行任何操作(整体擦除Mass Erase指令除外)[2-3]。非保密模式则无此限制。

1.2 保密特性工作原理

Kinetis的保密特性基于Flash保密寄存器FTFL_FSEC和Flash配置区域(Flash Configuration Field,FCF)共同实现。FTFL_FSEC控制着所有与保密相关的位。FCF是位于0x400~0x40F地址区间的一个独立的16 B配置区域,用来存储保密/保护及MCU启动的一些配置信息。FCF结构如图1所示。

图1 Kinetis的Flash配置区域FCF结构

在芯片复位完成前,位于FCF中的保密字节FSEC(地址0x40C)会被自动加载到FTFL_FSEC寄存器中,通过寄存器中的保密状态位SEC位来设定芯片的保密状态。这种机制会引发两个问题:

(1)在芯片运行过程中,即使修改了FCF中的保密字节FSEC,如果未复位则不会生效。

(2)在芯片运行过程中,即使通过特定方式临时解除了保密状态,如果FCF中的保密字节FSEC未修改,则芯片复位后,Flash依然处于保密状态。

1.3 保密等级

FTFL_FSEC寄存器内容将影响保密程度,寄存器结构如表1所示。

表1 FTFL_FSEC寄存器结构

保密状态下,根据寄存器中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扫描和调试寄存器MDM-AP外,其他寄存器无法访问;同样,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,保存设置然后再烧写即可。

图2 通过FCF保密字节进行保密设置

2 Kinetis的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 J-Link的命令行工具运行“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] 王宜怀,吴瑾,蒋银珍.嵌入式系统原理与实践-ARMCortex-M4Kinetis微控制器[M].北京:电子工业出版社,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-),女,工学硕士,讲师,主要研究方向:嵌入式系统应用。

猜你喜欢
后门寄存器字节
STM32和51单片机寄存器映射原理异同分析
No.8 字节跳动将推出独立出口电商APP
Lite寄存器模型的设计与实现
No.10 “字节跳动手机”要来了?
工业物联网后门隐私的泄露感知研究
基于MSP430的四旋翼飞行器的S-BUS通信协议的设计与实现
移位寄存器及算术运算应用
这个班还不错
新帕萨特右后门玻璃升降功能失效
新途安1.4TSI车后门车窗玻璃不能正常升降