嵌入式系统的安全启动机制研究与实现
2014-04-03费永康李逸帆
赵 波 ,费永康 ,向 騻 ,李逸帆
ZHAO Bo1,2,FEI Yongkang1,2,XIANG Shuang1,2,LI Yifan1,2
1.武汉大学 计算机学院,武汉 430072
2.武汉大学 空天信息安全与可信计算教育部重点实验室,武汉 430072
1.Computer School,Wuhan University,Wuhan 430072,China
2.Key Laboratory of Aerospace Information Security and Trusted Computing Ministry of Education,Wuhan University,Wuhan 430072,China
1 引言
近年来,移动智能平台设备以其良好的开放性、交互性、友好用户体验性和平台便捷性等特点,越来越受到人们的青睐。然而,由于智能终端过分追求性能而忽略安全性要求,从而造成移动设备的安全性能发展滞后的事实,给各种网络黑手提供了可乘之机。近年来,智能终端广泛应用于手机支付,身份认证等生活的各个方面。应用场景的拓展特别是安全性要求较高的应用的引入,使得智能平台的安全问题隐患逐步暴露出来。
针对当前的嵌入式系统存在的安全发展滞后,易受到攻击等问题,如何解决其面临的安全问题已经成为当务之急[1]。将可信计算技术引入到嵌入式设备上来,是一种可行且高效的嵌入式安全方案[2-3]。
2 相关工作
针对嵌入式设备的安全可信,近年来学者们进行了许多研究,并取得了多项研究成果。可信计算组织TCG专门成立了移动电话工作组,并且发布了移动可信模块(Mobile Trusted Module,MTM)规范解决移动终端安全问题[4]。TMP项目组也试图将可信计算技术移植到嵌入式设备上来,以解决嵌入式设备遇到的安全问题。然而,因为智能终端特殊的硬件环境导致该方案未能实现。Luo等人提出了一种基于SHA-1模块的嵌入式启动方法[5],但是这种方法缺少系统安全启动所需的可信根,不能保证系统启动的绝对安全。文献[6-7]中,武汉大学研制出我国第一款可信PDA系统,该可信PDA的系统结构和安全机制在TCG的基础上做了较大创新和改进,从硬件底层、操作系统到应用层,都建立了一套完整的可信机制。是一种相对安全的解决方案。
本文基于可信计算理论,针对嵌入式设备的安全启动机制展开研究,实现系统的可信启动。相比于其他方案,本文方案充分考虑嵌入式设备的特殊性;并且引入安全TF卡作为可信根;另外无需改变设备原有硬件架构,使该方案更能贴近实用。
本文将可信计算理论成功迁移到嵌入式平台上来,利用安全TF卡作为外置可信平台模块,将硬件的信任边界从物理硬件扩展到软件层次乃至整个设备平台,从而保证嵌入式设备的可信启动、可信运行。从硬件底层为用户的软件运行环境安全提供保障。
3 嵌入式平台的信任链模型
3.1 嵌入式平台分析
信任链是信任度量模型的实施技术方案[8]。可信计算平台通过信任链技术,把信任关系从信任根扩展到整个计算系统[9-10]。在TCG的可信PC技术规范中,具体给出了可信PC的信任链:CRTM→BIOS→OSLoader→OS→Applications系统从CRTM出发,沿着这条信任链,一级度量一级,一级信任一级,确保整个平台资源的完整性。
然而,由于嵌入式设备的特殊性,使得可信PC的信任链模型并不适用于嵌入式设备,嵌入式设备的特殊性主要表现在以下几个方面:(1)大多数嵌入式设备并不存在类似于可信PC上的TPM设备[11],使得嵌入式设备缺乏了启动所需要的信任根;(2)嵌入式设备软、硬件设计灵活多样化,使得适用于PC端的TPM芯片并不能完全照搬到嵌入式设备上来[12-13,15];(3)嵌入式设备的应用场景不同,对体积、性能等有严格要求[14]。如何在尽量不增加硬件,不影响性能,并且不改变现有架构的前提下,达到保护平台安全性的目的,是本文要研究的内容。
3.2 基于Linux的嵌入式信任链模型
本文充分研究嵌入式设备特殊性,并借鉴TCG规范之可信PC信任链技术,构造出一种适用于移动智能平台的信任链模型。这种信任链结构根据智能终端自身的特点,对可信PC的信任链结构进行了必要的优化与改进。
嵌入式系统上电后,Boot ROM引导嵌入式系统从Bootloader启动。Boot ROM是一段与硬件相关的代码,通常通过硬件方式固化在对应的硬件设备中,用户无法更改。所以本文将Bootloader作为系统信任链的起点,将Bootloader改造为具有度量功能的SBootloader(Security Bootloader)。同时,引入安全TF卡硬件,将SBootloader存放于安全TF卡中受硬件保护的安全区域内。该安全区域由硬件技术实现写保护,防止了SBootloader遭到非法篡改的可能性。
SBootloader作为整个信任链度量的起点,其最先执行。系统从SBootloader开始启动,其首先对ENV和内核进行可信性度量,SBootloader根据度量结果判断两者如果都安全可信,则系统将控制权交给Kernel。Kernel继续对系统启动脚本init.rc以及其他启动关键节点进行安全性度量。如果度量通过,系统将控制权交给init进程,init进程继续对MSapp.ko内核模块进行完整性度量。如果度量通过,系统自动载入该内核模块。MSapp.ko模块实现对上层应用程序的可配置度量。这样就构成了一个完整的信任链。沿着这条信任链,一级度量认证一级,一级信任一级,确保整个智能平台的系统资源安全可信。
其中,ENV环境变量作为系统启动的配置文件,由Bootloader读取传送给Kernel,Kernel根据变量信息配置平台信息,如内核参数、本地IP地址、网卡MAC地址等信息。
本文对上层应用程序的度量采取可加载内核模块的形式设计而成。通过修改启动脚本init.rc文件,实现度量模块MSapp.ko系统启动时的自动载入。载入后的MSapp.ko模块对上层应用程序实现度量。这种方式缩小了内核的尺寸,同时又非常灵活,提高了内核的效率。
另外,嵌入式平台的度量证据信息由平台的存储根密钥SRK签名存放。可信PC机中,度量证据信息存储于TPM芯片内部的平台配置寄存器PCR中,存储根密钥则存储于TPM的非易失性存储器中,受到TPM硬件的保护,安全性非常高。而移动智能终端却没有这些安全硬件,为保证其度量证据信息的安全可信,本文采用数字签名方式实现度量证据信息的完整性保护。系统初始化时,将各个启动节点的度量参考值通过安全通道发送给安全TF卡,由安全TF卡的存储根密钥SRK签名存放。存储根密钥受到安全TF卡的硬件保护,永远不出TF卡,保证了SRK的绝对安全。系统每次提取参考值时都对参考值进行签名验证,保证参考信息的完整性。如图1所示。
图1 数据安全存储
综上,本文的信任链结构为:Bootloader→ENV→Kernel→init.rc→MSapp.ko→APP,如图2所示。
3.3 信任传递过程
假设当前获得系统控制权的节点为SCP,现在其需要对下一个启动节点FP进行安全性度量,验证是否安全可信。如果验证通过,则将控制权交给FP,如果验证未通过,则关闭系统。信任链传递过程分析如下:
SCP:启动过程中获得系统控制权的程序;
FP:被度量组件;
SRK:平台存储根密钥对。设备出厂时由RSA算法生成非对称密钥对。该密钥私钥由安全TF卡保存,由硬件保证其永久不出安全TF卡。
获得系统控制权的程序SCP对启动过程中的下一个启动节点进行安全性度量,得到度量结果PCRFP。
SCP通过安全通道将PCRFP和被平台存储根密钥SRK签名了的FP组件的度量参考结果一起发送给安全TF卡。
安全TF卡接收到消息后,利用其片上计算芯片COS验证签名值是否正确,如果签名完整性未被破坏,再比对度量值PCRFP是否正确。最后得出度量结果:Result。
TF通过安全通道将验证结果Result返回给SCP。系统控制程序SCP根据度量结果判断是否将控制权交给FP。
综上所述,系统一级度量一级,一级认证一级。启动过程中的任何一个组件不可信,其上一级组件都拒绝将控制权移交给它,从而做到系统的安全启动。
3.4 信任链设计优点
本文将信任链的源点SBootloader存放于安全TF卡中,受硬件的保护,减小了信任根被攻击的可能,提高系统的安全可信性。可信计算机的信任链起点BIOS Boot Block,是一个位于TPM之外的软件模块,该模块不受TPM的保护,所以很容易受到非法攻击,而一旦该模块受到攻击,则建立在可信根上的信任链将无从谈起。因此,相比于BIOS Boot Block模块,本文的信任链源点安全性更高,信任链更安全。
同时,系统的度量过程中,片上芯片COS的参与,分担了系统CPU的相当一部分工作,大大提高了系统效率。
4 基于信任链模型的安全启动机制实现
4.1 开发工具和环境介绍
图2 移动智能平台信任链
嵌入式系统的安全开发,需要宿主机环境、开发板环境以及嵌入式Linux交叉编译环境。交叉编译(crosscompilation),即在主机平台上用交叉编译器编译出可在其他平台上运行的可执行程序的过程。本实验在PC(Ubuntu11.0.4系统)上安装交叉编译环境,编译出针对TQ210开发板的可执行程序。实验过程中,使用GNU提供的开发工具便捷地开发、调试嵌入式平台应用软件。
(1)宿主机环境
①CPU:Intel x86单处理器;
②4 GB内存;
③Linux2.6.38内核;
④Linux发行版Ubuntu11.04;
⑤调试器:gcc-4.4.6;
⑥串口交互工具:minicom。
(2)目标板环境
①开发板:TQ210开发套件;
②CPU:S5PV210;
③安全TF卡,自主设计,实现SM4算法,RSA算法,sha1算法等;
④500 MB内存;
⑤Android4.0操作系统。
4.2 Bootloader的安全增强
在实验过程采用uboot作为Bootloader进行开发。uboot具有良好的开源性特点,并且目前大多数嵌入式操作系统都支持uboot,用uboot作实验,有利于本文中安全启动机制的普及。uboot第一阶段代码主要负责设备硬件(包括外部RAM)的初始化,当外部RAM等硬件初始化完成后,第一阶段代码再负责将第二阶段Main Bootloader代码载入外部RAM,并进入第二阶段。Main Bootloader主要负责找到内核代码,并将内核加载进RAM。
经过安全优化后的uboot,其具有对内核进行完整性检测的功能。函数 do_bootm_linuxcmdtp,flag,argc,argv,images,调用:
函数(1)负责设置kernel的加载地址;函数(2)负责将控制权转交给内核。本文在系统将控制权交给内核之前加入度量函数:
实现对内核和ENV分区的摘要计算,并调用安全TF卡驱动接口,将摘要值传送给安全TF卡的片上芯片COS。由COS首先验证标准值的签名完整性,再比对摘要值和标准值是否一致,最后将比对结果返回给uboot,uboot根据校验结果决定是否执行转交控制权的操作。控制台输出的安全启动信息如图3所示。
图3 控制台信息
4.3 内核的安全改造实现
对内核的改造包括两部分。其一,对init.rc等系统启动脚本进行度量。其二,对动态载入的内核安全管理模块MSapp.ko进行完整性度量。init.rc配置脚本实现MSapp.ko模块的自启动,对init.rc的完整性度量,确保了MSapp.ko模块的自启动特性不被篡改,并且防止未被授权的用户安插非法启动项。而对MSapp.ko的度量,则为了保证该内核模块的安全可信。
4.4 内核安全增强模块实现
本模块作为动态载入内核的内核安全模块,其实现对上层关键系统程序的度量。系统设计时通过修改init.rc配置,实现该模块MSapp.ko的自启动。用户启动一个应用程序时,系统会自动调用本模块,对应用程序的完整性进行度量,如果度量成功,才能启动。
其具体实现方案,当系统启动一个APP时,用户进程调用execve系统调用,陷入内核态。内核接收到这个系统调用后调用do_execve函数,该函数从nand flash中的相应位置读出APP二进制文件,正常情况下,为其创建进程,实现系统启动。修改后的内核,在从nand flash中的相应位置读出APP二进制文件后,需要对二进制文件进行完整性度量,如果完整性度量通过才能为其创建进程,实现APP的启动。应用程序的安全启动过程如图4所示。
图4 APP安全启动
5 实验结果与分析
启动机制在实际应用中的安全性以及性能损耗大小是一种启动方案能不能推广的重要评判标准。基于此,针对本文启动方法的安全性和性能损耗两个方面进行了测试分析。
5.1 安全分析
为了验证基于该信任链机制设计的嵌入式平台是否能抵御针对安全启动的各种攻击。本文分析系统可能存在的漏洞,并针对各种可能漏洞进行有针对性的攻击测试。实验中,模拟了包括信道攻击、篡改攻击、伪造攻击等各种攻击手段,针对启动过程中的各个启动节点进行攻击测试。
信道攻击中,假设SCP将PCRFP和发送给安全TF卡进行比对的过程中,传输内容存在被篡改的可能,攻击者对两个值之一或都进行非法篡改,之后再将值发送给TF卡进行完整性比对;伪造攻击中,假设启动节点或者受保护的上层应用程序存在被伪造的可能,攻击者利用自己的程序代码替代合法代码,以达到自己的非法目的;篡改攻击中,假设系统启动脚本文件的完整性存在被破坏的可能,攻击者对配置文件内容进行局部篡改,以达到自己的目的。实验结果显示(表1),无论启动过程中的任何数据,程序节点,或启动配置文件遭到篡改或者破坏,本启动方法都能及时发现,并且根据相应安全策略实施安全措施。
表1 攻击实验结果
信道攻击中,PCR标准值已经被TF卡安全密钥私钥签名,并且TF卡安全私钥受到TF卡硬件保护,永远不出TF卡密钥存储区。因此如实验结果显示,如果攻击者对PCR标准值进行非法篡改,则当验证PCR签名时,能够及时准确发现签名被篡改。如果度量值被篡改,片上芯片验证度量值时,同样能够发现度量值与标准PCR值不一致。数字签名保证了该通道的安全。
在伪造攻击中,本文对各个启动节点做了伪造攻击测试实验分析。其中,针对内核的完整性攻击实验,伪造了一个与合法安全内核高度相似的内核,该内核非法篡改原有安全内核的MAC强制访问控制功能,达到自己的某些非法目的。实验结果显示,平台启动过程中,当SBootloader将控制权交给内核之前,能够及时发现内核的度量值与内核标准PCR值不同,进而判断其完整性遭到破坏,并自动关闭系统,控制台输出如图5所示。攻击测试结果如表2所示。
图5 内核攻击测试
在篡改攻击中,本文对启动脚本init.rc内容进行篡改,注销了内核安全增强模块的自启动脚本。实验结果显示,系统启动过程中,能够及时发现init.rc的完整性遭到破坏,系统用备份的init.rc脚本替换遭到篡改的脚本文件,并重新对新的init.rc执行度量。最后实现系统的可信启动。脚本攻击测试结果如表3所示。
5.2 性能分析
本文设计的安全启动机制,相对于原有的平台可能造成性能影响的部分主要在于启动过程中的安全度量过程,以及内核模块的载入耗时。本文在度量过程中,充分利用片上芯片COS的计算资源,分担了系统的相当一部分工作,提高了系统效率。
表2 Kernel伪造攻击测试
表3 脚本文件(init.rc)篡改攻击测试
图6 性能分析
对此,着重测试系统启动的整体耗时。系统测试时,选择对所有组件进行度量,得出最大开销情况。本文累计记载了15次普通启动,以及安全启动耗时。其结果如图6所示。
实验结果显示,正常启动耗时大概为89 s到92 s之间。而本文的安全启动机制耗时则控制在94 s到96 s之间。由此得出,安全启动相对于普通启动的性能损耗控制在6%以内,用户基本感受不到。因此,本安全启动机制不会对用户的实际体验造成影响。
6 结束语
将可信计算技术引入到嵌入式设备上来,是一种可行且高效的嵌入式安全方案。信任链技术是可信计算的关键技术,通过信任链的信任传递机制来确保系统数据和文件的完整性。本文将安全TF卡作为外置的可信平台模块,采用信任链技术有效地将硬件的信任边界从物理硬件扩展到软件层次乃至整个设备平台。该方案的创新性在于不改变现有移动设备硬件架构的前提下,设计实现了一套嵌入式系统的安全启动机制,从硬件底层为用户的平台环境安全提供保障。
[1]Dietrich K,Winter J.Implementation aspects of mobile and embedded trusted computing[M]//Trusted Computing.Berlin Heidelberg:Springer,2009:29-44.
[2]沈昌祥,张焕国,王怀民,等.可信计算的研究与发展[J].中国科学:信息科学,2010,40(2):139-166.
[3]冯登国,秦宇,汪丹,等.可信计算技术研究[J].计算机研究与发展,2011,48(8):1332-1349.
[4]MPWG T C G.The TCG mobile trusted module specification[J].TCG Specification Version 1.0 Revision,1.
[5]罗钧,蒋敬旗,闵志盛,等.基于 SHA-1模块的可信嵌入式系统安全启动方法[J].山东大学学报:理学版,2012,47(9).
[6]Bo Z,Huan-Guo Z,Jing L,et al.The system architecture and security structure of trusted PDA[J].Chinese Journal of Computers,2010,33(1):82-92.
[7]张焕国,李晶,潘丹铃,等.嵌入式系统可信平台模块研究[J].计算机研究与发展,2011,48(7):1269-1278.
[8]Lin K J,Wang C Y.Using tpm to improve boot security at bios layer[C]//2012 IEEE International Conference on Consumer Electronics(ICCE).[S.l.]:IEEE,2012:376-377.
[9]司丽敏,蔡勉,陈银镜,等.一种信任链传递模型研究[J].计算机科学,2011,38(9):79-81.
[10]谭良,徐志伟.基于可信计算平台的信任链传递研究进展[J].计算机科学,2008,35(10):15-18.
[11]Ryan M D.Automatic analysis of security properties of the TPM[M]//Trusted Systems.Berlin Heidelberg:Springer,2012:1-4.
[12]Winter J.Trusted computing building blocks for embedded linux-based ARM trustzone platforms[C]//Proceedings of the 3rd ACM Workshop on Scalable Trusted Computing.[S.l.]:ACM,2008:21-30.
[13]Huanguo Z,Jing L,Danling P,et al.Trusted platform module in embedded system[J].JournalofComputer Research and Development,2011(7).
[14]李善平,刘文峰,王焕龙.Linux与嵌入式系统[M].北京:清华大学出版社,2006.
[15]Yang J,Wang H H,Wong F F,et al.Mobile trusted platform model for smart phone[J].Computer Science,2012,39(8):20-25.