虚拟机内核的保护方法及装置与流程

文档序号:12786166阅读:348来源:国知局
本发明涉及虚拟机技术,尤其涉及一种虚拟机内核的保护方法及装置。
背景技术
::近年来,云计算技术得到了快速发展,不可忽视地,当前存在的众多恶意程序以及内核恶意代码也会给云平台虚拟机内部进程带来安全威胁。其中,虚拟机内核在虚拟机中起着核心作用,虚拟机运行过程中,所有应用程序的系统调用请求、以及内部和外部的中断处理等均会直接进入虚拟机内核,由虚拟机内核来进行必要的处理。具体实现过程中,所有进入虚拟机内核的接口中,系统调用接口是应用程序与虚拟机内核进行交互、进而获取虚拟机内核服务的一种重要接口,相应地,系统调用执行路径是进入虚拟机内核的路径分支中的一种重点需要防护的路径。一旦系统调用执行路径遭到劫持,恶意代码就可以在特定进程的进程环境下得到执行时机,进而在进程中利用自己的合法身份读写进程内存,以突破进程内存对第三方进程的读写限制,从而恶意代码可以篡改系统调用执行结果、威胁进程数据安全、影响进程正常运行等。现有技术中,为了对系统调用执行路径进行反劫持防护,主要由虚拟机中的虚拟机监视器(VirtualMachineMonitor,简称VMM)实时对虚拟机内核进行透明拦截监控,即在避免用户侧获知的情况下进行拦截监控,以实现实时拦截非法操作对进程内存的读写,具体地,主要利用硬件辅助虚拟化机制提供的异常陷入机制和基于硬件辅助的内存虚拟化机制来实现,在VMM中,通过页表来实施相应的内存隔离,以捕获非法操作并及时处理。但是,采用现有技术,VMM基于页表粒度进行拦截,经常会出现遗漏,例如恶意代码连续操作特定页的情况下,一旦第一次未拦截放行后,后续难以再次捕获,即拦截效果较差,且实时拦截造成的开销过大。技术实现要素:本发明提供一种虚拟机内核的保护方法及装置,用于解决现有技术对恶意代码拦截效果差,且需要实时拦截的问题。本发明第一方面提供一种虚拟机内核的保护方法,包括:截获应用程序发起的系统调用函数;根据虚拟机原始内核基地址与影子内核基地址的偏移值,将所述系统调用函数指向影子内核,根据所述影子内核中的影子系统服务描述表SSDT确定所述系统调用函数在影子内核中对应的入口地址;其中,所述影子内核构建于所述虚拟机原始内核的非分页池中,所述影子内核为根据所述虚拟机原始内核的镜像文件构建的可执行内核代码。进一步地,上述方法中还包括构建所述影子内核。其中,构建所述影子内核可以包括:根据所述镜像文件所映射的地址以及影子内核基地址,对所述影子内核初始代码中的待重定向数据进行修复,并获取修复后的待重定向数据;将所述修复后的待重定向数据中SSDT对应的数据和影子中断描述表IDT对应的数据进行备份,以获取影子IDT和所述影子SSDT;将所述修复后的待重定向数据重定向到所述虚拟机原始内核,以获取目标重定向数据,并将所述目标重定向数据中的SSDT和IDT替换为所述影子SSDT和所述影子IDT。可选地,所述将所述虚拟机原始内核的文件进行复制以获取镜像文件之前,所述方法还包括:在所述虚拟机原始内核的非分页池中申请缓冲区,其中,所述影子内核构建于所述缓冲区中。可选地,所述根据所述镜像文件所映射的地址以及影子内核基地址,对所述影子内核初始代码中的待重定向数据进行修复,以获取修复后的待重定向数据,包括:根据公式Dactual-Dactual_imagebase=Ddefault-Ddefault_imagebase将所述影子内核初始代码中的待重定向数据进行修复,以获取修复后的待重定向数;其中,Ddefault为所述待重定向数据的地址,Dactual_imagebase为所述缓冲区的首地址,Ddefault_imagebase为所述影子内核基地址,Dactual为所述修复后的待重定向数的地址。进一步地,所述将所述系统调用函数指向影子内核之后,还包括:拦截应用程序对所述虚拟机原始内核中的SSDT的读写操作。具体地,可以利用VMM针对应用程序对原始内核中SSDT的读写操作进行拦截,并向上欺骗虚拟机内部检测代码,同时忽略应用程序对原始内核中SSDT的更改。可选地,所述虚拟机原始内核中的SSDT包括:系统调用函数的标识和在虚拟机原始内核中入口地址的对应关系,所述影子SSDT包括:系统调用函数的标识和在影子内核中入口地址的对应关系;相应地,所述根据所述影子内核中的影子SSDT确定所述系统调用函数在影子内核中对应的入口地址,可以是:根据所述影子SSDT中系统调用函数的标识和在影子内核中入口地址的对应关系,确定所述系统调用函数在影子内核中对应的入口地址。进一步地,所述方法还包括:截获虚拟机中断处理函数;根据原始内核基地址与影子内核基地址的偏移值,将所述中断处理函数指向所述影子内核,根据所述影子内核中的影子IDT确定所述中断处理函数在影子内核中对应的入口地址。其中,所述将所述中断处理函数指向所述影子内核之后,还可以包括:拦截应用程序对虚拟机原始内核中的IDT的读写操作。具体地,所述影子IDT的基地址保存在IDTR寄存器中,以对中断处理函数进行入口寻址和分发,并利用VMM透明地对将IDTR的内容存入指定地址单元指令进行拦截陷入。拦截到应用程序对原始内核中IDT的读写操作后,返回原始内核中IDT基地址和大小信息进行欺骗。可选地,虚拟机原始内核中的IDT包括:中断处理函数的标识和在虚拟机原始内核中入口地址的对应关系,所述影子IDT包括:中断处理函数的标识和在影子内核中入口地址的对应关系;相应地,所述根据所述影子内核中的影子IDT确定所述中断处理函数在影子内核 中对应的入口地址,包括:根据所述影子IDT中中断处理函数的标识和在影子内核中入口地址的对应关系,确定所述中断处理函数在影子内核中对应的入口地址。可选地,虚拟机原始内核基地址与影子内核基地址的偏移值为虚拟机原始内核基地址与影子内核基地址相减的差值。本发明第二方面提供一种虚拟机内核的保护装置,包括:第一截获模块,用于截获应用程序发起的系统调用函数;第一转移模块,用于根据虚拟机原始内核基地址与影子内核基地址的偏移值,将所述系统调用函数指向影子内核,根据所述影子内核中的影子系统服务描述表SSDT确定所述系统调用函数在影子内核中对应的入口地址;其中,所述影子内核构建于所述虚拟机原始内核的非分页池中,所述影子内核为根据所述虚拟机原始内核的镜像文件构建的可执行内核代码。进一步地,所述装置还包括:构建模块,用于构建所述影子内核。所述构建模块,包括:复制单元,用于将所述虚拟机原始内核的文件进行复制以获取镜像文件;映射单元,用于将所述镜像文件按照可执行格式文件映射到所述虚拟机原始内核的非分页池中,以形成影子内核初始代码;第一重定向单元,用于根据所述镜像文件所映射的地址以及影子内核基地址,对所述影子内核初始代码中的待重定向数据进行修复,并获取修复后的待重定向数据;备份单元,用于将所述修复后的待重定向数据中SSDT对应的数据和影子中断描述表IDT对应的数据进行备份,以获取影子IDT和所述影子SSDT;第二重定向单元,用于将所述修复后的待重定向数据重定向到所述虚拟机原始内核,以获取目标重定向数据,并将所述目标重定向数据中的SSDT和IDT替换为所述影子SSDT和所述影子IDT。可选地,所述装置还包括:申请模块,用于在所述复制单元将所述虚拟机原始内核的文件进行复制以获取镜像文件之前,在所述虚拟机原始内核的非分页池中申请缓冲区,其中,所述影子内核构建于所述缓冲区中。可选地,所述第一重定向单元,具体用于根据公式Dactual-Dactual_imagebase=Ddefault-Ddefault_imagebase将所述影子内核初始代码中的待重定向数据进行修复,以获取修复后的待重定向数;其中,Ddefault为所述待重定向数据的地址,Dactual_imagebase为所述缓冲区的首地址,Ddefault_imagebase为所述影子内核基地址,Dactual为所述修复后的待重定向数的地址。进一步地,所述装置还包括:第一拦截模块,用于拦截应用程序对所述虚拟机原始内核中的SSDT的读写操作。可选地,所述虚拟机原始内核中的SSDT包括:系统调用函数的标识和在虚拟机原始内核中入口地址的对应关系,所述影子SSDT包括:系统调用函数的标识和在影子内核中入口地址的对应关系;相应地,所述第一转移模块,具体用于根据所述影子SSDT中系统调用函数的标识和在影子内核中入口地址的对应关系,确定所述系统调用函数在影子内核中对应的入口地址。进一步地,所述装置还包括:第二截获模块,用于截获虚拟机中断处理函数;第二转移模块,用于根据原始内核基地址与影子内核基地址的偏移值,将所述中断处理函数指向所述影子内核,根据所述影子内核中的影子IDT确定所述中断处理函数在影子内核中对应的入口地址。所述装置还包括:第二拦截模块,用于拦截所述应用程序对虚拟机原始内核中的IDT的读写操作。所述虚拟机原始内核中的IDT包括:中断处理函数的标识和在虚拟机原始内核中入口地址的对应关系,所述影子IDT包括:中断处理函数的标识和在影子内核中入口地址的对应关系;相应地,所述第二转移模块,具体用于根据所述影子IDT中中断处理函数的标识和在影子内核中入口地址的对应关系,确定所述中断处理函数在影子内核中对应的入口地址。本发明第三方面提供一种虚拟机内核的保护装置,包括:处理器、接口电路、存储器和总线,其中,所述处理器、所述接口电路和所述存储器通过所述总线连接并完成相互间的通信,其中所述存储器中存储一组程序代码,所述处理器调用所述存储器中存储的程序代码,执行以下操作:截获应用程序发起的系统调用函数;根据虚拟机原始内核基地址与影子内核基地址的偏移值,将所述系统调用函数指向影子内核,根据所述影子内核中的影子系统服务描述表SSDT确定所述系统调用函数在影子内核中对应的入口地址;其中,所述影子内核构建于所述虚拟机原始内核的非分页池中,所述影子内核为根据所述虚拟机原始内核的镜像文件构建的可执行内核代码。进一步地,所述处理器还用于构建所述影子内核。具体地:将所述虚拟机原始内核的文件进行复制以获取镜像文件;将所述镜像文件按照可执行格式文件映射到所述虚拟机原始内核的非分页池中,以形成影子内核初始代码;根据所述镜像文件所映射的地址以及影子内核基地址,对所述影子内核初始代码中的待重定向数据进行修复,并获取修复后的待重定向数据;将所述修复后的待重定向数据中SSDT对应的数据和影子中断描述表IDT对应的数据进行备份,以获取影子IDT和所述影子SSDT;将所述修复后的待重定向数据重定向到所述虚拟机原始内核,以获取目标重定向数据,并将所述目标重定向数据中的SSDT和IDT替换为所述影子SSDT和所述影子IDT。可选地,处理器将所述虚拟机原始内核的文件进行复制以获取镜像文件之前,在所述虚拟机原始内核的非分页池中申请缓冲区,其中,所述影子内核构建于所述缓冲区中。处理器根据所述镜像文件所映射的地址以及影子内核基地址,对所述影子内核初始代码中的待重定向数据进行修复,以获取修复后的待重定向数据,可以为:根据公式Dactual-Dactual_imagebase=Ddefault-Ddefault_imagebase将所述影子内核初始代码中的待重定向数据进行修复,以获取修复后的待重定向数;其中,Ddefault为所述待重定向数据的地址,Dactual_imagebase为所述缓冲区的首 地址,Ddefault_imagebase为所述影子内核基地址,Dactual为所述修复后的待重定向数的地址。处理器将所述系统调用函数指向影子内核之后,还用于拦截应用程序对所述虚拟机原始内核中的SSDT的读写操作。所述虚拟机原始内核中的SSDT包括:系统调用函数的标识和在虚拟机原始内核中入口地址的对应关系,所述影子SSDT包括:系统调用函数的标识和在影子内核中入口地址的对应关系;相应地,所述处理器具体用于根据所述影子SSDT中系统调用函数的标识和在影子内核中入口地址的对应关系,确定所述系统调用函数在影子内核中对应的入口地址。进一步地,所述处理器,还用于截获虚拟机中断处理函数;根据原始内核基地址与影子内核基地址的偏移值,将所述中断处理函数指向所述影子内核,根据所述影子内核中的影子IDT确定所述中断处理函数在影子内核中对应的入口地址。进一步地,所述处理器将所述中断处理函数指向所述影子内核之后,还用于拦截应用程序对虚拟机原始内核中的IDT的读写操作。所述虚拟机原始内核中的IDT包括:中断处理函数的标识和在虚拟机原始内核中入口地址的对应关系,所述影子IDT包括:中断处理函数的标识和在影子内核中入口地址的对应关系;相应地,处理器具体用于根据所述影子IDT中中断处理函数的标识和在影子内核中入口地址的对应关系,确定所述中断处理函数在影子内核中对应的入口地址。本发明实施例提供的虚拟机内核的保护方法及装置中,通过截获应用程序发起的系统调用函数,根据虚拟机原始内核基地址与影子内核基地址的偏移值,将上述系统调用函数指向影子内核,根据影子内核中的影子SSDT确定系统调用函数在影子内核中对应的入口地址,实现了系统调用路径完全在影子内核的纯净代码中执行,保证了系统调用路径的完整性,从而也保证了整个内核代码运行的完整性。且影子内核构建在虚拟机原始内核的非分页池中构建,简单易实现,也不会在注册表等其他地方留下痕迹,安全性更高。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明提供的虚拟机平台实施例一的架构示意图;图2为本发明提供的虚拟机平台实施例二的架构示意图;图3为本发明提供的虚拟机内核的保护方法实施例一的流程示意图;图4为本发明提供的虚拟机内核的保护方法实施例二的流程示意图;图5为本发明提供的虚拟机内核的保护方法实施例三的流程示意图;图6为本发明提供的虚拟机内核的保护装置实施例一的结构示意图;图7为本发明提供的虚拟机内核的保护装置实施例二的结构示意图;图8为本发明提供的虚拟机内核的保护装置实施例三的结构示意图;图9为本发明提供的虚拟机内核的保护装置实施例四的结构示意图;图10为本发明提供的虚拟机内核的保护装置实施例五的结构示意图;图11为本发明提供的虚拟机内核的保护装置实施例六的结构示意图;图12为本发明提供的虚拟机内核的保护装置实施例七的结构示意图。具体实施方式本发明实施例应用于虚拟机平台,虚拟机平台的部署架构可以有两种模式:图1为本发明提供的虚拟机平台实施例一的架构示意图,图1为虚拟机平台的裸机模式,如图1所示,虚拟机平台可以包括多个虚拟机(图1中以虚拟机1和虚拟机2为例),虚拟机下层包括VMM,VMM下层包括底层硬件。其中,虚拟机中包括:虚拟机应用层和虚拟机内核层,本发明中,虚拟机内核层还包括:监控代理。图2为本发明提供的虚拟机平台实施例二的架构示意图,图2为虚拟机平台的宿主模式,如图2所示,该虚拟机平台可以包括多个虚拟机(图2中以虚拟机1和虚拟机2为例),与虚拟机同层还可以包括普通宿主机用户进程,在虚拟机下层是宿主机,VMM在宿主机的操作系统上运行。宿主机下层是底层硬件,宿主模式中,由宿主机直接控制底层硬件。其中,虚拟机中包括: 虚拟机应用层和虚拟机内核层,本发明中,虚拟机内核层还包括:监控代理。图3为本发明提供的虚拟机内核的保护方法实施例一的流程示意图,该方法的执行主体可以是虚拟机平台,如图3所示,该方法包括:S301、截获应用程序发起的系统调用函数。这些系统调用函数用于请求完成相关的系统调用处理。S302、根据虚拟机原始内核基地址与影子内核基地址的偏移值,将上述系统调用函数指向影子内核,根据影子内核中的影子系统服务描述表(SystemServicesDescriptorTable,简称SSDT)确定该系统调用函数在影子内核中对应的入口地址。其中,该影子内核构建于虚拟机原始内核的非分页池,该影子内核为根据上述虚拟机原始内核的镜像文件构建的可执行内核代码。虚拟机原始内核基地址与影子内核基地址的偏移值是固定不变的,可以通过影子内核基地址和原始内核基地址相减获取。具体地,在截获到应用程序发起的系统调用函数后,不再进入虚拟机原始内核进行处理,而是将应用程序的系统调用函数指向影子内核,由影子内核来进行必要的处理。这里影子内核是根据原始内核的镜像文件建立的可执行内核代码,该可执行代码是纯净的内核代码。具体实现过程中,可以通过在VMM层透明地设置快速系统调用,将上述系统调用函数指向影子内核,并根据影子内核中的影子SSDT确定系统调用函数在影子内核中对应的入口地址。本实施例中,通过截获应用程序发起的系统调用函数,根据虚拟机原始内核基地址与影子内核基地址的偏移值,将上述系统调用函数指向影子内核,根据影子内核中的影子SSDT确定系统调用函数在影子内核中对应的入口地址,实现了系统调用路径完全在影子内核的纯净代码中执行,保证了系统调用路径的完整性,从而也保证了整个内核代码运行的完整性。且影子内核构建在虚拟机原始内核的非分页池中构建,简单易实现,也不会在注册表等其他地方留下痕迹,安全性更高。在将上述系统调用函数指向影子内核之后,还可以拦截应用程序对上述虚拟机原始内核中的SSDT的读写操作。具体实现过程中,将上述系统调用函数指向影子内核之后,可以利用 VMM针对应用程序对原始内核中SSDT的读写操作进行拦截,并向上欺骗虚拟机内部检测代码,同时忽略应用程序对原始内核中SSDT的更改,从而可以确保系统调用路径完全在影子内核中完成,保证了系统调用路径的完整性。具体地,可以设置虚拟机系统调用入口读写陷入,如果有第三方应用程序对原始内核中SSDT进行读写操作,就向该应用程序返回原始内核中SSDT,并向上欺骗虚拟机内部检测代码,同时忽略应用程序对原始内核中SSDT的更改。其中,虚拟机原始内核中的SSDT包括:系统调用函数的标识和在虚拟机原始内核中入口地址的对应关系;影子SSDT中包括:系统调用函数的标识和在影子内核中入口地址的对应关系。相应地,上述根据影子内核中的影子SSDT确定该系统调用函数在影子内核中对应的入口地址可以是:根据影子SSDT中系统调用函数的标识和在影子内核中入口地址的对应关系,确定上述系统调用函数在影子内核中对应的入口地址。上述系统调用函数的标识可以是系统调用函数的编号,但不以此为限。图4为本发明提供的虚拟机内核的保护方法实施例二的流程示意图,可选地,虚拟机平台也可以对虚拟机内部、外部的中断处理执行与上述系统调用同样的处理。具体地,S401、截获虚拟机中断处理函数。这些中断处理函数可以是虚拟机内部或外部发起的中断处理函数,用于请求执行虚拟机内部或外部的中断处理。S402、根据原始内核基地址与影子内核基地址的偏移值,将上述中断处理函数指向影子内核,根据影子内核中的影子中断描述表(InterruptDescriptorTable,简称IDT)确定该中断处理函数在影子内核中对应的入口地址。进而,中断处理函数转到影子内核进行处理,确保中断处理的完整性。进一步地,将上述中断处理函数指向影子内核之后,还可以拦截应用程序对虚拟机原始内核中的IDT的读写操作。具体实现过程中,在每次VMM运行虚拟机之前设置保存影子IDT基地址的中断描述符表(InterruptDescriptorTableRegister,简称IDTR)寄存器值,使该IDTR寄存器包含影子IDT中的基地址,这样就可以对中断处理函数进 行入口寻址和分发,同时利用VMM透明地对将IDTR的内容存入指定地址单元指令(StoreInterruptDescriptorTableRegister,简称SIDT指令)进行拦截陷入。一旦发现可疑地第三方应用程序对原始内核中IDT的读写操作,就返回原始内核中IDT基地址和大小信息进行欺骗,但是忽略其更改操作,实现对原始内核IDT读写操作的拦截,而且IDTR寄存器使用的是影子DIT表的基地址,因而保证了各中断处理过程均能在影子内核代码上执行,确保整个流程的完整性。虚拟机原始内核中IDT包括:中断处理函数的标识和在虚拟机原始内核中入口地址的对应关系。影子IDT包括:中断处理函数的标识和在影子内核中入口地址的对应关系。相应地,上述根据影子内核中的影子IDT确定该中断处理函数在影子内核中对应的入口地址,可以是:根据影子IDT中中断处理函数的标识和在影子内核中入口地址的对应关系,确定上述中断处理函数在影子内核中对应的入口地址。其中,中断处理函数的标识可以是中断处理函数的中断号。需要说明的是,并不一定是所有的系统调用函数和中断处理函数都需要指向影子内核,可以只将对应的受保护的系统调用函数和中断处理函数转到影子内核进行处理,其它地还是可以直接在原始内核中进行处理,具体地,可以提前预设好哪些系统调用函数和中断处理函数需要受保护,在此不作限制。图5为本发明提供的虚拟机内核的保护方法实施例三的流程示意图,在上述实施例的基础上,截获应用程序发起的系统调用函数之前,还包括构建上述影子内核。具体地,可以由虚拟机平台上的监控代理模块来完成影子内核的构建。监控代理模块构建完影子内核后,会将影子内核的相关信息,包括其中影子SSDT和影子IDT的基地址等信息传递给VMM,以便于后续VMM执行拦截操作。如图5所示,上述构建影子内核的方法包括:S501、将上述虚拟机原始内核的文件进行复制以获取镜像文件。S502、将该镜像文件按照可执行格式文件映射到虚拟机原始内核的非分 页池中,形成影子内核初始代码。本实施例中,以Windows系统为例,对应的可执行格式为Windows可执行(PortableExecutable,简称PE)文件格式。但不以此为限,如果应用到其它操作系统,则采用对应的可执行文件格式即可。具体实现过程中,先打开原始内核,读取原始内核的文件,并进行复制获取原始内核的镜像文件,将该镜像文件按照可执行格式映射到影子内核的建立位置,例如将镜像文件按照可执行格式映射到虚拟机原始内核的非分页池中。具体地,读取原内核的文件包括读取原内核中文件的基地址、大小等内容。S503、根据上述镜像文件所映射的地址以及影子内核基地址,对上述影子内核初始代码中的待重定向数据进行修复,获取修复后的待重定向数据。由于构建影子内核的过程中,虚拟机的原始内核可能已经开始运行了,因此原始内核的一些内核数据已经不再是初始化后的内容,例如某些全局的时间数据、性能计算相关数据等。镜像文件按照可执行格式映射到虚拟机原始内核的非分页池中时,可能会加载到一个随机的虚拟地址,而不是默认的影子内核基地址,因而就需要进行重定向,修复后这些待重定向数据会指向影子内核中对应的地址。其中,上述可执行格式文件中的重定向表中会标识哪些数据需要重定向。具体实现过程中,可以根据可执行格式文件中的重定向表获取待重定向数据的地址Ddefault,进而获取构建影子内核的位置的首地址,例如在非分页池中申请的用于构建影子内核的缓冲区的首地址Dactual_imagebase,Dactual_imagebase也就是镜像文件按照可执行格式实际要加载的地址,再根据上述可执行格式文件默认的建立影子内核基地址Ddefault_imagebase计算获取修复后的待重定向数据的地址Dactual。重定向数据重定向前与重定向后的相对基地址的偏移是不变的,因此,基于这一原理,可以具体采用的公式可以为:Dactual-Dactual_imagebase=Ddefault-Ddefault_imagebase。修复完一个待重定向数据后,再在重定向表中获取下一个待重定向数据的当前地址,以完成修复,依次类推,完成所有待重定向数据的修复,形成修复后的待重定向数据。S504、将上述修复后的待重定向数据中SSDT对应的数据和IDT对应的数据进行备份,以获取影子SSDT和影子IDT。上述待重定向数据中包括SSDT和IDT,上述修复后的待重定向数据均指向影子内核中对应的地址,例如SSDT中系统调用函数的标识对应的入口地址都变为影子内核中的地址,IDT中中断处理函数的标识对应的地址也都变为影子内核中的地址,将目前系统调用函数的标识对应的地址、以及中断处理函数的标识对应的地址写入备份数组进行备份,构建影子SSDT和影子IDT。具体实现过程中,先获取待重定向数据中SSDT的基地址和IDT的基地址,根据上述修复后的待重定向数据中SSDT的基地址和IDT的基地址将上述修复后的待重定向数据中SSDT对应的数据和IDT对应的数据进行备份。其中,举例说明:上述修复后的待重定向数据中SSDT的基地址由下述公式确定:NewSSDTBaseAddr=OrigSSDTBaseAddr+delta,其中,NewSSDTBaseAddr表示上述修复后的待重定向数据中SSDT的基地址,OrigSSDTBaseAddr表示原始内核中SSDT的基地址,delta表示原始内核基地址与影子内核基地址的偏移值。上述修复后的待重定向数据中IDT的基地址确定方法与上述修复后的待重定向数据中SSDT的基地址确定方法类似,在此不再赘述。S505、将上述修复后的待重定向数据重定向到虚拟机原始内核,以获取目标重定向数据,并将该目标重定向数据中的SSDT和IDT替换为上述影子SSDT和影子IDT。由于原始内核数据是经过内核初始化及运行后的正常数据,可能在运行过程中发生变化,而建立影子内核时读取的只是刚初始化后的数据,而且修复后的上述待重定向数据中有一些未初始化数据,这些数据在初次被调用时才会初始化,但是原始内核中对应的数据可能已经被调用完成了初始化。所以上述修复后的待重定向数据都需要再重定向到原始内核,这样影子内核才 能正常执行,避免引用全局内核数据错误而导致系统蓝屏。重定向后这些修复后的待重定向数据又都指向了原始内核,其中,上述SSDT中的系统调用函数的标识对应的地址变成原始内核中的地址,同样,IDT中的中断处理函数的标识对应的地址也变成原始内核中的地址相同。但是,需要把影子内核的SSDT和IDT替换成S503中的影子SSDT和影子IDT,以使影子SSDT中系统调用函数的地址指向影子内核中对应的地址、且IDT中的中断处理函数指向影子内核中对应的地址。进一步地,上述S501之前:还可以在虚拟机原始内核的非分页池中申请缓冲区。需要说明的是,构建影子内核之前,在虚拟机内核加载完成后,虚拟机平台会执行初始化函数,得到原始内核基地址以及系统调用函数在原始内核中的入口地址,接下来在虚拟机原始内核的非分页池中开辟存放原始内核镜像文件的缓冲区,在该缓冲区完成影子内核的构建。本发明实施例中构建影子内核的方法仅需要申请一块缓冲区进行影子内核的构建,在构建过程中也只需要利用操作系统的基本原理解析文件的可执行格式,然后通过简单的复制、映射完成影子内核的构建,其实现方法简单通用,容易扩展到各类操作系统,且整个构建过程中影子内核不会出现在系统的注册表、驱动链表、对象目录表中,其隐蔽性非常好,不易被第三方应用程序发现并攻击。图6为本发明提供的虚拟机内核的保护装置实施例一的结构示意图,该装置可以集成于虚拟机平台,如图6所示,该装置包括:第一截获模块601和第一转移模块602,其中:第一截获模块601,用于截获应用程序发起的系统调用函数。第一转移模块602,用于根据虚拟机原始内核基地址与影子内核基地址的偏移值,将所述系统调用函数指向影子内核,根据所述影子内核中的影子SSDT确定所述系统调用函数在影子内核中对应的入口地址。其中,所述影子内核构建于所述虚拟机原始内核的非分页池中,所述影子内核为根据所述虚拟机原始内核的镜像文件构建的可执行内核代码。本实施例中,通过截获应用程序发起的系统调用函数,根据虚拟机原始内核基地址与影子内核基地址的偏移值,将上述系统调用函数指向影子内核, 根据影子内核中的影子SSDT确定系统调用函数在影子内核中对应的入口地址,实现了系统调用路径完全在影子内核的纯净代码中执行,保证了系统调用路径的完整性,从而也保证了整个内核代码运行的完整性。且影子内核构建在虚拟机原始内核的非分页池中构建,简单易实现,也不会在注册表等其他地方留下痕迹,安全性更高。图7为本发明提供的虚拟机内核的保护装置实施例二的结构示意图,如图7所示,在图6的基础上,该装置还可以包括:构建模块603,用于构建所述影子内核。参照图7,具体地,构建模块603可以包括:复制单元701、映射单元702、第一重定向单元703、备份单元704以及第二重定向单元705,其中:复制单元701,用于将所述虚拟机原始内核的文件进行复制以获取镜像文件。映射单元702,用于将所述镜像文件按照可执行格式文件映射到所述虚拟机原始内核的非分页池中,以形成影子内核初始代码。第一重定向单元703,用于根据所述镜像文件所映射的地址以及影子内核基地址,对所述影子内核初始代码中的待重定向数据进行修复,并获取修复后的待重定向数据。备份单元704,用于将所述修复后的待重定向数据中SSDT对应的数据和影子中断描述表IDT对应的数据进行备份,以获取影子IDT和所述影子SSDT。第二重定向单元705,用于将所述修复后的待重定向数据重定向到所述虚拟机原始内核,以获取目标重定向数据,并将所述目标重定向数据中的SSDT和IDT替换为所述影子SSDT和所述影子IDT。图8为本发明提供的虚拟机内核的保护装置实施例三的结构示意图,如图8所示,在图7的基础上,该装置还可以包括:申请模块801,用于在复制单元701将所述虚拟机原始内核的文件进行复制以获取镜像文件之前,在所述虚拟机原始内核的非分页池中申请缓冲区,其中,所述影子内核构建于所述缓冲区中。进一步地,上述第一重定向单元702,具体用于根据公式Dactual-Dactual_imagebase=Ddefault-Ddefault_imagebase将所述影子内核初始代码中的待重定向 数据进行修复,以获取修复后的待重定向数;其中,Ddefault为所述待重定向数据的地址,Dactual_imagebase为所述缓冲区的首地址,Ddefault_imagebase为所述影子内核基地址,Dactual为所述修复后的待重定向数的地址。图9为本发明提供的虚拟机内核的保护装置实施例四的结构示意图,如图9所示,在上述图6的基础上,该装置还可以包括:第一拦截模块604,用于拦截应用程序对所述虚拟机原始内核中的SSDT的读写操作。当然,也可以在图7、图8的基础上,在此未示出。进一步地,虚拟机原始内核中的SSDT包括:系统调用函数的标识和在虚拟机原始内核中入口地址的对应关系,影子SSDT包括:系统调用函数的标识和在影子内核中入口地址的对应关系;相应地,第一转移模块602,具体用于根据所述影子SSDT中系统调用函数的标识和在影子内核中入口地址的对应关系,确定所述系统调用函数在影子内核中对应的入口地址。图10为本发明提供的虚拟机内核的保护装置实施例五的结构示意图,如图10所示,在图6的基础上,该装置还可以包括:第二截获模块901和第二转移模块902,当然,也可以在图7~图9任一个的基础上,在此未示出。其中:第二截获模块901,用于截获虚拟机中断处理函数。第二转移模块902,用于根据原始内核基地址与影子内核基地址的偏移值,将所述中断处理函数指向所述影子内核,根据所述影子内核中的影子IDT确定所述中断处理函数在影子内核中对应的入口地址。图11为本发明提供的虚拟机内核的保护装置实施例五的结构示意图,如图11所示,在图10的基础上,该装置还可以包括:第二拦截模块110,用于拦截应用程序对虚拟机原始内核中的IDT的读写操作。进一步地,所述虚拟机原始内核中的IDT包括:中断处理函数的标识和在虚拟机原始内核中入口地址的对应关系,所述影子IDT包括:中断处理函数的标识和在影子内核中入口地址的对应关系;相应地,第二转移模块902,具体用于根据所述影子IDT中中断处理函数的标识和在影子内核中入口地址的对应关系,确定所述中断处理函数在影子内核中 对应的入口地址。上述这些模块、单元可以由虚拟机内核的保护装置的处理元件实现,且该处理元件可以为单独设立的处理元件,也可以集成在虚拟机内核的保护装置的某一个处理元件中实现,此外,也可以以程序代码的形式存储于虚拟机内核的保护装置的存储元件中,由虚拟机内核的保护装置的某一个处理元件调用并执行以上功能。该装置用于执行前述方法实施例,其实现原理和技术效果类似,在此不再赘述。图12为本发明提供的虚拟机内核的保护装置实施例七的结构示意图,如图12所示,该装置包括:处理器111、接口电路112、存储器113和总线114,其中,处理器111、接口电路112以及存储器113通过总线114连接并完成相互间的通信,存储器113中存储一组程序代码,处理器111调用存储器113中存储的程序代码,执行以下操作:截获应用程序发起的系统调用函数;根据虚拟机原始内核基地址与影子内核基地址的偏移值,将所述系统调用函数指向影子内核,根据所述影子内核中的影子系统服务描述表SSDT确定所述系统调用函数在影子内核中对应的入口地址;其中,所述影子内核构建于所述虚拟机原始内核的非分页池中,所述影子内核为根据所述虚拟机原始内核的镜像文件构建的可执行内核代码。进一步地,处理器111还用于构建所述影子内核。处理器111构建所述影子内核,具体为:将所述虚拟机原始内核的文件进行复制以获取镜像文件;将所述镜像文件按照可执行格式文件映射到所述虚拟机原始内核的非分页池中,以形成影子内核初始代码;根据所述镜像文件所映射的地址以及影子内核基地址,对所述影子内核初始代码中的待重定向数据进行修复,并获取修复后的待重定向数据;将所述修复后的待重定向数据中SSDT对应的数据和影子中断描述表IDT对应的数据进行备份,以获取影子IDT和所述影子SSDT;将所述修复后的待重定向数据重定向到所述虚拟机原始内核,以获取目标重定向数据,并将所述目标重定向数据中的SSDT和IDT替换为所述影子 SSDT和所述影子IDT。可选地,处理器111将所述虚拟机原始内核的文件进行复制以获取镜像文件之前,在所述虚拟机原始内核的非分页池中申请缓冲区,其中,所述影子内核构建于所述缓冲区中。处理器111根据所述镜像文件所映射的地址以及影子内核基地址,对所述影子内核初始代码中的待重定向数据进行修复,以获取修复后的待重定向数据,可以为:根据公式Dactual-Dactual_imagebase=Ddefault-Ddefault_imagebase将所述影子内核初始代码中的待重定向数据进行修复,以获取修复后的待重定向数;其中,Ddefault为所述待重定向数据的地址,Dactual_imagebase为所述缓冲区的首地址,Ddefault_imagebase为所述影子内核基地址,Dactual为所述修复后的待重定向数的地址。处理器111将所述系统调用函数指向影子内核之后,还用于拦截应用程序对所述虚拟机原始内核中的SSDT的读写操作。所述虚拟机原始内核中的SSDT包括:系统调用函数的标识和在虚拟机原始内核中入口地址的对应关系,所述影子SSDT包括:系统调用函数的标识和在影子内核中入口地址的对应关系;相应地,处理器111具体用于根据所述影子SSDT中系统调用函数的标识和在影子内核中入口地址的对应关系,确定所述系统调用函数在影子内核中对应的入口地址。进一步地,处理器111还用于截获虚拟机中断处理函数;根据原始内核基地址与影子内核基地址的偏移值,将所述中断处理函数指向所述影子内核,根据所述影子内核中的影子IDT确定所述中断处理函数在影子内核中对应的入口地址。进一步地,处理器111将所述中断处理函数指向所述影子内核之后,还用于拦截应用程序对虚拟机原始内核中的IDT的读写操作。可选地,所述虚拟机原始内核中的IDT包括:中断处理函数的标识和在虚拟机原始内核中入口地址的对应关系,所述影子IDT包括:中断处理函数的标识和在影子内核中入口地址的对应关系;相应地,处理器111具体用于根据所述影子IDT中中断处理函数的标识和在影子内核中入口地址的对应关系,确定所述中断处理函数在影子内核中对应的入 口地址。在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-OnlyMemory,简称:ROM)、随机存取存储器(英文:RandomAccessMemory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1