基于虚拟化的系统安全增强及显卡透传研究(2)

2019-06-05 12:19

图2:基于虚拟化技术的操作系统安全增强模型

这种安全模型的推广应用,要求虚拟机下的客户机操作系统应具备与运行于真实主机上的操作系统相同或相近的性能与通用性,否则终端用户是无法接受因安全增强而带来的性能或易用性方面的损失的。自2005年, Intel和AMD公司分别发布了支持VT(Virtualization Technology)技术的CPU以来,基于支持VT技术的CPU虚拟化技术已经让虚拟机处理性能产生了质的提升,能够达到真实主机性能的95%以上,CPU处理性能已经不再是虚拟化技术在终端安全领域发展的绊脚石。而显卡显示性能问题则成为当前虚拟化技术在终端安全领域发展的关键问题,当前国外主流的虚拟机软件都没能很好的解决好显卡虚拟化问题,虚拟机的图形显示处理能力只相当于当年的386时代的水平,这使得虚拟机中的客户机操作系统不能够运行一些对图形处理能力要求高的应用,这种安全模型的进一步发展存在着较大的障碍。下面将基于KVM虚拟机研究实现提升客户机操作系统显示性能的具体实现方法,本文的研究主要是基于KVM虚拟机进行的,但相关技术原理具有普适性,也可在其他开源虚拟机上得到实现。

6

4 KVM虚拟机

当前,主流的商业虚拟机有VMware和Virutal PC,开源虚拟机有Xen、Qemu、Bochs、KVM等。KVM[3]是kernel-based Virtual Machine的简称,是一个基于Linux内核,依赖CPU硬件虚拟化技术(如Intel 或AMD VT技术)的的开源系统虚拟化模块。KVM虚拟机的体系架构如图3所示,VMM虚拟机监控器借助于Linux操作系统的内核实现。

图3:KVM虚拟机原理图

KVM虚拟机支持PCI透传技术(PCI passthrough),可以实现将PCI硬件资源直接映射到虚拟机的客户操作系统中,客户操作系统可以直接驱动真实的标准PCI物理设备以获得高速物理资源访问。但KVM虚拟机支持PCI透传技术还必须依赖于硬件平台支持Intel 或AMD的VT-d/IOMMU技术。VT-d/IOMMU技术在服务器虚拟化中对I/O虚拟化具有重要作用,但在终端用户的操作系统安全增强模型中却并不重要,此外,由于VT-d/IOMMU技术主要面向服务器设计,普通PC机上支持不多。因此,在基于KVM虚拟机的操作系统安全加固模型中实现显卡透传主要有两方面的研究工作:一方面是研究在不支持VT-d/IOMMU技术的硬件平台上实现PCI透传的方法;另一方面是实现对显卡这种特殊的PCI设备在虚拟机中的直接分配。

7

5 直接地址映射技术

5.1 基本原理

在虚拟机中实现PCI透传,需要处理好4方面的问题: 1) PCI配置空间映射; 2) PCI内存及I/O资源映射; 3) PCI IRQ中断映射;

4) DMA(直接内存访问)处理;

通常情况下,对于标准PCI设备,前三个方面的处理均可以通过虚拟机相应的软件映射机制实现,而对虚拟给客户机操作系统的物理硬件DMA的处理则是现有的虚拟方式下难以用软件实现的,这与DMA本身的技术机制有关。

DMA是外设与系统进行高速数据传输的技术,外设可以不经过CPU直接进行内存读写访问,高效传输数据。在DMA传输时驱动需要申请一个可被DMA访问的地址空间,然后告诉外设可进行DMA传输的内存物理地址。这种方式在物理主机上没有任何问题,操作系统会保证分配给驱动的地址空间独立性。但在虚拟机上,因采用影子页表机制实现多个客户机物理地址到主机物理地址的映射,驱动从系统中获取的物理地址实际上是经过虚拟机转换后的客户机物理地址(GPA),并非对应真实的主机物理地址(HPA)。如果外设直接存取该地址的数据必然导致系统崩溃或造成安全隐患。Intel 的VT-d和AMD的IOMMU技术则是从硬件层面解决DMA处理问题的有效办法。

与CPU上的Intel VT-x技术一样,VT-d( Virtualization Technology for Directed I/O)技术是一种基于北桥(North Bridge)芯片的硬件辅助虚拟化技术,通过在北桥中内置提供DMA虚拟化和IRQ虚拟化硬件,实现了新型的I/O虚拟化方式。 运用VT-d技术,虚拟机得以使用直接I/O设备分配方式或者I/O设备共享方式来实现PCI设备透传,从而大大提升了虚拟化的I/O性能。AMD与之类似的技术称之为SVM IOMMU。

