一种基于Xen的主动防御方法

文档序号:6356583阅读:446来源:国知局

专利名称::一种基于Xen的主动防御方法
技术领域
:本发明属于计算机安全领域。
背景技术
:当前随着病毒等恶意程序变得越来越复杂,保护计算机系统变得越来越困难,有时仅仅检测到这些恶意程序已经非常困难,而对某些恶意程序来说,清除它们而不破坏原有系统是无法做到的。目前主流商业安全软件普遍采用使用特征码扫描及主动防御相结合的方式对用户操作系统进行保护,其中特征码扫描主要针对已知恶意程序,对系统内存和文件进行扫描,与储存在数据库中的恶意程序特征码进行比对,从而发现已知恶意程序;而对于未知病毒,主要使用各种启发式算法来判断一个程序是否具有恶意程序的特征,由于恶意程序的复杂性以及算法的不足,这种方法带有一定的漏报和误报率,因此目前更多采用主动防御技术,既在系统关键位置插入监控程序,一旦检测到未定义行为便通知用户,由用户来决定如何处理该行为,从而大大提高了判断恶意行为的准确性。尽管如此,计算机用户的噩梦仍在持续。我们经常可以遇到安全程序自动关闭而且再也启动不起来的情况,这主要是由于安全类软件和恶意程序都是处于被保护的系统中,恶意程序同样有机会获取系统最高权限并攻陷安全程序,两者之间的博弈永无止境。如何提高安全程序自身的安全性成为迫切需要解决的问题。近年来,随着硬件性能的提升,虚拟化技术开始普及到桌面用户,由于虚拟机天然的隔离性,许多安全类项目都在此基础上开展。目前,此类研究的主要思路是将应用转移到一个隔离的虚拟机中,使其不受物理主机系统的影响,如可信计算组织的OpenTC项目提出的方法,但是虚拟机是使用软件模拟或者硬件辅助模拟的一个计算环境,具有和真实系统一样的特性,因此虽然与物理系统环境相隔离,但其内部的安全性并没有提高,如果在虚拟机中安装安全类软件,仍然存在前面叙述的问题。因此,一些研究尝试将安全类程序从被保护的虚拟机中剥离,放置在特权虚拟机(负责管理所有其他虚拟机的特殊虚拟机)或虚拟机监视器(虚拟机程序的核心模块)中,在虚拟机内部,处于这个层次的组件是不可见的,因此恶意程序无法攻击到这些组件,提高了安全性,这类技术叫做VMhtrospection(虚拟机自省技术),如Xenaccess方法可以在特权虚拟机中获取用户虚拟机(被保护的虚拟机)的内存并进行解析,但其无法对文件系统进行访问,也无法对虚拟机内部进行干预。美国乔治亚技术学院的Lares项目提出了一种能够干预虚拟机内部行为的主动防御方法,可以截获虚拟机内部行为并发送到特权虚拟机中,但其使用的数据传输方式十分简单,采用超级调用直接陷入虚拟机监视器,不适合传送大量数据,比如扫描用户虚拟机的文件系统,并且由于其循环等待会大量占用系统CPU。Intel提出了一种基础轻量级虚拟机的内存和数据保护方法,能够确保应用的内存和数据不被篡改,但需要修改现有的应用程序显示调用其方法,因此不具有实用性。
发明内容为了解决这些问题,发明人提出一种基于Xen的主动防御方法。Xen是一种类型I的虚拟机,系统安装了以后,硬件和原有的操作系统中会增加一个虚拟机监视器层,而原有的操作系统将运行在这个虚拟机监视器层之上,成为一个特殊的虚拟机,称为特权虚拟机,特权虚拟机可以控制生成、销毁及管理用户虚拟机。一种基于Xen的主动防御方法,它利用Xen生成虚拟机为用户使用,同时通过在特权虚拟机中设置后端驱动,在用户虚拟机中设置前端驱动,通过前后端驱动的通讯来获取用户虚拟机中信息,并对用户虚拟机中的行为进行控制,同时在虚拟机监视器层实现对用户虚拟机中前端驱动的字节级内存写保护,前后端驱动通讯使用准虚拟化通讯方式。前端驱动运行在用户虚拟机中,实现为一个虚拟PCI驱动,随系统启动自动初始化,前端驱动主要包括两个功能首先是截获系统调用,使用传统的钩挂SSDT表并设置跳转代码的方式来实现。截获系统调用是为了对用户虚拟机中的行为进行干预,截获的信息将被发送到后端驱动,由决策模块进行判断。后端驱动被实现为一个内核模块,主要有两个功能与前端驱动通信获取截获的系统信息和相关数据,然后将这些数据传递给用户态的决策模块,决策模块做出判断后,将结果发送给前端驱动;另外在还需要在前端驱动初始化钩子及跳转代码后,通知虚拟机监视器中的内存保护模块保护相应的内存地址范围。前端驱动与后端驱动通信时,采用了准虚拟化的通信方式。准虚拟化要求修改操作系统内核,因此大多用于开源的Linux操作系统,而目前大多个人用户使用非开源的Windows操作系统,为了在使用Windows操作系统的用户虚拟机中使用这种技术,首先要求用户虚拟机内部组件明确知道其处于虚拟机中,并移植分离式驱动模型用到的Xen机制的代码,包括超级调用(Hypercall)、事件通道、Xenstore、授权表(Granttable)。其中Xenstore是基于共享内存方式实现的,用于在用户虚拟机启动时读取特权域虚拟机提供的设备初始化信息,前端驱动初始化时也使用Xenstore与后端驱动建立连接,之后通过事件通道和I/O环与后端驱动进行通信。前端驱动截获系统信息后,使用超级调用向虚拟机监视器请求放弃调度,等待决策模块进行决策,从而大大提高了性能。I/O环是在Xen共享内存机制上实现的为分离式驱动交换数据的结构,分为两种固定槽(Fixedslot)大小的1/0环,由网络、存储设备所使用;可变槽(Variable)大小的1/0环,由Xenstore所使用。在本方法中,需要传输的数据主要有两种文件信息及其HASH值;和需要被扫描的文件,对这些信息采用统一固定大小槽的1/0环,并用一个标志位来区分数据类型。当后端驱动初始化时,它分配一个未绑定的事件通道,并初始化1/0环,将事件通道端口号和环地址写入Xenstore。前端驱动通过Xenstore读取这些信息,绑定该事件通道,并映射环地址,并使用超级调用通知虚拟机监视器通知该虚拟域时应该使用的中断号,同时分配为此中断注册一个处理函数。为了保护在用户虚拟机中的前端驱动,在虚拟机监视器层实现字节级内存写保护模块,对前端驱动进行字节级写保护。首先记录下需要保护的内存地址范围,SPT初始时是空表,随着系统运行逐渐建立,在为一个页面生成SPT的过程中,检测GPT中的这页是否包含需要保护的内存地址,如果是,则将该页在SPT中标记为只读,这样就实现了页级写保护,但是一个页面中并不是所有字节都是需要保护的,这时如果发生一个写异常,就需要在处理函数中进一步检查引起该异常的语句中写入的地址是否是要保护的地址,将CR2寄存器中引起异常的地址与被保护地址进行比较,如果是则向用户虚拟机返回一个页异常,否则需要模拟该写操作.为使本方法具有实用性,首先必须实现传统安全程序的两种主要功能通过内存和文件扫描检测已知恶意程序,通过主动防御技术防御未知恶意程序。对于虚拟机内部的内存扫描,现有的虚拟机自省技术已经可以做到,文件扫描需要在用户虚拟机和特权虚拟机之间传输大量数据,因此必须保证两者之间的通讯方式适合大量数据的传输,且性能控制在可接受的范围内,在本方法中,使用了一种基于准虚拟化设备I/O方式的虚拟设备传输方式,解决了这个问题。而为了提高安全程序自身的安全性,本方法将安全程序的核心组件转移到了特权虚拟机及虚拟机监视器中,使得用户虚拟机中的恶意程序无法对其进行攻击。为了实现主动防御技术,要求必须能够干预虚拟机内部行为,目前,单纯依靠处于特权虚拟机中的组件是做不到这一点的,因此尽管本方法将主动防御技术的主要组件都转移到了特权虚拟机中,仍需要在用户虚拟机中遗留一部分组件,这部分被称为前端驱动,由于前端驱动处于用户虚拟机中,恶意程序可以攻击它,因此,本方法在虚拟机监视器层实现了一个字节级内存写保护模块,对用户虚拟机中的前端驱动进行保护,防止其被篡改,由于内存保护实现在虚拟机监视器层,保证了在用户虚拟机中是无法绕过此防护的。图1是本发明实现基于Xen的主动防御系统架构图。图2是本发明实现基于Xen的主动防御系统各模块交互流程图。具体实施例方式本方法基于Xen实现,整体结构为类型I虚拟机典型架构,除Xen自身组件外,包含四个模块,如图1首先是处于被保护虚拟域中的前端驱动,实现为一个虚拟的PCI驱动,负责截获系统调用并与特权虚拟域通信。第二个组件是处于特权虚拟域中的后端驱动,实现为一个内核模块,它与前端驱动通信,获取系统截获信息,并传递给特权虚拟域中用户态的决策模块,决策模块用于策略制定和决策,在我们的原型系统中,它是一个包含应用黑白名单及签名的小型数据库。第四个模块是处于虚拟机监视器层的内存保护模块,对被保护虚拟域中的组件提供内存写保护。其中,被保护的虚拟机称为客户虚拟机机,特权虚拟机为具有控制生成客户机权限的特殊虚拟机,客户虚拟机与特权虚拟机之间通过I/O环进行通信;内存保护模块处于虚拟机监视器中,虚拟机监视器运行在系统最高级。前端驱动运行在用户虚拟机中,实现为一个虚拟PCI驱动,随系统启动自动初始化,前端驱动主要包括两个功能首先是截获系统调用,使用传统的钩挂SSDT表并设置跳转代码的方式来实现。截获系统调用是为了对用户虚拟机中的行为进行干预,截获的信息将被发送到后端驱动,由决策模块进行判断,为了定位应用程序,采用对应用提取特征与数据库中的特征进行比对的方式。后端驱动被实现为一个内核模块,主要有两个功能与前端驱动通信获取截获的系统信息和相关数据,然后将这些数据传递给用户态的决策模块,决策模块做出判断后,将结果发送给前端驱动;另外在还需要在前端驱动初始化钩子及跳转代码后,通知虚拟机监视器中的内存保护模块保护相应的内存地址范围。前端驱动与后端驱动通信时,采用了准虚拟化的通信方式,由于准虚拟化要求修改操作系统内核,不适用于Windows这样的商业操作系统,因此借助了PV-on-HVM技术,使用这种方式在全虚拟化的虚拟机上使用准虚拟化的分离式驱动模型,从而大大提高I/0效率。这种技术首先要求客户虚拟域明确知道其处于虚拟机中,并移植分离式驱动模型用到的Xen机制的代码,包括超级调用(Hypercall)、事件通道、Xenstore、授权表(Granttable)。超级调用是用来陷入虚拟机监视器层的特殊系统调用,事件通道是Xen提供的异步通信机制,授权表是Xen在不同虚拟域间共享内存的授权机制,Xenstore是基于共享内存方式实现的,用于在客户虚拟域启动时读取特权域虚拟机提供的设备初始化信息,前端驱动初始化时也使用Xenstore与后端驱动建立连接,之后通过事件通道和I/ORing与后端驱动进行通信。前端驱动截获系统信息后,使用SCHEDOP_block向虚拟机监视器请求放弃调度,等待决策模块进行决策,相比Lares中使用超级调用阻塞在虚拟机监视器中的方式,大大提高了性能。I/O环在准虚拟化驱动模型中被广泛使用,它是在Xen共享内存机制上实现的为分离式驱动交换数据的结构,分为两种固定槽(Fixedslot)大小的I/O环,由网络、存储设备所使用;可变槽(Variable)大小的I/O环,由Xenstore所使用。在本方法中,需要传输的数据主要有两种文件信息及其HASH值;和需要被扫描的文件,对这些信息采用统一固定大小槽的1/0环,在客户和虚拟机中共享4个页面,每个槽IOM字节,并用一个标志域来区分数据类型。当后端驱动初始化时,它分配一个未绑定的事件通道,并初始化1/0Ring,将事件通道端口号和环地址写入Xenstore。前端驱动通过Xenstore读取这些信息,绑定该事件通道,并映射Ring地址,并使用超级调用通知虚拟机监视器通知该虚拟域时应该使用的中断号,同时分配为此中断注册一个处理函数。决策模块处于特权虚拟域中的用户空间,包含一个决策数据库,主要用来判断一个应用程序的合法性,并决定是否允许该应用程序执行,决策模块使用普通的通讯方式与内核模块通信。为了保护在用户虚拟机中的前端驱动,在虚拟机监视器层实现字节级内存写保护模块,对前端驱动进行字节级写保护。首先记录下需要保护的内存地址范围,SPT初始时是空表,随着系统运行逐渐建立,在为一个页面生成SPT的过程中,检测GPT中的这页是否包含需要保护的内存地址,如果是,则将该页在SPT中标记为只读,这样就实现了页级写保护,但是一个页面中并不是所有字节都是需要保护的,这时如果发生一个写异常,就需要在处理函数中进一步检查引起该异常的语句中写入的地址是否是要保护的地址,将CR2寄存器中引起异常的地址与被保护地址进行比较,如果是则向客户虚拟机返回一个页异常,否则需要模拟该写操作.所有模块的交互过程如图21.后端驱动分配未绑定事件通道和共享页。2.后端驱动初始化1/0环。3.后端驱动将Ring地址和通道端口号写入xenst0re(xen提供的用于初始化设备的共享存储区域)。4.前端驱动从Xenstore读取相应信息。5.前端驱动绑定事件通道,映射1/0环内存。6.前端驱动通知虚拟机监视器所使用的中断号。7.前端驱动分配一个事件通道给后端驱动绑定,建立双向连接。权利要求1.一种基于)(en的主动防御方法,其特征在于利用Xen生成用户虚拟机为用户使用,同时通过在特权虚拟机中设置后端驱动,在用户虚拟机中设置前端驱动,通过前后端驱动的通讯来获取用户虚拟机中信息,并对用户虚拟机中的行为进行控制,同时在虚拟机监视器层实现对用户虚拟机中前端驱动的字节级内存写保护,前后端驱动通讯使用准虚拟化通讯方式;前端驱动运行在用户虚拟机中,实现为一个虚拟外设部件互连PCI设备驱动,随系统启动自动初始化,前端驱动包括两个功能首先是截获系统调用,使用钩挂SSDT表并设置跳转代码的方式来实现;截获的信息将被发送到后端驱动,由决策模块进行判断;后端驱动被实现为一个内核模块,有两个功能与前端驱动通信获取截获的系统信息和相关数据,然后将这些数据传递给用户态的决策模块,决策模块做出判断后,将结果发送给前端驱动;另外在还需要在前端驱动初始化钩子及跳转代码后,通知虚拟机监视器中的内存保护模块保护相应的内存地址范围;前端驱动与后端驱动通信时,采用了准虚拟化的通信方式;要求用户虚拟机内部组件明确知道内部组件处于虚拟机中,并移植分离式驱动模型用到的Xen机制的代码,包括超级调用Hypercal1、事件通道、Xenstore、授权表Granttable;其中Xenstore是Xen提供的用于初始化设备的共享存储区域,用于在用户虚拟机启动时读取特权虚拟机提供的设备初始化信息,前端驱动初始化时也使用Xenstore与后端驱动建立连接,之后通过事件通道和I/O环与后端驱动进行通信;前端驱动截获系统信息后,使用超级调用向虚拟机监视器请求放弃调度,等待决策模块进行决策;I/O环是在Xen共享内存机制上实现的为分离式驱动交换数据的结构,分为两种固定槽大小的I/O环,由网络、存储设备所使用;可变槽大小的I/O环,由Xenstore所使用;需要传输的数据有两种文件信息及其HASH值;和需要被扫描的文件,对这些信息采用统一固定大小槽的I/O环,并用一个标志位来区分数据类型;当后端驱动初始化时,它分配一个未绑定的事件通道,并初始化I/O环,将事件通道端口号和环地址写入Xenstore;前端驱动通过Xenstore读取这些信息,绑定该事件通道,并映射环地址,并使用超级调用通知虚拟机监视器通知该虚拟域时应该使用的中断号,同时分配为此中断注册一个处理函数;在虚拟机监视器层实现字节级内存写保护模块,对前端驱动进行字节级写保护;首先记录下需要保护的内存地址范围,中文影子页表SPT初始时是空表,随着系统运行逐渐建立,在为一个页面生成SPT的过程中,检测用户虚拟机页表GPT中的这页是否包含需要保护的内存地址,如果是,则将该页在SPT中标记为只读,这样就实现了页级写保护,但是一个页面中并不是所有字节都是需要保护的,这时如果发生一个写异常,就需要在处理函数中进一步检查引起该异常的语句中写入的地址是否是要保护的地址,将CPU的CR2寄存器中储存的引起异常的地址与被保护地址进行比较,如果是则向用户虚拟机返回一个页异常,否则需要模拟该写操作。全文摘要一种基于虚拟机Xen的主动防御方法,该方法首先使用Xen为用户生成一个虚拟机,使用户所有的操作都在虚拟机中,同时系统将传统的需要安装在虚拟机内部的安全程序剥离出并置于虚拟机外部,使得安全程序核心模块对恶意程序不可见,另外通过在用户虚拟机内部设置前端驱动,使得在虚拟机外部的安全模块可以扫描并干预虚拟机内部操作,同时由虚拟机监视器层的内存保护模块对前端驱动进行保护,防止恶意程序攻击前端驱动。本发明由于核心组件置于虚拟机外部,对恶意程序不可见,从而提供较传统类安全程序部署方法更高的安全性,另通过引入基于准虚拟化输前后/端驱动通讯方式,大大降低了由虚拟化带来的系统开销,使得该方法具有很高的实用价值。文档编号G06F21/00GK102129531SQ20111006992公开日2011年7月20日申请日期2011年3月22日优先权日2011年3月22日发明者李健,杨震,段立娟,胡少龙,赖英旭申请人:北京工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1