2. 武汉大学 计算机学院, 湖北 武汉 430072
2. School of Computer, Wuhan Univ., Wuhan 430072, China
随着云计算技术的广泛应用,日益严重的安全问题成为人们关注的重点。可信计算技术[1]已经成为提高云基础设施虚拟化环境安全性的重要手段。可信计算组织提出的可信平台模块 (trusted platform module,TPM)[2]可以为构建可信的云环境提供解决思路。现今学者们将可信计算和虚拟化技术相结合,提出虚拟可信平台模块的概念,通过模拟硬件TPM的功能为每个虚拟机分配一个vTPM设备,进而为虚拟机提供可信计算服务。
Berger等[3]根据TPM规范,提出一种vTPM的实现框架,为虚拟化环境vTPM的设计和实现奠定了基础,但其工作主要是实现vTPM功能,而对其实例的非易失存储文件NVRAM缺少有效保护; 攻击者可以直接读取NVRAM文件获取vTPM实例中的敏感数据,此外vTPM与虚拟机之间也不存在绑定关系,攻击者甚至可以直接读取其他虚拟机的vTPM实例数据;在Xen 4.3[4]版本中,对vTPM实例的非易失存储文件保护进行加强,通过引入vTPM管理域加密保护vTPM的存储文件,该方案可以保证NVRAM文件存储的安全,也能将vTPM与虚拟机进行有效绑定,但vTPM实例运行时的安全却无法保证。Shi等[5]提出一种基于KVM架构的vTPM安全改进方案,该方案通过利用模拟器Qemu加密保护vTPM的非易失存储文件,与Xen的保护方案相似,该方案保证了NVRAM的存储安全,同时也解决了vTPM与虚拟机之间的绑定问题,但同样未能保护vTPM实例运行时数据的安全,攻击者可以通过内存泄漏攻击获取vTPM运行时的内存数据,从而给vTPM的安全性和可信性造成威胁。vTPM实例在云环境中面临以下两个主要安全问题:如何保障vTPM实例数据在运行时和存储时的机密性和完整性,如何将vTPM实例与虚拟机进行绑定。
英特尔于2013年提出SGX技术[6-10],该技术具有的基于硬件的内存隔离和数据密封特性可以用来解决上述两个问题。利用内存隔离的特性,可以保证vTPM实例运行过程中内存数据的安全;密封特性可以保证vTPM实例数据的安全存储及与虚拟机之间的绑定。因此,提出一种基于SGX的vTPM安全增强方案vTSE。经过实验验证,本文方案能有效保护vTPM实例数据,提高虚拟可信平台整体的安全性。
1 相关技术Intel SGX是Intel体系结构的新扩展,在原有架构上增加了一组新的指令集和内存访问机制。该扩展为应用程序提供了内存隔离保护、认证和密封功能[6-10]:
1.1 基于硬件的内存隔离保护和访问控制SGX为保护区域enclave提供了特殊的存储区域EPC (enclave page cache),在硬件级别实现了内存的隔离保护。enclave外部代码不能访问enclave的内存数据;enclave内部代码在EPC范围内只能访问属于自己的内存区域,对于EPC以外的内存,则按照系统中正常的内存访问机制进行访问。这样的内存保护机制,防止了enclave内部运行的程序被恶意软件盗取隐私信息和篡改内存数据。SGX的内存访问控制如图 1所示。
![]() |
图1 SGX内存访问控制 Fig. 1 SGX memory access control |
1.2 EPC内存加密
计算机内存中数据易遭受窃听和恶意篡改,内存泄漏攻击可以非法读取系统内存中的数据,敏感数据以明文的形式存放在内存中并不安全。为抵御内存泄漏攻击,Intel SGX在设计时为处理器定义了一个安全边界,即CPU package。处理器的核心和缓冲存储器位于package内部。当启用SGX功能时,数据在package内部是以明文形式存在并进行计算的,数据从cache写回到内存中时,要经过内存加密引擎MEE加密后才写入EPC中。这样即使发动内存泄漏攻击,攻击者也只能拿到敏感数据的密文信息。
1.3 数据密封当进程结束时,enclave实例将被销毁,其内部所有数据也将随之丢失。为了保存一些非易失性数据,SGX提供了密封 (sealing) 特性,可用来将持久性数据加密保存到系统磁盘中,以供将来使用。SGX支持两种类型的密封密钥:基于enclave身份和基于sealing身份[8]。使用enclave身份来对数据进行密封操作,每个enclave之间产生的密封密钥不能混用,这样做不仅可以保证数据存储的安全,还可以使得当前虚拟机无法解密出其他虚拟机的NVRAM文件内容,同时解决了vTPM实例与虚拟机进行绑定的问题。
2 威胁模型vTPM作为软件,本身存在着安全缺陷,通过引言中对vTPM相关工作的分析可以得出,其存在两个主要的安全问题:如何保护vTPM实例中的敏感信息, 如何将vTPM实例与虚拟机进行绑定。基于上述两个问题,假设攻击者具有以下能力:
1) 通过分析TPM库的源码,可以确定敏感数据的数据结构,从而直接分析保存vTPM非易失数据的文件NVRAM,获取其中的敏感信息。
2) 利用系统漏洞,非法获取超级管理员权限,从而通过动态调式、跟踪程序执行流程找到vTPM实例运行过程中的敏感数据所在。
3) 直接提取出虚拟机运行时的内存数据,通过分析内存数据找出vTPM实例中的敏感信息。
4) 通过修改云环境中虚拟机的配置信息使用其他用户的vTPM实例,造成vTPM实例的滥用,从而非法窃取其他用户的机密文件内容。
造成这些安全威胁的原因在于,vTPM在设计时没有考虑到如何与虚拟机进行绑定,同时vTPM实例在运行过程中也无法抵御内存泄漏攻击。
3 基于SGX的vTPM安全增强 3.1 设计原则根据威胁模型中提到的安全威胁,提出一种基于Intel SGX的vTPM安全增强方案,设计原则如下:
1) 在尽量不改变现有的vTPM虚拟化架构下实现增强方案设计。
2) 在vTPM实例运行时,动态地保护其运行过程中内存数据的机密性和完整性,避免恶意软件对其进行非法读取或篡改。
3) 保证vTPM实例的非易失数据存储的安全性,避免攻击者直接读取NVRAM文件获取用户的可信根信息。
4) 尽可能减少性能开销。
3.2 基于SGX的vTPM安全增强方案设计 3.2.1 设计架构在基于KVM/Qemu的Linux虚拟化环境下设计并实现安全增强方案。其中,KVM (kernel-based virtual machine)[11]是Linux内核的一个模块,是该架构下的虚拟机监视器,主要功能是完成vCPU的初始化,打开虚拟化模式,将虚拟机运行在虚拟化模式下;Qemu[12]作为硬件模拟器,为虚拟机模拟硬件设备。每个虚拟机可视为一个常规的Linux进程,可由标准的调度程序进行调度。现有基于KVM的vTPM架构见图 2。
![]() |
图2 KVM和vTPM架构 Fig. 2 Architecture of KVM and vTPM |
如图 2所示,原有KVM架构下,vTPM库为客户机提供TPM设备,自身运行于Qemu虚拟机进程中。依据原有架构,结合SGX的安全特性,提出一种基于SGX的vTPM实例安全增强的新方案——vTSE,该方案架构如图 3所示。硬件层上,处理器支持Intel SGX扩展;EPC是物理内存中的一块特殊存储区域,专门用于存放SGX enclave实例的代码和数据及SGX相关的数据结构,其范围和大小在系统启动时由BIOS进行设置。内核层上,SGX驱动模块是英特尔提供的驱动程序,为应用层提供创建enclave, 添加/移除enclave页面, 销毁enclave等功能。应用层上,虚拟机硬件由Qemu模拟,通过调用vTPM库为客户机虚拟出TPM设备。vTPM库运行于安全区enclave中,由SGX对其进行动态保护。
![]() |
图3 vTSE架构 Fig. 3 Architecture of vTSE |
Intel SGX程序设计与一般的程序设计不同,需要对软件架构重新进行划分,每个软件都需要被划分成两个逻辑部分:可信部分 (enclave部分) 和不可信部分 (除去可信部分剩下的部分)[13]。可信部分用于执行程序中的机密性操作 (如密钥生成、密码运算等),保存敏感数据,其代码段和数据段位于EPC中,受到SGX保护;不可信部分完成程序其他的逻辑流程,其代码段和数据段位于一般内存中。可信部分与不可信部分之间不能直接进行交互,需要程序员通过编写接口文件定义访问接口。不可信部分调用可信部分功能的方式叫做ECALL;相反,可信部分调用不可信部分功能时要通过OCALL。
设计方案重点关注以下3个方面:虚拟机与vTPM实例交互的安全性、vTPM实例的内存隔离保护、vTPM非易失数据的安全存储。
3.2.2 虚拟机与vTPM的安全交互在虚拟机运行过程中,虚拟机与vTPM的交互过程见图 4。
![]() |
图4 虚拟机与vTPM交互过程 Fig. 4 Interaction between VM and vTPM |
如图 4所示,将Qemu进程拆分成可信部分和不可信部分。TPM软件库作为可信部分运行于安全区域enclave中,Qemu程序的其他部分作为不可信部分位于一般内存区域中。当客户机系统需要使用vTPM的功能时,由虚拟机内核驱动向Qemu模拟的硬件发出命令;Qemu在接收到命令后,通过ECALL功能进入enclave中,执行TPM库中的代码,完成相应的计算操作;计算完成后,TPM库调用OCALL功能,将执行结果返回给Qemu;最后将执行的结果返回给虚拟机用户,完成用户使用vTPM的整个过程。将vTPM整体放入SGX提供的安全区域中执行,在Qemu和TPM库之间通过ECALL和OCALL的方式进行交互,从而进行TPM命令的传递和结果的返回。通过精心设计ECALL和OCALL接口函数的参数属性,从而确保TPM库中的数据不会泄漏出去,使得可信部分与不可信部分的交互是安全的,具体设计方案的实现见第4.1节。
3.2.3 vTPM的内存隔离保护现有的vTPM实现架构下,在虚拟机运行时,其对应的vTPM实例数据全部以明文的形式存在于内存中,目前还没有有效的方法可以保护这些数据免受内存泄漏攻击。为在虚拟机运行时动态地保护vTPM实例数据,利用SGX提供的内存隔离保护特性,如图 3所示,每当Qemu创建虚拟机时,首先通过SGX驱动在Qemu进程空间中创建一个保护区域enclave,并将vTPM库加载至该保护区域中运行。vTPM实例代码和数据存放于SGX提供的安全内存区域EPC中,这样使得vTPM实例中的敏感信息可以与该进程中普通内存空间进行隔离。利用第1节中提到的SGX物理内存隔离保护和内存访问控制机制,可以保证包括特权软件在内的其他软件都无法访问到该安全区内容;同时,EPC区域中数据是经过内存加密引擎加密处理的,基于硬件的内存泄漏攻击也只能获取密文数据,进而可以保护vTPM库运行过程中内存数据与代码的机密性和完整性。
3.2.4 非易失数据的存储vTPM实例在运行过程中,其非易失数据需要进行实时存储,以便于日后恢复使用。现有存储方案一般在系统磁盘中建立一个称为NVRAM的文件,用于保存vTPM实例的非易失数据。为保证NVRAM中数据的安全性,将非易失数据先经过加密操作处理,再写入磁盘文件。如图 4所示,在虚拟机创建时,在enclave区域中生成一个对称密钥,用于加密TPM库的非易失数据。每当TPM库执行完一个命令操作后,都会更新相应数据至NVRAM文件中,以便保存vTPM的状态。在每次更新NVRAM文件时,先用之前生成的对称密钥将数据进行加密,然后再将其存放在磁盘上进行保存。而用于加密的对称密钥,则由SGX提供的密封功能密封后保存于磁盘上,当下次虚拟机重启时,首先将密封密钥加载进enclave中进行解封,然后再加载TPM库的NVRAM文件。
SGX支持两种类型的密封密钥:基于enclave身份和基于sealing身份。这两种密封操作的区别在于:基于enclave身份的密封数据只允许该enclave访问;而基于sealing身份的密封,只要enclave的签名结构相同,不同的enclave便可以解封相同的密封数据。为确保vTPM和虚拟机之间的绑定关系,使用enclave身份进行密封操作,这样每个虚拟机之间产生的密封密钥不能混用。这样做不仅加密保护了vTPM的NVRAM文件,使得攻击者无法通过直接读取NVRAM文件获取vTPM实例的密钥等敏感信息;同时密封功能可以为每个enclave生成不同的密封身份,即每个虚拟机的密封身份都不相同,当前虚拟机无法解密出其他虚拟机的NVRAM文件内容,从而实现了vTPM实例和虚拟机之间的绑定,使得攻击者无法通过滥用vTPM实例窃取其他用户机密信息。
4 实验与分析下面先简要介绍vTSE实现的关键点,随后将对提出的对虚拟机的vTPM实例进行保护的方法进行功能和性能评估。功能评估是为了测试所提出的方法是否能够有效保护vTPM实例数据的机密性和完整性。性能评估是为了评价所提方法造成的性能损耗。采用对比的方式进行性能评估,将所提方式与原方案进行对比,以此说明所提方法引入的性能代价。因虚拟机运行的复杂性,直接在虚拟化环境中分析vTPM库的性能开销不够精确,为能更好地分析性能开销,选择单独对TPM模拟器进行分析。实验中使用的机器型号为Dell Inspiron 7559,操作系统为Ubuntu 14.04 64 bit,Intel Linux SGX驱动和SDK版本为1.5.80,TPM模拟器版本为0.7.4。
4.1 vTSE实现本增强方案的实现主要使用了SGX的两个特性和功能:运行时内存的隔离保护,对非易失性数据进行密封保存。以下是实现的关键技术点:
1) 可信部分的划分
参考SGX的编程模型[13],需要对代码进行重构,将敏感数据和操作敏感数据的代码放入可信区中。这里将整个Qemu都作为不可信部分,将vTPM库整体作为可信部分。这样设计保证了vTPM完全运行于保护环境中,执行过程中的vTPM的密钥和计算过程的中间数据都受到了保护,只返回执行结果,从而避免了敏感信息的泄漏。
2) 设计交互接口
将从Qemu调入vTPM库的函数定义为ECALL;将vTPM库中不支持的标准C函数和系统调用定义为OCALL。
3) 数据的密封
为保证vTPM和虚拟机之间的绑定关系,使用enclave身份密封策略,这样每个enclave之间产生的密封密钥不能通用,就不会造成虚拟机滥用其他vTPM实例的情况。
4.2 功能评估功能评估是为了测试所提的安全增强方案是否能够有效保护vTPM实例数据。这里验证的主体是能否在虚拟机运行时,在内存和NVRAM文件中读取到vTPM中敏感数据信息。在安全增强的实验中,通过对比查看vTPM实例数据的格式化输出值说明保护方案的有效性。
在没有保护机制的情况下,图 5(a)显示的是通过tpm-tools读取到EK公钥的结果, 图 5(b)显示的是TPM模拟器运行过程中提取其内存数据的结果图, 图 5(c)显示的是直接读取NVRAM文件的结果。
![]() |
图5 vTPM隐私泄露测试 Fig. 5 Privacy disclosure test of vTPM |
通过对比发现,vTPM的EK公钥确实是以明文的形式存在于内存和NVRAM文件中,攻击者可以轻易地通过提取虚拟机内存或者读取文件获取其信息。
使用安全增强方案后,在vTPM实例运行过程中打印出vTPM的敏感数据地址,如图 6(a)所示。并通过gcore命令提取出TPM模拟器的内存数据,如图 6(b)所示。由图 6发现现在已经无法提取出TPM模拟器中敏感信息的内存数据。图 6(c)显示的是读取加密NVRAM文件的结果,此时已经无法找到EK公钥的明文。以上实验结果说明所提出的方法确实能在运行时和存储时对vTPM实例数据进行保护。
![]() |
图6 vTSE隐私保护测试 Fig. 6 Pivacy protection test of vTSE |
4.3 性能评估
本方案通过使用AES对称加密算法和SGX密封操作,实现了对虚拟机可信平台模块非易失存储文件NVRAM的可信存储。在密封操作的前后加上计时功能,并多次对原方案和增强方案进行NVRAM的读写操作,从而统计出增强方案、非保护方案及Xen、KVM保护方案的时间损耗。文中保护方案增加的时耗主要用于NVRAM读/写过程进行解密/加密NVRAM文件内容的操作。通过多次测试,不同方案对NVRAM读写的时耗如表 1所示,3种保护方案因为都涉及到加密,其时耗相比非保护方案存在一定的时间损耗。其中,Xen 4.5方案因为每次访问都需要调用硬件恢复加密密钥[4],所以其性能开销远超vTSE和KVM保护方案。vTSE保护NVRAM操作增加的时耗平均不超过1 ms,因此所提方案带来的性能开销在可接受的范围之内。
表1 NVRAM读写时耗 Tab. 1 Time-consuming of reading and writing NVRAM |
![]() |
5 结论
在vTPM的已有实现方案中,其实例数据在运行和存储时存在被窃取或篡改的可能。本文通过分析vTPM存在的安全问题,结合Intel SGX的技术特点,提出一种新的vTPM安全增强方案。该方案通过将vTPM实例放入安全隔离区域中运行,进而增强了vTPM实例数据的机密性和完整性,使得基于内存泄漏和内存篡改的攻击无效化;同时还实现了vTPM的NVRAM文件的安全存储和vTPM与虚拟机之间的绑定。通过实验表明,本文的方案能够对vTPM实例数据进行有效保护,同时不会带来太大的性能开销。
致谢: 在此特别感谢Intel公司提供的Linux环境下SGX的驱动程序和SDK软件开发包以及相关技术支持,这使得本文方案能够顺利实现。[1] |
Shen Changxiang, Zhang Huanguo, Wang Huaimin, et al. Research and development of trusted computing[J]. Science China:Information Science, 2010, 40(2): 139-166. [沈昌祥, 张焕国, 王怀民, 等. 可信计算的研究与发展[J]. 中国科学:信息科学, 2010, 40(2): 139-166.] |
[2] |
Trusted Computing Group.TPM main specification[EB/OL].[2016-06-10].http://www.trustedcomputinggroup.org/resources/tpm_main_specification.
|
[3] |
Berger S, Cáceres R, Goldman K A, et al.vTPM:Virtualizing the trusted platform module[C]//Proceedings of USENIX Security Symposium.Berkeley:USENIX Press, 2006:305-320.
|
[4] |
Xen Open Source Community.XEN project[EB/OL].[2016-06-10].http://www.xen-project.org/.
|
[5] |
Shi Y, Zhao B, Yu Z, et al. A Security-improved scheme for virtual TPM based on KVM[J]. Wuhan University Journal of Natural Sciences, 2015, 20(6): 505-511. |
[6] |
Mckeen F, Alexandrovich I, Berenzon A, et al.Innovative instructions and software model for isolated execution[C]//International Workshop on Hardware and Architectural Support for Security and Privacy.New York:ACM, 2013:10.
|
[7] |
Hoekstra M, Lal R, Pappachan P, et al.Using innovative instructions to create trustworthy software solutions[C]//International Workshop on Hardware and Architectural Support for Security and Privacy.New York:ACM, 2013:11.
|
[8] |
Anati I, Gueron S, Johnson S P, et al.Innovative technology for CPU based attestation and sealing[C]//International Workshop on Hardware and Architectural Support for Security and Privacy.New York:ACM, 2013
|
[9] |
Intel Inc.Intel Software Guard Extensions Reference[EB/OL].[2016-6-10].https://software.intel.com/sites/default/files/332680-002.pdf.
|
[10] |
Intel Inc.Intel Software Guard Extensions[EB/OL].[2016-6-10] https://software.intel.com/en-us/sgx.
|
[11] |
Red Hat Inc.KVM:Kernel-based virtual machine[EB/OL].[2016-06-10].http://www.linux-kvm.org/page/Main_Page.
|
[12] |
Bellard F.Qemu, a fast and portable dynamic translator[C]//Proceedings of the annual conference on USENIX Annual Technical Conference.Berkeley:USENIX Press, 2005:41-46.
|
[13] |
Intel Inc.Intel® software guard extensions evaluation SDK for Linux* OS developer reference[EB/OL].[2016-6-10].https://01.org/zh/intel-software-guard-extensions.
|