Intel 的VT-d和AMD的IOMMU技术支持DMA虚拟化的主要原理是由硬件维护一张DMA重映射表,当外设对某个物理地址进行DMA操作时,自动查找映射表,将操作地址映射为虚拟机内GPA对应的真实HPA,以避免错误的内存地

8

址操作。该技术具有通用性,可以同时支持多个虚拟机同时进行物理设备透传,且互相不影响,但需要有主板芯片组支持才能使用,对硬件依赖性较高,KVM虚拟机已支持基于VT-d技术的PCI设备透传[4]。但在终端操作系统安全加固模型中,我们不需要对多虚拟机同时进行物理设备透传,因此,并不需要维护一张1对多的DMA重映射表,我们只需要处理好GPA等于HPA的问题即可有效确保硬件对DMA地址处理的合法性,使得虚拟机对物理硬件具有与真实主机一致的效果。本文针对DMA处理问题,提出了虚拟机与物理主机直接地址映射技术的解决方案。

5.2 实现方式

直接地址映射是通过将真实系统中低地址内存直接分配给虚拟机使用,直接让虚拟机的GPA对应主机HPA的技术。直接地址映射技术可以不需要任何硬件辅助,做到DMA访问的物理地址内存与主机一致。但该技术的缺点是,一个主机系统中只能同时运行一个进行物理设备透传的虚拟机,多个虚拟机同时进行物理设备透传则会造成地址冲突。

KVM是基于Linux操作系统运行的。实现直接地址映射的先决条件是需要Linux操作系统在启动时将低地址内存空间预留出来。为保证体系兼容,X86架构下的低1M内存空间在操作系统初始化前就已预留给实模式中断向量表、BIOS数据、显存等使用,我们不能在Linux上预留这部分空间,只能从1M以上的空间开始预留。对于2.6内核,有一个PHYSICAL_START变量设置系统启动时内核加载地址,缺省指向地址0x100000(1M)处,我们可以修改为更大的值让系统在启动时空出1M到PHYSICAL_START地址之间的内存空间,然后将这部分空间标记为预留,以避免操作系统启动后占用这部分空间[5]。

从操作系统层面预留的这部分空间是无法直接在应用层直接使用的,目前我们通过Linux下/dev/mem设备文件直接将预留内存映射到应用层QEMU为虚拟机分配的内存空间中,映射时需注意确保HPA与GPA的对应。而对于虚拟机的其它内存空间,无需与物理地址对应关系,依然采用影子页表机制将虚拟机内存地址映射为Linux分配给QEMU的内存空间中。具体映射关系见图4。从图中可以看出,在成功实现内存映射后,客户机操作系统所使用的内存和被直接透传的

9

显卡内存实际对应到了主机的真实内存部分,映射时确保了地址的一一对应。而虚拟机前640k内存空间、虚拟设备内存均由QEMU进行虚拟,占用的是Linux操作系统的内存空间。考虑到运行态主机的VGABIOS内存空间存储的是被修改过的BIOS代码,因此虚拟机中VGABIOS内存空间均由QEMU进行虚拟,也占用的是Linux操作系统的内存空间。

图4:一对一内存映射下虚拟机内存与物理内存的对应关系

6 显卡直接分配

从KVM虚拟机结构中可以看出,如果虚拟机需要访问QEMU模拟出的外设,则需要通过多次处理,才能够将数据真正传递给真实硬件设备处理,这对于普通低速接口的硬件外设访问来说虚拟化处理开销还容易接受,但对于显卡虚拟化来说性能问题将显得尤其突出。因此,采用显卡直接分配技术将物理显卡单独分配给一个虚拟机独占访问,使虚拟机上的客户端操作系统直接驱动物理显卡,进行MMIO访问和DMA操作,是一个在虚拟环境中获得高质量图形显示效果的有效解决方案。图5是显卡直接分配技术与QEMU直接虚拟外设的处理对比。从图中可以看出,显卡直接分配给虚拟机的客户操作系统还可以使得客户机操作系统充分利用物理显卡原始驱动实现显卡效能的最大化发挥。

10


基于虚拟化的系统安全增强及显卡透传研究(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:如家运营题库

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: