一种针对虚拟化超级调用函数的漏洞热修复方法与流程

文档序号:11216764
本发明属于云计算安全
技术领域
:,涉及一种虚拟化平台漏洞修复的方法,特别涉及虚拟化平台下超级调用的漏洞热修复方法。
背景技术
::随着互联网技术的快速发展,云计算作为一种低成本的计算与通信模式迅速崛起。中国信息通信研究院2016年9月在可信云大会上最新发布的《云计算白皮书(2016年)》显示,2010年至今全球云计算市场规模持续平稳扩增。云计算是指应用以服务形式通过互联网交付使用,并且数据中心的硬件和软件能够提供这些服务。近年来,微软、亚马逊、谷歌、IBM等大型互联网公司都相继发展了自己的云计算业务。国内的阿里云、百度云、腾讯云和移动云等多种形式的云计算服务正不断涌现。虚拟化技术作为云计算的基本组件,是支撑云计算最重要的技术基石。虚拟化带来了一定程度的可自定义性和可控性,实质上是一种创建不同计算环境的技术。三种最为常用的虚拟化技术是基于软件的完全虚拟化、硬件辅助虚拟化及类虚拟化技术。虚拟化技术经过多年的发展,出现了很多成熟的产品,应用也从最初的服务器到了桌面等更宽的领域。虚拟化软件的主流厂商包括VMware、Xen、KVM及Microsoft。云计算和虚拟化技术飞速发展的同时,也不可避免的带来了很多安全问题,利用虚拟化平台漏洞进行攻击的恶意行为层出不穷,严重损害了云服务厂商和云服务使用者的利益。漏洞一旦曝光,为了不影响业务安全,需要云计算公司对漏洞进行快速修复。目前存在冷补丁和热修复两种漏洞修复方式。所谓冷补丁修复,指修改系统源码后重新编译源码并重新启动服务器的方式。重启过程中,上层全部客户虚拟机需要宕机,用户业务被中断10至30分钟。可见,重启服务器势必会影响到客户的正常业务,有些甚至是致命的影响。而不影响虚拟机业务运行的漏洞热修复技术需考虑复杂组件的结合,难度极大。现有的少数热修复技术不能保证百分百不重启服务器,同样需要暂停所有虚拟机的运行,修复效果不理想。Xen安全社区(XenSecurityAdvisories)最新公布的漏洞报告显示,Xen虚拟化平台漏洞2012年至2016年持续增加。截止2017年2月,Xen安全社区已公布了210个Xen内核漏洞,其中CVE(CommonVulnerabilitiesandExposures)漏洞库披露的Xen高危漏洞196个,而由于超级调用函数问题导致的漏洞高达半数以上。超级调用是Xen虚拟化平台下重要的通信机制,其漏洞严重影响了虚拟化平台的可用性。因此有必要提出一种虚拟化平台超级调用函数漏洞热修复的方法,高效的修复虚拟化平台超级调用函数漏洞,避免恶意攻击的发生。技术实现要素:针对虚拟化平台漏洞修复问题,本发明提出了一种虚拟化超级调用函数的漏洞热修复方法。在对Xen虚拟化平台进行环境搭建、使用及源码分析后,可以发现Xen虚拟化平台下存在特权域Domain0,Domain0的DMA操作可以访问Xen内存,同时Xen下超级调用函数存放在超级调用表内,本发明主要利用特权域Domain0更新Xen下超级调用表对超级调用函数漏洞进行内存修复。本发明采用的技术方案如下:一种针对虚拟化超级调用函数的漏洞热修复方法,其步骤包括:1)根据Xen系统的e820表计算Xen物理内存起始地址,其中Xen系统的e820表为系统物理内存分布表,在Xen启动过程中生成并输出到系统日志中;2)根据计算出的物理内存起始地址及Xen内存分布,计算超级调用表的虚拟地址所映射到的物理地址,其中Xen内存分布为系统虚拟地址空间的内存分布,在Xen源码中有明确规定;3)通过特权域Domain0获取补丁机器码,并将补丁写入内存,记录补丁函数的物理地址;4)根据待修复的超级调用处理函数对应的超级调用号,计算待修复的超级调用处理函数超级调用表中对应的物理地址;5)通过特权域Domain0更新超级调用表,从而实现对超级调用处理函数的漏洞热修复。上述方法中,补丁的插入利用特权域Domain0的DMA(DirectMemoryAccess,直接内存访问)操作完成,需要计算超级调用表所在内存虚拟地址映射到的物理地址,作为DMA操作的物理内存地址。同时,所有补丁以机器码的形式写入内存。上述方法中,Xen与特权域Domain0通过超级调用方式通信。当Xen的客户机需要执行更高权限的操作时,如页表的更新、对物理资源的访问等,由于自身在非特权域无法完成这些操作,则需要通过调用超级调用交给Xen来完成。本发明的有益效果是:1.本发明通过特权域Domain0修复Xen平台超级调用函数漏洞,无需重启机器和暂停平台上虚拟机的运行,实现了虚拟化平台漏洞热修复功能。2.本发明通过特权域Domain0完成补丁的插入和应用,保证了补丁的可控性和安全性。3.本发明通过直接更新超级调用表的方式修复虚拟化平台漏洞,避免了修复过程对正在修复函数的正常运行造成影响,正在调用的超级调用函数先使用旧版本,修复完成后,内核更新,再次调用该超级调用时直接使用新版本。综上,本发明提出的针对虚拟化平台超级调用函数的漏洞热修复方法,能够较准确地修复虚拟化平台漏洞,无需重启机器,保证了虚拟化平台上虚拟机的正常运行,且利用Domain0进行修复更加安全。附图说明图1为虚拟化平台下超级调用函数的漏洞热修复方法的流程示意图。具体实施方式下面将结合实施例及附图,对本发明的技术方案进行清楚、完整地描述。实现本发明的一种具体实施方式如下,针对虚拟化超级调用函数的漏洞热修复方法,其步骤为:1)根据Xen系统的e820表计算Xen物理内存起始地址;2)根据上述计算出的物理内存起始地址及Xen内存分布,计算超级调用表的虚拟地址所映射到的物理地址;3)通过特权域Domain0获取补丁机器码,并将补丁写入内存,记录补丁函数所在物理内存地址;4)根据上述计算出的超级调用表的物理地址及待修复的超级调用处理函数对应的超级调用号,计算待修复的超级调用处理函数在超级调用表中对应的内存物理地址;5)通过特权域Domain0更新超级调用表,即完成对超级调用函数的漏洞热修复。本方法采用的虚拟化环境为Xen虚拟化平台,在Xen平台下虚拟机分为特权虚拟机Domain0和非特权虚拟机DomU。Xen系统内存为严格隔离的内存,在Xen4.0版本以前,特权域Domain0的DMA操作可以访问到Xen系统内存。Xen系统的e820表是指当前系统物理内存分布表,描述当前系统物理内存的使用情况,在Xen启动过程中生成并输出到系统日志中。Xen物理内存起始地址,是指Xen启动后内核函数的首地址。Xen启动后将内核动态重映射到一个高端的物理地址。超级调用表的虚拟地址所映射到的物理地址,是指超级调用表hyercall_table在物理内存中的位置,本发明通过特权域Domain0的DMA操作访问Xen系统内存,DMA操作使用的地址为物理内存地址。超级调用处理函数的物理地址,是指超级调用处理函数的入口地址,超级调用表中记录了各个超级调用处理函数的入口地址,以超级调用号为索引,超级调用表和超级调用号配合使用,以确定对应的处理函数地址。图1是上述虚拟化超级调用函数热修复方法的流程示意图,对其各步骤详细说明如下:1.计算Xen物理内存起始地址。启动过程中XenHypervisor(Xen虚拟机监控器)被动态装载到内存的高端地址xen_phys_start。该高端地址通过以下公式确定:xen_phys_start=end-reloc_size其中end代表物理地址空间中,4G之内最大可用内存首地址。reloc_size为Xen的代码和数据段所占的内存空间的大小,默认为4M。在本发明的一实施例中,通过在另一台主机源码编译安装同一版本Xen,获得reloc_size大小值。2.计算超级调用表所在的内存物理地址。XenHypervisor页面线性映射到高端虚拟地址。在本发明的一实施例中,通过查看Xen内存分布获得Xen内存虚拟起始地址xen_virt_start,另通过查看Xen-syms文件获得超级调用表hypercall_table虚拟地址VA,根据上述所得Xen物理内存起始地址,推算出超级调用表物理地址PA的计算公式:①offset=VA-xen_virt_start②PA=xen_phys_start+offset3.获取补丁机器码。因为补丁需要直接写入物理内存,所以要保证补丁机器码与内存函数机器码的格式一致。本发明结合已有的Linux下内核修复方法kpatch和kgraft的实现原理,在同一主机上修复超级调用函数源码,并重新编译Xen源码,最后通过特权域Domain0读取新的Xen二进制文件以获取补丁函数的机器码。特权域Domain0执行DMA写操作将补丁机器码写入内存。4.计算待修复超级调用处理函数入口地址。同系统调用类似,超级调用表中记录了各个超级调用处理函数的入口地址。在超级调用处理程序hypercall中,以超级调用号为索引可以方便地在超级调用表中找到对应的处理函数地址,方法为:call*hypercall_table(,%eax,4)。因此,待修复超级调用处理函数入口地址MA的计算公式为:MA=PA+%eax*4其中,eax为超级调用号,PA为超级调用表所在内存物理地址,%表示取寄存器值,4表示32位系统下每个超级调用表项为4字节大小。5.特权域Domain0更新超级调用表。为实现虚拟化平台运行过程中动态替换函数,本发明通过特权域Domain0的一次DMA读操作,将超级调用表中指定的超级调用处理函数地址更改为新超级调用处理函数的入口地址。正在执行的超级调用处理函数仍使用原超级调用处理函数,修复完成后,替换到新超级调用处理函数执行。本发明首先对该虚拟化平台超级调用函数热修复方法进行了功能有效性测试,测试结果表明通过本发明提出的方法可以在无需重启系统和暂停虚拟机的前提下修复虚拟化超级调用函数漏洞,符合本发明的设计目标。其次,为了衡量该方法对虚拟化平台系统可用性造成的影响,本实验在函数修复过程中对当前系统可用性进行计算,测试结果表明函数修复过程中虚拟化平台系统可用性为99.95%以上,该方法对系统可用性没有任何影响。在其它实施例中,步骤3)中获取补丁机器码,可通过在另一主机上修复内核函数源码,重新编译安装Xen,最后通过特权域Domain0的DMA操作读取补丁函数的机器码。补丁的写入可通过特权域Domain0的读文件操作将机器码写入kmalloc操作申请到的内核空间。在其它实施例中,步骤4)中待修复超级调用处理函数入口地址MA的计算公式,在64位系统下为:MA=PA+%eax*8,64位系统下每个超级调用表项为8字节大小。可以理解的是,以上所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。当前第1页1 2 3 当前第1页1 2 3 
再多了解一些
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1