《电子技术应用》

一种具有自恢复功能的嵌入式可信平台的设计

2017年电子技术应用第5期 作者:孙 铂1,2,温旭霞1,2,宮树红3,刘新生4
2017/6/14 13:59:00

孙  铂1,2,温旭霞1,2,宮树红3,刘新生4

(1.中北大学 仪器与电子学院,山西 太原030051;2.山西百信信息技术有限公司,山西 太原030006;

3.首钢长治钢铁有限公司,山西 长治046031;4.江苏曙光光电有限公司,江苏 扬州225009)


    摘  要: 以TCG规范为基础,分析和讨论了可信链技术和安全启动过程,构造出一种适用于嵌入式平台的可信链模型以及具有自恢复功能的可信启动实现方法。在Beaglebone开发板上进行了相关实验,验证了其可行性,并作出了总结。

    关键词: 可信平台;自恢复;嵌入式系统;可信启动

    中图分类号: TN918    

    文献标识码: A

    DOI:10.16157/j.issn.0258-7998.2017.05.018


    中文引用格式: 孙铂,温旭霞,宮树红,等. 一种具有自恢复功能的嵌入式可信平台的设计[J].电子技术应用,2017,43(5):74-77.

    英文引用格式: Sun Bo,Wen Xuxia,Gong Shuhong,et al. Design of an embedded trusted platform with self-recovery function[J].Application of Electronic Technique,2017,43(5):74-77.

0 引言

    嵌入式系统目前已在国防、国民经济及社会生活各领域普及,应用于企业、军队、办公室、实验室以及个人家庭等各种场所。然而,2014年海康威视的大量数码录像机设备被曝存在远程代码执行漏洞,黑客可以由此直接获取设备最高权限。2015年末,乌克兰国家电网遭到网络攻击,伊万诺一弗兰科夫斯克地区部分变电站的控制系统遭到破坏,造成大面积停电,约140万人受到影响。嵌入式平台安全至关重要,将可信计算技术引入到嵌入式设备上来,是一种可行且高效的安全防护方法[1]。文献[2]对于嵌入式系统的安全进行了研究,并且设计了专门用于嵌入式系统的可信芯片ETPM。文献[3]以可信计算理论为基础,提出了一种适用于嵌入式环境的可信框架模型,设计完成嵌入式可信计算硬件模块以及其逻辑结构。本文旨在设计出具有普遍意义的嵌入式可信平台,提升系统的可信性,并具有自恢复功能,提高系统的可靠性与健壮性。

1 可信计算技术

    可信计算组织(Trusted Computing Group,TCG)于2003年3月成立,目的是在计算和通信系统中广泛使用基于硬件安全模块支持下的可信计算平台,以提高通信系统的安全性。

    可信平台模块(Trusted Platform Module,TPM)是TCG发行的一款可信芯片,是符合TCG规范的一个小型片上系统,内部有随机数产生器、SHA-1引擎等。目前基于可信计算的安全启动方式主要通过以TPM为可信根的可信度量来实现[4]

1.1 可信链技术

    完整性度量是可信启动的关键,为了实现完整性度量,可信计算组织TCG提出了可信链技术。可信链的建立直接关系到可信平台的正常运行。

    根据可信计算的思想,可信链的实现是从可信度量根RTM开始,到硬件平台,再到操作系统以及上层应用,一级度量一级,一级信任一级。

    TCG定义了两种确保可信启动的方法:静态可信根(Static Root of Trusted Measure,SRTM)和动态可信根(Dynamic Root of Trusted Measure,DRTM)。在使用静态可信度量根时,所有的信任都从BIOS的一段固定的可信代码开始,在把控制权交给下一段代码之前,这段可信代码会去度量下一段将要执行的代码,并将度量结果扩展到平台配置寄存器(Platform Configuration Register,PCR)中。如果每一段新的代码在移交控制权之前都去度量下一段代码,就可以建立起可信链,如果度量贯穿整个启动过程,最终的PCR值就反应了所有度量对象的度量值。PCR扩展操作基于SHA-1的散列算法,从密码学角度来说,该算法足够强大,对于恶意代码来说,通过计算破解出一个可信启动下的预期PCR值是不可行的[5]。本设计采用静态度量根的可信启动方法。

    既然TPM的PCR值能够表明软件是否可信,那么TPM就应该用某种方法表现出它的认知。如果系统启动过程中的软件被篡改,那么最后得到PCR值就会不同,这时TPM就会拒绝通过这些不可信的PCR值。如果能够让系统在启动时和封装密钥或者密封数据建立联系,TPM就能保证系统启动是可信的。

    当可信操作系统、客体操作系统和应用程序都使用TPM时,为了区分当前的度量值是属于哪个部分的,TCG引入了Locality的概念。Locality认证当前TPM请求的发起者,规范定义了5种不同的Locality,如表1所示。其中第一个PCR值记录了BIOS的度量信息,该信息是由SRTM度量后得到的不可变信息,此时BIOS获得控制权。

qrs5-b1.gif

    可信启动的核心是完整性度量,从建立可信根开始,度量每个模块的完整性值同期望的完整性值比较,进而维护这个模块完整性。完整性值通常是一个hash值,如果任何模块发生改变,其hash值也会发生改变,从而知道出现问题。通过这种方法保护已经建立PCR保护的模块。

1.2 可信启动技术

    启动是指系统从上电开始到各部件复位待命的全过程,系统的初始状态是否可信对于其安全性至关重要,因此可信启动对可信平台意义非凡。安全启动的概念普遍定义为平台的安全性和完整性,而可信计算平台环境的建立是在可信根和可信链的基础上。TCG给出的PC可信链定义如下:

CRTM(Core Root of Trusted for Measurement)→BIOS→OS Loader→OS→Applications

    根据TCG规范,嵌入式平台的可信启动过程设计步骤如下:

    (1)平台上电;

    (2)CRTM启动,然后度量其本身并将度量值扩展到相应的PCR中;

    (3)CRTM请求TPM_unseal命令;

    (4)TPM将相应PCR中现在状态的值与已密封的值进行比较,如果一致,执行下一步;如果不一致,暂停启动;

    (5)被证明可信的元件进行度量,随后启动元件,并扩展度量值到启动元件对应的PCR中;

    (6)被证明可信的元件把控制权转交给启动元件;

    (7)平台判断被证明可信的元件是否为启动的最后一步,是则执行下一步,否则执行第(3)步;

    (8)最后启动的元件调用TPM_unseal命令;

    (9)TPM把相应PCR中的当前状态值与已密封的值比较,如果一致则安全启动,否则暂停启动。

2 实验平台建立

2.1 硬件环境

    可信嵌入式平台硬件上由嵌入式微处理器CPU、外围设备以及可信芯片TPM组成。

    本设计实验硬件平台选用嵌入式开发板Beaglebone Black(BBB)。BBB使用主流的ARM CPU,处理器为TI AM335X ARM Cortex A8,1 GHz;存储器是2 GB eMMC,出于安全考虑,扩展了512 MB的Flash芯片存储备份系统。

    本设计TPM芯片采用Atmel公司的AT97SC3204T。该芯片遵循TPM1.2规范,内置非对称密钥引擎RSA、随机数发生器、散列算法引擎SHA-1、计算引擎HMAC等,通过TWI总线进行通信。TWI总线是I2C总线的继承和发展,完全兼容I2C总线。TPM接线电路设计如图1所示。

qrs5-t1.gif

2.2 软件环境

    软件设计总共分为四部分:引导加载程序(Bootloader)、linux内核、文件系统以及应用程序,本文主要说明Bootloader方面的设计。Bootloader是系统上电后执行的第一段程序,其作用相当于PC平台上的BIOS。一般的嵌入式系统启动流程如图2所示[6]

qrs5-t2.gif

    第一级Bootloader:引导加载程序(ROM)。系统上电或复位后,CPU通常从某个固定地址读取它的第一条指令,ROM被映射安装到这个地址上,ROM中存着一段代码,在这里称为ROM-Code,这段代码执行第一阶段的启动任务。ROM-Code将在eMMC上读取第一启动分区,接着扫描该分区根目录,在根目录下寻找MLO文件,并将这个文件下载到片内SRAM,再把控制权移交MLO。

    第二级Bootloader:自举程序MLO(X-loader)。MLO、u-boot.img被烧写在eMMC的第一启动分区中,上电后ROM-Code将体积较小的MLO搬至片内SRAM中运行,而运行在SRAM中的MLO又初始化片外SDRAM,并将eMMC中的u-boot.img下载至SDRAM,控制权移交u-boot.img。

    第三级Bootloader:u-boot(uboot.img)。它的任务是通过各种方式将内核下载至SDRAM,并传递一些内核启动参数。u-boot的启动任务主要是为引导内核准备环境[7]

3 可信链的建立

3.1 可信链建立

    由于嵌入式的特殊性,PC的可信链模型不适用于本平台。嵌入式平台的特殊性在于它是基于Linux的嵌入式平台,是u-boot启动,而不是BIOS和Bootloader。

    根据嵌入式平台的启动流程及PC可信链建立的方法,可以构造出嵌入式的可信链:MLO(CRTM)→u-boot→(Linux)OS+tools→(Linux)Kernel→根文件系统加载。

3.2 自恢复的可信启动设计

    自恢复功能是嵌入式系统健壮性的体现,在系统受到攻击时,尤其是在操作系统或内核受到破坏时,自恢复功能可以直接缩短嵌入式系统修复的周期。而传统的系统恢复需要系统的正常加载,依赖用户级别的应用来完成系统的还原。本设计中的备份系统存储于独立的Flash芯片中,且受到TPM芯片的保护,防止被篡改,保障了系统的纯洁性。

    根据系统启动过程,对其进行相应的优化:先用SHA1对u-boot加密,得到hash值,然后将产生的hash值扩展到相应的PCR中,将MLO和u-boot.img密封。在可信启动过程中,首先从0x40000000读取第一条指令并执行ROM-Code,然后将从地址0x402f0400获取的MLO用SHA-1进行hash计算,得到的hash值与原来的hash值比对,如果一致,则对已经密封的MLO解封。MLO从地址0x80000000获取u-boot.img,再将u-boot.img进行hash计算,得到的hash值与保存的一致,解封u-boot.img,并由MLO执行u-boot.img,u-boot.img被认为是可信的。同理, u-boot从地址0x80008000获取的内核,再次对内核进行度量,与预期值一致时,系统正常启动,完成可信启动过程。如果度量失败, u-boot直接从备用Flash的0x00000080开始读取镜像文件,然后直接调用TCM对镜像文件解封,完成系统的恢复[8]。启动流程如图3所示。

qrs5-t3.gif

4 实验结果与分析

    实验使用Beaglebone Black开发板以及AT97SC3204T来验证本设计的可行性。在内核的编译过程中,加入对TPM芯片的支持,对/include/configs/am335x_evm.h文件进行适配修改,引入所需的头文件。

    由于uboot直接加载默认的镜像文件,没有与用户交互的信息,因此还需要更改uboot的启动脚本来实现用户选择默认启动还是进行系统恢复。编写uboot/common下的ubootmenu.c文件,设置uboot自启动参数为ubootmenu命令,设置uboot启动延时3 s,在ubootmenu命令中加入2个选项,默认选项为加载默认镜像,第二个选项为还原系统。在此过程中,由于TPM驱动还没有加载,需要直接调用TPM的指令码来实现操作。

    在Flash烧写完成后,重新启动BBB,通过串口查看输出,如图4所示,BBB可以完成可信引导过程,从上电到系统引导完成总计用时19.49 s,而原系统引导用时约为14 s。除去由于之前设置的3 s的u-boot等待时间,引导时间延长了17.8%。

qrs5-t4.gif

    当内核被篡改或者其他原因导致操作系统受到损坏时,可以直接通过uboot的交互菜单完成系统恢复的操作,总计用时4分24秒,过程如图5。

qrs5-t5.gif

    本文通过研究可信计算技术,结合BBB和TPM可信模块,验证了可信链和可信启动在嵌入式平台上的应用,可信引导过程相比普通引导过程多用时15%~20%,在系统启动后基本没有性能上的影响。在u-boot上实现了系统的可信恢复,操作简单便捷。实验表明,本研究的内容很容易移植到其他嵌入式平台。

参考文献

[1] 冯登国,秦宇,汪丹,等.可信计算技术研究[J].计算机研究与发展,2011,48(8):1332-1349.

[2] 张焕国,李晶,潘丹玲,等.嵌入式系统可信平台模块研究[J].计算机研究与发展,2011(7):1269-1278.

[3] 王天舒,张功萱,杨曦晨,等.嵌入式系统可信启动机制设计与实现[J].计算机测量与控制,2015,23(4):1364-1366.

[4] Trusted Computing Group.TPM main part 1 design principles specification version1.2 revision116[EB/OL].[2013-11-13].http://www.trustedcomputinggroup.org.

[5] David Challener,Kent Yoder,Ryan Catherman,et al.可信计算[M].北京:机械工业出版社,2008.

[6] OMAPpedia.Bootloader project.[EB/OL](2012-4-3)[2016-3-10].http://omappedt.

[7] Song Cheng,Peng Weiping,Xin Yang,et al.Seal-based secure boot scheme for trusted computing platform[J].Elsevier,2010,17(2):16-21.

[8] Beaglebone.org.X-loader[S/OL].(2008-8-17)[2016-3-10].http://beagleboard.org/project/X-Loader/.

继续阅读>>