一种用于虚拟机安全防护的方法及装置与流程

文档序号:16608026发布日期:2019-01-14 21:17阅读:138来源:国知局
本申请涉及计算机硬件虚拟化领域和操作系统安全领域,尤其涉及一种用于虚拟机安全防护的方法及装置。
背景技术
::随着云计算、大数据等技术的发展,对于服务器和个人电脑的安全性要求也越来越高。操作系统作为服务器和个人电脑的核心,其一旦被黑客或非法用户控制及利用,后果将不堪设想。近年来由于linux系统稳定高效的特点,其应用也越来越普遍。系统调用表sys_call_table是linux操作系统的关键部件,是所有用户态程序调用内核的入口,因此系统调用表的安全格外重要。黑客常通过rootkit程序篡改系统调用表中的某些系统调用函数地址,将一些系统调用函数重定向到包含恶意代码的系统调用函数,当用户再调用时便会触发替换后的系统调用函数,以此来达到隐藏自身、破坏系统正常行为的目的。在目前已知的linux黑客攻击统计中,通过篡改系统调用表实现攻击的案例较多。因此如何有效保证系统调用表安全性和完整性成为目前急需解决的技术问题。技术实现要素:本申请实施例提供了一种用于虚拟机安全防护的方法及装置,用于防止系统调用表被篡改。第一方面,本申请实施例提供了一种用于虚拟机安全防护的方法,该方法包括:获取虚拟机操作系统的系统调用表sys_call_table的内存地址范围,该虚拟机为kvm虚拟机,该虚拟机基于硬件虚拟化技术搭建;对虚拟机操作系统产生的cpu指令进行截获;判断该cpu指令是否为内存写入指令;若该cpu指令为内存写入指令,获取该cpu指令的写入地址范围;判断该cpu指令的写入地址范围是否位于sys_call_table的内存地址范围;若该cpu指令的写入地址范围位于sys_call_table的内存地址范围,则阻止该cpu指令对sys_call_table的写入操作,具体可以为使得该cpu指令返回错误。根据第一方面,本申请实施例第一方面的第一种实施方式中,在阻止该cpu指令对sys_call_table的写入操作之后,该方法还包括:将该cpu指令的相关信息作为已拦截日志消息缓存在系统日志链表中,该相关信息包括该cpu指令的内容和时间信息。根据第一方面的第一种实施方式,本申请实施例第一方面的第二种实施方式中,在将该cpu指令的相关信息作为已拦截日志消息缓存在日志链表中之后,该方法还包括:接收访问已拦截日志消息的请求;从该日志链表中提取已拦截日志消息,提取后的已拦截日志消息可通过用户界面展示给用户。根据第一方面,本申请实施例第一方面的第三种实施方式中,在获取系统调用表的内存地址之前,该方法还包括:对虚拟机控制结构体vmcs进行设置,以控制对cpu指令的截获行为。第二方面,本申请实施例提供了一种用于虚拟机安全防护的装置,该装置包括:第一获取单元,用于获取虚拟机操作系统的系统调用表sys_call_table的内存地址范围,该虚拟机为kvm虚拟机,该虚拟机基于硬件虚拟化技术搭建;截获单元,用于对虚拟机操作系统产生的cpu指令进行截获;第一判断单元,用于判断该cpu指令是否为内存写入指令;第二获取单元,用于当该cpu指令为内存写入指令时,获取该cpu指令的写入地址;第二判断单元,用于判断该cpu指令的写入地址是否位于该系统调用表的内存地址;操作单元,用于当该cpu指令的写入地址位于该系统调用表的内存地址时,阻止该cpu指令对sys_call_table的写入操作。根据第二方面,本申请实施例第二方面的第一种实施方式中,该装置还包括:存储单元,用于将该cpu指令的相关信息作为已拦截日志消息缓存在日志链表中,该相关信息包括该cpu指令的内容和时间信息。根据第二方面的第一种实施方式,本申请实施例第二方面的第二种实施方式中,该装置还包括:接收单元,用于接收访问已拦截日志消息的请求;提取单元,用于从日志链表中提取已拦截日志消息,提取后的已拦截日志消息可通过用户界面展示给用户。根据第二方面,本申请实施例第二方面的第三种实施方式中,该装置还包括:设置单元,用于对虚拟机控制结构体vmcs进行设置,以控制对cpu指令的截获行为。第三方面,本申请实施例提供了一种用于虚拟机安全防护的装置,所述装置包括:处理器和存储器,所述存储器中存储有前述第一方面中所述用于虚拟机安全防护的指令,当其在计算机上运行时,使得计算机执行前述第一方面中所述的用于虚拟机安全防护的步骤。第四方面,本申请实施例提供了一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如第一方面所述的方法。从以上技术方案可以看出,本申请实施例具有以下优点:本申请实施例通过拦截cpu指令并判断其类型,使得所有对系统调用表的写入指令失效,以保护系统调用表不被篡改。附图说明图1为本申请实施例提供的用于虚拟机安全防护的方法的一个实施例示意图;图2为本申请实施例提供的用于虚拟机安全防护的装置的一个实施例示意图;图3为本申请实施例提供的用于虚拟机安全防护的装置的另一个实施例示意图;图4为本申请实施例提供的用于虚拟机安全防护的装置的另一实施例示意图。具体实施方式本申请实施例提供了一种用于虚拟机安全防护的方法及装置,用于通过阻止对系统调用表进行写操作的cpu指令以防止系统调用表被恶意程序篡改,本申请实施例还提供了相应的用于虚拟机安全防护的装置及计算机可读存储介质,以下分别进行详细说明。在linux系统中,每个系统调用函数在内核中都对应着一个系统调用函数,这些函数通常都以sys_开头,并且这些系统调用函数符号都被内核输出。运行在内核空间的rootkit可以获取这些系统调用函数符号地址并修改这些系统调用函数的指令代码,使得在其中可以执行rootkit提供的恶意代码。本申请实施例提供的用于虚拟机安全防护的方法的实施例如图1所示,其主要包括7个步骤,具体实施如下:101、获取系统调用表的地址;获取虚拟机系统内核系统调用表sys_call_table的内存地址,在本申请实施例及后续实施例中,虚拟机为kvm虚拟机,基于硬件虚拟化技术构建,该硬件虚拟化技术包括intelvt(intelvirtualizationtechnology,intel虚拟化技术)以及amdsvm((amdsecurevirtualmachine,amd安全虚拟机)。在本申请实施例中,在硬件虚拟化技术中,操作模式被分为vmx根模式(vmxrootoperation)和vmx非根模式(vmxnon-rootoperation),程序运行级别又被分为ring0-ring3级别,获取虚拟机系统内核的系统调用表的内存地址的操作位于非根模式下的ring0级别。102、截获cpu指令;在基于硬件虚拟化技术构建虚拟机的过程中,通过对vmcs(virtualmachinecontrolstructure,虚拟机控制结构)数据结构的配置,定义对cpu指令的截获行为。在本申请实施例中,通过对vmcs的配置,使得当虚拟机产生cpu指令时,该cpu指令产生陷入并被截获。103、判断是否为内存写入指令;当cpu指令被截获后,会先判断其是否为内存写入指令,若为内存写入指令,则执行步骤104,进行进一步判断,若不是该cpu指令不是内存写入指令,则执行步骤107,使得该指令正常执行。104、获取写入地址;在步骤103中若判断该cpu指令为内存写入指令,则在此步骤中进一步获取该cpu指令的内存写入地址。105、判断写入地址是否为系统调用表地址;判断该cpu指令的内存写入地址是否位于sys_call_table的地址范围,若该cpu指令的内存写入地址位于sys_call_table的地址范围,则执行步骤106,否则,执行步骤107,使得该指令正常执行。106、阻止写入操作;若该cpu指令的内存写入地址位于sys_call_table的地址范围,则使该次内存写入失败,具体可以为令该cpu指令的返回结果为错误。在本申请实施例中,在阻止该cpu指令后,还可以将本次阻止操作的相关信息,如cpu指令的代码、cpu指令的产生时间等作为已拦截日志消息进行存储,具体可以为将已拦截日志消息缓存在linux系统日志链表中,用户可以从该日志链表中提取已拦截日志消息以供查看。107、指令执行。使被截获后的cpu指令在根模式下的ring0级正常执行。在本申请实施例中,通过在根模式的ring0级别运行实时监测非根模式下虚拟机产生的cpu指令的程序,限制cpu指令对sys_call_table的内存写入操作,从而对sys_call_table在系统最高权限下进行写保护,以防止运行于非根模式下内核态的rootkit恶意程序对虚拟机sys_call_table进行篡改。上面对本申请实施例中用于虚拟机安全防护的方法进行了介绍,下面对本申请实施例提供的用于虚拟机安全防护的装置进行介绍。如图2所示为本申请实施例提供的用于虚拟机安全防护的装置200的一个实施例示意图,用于虚拟机安全防护的装置200包括:第一获取单元201,用于获取系统调用表的内存地址;截获单元202,用于截获虚拟机操作系统的cpu指令;第一判断单元203,用于判断该cpu指令是否为内存写入指令;第二获取单元204,用于当该cpu指令为内存写入指令时,获取该cpu指令的写入地址;第二判断单元205,用于判断该cpu指令的写入地址是否位于该系统调用表的内存地址;操作单元206,用于当该cpu指令的写入地址位于该系统调用表的内存地址时,阻止该cpu指令的写入操作。在本实施例中,用于虚拟机安全防护的装置200还包括:存储单元207,用于将该cpu指令的相关信息作为已拦截日志消息缓存在日志链表中,该相关信息包括该cpu指令的内容和时间信息。在本实施例中,用于虚拟机安全防护的装置200还包括:接收单元208,用于接收访问已拦截日志消息的请求;提取单元209,用于从该日志链表中提取已拦截日志消息。在本实施例中,用于虚拟机安全防护的装置200还包括:设置单元210,用于对虚拟机控制结构体vmcs进行设置,以控制对cpu指令的截获行为。对于本申请实施例中用于虚拟机安全防护的装置按照监控层模块的划分还可按照如图3进行,如图3所示为本申请实施例提供的用于虚拟机安全防护的装置300的另一个实施例示意图,用于虚拟机安全防护的装置300包括:cpu虚拟化驱动模块301,该模块采用内核驱动的方式实现,由主服务进程模块303安装,随着操作系统运行。cpu虚拟化驱动模块301的代码运行于根模式下的ring0级别,与宿主机内核和虚拟机监视器一样,具有最高的特权级别。在该模块运行后,会依次执行分配虚拟化数据结构所需的内存、设置cpu寄存器的标志位cr4、填充vmcs以指明截获cpu指令操作、从os通信模块302获取sys_call_table的内存地址范围以及使当前的操作系统作为虚拟机运行与虚拟cpu上。cpu虚拟化驱动模块301在被主服务进程模块303创建且初始化完毕后,会进入cpu指令截获循环。在截获到每条cpu指令后,若该cpu指令是内存写入指令且写入的是sys_call_table的地址范围,则使得该次内存写入操作失败。os通信驱动模块302,该模块采用内核驱动的方式实现,由主服务进程303安装,在操作系统运行后自动运行。该模块运行于非根模式下的ring0级别,与虚拟机内核的特权等级相同。该模块在跟随虚拟机操作系统运行后,会先获取虚拟机操作系统的sys_call_table的起始内存地址和内存地址范围,并将获得的sys_call_table内存地址进行存储,该模块向上与cpu虚拟化驱动模块301相连,向下与主服务进程模块303相连。该模块在被主服务进程模块303创建且初始化完毕后,会进入请求消息处理循环,用于接收cpu虚拟化驱动模块301发送的获取sys_call_table内存地址的请求,并将cpu虚拟化驱动模块301在阻止cpu指令后产生的已拦截日志消息缓存在系统日志链表中,当接收到主服务进程模块303发送的获取已拦截日志消息的请求后,将已拦截日志消息从系统日志链表中取出,并返回给主服务进程模块303。主服务进程模块303,该模块采用linux后台服务的方式进行实现,可与os通信驱动模块302进行通信来获取已拦截日志消息。该模块还用于创建cpu虚拟化驱动模块301以及os通信驱动模块302。通过卸载主服务进程模块303可对cpu虚拟化驱动模块301以及os通信驱动模块302进行卸载,对主服务进程303进行卸载需要提供一串固定的指令,该指令在主服务进程模块303被创建时提供给用户,或由用户在创建过程中进行设置,以保护主服务进程模块303不被恶意程序卸载。图4是本申请实施例提供的用于虚拟机安全防护的装置400的结构示意图。所述用于虚拟机安全防护的装置400包括处理器401、存储器402和输入输出(i/o)接口403,存储器402可以包括只读存储器和随机存取存储器,并向处理器401提供操作指令和数据。存储器402的一部分还可以包括非易失性随机存取存储器(nvram)。处理器401用于虚拟机安全防护的装置400的操作,处理器401还可以称为cpu。存储器402可以包括只读存储器和随机4存取存储器,并向处理器401提供指令和数据。存储器402的一部分还可以包括非易失性随机存取存储器(nvram)。具体的应用中用于虚拟机安全防护的装置400的各个组件通过总线系统404耦合在一起,其中总线系统404除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统404。上述本申请实施例揭示的方法可以应用于处理器401中,或者由处理器401实现。处理器401可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器401中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器401可以是通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器402,处理器401读取存储器402中的信息,结合其硬件完成上述方法的步骤。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1