屈建萍 刘雪峰 王伟丽
1.河北建筑工程学院;2.解放军信息工程大学电子技术学院 ;3.河北外国语职业学院
目前PC平台存在的不安全问题,绝大多数都是因为PC和操作系统在体系结构上存在着设计弱点和安全漏洞.可信计算技术为各种安全问题的解决提供了新的思路和方法.可信计算技术是一种新的信息安全手段,它通过信任链传递等机制确保终端平台的“可信”.目前可信计算技术已经有了很大的发展,但还存在着以下应用问题,一是可信计算对终端平台的安全控制与用户对本机操作的灵活性之间存在矛盾,二是可信计算与操作系统相结合的研究和应用还比较少.
通过探索和研究可信计算与操作系统有机结合的问题,在基于虚拟机系统构建的可信计算平台架构中,对可信计算与虚拟机系统的相互结合问题进行深入研究.提出了一种基于虚拟机系统构建的可信计算平台架构——TCP/VMM架构.在此基础上,对TCP/VMM架构中可信计算与虚拟机监视器的相互结合问题进行了深入研究,并设计和初步实现了一个符合这种架构的系统——基于Xen的可信虚拟机系统,简称TV/Xen系统.本文将对TV/Xen系统的实现方法进行探索和研究,并给出该系统的一个应用实例.
1.1.1 TXen
TV/Xen系统是基于开源虚拟机监控软件Xen实现的.应用到TCP/VMM架构下的Xen虚拟机监视器被称为“TXen(Trusted Xen)”,它主要具有以下特性:
(1)隔离性.
TXen对上层的各虚拟机提供严格的隔离机制.这是TCP/VMM架构能够解决可信计算技术所产生的各种应用问题的关键所在.通过对上层应用的隔离,某一应用的脆弱性不会影响到其他系统,不会产生传统系统所存在的“木桶效应”问题,确保了特定虚拟机的机密性和完整性.
(2)可信性.
能够向上层提供可信计算功能,保护用户的重要数据,也可以通过远程证明机制向远程方证明特定虚拟机配置状态的可信.在Intel的LaGrand Technology技术的支持下,它还可以提供给用户安全接口、可信通路等功能.
(3)可扩展性.
在TV/Xen系统中,用户可以根据自己的安全需求定制虚拟机中的软件栈.客户操作系统可以是一般的通用操作系统如Windows、Linux等,也可以是像引导载入程序GRUB那样简单的小型操作系统.
(4)高效性.
传统系统架构对硬件的利用率并不是很高,造成硬件资源的浪费.据统计,多数用户的系统资源利用率只有10%~30%.TV/Xen系统可以更有效的利用硬件资源.各虚拟机中的应用程序的运行效率与一般系统架构下并无显著差异.
1.1.2 vTPM
TPM是一种硬件安全芯片,在TV/Xen系统中,为了向各虚拟机提供可信计算功能,必须要考虑TPM的虚拟化.由于硬件TPM中存放了密钥等重要数据,而可信计算又是通过它来证明平台配置的可信,因此以软件形式存在的vTPM不仅要提供与硬件TPM相同的功能,还要考虑对自身的安全性保护、如何与所在平台的可信计算基(TCB)保持紧密联系等问题.
1.1.2.1 vTPM的结构
在TV/Xen系统中,TPM的虚拟功能是由Domain-0提供的.整个vTPM由一个vTPM后台管理程序(vTPM Manager)和一组vTPM实例(vTPM Instance)构成,如图1所示.每一个vTPM实例分别与一个Domain-U对应,向其提供TPM功能.在Domain-U看来,它所对应的vTPM实例就相当于一个硬件TPM.虚拟机与vTPM实例的对应关系是通过一个“VM—vT PM Instance”表进行维护的. vTPM后台管理程序负责vTPM实例的创建、删除、状态保存、移植以及将Domain-U的TPM请求发给对应的vTPM实例等.
在TV/Xen系统中,TPM设备驱动由TPM前端驱动“/dev/tpm0”和TPM后端驱动“/dev/vtpm”组成.前端驱动“/dev/tpm0”负责将本虚拟机中应用层的TPM请求发送给后端驱动“/dev/vtpm”.同一时刻,可能会有多个Domain-U向vTPM发送请求.因此必须要确保各虚拟机的TPM请求只能发送到它所对应的vT PM实例,防止虚拟机伪造TPM请求数据包访问其它虚拟机的vTPM实例.解决方法是在每个vTPM实例创建时分配给它一个4字节的标识符.当TPM后端驱动接收到一个TPM请求后,根据中断号识别出是哪个虚拟机发送过来的,再由“VM—vTPM Instance”关系表,知道该请求应发往哪个vT PM实例.后端驱动在请求数据包头中加入相应的标识符,然后发送给vTPM后台管理程序,由其发给相应的vTPM实例.由于此操作是在后端驱动进行的,Domain-U就不能伪造数据包来访问不属于它的vTPM实例.
1.1.2.2 vTPM与所在平台TCB之间关系的建立
可信计算的远程证明机制是通过向远程方发送存放在PCRs中的完整性度量值来证明本平台配置的可信的.在TCP/VMM架构中,vTPM能够向虚拟机提供完整性度量功能,在vTPM实例的PCRs中记录应用程序的度量值.但在远程证明机制中,TCP/VMM架构不仅要向远程方证明虚拟机环境的可信,还要证明虚拟机所在的VMM和硬件层的可信,即vTPM中的PCRs值能够反映虚拟机和所在底层环境的配置信息.解决方法是将vTPM实例中的PCR寄存器划分为两组.PCR[0]~PCR[8]存放平台TCB的配置信息,vTPM实例对其只具有读权限,具体的扩展操作是由Domain-0进行的;PCR[9~PCR[15]存放对应虚拟机的配置信息,其中PCR[9]存放客户操作系统的完整性度量值.vTPM实例可以对这一组PCRs进行扩展操作.
根据以上分析可知,TCG规范中的信任链已经不适用于TV/Xen系统,因此需要重新构建信任链. TV/Xen系统的信任链传递机制如图1所示.系统所采用的操作系统引导载入程序(OS Loader)是目前流行的GRUB,它具有强大的功能,可以引导各种操作系统.目前GRUB还不具有可信引导功能,需要对其进行改造,使其能够对TXen进行完整性度量.在TV/Xen系统中,Domain-0是系统TCB的一部分,由它执行系统的访问控制策略和资源管理策略.GRUB会对Domain-0的操作系统内核进行度量,将控制权传递给它后,Domain-0会对系统的各种策略文件进行完整性度量.以上度量过程所产生的度量值将作为系统TCB的配置信息扩展到硬件TPM中,以后由Domain-0扩展到各Domian-U的vTPM实例中.
图1 TV/Xen系统结构
图1 TV/Xen系统中的信任链传递
在TV/Xen系统中,运行在Domian-U中的可信支持软件(TSS)的运行流程如图2所示.在Domain-U中,通过“modprobe tpm_xenu”命令动态载入TPM 前端设备驱动,会产生字符设备“/dev/ tpm0”.在Domain-0中,通过“modprobe tpmbk”命令动态载入TPM后端设备驱动,会产生字符设备“/ dev/vtpm”.TDDL先与自己虚拟机中的TPM前端驱动“/dev/tpm0”交互,再由前端驱动通过后端驱动“/dev/vtpm”访问vTPM.
TCG完整性度量是在要执行的代码被载入内存之前进行的.代码被载入内存后一直到它执行, TCG都认为它是可信的.但实际上,对于代码来说,它在通过度量被载入内存一直到执行之前的这段时间内是极有可能遭受攻击的.这类攻击一般被称为“TOCTOU(time-of-check/time-of-use)”攻击.
图2 TV/Xen系统中TSS的运行流程图
在x86页式内存管理机制[5]中,每一个页表项的高20位存放的是一个物理页面的地址,其余12位是控制位,表示该页是否已被访问、对其的读写权限等.在针对TCG完整性度量机制的TOCTOU攻击中,攻击者可以通过以下三种方式对存放可信代码的物理页面实施攻击:(1)修改自己进程的PT E,使其指向一个可信物理页面.该PT E的控制位可被攻击者设置为具有对所指页面的读写权限,这样攻击者就可以对可信代码进行篡改.(2)修改一个指向可信物理页面的PTE的高20位,使其指向其它物理页面,这样攻击者就可以使系统将恶意代码当作可信代码执行.(3)攻击者修改一个指向可信物理页面的PTE的控制位,使其具有对该页面的读写权限.
Xen通过内存管理等机制对各虚拟机进行严格隔离.每个虚拟机在创建时都分配有一块属于自己的物理内存.客户操作系统负责管理和分配各自的页表(Page Table,PT),但它对页表只能进行读操作,不能修改页表中的页表项(Page Table Entry,PTE),具体的修改是由Xen执行的.Xen提供了三种PT修改方式:(1)Hypercall Mode,客户操作系统通过Hypercall (mmu_update)向Xen发出页表修改请求.(2)Writable Page Table Mode,客户操作系统认为自己的页表项PTEs是可以进行写操作的.当客户操作系统向各自的PTEs进行写操作时就会产生一个页错误(page fault,因为页表PTs只能被读),被Xen捕获.(3)Shadow Page Table Mode,在这种模式中,客户操作系统和VMM层分别存在两组不同的页表PTs,Xen负责将客户操作系统中PT s的变化映射到VMM层中真实的PTs中.
在TV/Xen系统中,TXen采用Xen的内存管理机制.针对TOUTOC攻击,可以利用TXen对可信物理页面实施监控,任何试图对可信页面进行篡改的操作都可以由TXen检测出来.具体方法如下:
(1)修改客户操作系统内核,使其向TXen报告需要被监控的PTEs,以及这些PTEs所映射到的可信物理页面.为了实现这一功能,我们在Xen 3.0.3源代码中增加了以下几条新的Hypercall调用:
● HYPERVISOR_pte_monitored,向TXen报告一组需要被监控的PTEs.
● HYPERVISOR_monitor_exit,当一个被监控的可信代码退出时,将相应的PTEs和物理内存页面从监控列表中删除.由do_exit()函数对其调用.
(2)TXen对客户操作系统报告给它的PT Es和物理页面实施监控,检测出任何试图对所监控的PTEs和物理页面进行修改的操作.
我们在实验时所采取的页表升级默认方式是Hypercall Mode.在这种方式中,对页表的修改操作都会通过do_mmu_update()函数被Xen捕获.该函数接收到的参数有需要被修改的PTE旧值以及替换该旧值的PTE新值.它会调用update_l1e()函数执行具体的PTE修改操作,调用时会将PTE旧值和PTE新值作为参数传递下去.我们在update_l1e()函数中增加了以下篡改检测功能:
● 对于接收到的PTE旧值,update_l1e()函数会检查它是否位于监控列表中.如果该PTE旧值位于监控列表中,说明可能有恶意程序试图修改该PTE中的地址指针或控制位,即4.1节中的攻击情况2和攻击情况3.
● 对于接收到的PTE新值,update_l1e()函数会检查它的控制位,看它是否对所指物理页面具有写权限.如果具有,那么就计算它所指向的物理页面的地址,判断该物理页面是否位于监控列表中.如果是,那么就可能会发生攻击情况1.
(3)我们增加了一个新的虚拟中断“VIRQ_TAMPER”.一旦TXen检测出对所监控的PTEs和物理页面进行的修改操作,就通过该中断向Domain-0报告在某一虚拟机中发生了对可信代码的篡改操作.然后Domain-0就会用一个随机数对相应vTPM实例中的PCR进行扩展,表示篡改的发生,并通过远程证明机制向远程方报告.
利用可信计算技术为高安全等级操作系统提供安全服务和支撑,缓解高安全等级操作系统在安全性和可用性之间的矛盾,并进一步保护操作系统内核的安全.为了使TPM更好地为系统提供服务,结合实际需求,在不影响系统整体性能的条件下,对TPM功能接口的扩展进行深入研究.将可信计算与虚拟机技术相结合的TCP/VMM架构既可以利用可信计算技术来保证终端平台和网络的安全,又可以解决可信计算应用过程中所产生的一些问题,利用可信计算技术更好地为高安全等级操作系统提供服务.
[1]董耀祖.解析Xen虚拟机架构.http://www.ossw.com.cn,2006(10)
[2]胡希明,毛德操.Linux内核源代码情景分析.杭州:浙江大学出版社,2001
[3]Tal Garfinkel,Pfaff B,Chow J.Terr:a Virtual Machine-based Platform for T rusted Computing.Proceedings of the Symposium on Operating Systems Principles.2003
[4]R.P.Goldberg.Survey of virtual machine research.IEEE Computer M agazine,7:34-45,1974
[5]P.A.Karger,M.E.Zurko.Aretrospective on the VAX VMM security kernel.In IEEE Transactions on software Engineering,1991