一种基于硬件虚拟化技术的共享库隔离保护方法及系统与流程

文档序号:11432127阅读:288来源:国知局
本发明属于系统安全研究中的隔离
技术领域
:,更具体地,涉及一种基于硬件虚拟化技术的共享库隔离保护方法及系统。
背景技术
::在现代操作系统中,动态链接库在程序启动时或者运行时被加载到地址空间并提供函数接口服务。这种方法提供了一种动态且隔离的方法来进行代码复用。相比与静态链接的方式,这种方法由于不会增加二进制文件的大小且独立于应用程序,因此更加易用和高效。现代操作系统为用户空间以及内核空间提供了强制的内存隔离机制来保障内核代码与数据的安全。然而用户空间内并没有类似的安全机制。所有的共享库与应用程序都处于同一个地址空间中,共享库的安全与应用程序的安全紧密的联系在一起。一旦共享库被加载到应用程序的地址空间中,应用程序可以随意的执行共享库的代码或者存取共享库的数据,相反亦然。正因如此,这为用户带来了严重的安全威胁。现有的实现共享库隔离防护的方法主要有两种,第一种是以虚拟机隔离为主的方法,其将共享库与应用程序放入不同的虚拟机中,通过虚拟机的切换来保障共享库与其它组件的正常交互;第二种是以进程隔离为主的方法,其将共享库与应用程序放入不同的进程中,通过进程切换的方法来保证共享库与其它组件的正常交互。然而,上述两种共享库隔离防护的方法存在以下问题:第一种方法由于采用了虚拟机切换,会导致系统开销巨大;第二种方法需要对应用程序进行重新设计,以适应隔离环境,这会导致通用性差。技术实现要素:针对现有技术的以上缺陷或改进需求,本发明提供了一种基于硬件虚拟化技术的共享库隔离保护方法及系统,其目的在于,解决现有隔离方法中存在的开销大、通用性差的技术问题。为实现上述目的,按照本发明的一个方面,提供了一种基于硬件虚拟化技术的共享库隔离保护方法,包括以下步骤:(1)根据虚拟机操作系统的内核数据结构获取虚拟机操作系统中共享库的物理页面地址信息;(2)根据获取的共享库的物理页面地址信息并通过虚拟机管理器创建共享库隔离空间;(3)在创建的共享库隔离空间中对库函数调用、回调函数调用、以及操作系统中的中断行为分别进行ept页表切换;(4)对虚拟机操作系统中除了上述步骤(3)中库函数调用、回调函数调用、以及操作系统中的中断行为以外的共享库运行时的所有行为进行恶意行为检测,并提供恶意行为发生时的虚拟机上下文信息。优选地,步骤(1)具体为,首先是通过修改操作系统中的链接器,从而在共享库加载到应用程序的地址空间时将应用程序的进程号发送给内核,通过内核中记录的内存页面信息,获取到所有共享库物理页面的起始地址,通过对共享库的每一个页面进行读操作将共享库物理页面锁在内存之中,将获得的共享库的物理页面地址信息通过虚拟机管理器与虚拟机内核之间的传输机制传递给虚拟机管理器。优选地,步骤(2)包括以下子步骤:(2-1)在虚拟机管理器启动时创建一个不同于其固有的可扩展页表ept-s的空白新ept页表ept-l;(2-2)根据获取的共享库的物理页面地址信息在创建的新ept页表ept-l中创建共享库的物理页面的虚拟机物理地址gpa与共享库的物理页面的主机物理地址hpa之间的映射关系;(2-3)根据共享库的物理页面地址信息遍历虚拟机管理器固有的可扩展页表ept-s,以将该表中存储的共享库的物理页面的gpa与共享库的物理页面的hpa之间的映射关系删除,从而形成了由固有的可扩展页表ept-s和新ept页表ept-l构成的共享库隔离空间。优选地,步骤(2)进一步包括在子步骤(2-3)之后的如下步骤:(2-4)修改操作系统中的堆内存分配函数,具体为记录其堆内存分配的地址范围,并将该地址范围发送给虚拟机管理器进行保存,其中堆内存分配函数是malloc函数。优选地,骤(3)包括以下子步骤:(3-1)根据虚拟机操作系统中应用程序或共享库运行时的行为判断是库函数调用、回调函数调用、还是操作系统中的中断行为,如果是库函数调用,则进入步骤(3-2),如果是回调函数调用,则进入步骤(3-3),如果是操作系统中的中断行为,则进入步骤(3-4);(3-2)将应用程序的二进制文件中保存的全局偏移表got中的共享库函数起始地址修改为具有ept页表切换功能的代码的地址,该代码中包括执行ept-s页表到ept-l页表切换的代码,以及将ept-l页表到ept-s页表切换的代码地址压入应用程序栈中的操作;(3-3)通过虚拟机管理器的ept页表缺页异常处理函数修改虚拟机控制结构的ept页表指针域,其中在库函数进行回调调用时,是将eptp域修改为指向etp-s,在库函数进行调用返回时,是将eptp域修改为指向etp-l;(3-4)判断操作系统中的中断行为是属于中断异常还是进程切换,如果是属于中断异常,则进入步骤(3-5),如果是属于进程切换,则进入步骤(3-6);(3-5)通过ept页表缺页异常处理函数动态地在ept-l页表中构建虚拟机内核页面的gpa与hpa之间的映射关系;(3-6)在ept页表缺页异常处理函数中通过vmcs中的虚拟机上下文信息判断当前eptp指针的状态,以及发生缺页异常的页面属性,如果当前eptp指针指向ept-s页表,且发生缺页异常的页面为共享库页面,则直接将eptp指针修改为指向ept-l页表,如果当前eptp指针指向ept-l页表,且发生缺页异常的页面为应用程序页面,则直接将eptp指针修改为指向ept-s页表,其他情况不做任何处理。优选地,步骤(3-2)包括以下子步骤:(3-2-1)对应用程序的二进制文件中保存的got表进行分析,以得到针对应用程序调用的每个共享库函数所生成的ept页表切换代码,该ept页表切换代码中包括执行ept-s页表到ept-l页表切换的代码、以及将ept-l页表到ept-s页表切换的代码地址压入应用程序栈中的操作;(3-2-2)将虚拟机操作系统链接器中的共享库函数地址查询函数的返回值修改为生成的ept页表切换代码的地址。一种基于硬件虚拟化技术的共享库隔离保护系统,包括:第一模块,用于根据虚拟机操作系统的内核数据结构获取虚拟机操作系统中共享库的物理页面地址信息;第二模块,用于根据获取的共享库的物理页面地址信息并通过虚拟机管理器创建共享库隔离空间;第三模块,用于在创建的共享库隔离空间中对库函数调用、回调函数调用、以及操作系统中的中断行为分别进行ept页表切换;第四模块,用于对虚拟机操作系统中除了上述第三模块中库函数调用、回调函数调用、以及操作系统中的中断行为以外的共享库运行时的所有行为进行恶意行为检测,并提供恶意行为发生时的虚拟机上下文信息。总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:(1)本发明的通用性好:由于本发明采用了步骤(2)和步骤(3),其首先通过底层硬件的支持,避免修改应用程序的虚拟地址空间,然后通过静态插装与动态处理相结合的方式进行隔离空间切换,其中主要是对应用程序二进制文件进行分析并进行代码插装,在这个过程中既不需要对应用程序进行重新设计同时也维护了共享库的共享特性,因此具有良好的通用性。(2)本发明的开销低:本发明通过步骤(3-2),其通过采用了intel虚拟化拓展指令vmfunc,在不陷入虚拟机管理器的情况下能够直接进行地址空间切换的处理。因此相比于现有的虚拟化隔离方案,本发明通过这种方式更能有效的减少频繁的库函数调用带来的性能开销。(3)本发明的安全性高:本发明通过步骤4,其通过对陷入虚拟机管理器中的缺页行为进行判断来确定该行为的合法性。对于应用程序未经特定接口调用共享库函数的行为,本发明将在虚拟机管理器截获这些行为并将行为发生时的虚拟机上下文信息返回给用户,因此用户可以根据这些信息来判断恶意行为所在的进程,操作的内存位置以及操作性质等。附图说明图1是本发明基于硬件虚拟化技术的共享库隔离保护方法的系统架构实现图。图2是本发明隔离地址空间中的内存布局图。图3是本发明地址空间切换时的控制流图。图4是本发明进程切换时的eptp切换实现图。图5是本发明基于硬件虚拟化技术的共享库隔离保护方法的流程图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。本发明的最终目标是实现基于硬件虚拟化技术的共享库隔离保护系统,以防止攻击者利用应用程序漏洞随意的执行共享库代码或者存取共享库数据。下面给出本发明基于kvm虚拟化平台的具体实施方案。如图5所示,本发明基于硬件虚拟化技术的共享库隔离保护方法包括以下步骤:(1)根据虚拟机操作系统的内核数据结构获取虚拟机操作系统中共享库的物理页面地址信息(physicalpageaddressinformation);具体而言,本步骤首先是通过修改操作系统中的链接器(linker),从而在共享库加载到应用程序的地址空间时将应用程序的进程号发送给内核,通过内核中记录的内存页面信息,可以获取到所有共享库物理页面的起始地址;由于现代操作系统在内存管理中存在着延迟的机制,这意味着只有当代码或者数据真正要被存取时,才分配真正的物理页面,因此在链接器中,接下来需要通过对共享库的每一个页面进行读操作来保证这些物理页面已经被载入到内存中;与此同时,为了避免交互机制对共享库的物理页面的影响,下一步必须将这些物理页面锁在内存之中;最后,将获得的共享库的物理页面地址信息通过一种虚拟机管理器与虚拟机内核(guestos)之间的传输机制(hypercall)传递给虚拟机管理器(hypervisor),本过程结束。(2)根据获取的共享库的物理页面地址信息并通过虚拟机管理器创建共享库隔离空间;本步骤具体包括以下子步骤:(2-1)在虚拟机管理器启动时创建一个不同于其固有的可扩展页表(extendedpagetable,简称ept)ept-s的空白新ept页表ept-l;(2-2)根据获取的共享库的物理页面地址信息在创建的新ept页表ept-l中创建共享库的物理页面的虚拟机物理地址(guestphysicaladdress,简称gpa)与共享库的物理页面的主机物理地址(hostphysicaladdress,简称hpa)之间的映射关系;如图2所示,可以清楚的看到填充后的新ept页表ept-l中包括有共享库栈、共享库a和b、以及共享库堆;(2-3)根据共享库的物理页面地址信息遍历虚拟机管理器固有的可扩展页表ept-s,以将该表中存储的共享库的物理页面的gpa与共享库的物理页面的hpa之间的映射关系删除,从而形成了由固有的可扩展页表ept-s和新ept页表ept-l构成的共享库隔离空间;如图2所示,左侧的固有的可扩展页表ept-s中灰色部分是删除了映射关系以后的应用程序地址空间,最终,ept-s与ept-l形成一种“互补”的映射结构。可选的,本步骤还可以包括在子步骤(2-3)之后的如下步骤:(2-4)修改操作系统中的堆内存分配函数,具体为记录其堆内存分配的地址范围,并将该地址范围发送给虚拟机管理器进行保存;在本发明中,该堆内存分配函数是malloc函数。(3)在创建的共享库隔离空间中对库函数调用(libraryfunctioncall)、回调函数调用(callback)、以及操作系统中的中断行为(interrupt)分别进行ept页表切换;如图3所示(其中trampoline指的是应用程序进行库函数调用时的ept页表切换代码,springboard指的是库函数调用返回时的ept页表切换代码),本步骤包括以下子步骤:(3-1)根据虚拟机操作系统中应用程序或共享库运行时的行为判断是库函数调用、回调函数调用、还是操作系统中的中断行为,如果是库函数调用,则进入步骤(3-2),如果是回调函数调用,则进入步骤(3-3),如果是操作系统中的中断行为,则进入步骤(3-4);(3-2)将应用程序的二进制文件中保存的全局偏移表(globaloffsettable,简称got)中的共享库函数起始地址修改为具有ept页表切换功能的代码的地址,该代码中包括执行ept-s页表到ept-l页表切换的代码,以及将ept-l页表到ept-s页表切换的代码地址压入应用程序栈中的操作;本步骤具体包括以下子步骤:(3-2-1)对应用程序的二进制文件中保存的got表进行分析,以得到针对应用程序调用的每个共享库函数所生成的ept页表切换代码,该ept页表切换代码中包括执行ept-s页表到ept-l页表切换的代码、以及将ept-l页表到ept-s页表切换的代码地址压入应用程序栈中的操作;在该ept页面切换代码中使用了基于intel虚拟化技术的拓展指令vmfunc,其能够实现在虚拟机用户态下直接进行ept页表的切换;(3-2-2)将虚拟机操作系统链接器中的共享库函数地址查询函数(在本发明中是dl_runtime_resolve函数)的返回值修改为生成的ept页表切换代码的地址;(3-3)通过虚拟机管理器的ept页表缺页异常处理函数(ept-violationhandler)修改虚拟机控制结构(vmcontrolstructures,简称vmcs)的ept页表指针(eptpointer,简称eptp)域,其中在库函数进行回调调用时,是将eptp域修改为指向etp-s,在库函数进行调用返回时,是将eptp域修改为指向etp-l;(3-4)判断操作系统中的中断行为是属于中断异常还是进程切换,如果是属于中断异常,则进入步骤(3-5),如果是属于进程切换,则进入步骤(3-6);具体而言,进程切换伴随着虚拟机中cr3寄存器的改变,而中断异常则不存在上述情况;(3-5)通过ept页表缺页异常处理函数动态地在ept-l页表中构建虚拟机内核页面的gpa与hpa之间的映射关系;该映射关系构建的过程与上述步骤(2-2)中相同,在此不再赘述。(3-6)在ept页表缺页异常处理函数中通过vmcs中的虚拟机上下文信息判断当前eptp指针的状态,以及发生缺页异常的页面属性,如果当前eptp指针指向ept-s页表,且发生缺页异常的页面为共享库页面,则直接将eptp指针修改为指向ept-l页表,如果当前eptp指针指向ept-l页表,且发生缺页异常的页面为应用程序页面,则直接将eptp指针修改为指向ept-s页表,其他情况不做任何处理(如图4所示)。(4)对虚拟机操作系统中除了上述步骤(3)中库函数调用、回调函数调用、以及操作系统中的中断行为以外的共享库运行时的所有行为进行恶意行为检测,并提供恶意行为发生时的虚拟机上下文信息。具体而言,在上述步骤(3)中,已经对库函数调用、回调函数调用、以及操作系统中的中断行为进行了ept页表切换处理,因此,一旦攻击者的行为不属于这些行为,由于没有对应的ept页表切换处理,则将导致虚拟机陷入ept页表缺页异常处理函数,因此,通过执行恶意行为检测,即在ept-s页表下发生共享库页面的缺页异常,则认为该行为是恶意行为,此时通过在该ept页表缺页异常处理函数中读取vmcs中保存的虚拟机上下文信息,并将该信息返回给用户的方式,就能够让用户发现恶意行为所在的应用程序。图1展示了本发明基于硬件虚拟化技术的共享库隔离保护系统实现,其中主要包括有三个部分:(1)创建共享库隔离空间;(2)共享库运行时交互控制;(3)恶意行为检测。(1)创建共享库隔离空间共享库隔离空间主要包括了代码部分的隔离以及数据部分的隔离。代码隔离主要是依赖于intelept页表技术实现的,ept页表为每个虚拟机维护了虚拟机物理地址到主机物理地址之间的映射。通过创建不同的ept页表,虚拟机内存映射的具体内容也会随之发生改变。在的实现中,原本虚拟机启动时创建的ept页表称之为ept-s,而创建的一张新的ept页表称之为ept-l。具体如图2所示。其中ept-s页表中主要记录了应用程序,共享库以及操作系统所有页面的地址映射关系,而在ept-l页表中主要记录了在共享库数据和代码页面的地址映射关系。根据上一个步骤中所获得的共享库页面的物理地址信息,可以在ept-l创建出相关的地址映射关系并将ept-s中原有的地址映射关系删除。整个过程相当于是将ept-s中共享库页面映射信息"剪贴-复制"到了ept-l中。(2)共享库运行时交互控制由于共享库在运行时会频繁的与其他的组件进行交互,因此当将共享库与其他的组件进行隔离后,必须进行地址空间的切换来保证交互的正确性。主要包含有以下几种情况:应用程序库函数调用,库函数系统调用,库函数回调调用。具体的运行时控制流图如图3所示。应用程序库函数调用时的地址空间切换是通过修改.got表实现的。由于.got表中存放了库函数的起始地址,因此可以将这个地址修改为特定代码片段的地址(对于特定代码片段称之为“trampoline”),在这段代码中使用vmfunc指令来完成ept页表的切换以及栈空间的切换。与此相反库函数调用返回时也需要进行栈空间的切换,由于栈上保存了函数调用的返回地址,通过修改这个返回地址指向特定的代码片段地址(简称为“springboard”),在这段代码中同样使用vmfunc指令来完成ept页表的切换以及栈空间的切换。为了对每个库函数调用生成对应的trampoline以及springboard,需要对应用程序进行二进制文件分析获得应用程序.got表信息,最后生成独立的文件映射到应用程序地址空间中。库函数系统调用时的地址空间切换主要是依赖hypervisor中特殊的缺页处理ept-violationhandler。由于在初始化过程中,ept-l页表中没有映射操作系统内核页面,因此库函数一旦进行了系统调用,就会导致陷入hypervisor中并进行ept-violation处理。通过这个方法,直接在运行时将操作系统内核页面动态的映射到ept-l中,从而保证了库函数系统调用的正常执行。库函数回调调用时的地址空间切换同样也是依赖于ept-violationhandler进行处理。由于在ept-l页表中没有映射应用程序代码页面,因此一旦库函数进行回调函数调用,那么就会导致陷入hypervisor中并进行ept-violation处理。与上述情况不同的是,为了保证共享库的安全,不能直接将回调函数所在页面直接映射到ept-l中,在的实现中,将在ept-violationhandler中进行eptp的切换,从而保证回调函数运行在ept-s态下。特殊情况下的地址空间切换主要是由于系统中发生的异步事件会对应用程序执行状态发生改变,例如进程切换以及中断事件等。图4中具体描绘了进程切换下的控制流。通过cr3寄存器以及ept-violation中保存的上下文,能够判断出是否发生了进程切换并依据判断结果在ept-violationhandler中完成地址空间切换。除此之外,中断时间与系统调用下的地址空间切换则是类似的,直接在ept-violationhandler中完成相关页面的映射。(3)恶意行为检测通过上述处理,对共享库与其他模块之间正常交互的各种情况进行了处理。因此一旦系统中发生除上述情况以外的其余事件时,就可以通过在ept-violationhandler中截获到的上下文信息进行判断。例如:应用程序直接执行共享库函数中间的某一段指令,由于没有特定的接口进行空间切换且由于ept-s页表中没有映射共享库页面,最终将触发ept-violation。在ept-violationhandler中截获到的上下文中将会记录这是在ept-s态下发生了共享库页面的ept-violation。因此这不属于之前正常交互情况下的任何一种,那么最后将直接判定程序的控制流被恶意篡改,并立即停止程序的执行。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1