基于虚拟机监控器的隐藏进程检测方法和装置的制作方法

文档序号:6440187阅读:240来源:国知局
专利名称:基于虚拟机监控器的隐藏进程检测方法和装置的制作方法
技术领域
本发明涉及虚拟机技术,尤其涉及一种基于虚拟机监控器(Virtual Machine Monitor,简称为VMM)的隐藏进程检测方法和装置,属于计算机技术领域。
背景技术
虚拟化技术的发展促进了虚拟机技术的出现。通过虚拟硬件来实现虚拟机,将一台物理计算机系统虚拟化为一台或多台虚拟计算机系统,每个虚拟计算机系统都拥有自己的虚拟硬件(如CPU、内存和设备等)。虚拟机的各种优点促使了虚拟计算环境的发展。当然,作为计算环境的核心,虚拟机的安全性必须要得到更好的保证,这也成为当前虚拟计算环境下所要研究的重要问题。此外,虚拟机技术的发展不仅促进虚拟计算环境的发展,其本身的一些优势也为安全技术的发展带来了新的机遇。虚拟机监控器处于客户机以及客户机系统的底层,具有更高的特权级。因此,通过虚拟机监控器可以更容易解决安全的一些问题。
在虚拟机系统会出现的各种安全问题中,系统中隐藏对象带来日益严重的安全问题。所谓“隐藏”,指的是“用户不可见”。有这样一种恶意软件,常被称为“Rootkit (内核级后门/木马)”,他们运行在系统内核态,可以自隐藏自己的进程、服务、日志以及网络连接等等,并能够对正常的用户程序进行隐藏。于是,如何检测到系统中的隐藏对象成为维护系统内部安全的重要内容,也是虚拟计算环境下保障虚拟机内部安全的重要内容。
目前关于如何检测系统内隐藏的各种对象,主要有三种方法一种基于系统内部的研究和实现,一种基于辅助的硬件,还有一种基于虚拟机控制器的一些安全机制。基于系统级的隐藏对象检测机制存在篡改、禁用、绕过的危险,而基于辅助硬件的,需要专门硬件的支持,增加了成本,且实现功能不完整。基于VMM的安全技术已经有了很大的发展,而且安全性在增加,但是也会分别出现一些不足有些是粗粒度的检测;有些是利用内核数据结构进行语义转换,在没有验证的情况下,会漏掉一些信息;有些为了实现更高安全性,牺牲掉了一些完整的语义信息;而更多的研究放在了研究进程方面,关于文件、网络连接的研究比较少,如果存在只终止了隐藏的进程而忽略了遗留的隐藏文件,或者没有关注隐藏的网络连接,这些连接很有可能是非隐藏的进程创建的,等等一些情况下,导致检测的范围受限。除外,一些不支持开源的商用系统的研究使用范围也有一定限制。发明内容
本发明的第一个方面是提供一种基于虚拟机监控器的隐藏进程检测方法,包括
分别获得用户态、内核态以及虚拟机监控器中的进程信息;
比较所述用户态中的进程信息与所述内核态中的进程信息,获得用户态中的隐藏进程;
比较所述内核态中的进程信息与所述虚拟机监控器中的进程信息,获得内核态中的隐藏进程。
本发明的第二个方面是提供一种基于虚拟机监控器的隐藏进程检测方法,包括
比较虚拟机内部用户态程序维护的网络连接信息与虚拟机监控器维护的网络连接信息,获得隐藏的网络连接;
利用虚拟机监控器获取进程与端口的映射信息,根据所述隐藏的网络连接的网络端口,获得隐藏进程。
本发明的第二个方面是提供一种基于虚拟机监控器的隐藏进程检测装置,包括
获得模块,用于分别获得用户态、内核态以及虚拟机监控器中的进程信息;
第一比较模块,用于比较所述用户态中的进程信息与所述内核态中的进程信息, 获得用户态中的隐藏进程;
第二比较模块,用于比较所述内核态中的进程信息与所述虚拟机监控器中的进程信息,获得内核态中的隐藏进程。
本发明一个方面的技术效果是在利用硬件虚拟化的技术,并且作为Linux系统可加载的模块,在虚拟机监控器KVM中进行修改,不影响虚拟机监控器的正常运行以及产生可接受的额外性能开销,实现了多种视图的隐藏进程检测及识别技术,并通过检测隐藏的网络连接进一步发现可疑的进程,实现多角度、全方位的进程检测,为虚拟机提供更高的安全性。


图1为本发明一个实施例提供的基于虚拟机监控器的隐藏进程检测方法流程图2为本发明实施例提供的内核态进程列表的获取流程图3为本发明实施例提供的VMM进程列表的获取流程图4为本发明实施例提供的多视图示意图5为本发明实施例提供的虚拟机监控器的隐藏进程检测方法流程图6为本发明实施例提供的基于虚拟机监控器的隐藏进程检测装置结构示意图7为本发明实施例提供的基于虚拟机监控器的隐藏进程检测装置结构示意图。
具体实施方式
针对目前隐藏进程检测机制中的缺陷和不足,结合虚拟机环境的特点,本发明提出了一种基于虚拟机监控器的多视图隐藏进程检测方法和装置,在利用硬件虚拟化的技术,并且作为(如Linux)系统可加载的模块,在虚拟机监控器KVM中进行修改,不影响虚拟机监控器的正常运行以及产生可接受的额外性能开销,实现了多种视图的隐藏进程检测, 并通过检测隐藏的网络连接进一步发现可疑的进程,实现多角度、全方位的进程检测,为虚拟机提供更高的安全性。
图1为本发明一个实施例提供的基于虚拟机监控器的隐藏进程检测方法流程图, 如图1所示,该方法包括
步骤101、分别获得用户态(User-level)、内核态(Kernel-level)以及虚拟机监控器(VMM-level)下的进程信息;
其中可以包括
(1)从系统提供的用户态的应用程序编程接口 API获得her-level的进程列表及相应的进程信息;
(2)通过截获系统调用来维护一个Kernel-level的进程列表及相应的进程信息;
具体的,Kernel-level的进程列表可以但不限于通过如下方式进行获取
Kernel-level进程列表的获取主要通过截获系统调用来实现。当进程创建和执行的时候都需要通过调用系统调用来完成操作,这个时候,快速系统调用指令(SYSENTER 指令)将会被执行,系统就会从用户态转入内核态,并且进行内核初始化操作,将相应的值载入到相关的寄存器中,比如执行最高权限(Ring 0)代码的代码选择符指定寄存器 (SYSENTER_CS_MSR)保存内核代码段的选择符,执行最高权限Ring 0代码的起始地址指定寄存器(SYSENTER_EIP_MSR)保存内核入口点的线性地址,执行Ring 0代码的栈指针指定寄存器(SYSENTER_ESP_MSR)保存内核堆栈指针。于是,可以将一个不存在的地址赋值给 SYSENTER_EIP_MSR,使得在发生系统调用的时候产生缺页错误(PageFault)的错误异常, 迫使虚拟机将CPU的控制权交换给虚拟机监控器。这个时候,虚拟机监控器得到了 CPU控制权,并且可以通过读取EAX寄存器获取当前系统调用号,通过该系统调用号判断当前系统调用类型(进程的执行execve、退出eXit_group),来对Kernel-level的进程列表进行添加或者删除成员。内核态进程列表的获取流程图可以如图2所示。步骤201、设置虚拟机的SYSENTER_EIP_MSR为一个不可用的地址Oxffffffff ;步骤202、由上述地址,导致虚拟机发生异常,CPU控制权被KVM掌握;步骤203、判断上述异常是否为缺页错误,如果是转入步骤204,如果不是继续步骤201 ;步骤204、截获虚拟机当前系统调用以及进程的信息;步骤205、从虚拟机当前系统调用的信息中获取系统调用号;步骤206、判断系统调用号;系统调用号为11转入步骤207,系统调用号为252,转入步骤211 ;步骤207、如果系统调用号为 11则转入步骤208 ;步骤208、在Kernel-level的进程列表中查询当前进程信息;步骤209、 判断Kernel-level视图是否有当前进程信息,如有,流程结束;没有,转入步骤210 ;步骤 210、将该进程信息加入Kerne 1-1 eve 1视图,则流程结束;步骤211、该系统调用号为252,转入步骤212 ;步骤212、将该进程从Kernel-level视图中删除,流程结束。
在获得了进程列表之后,还需要进行进程语义信息的获取。进程语义信息的获取主要是通过读取内核为进程维护的数据结构进程描述符taSk_StrUCt中的信息。而进程描述符taSk_StrUCt的获取是依据进程内核堆栈地址与进程描述符地址之间的映射关系获取的。在Linux中,内核分配进程任务结构空间时,是以8KB为单位来分配的,包含两个页面空间,一个是进程信息结构体(threacLinfo结构体)存储空间,一个是进程用于系统空间堆栈的存储空间。其中threacLinfo结构体存储了进程描述符taSk_Struct,并且位于该地址空间的起始地址,而堆栈空间则从内存空间的高地址向低地址增长。由于进程内核空间起始地址是8KB的整数倍,即213,则taSk_Struct的地址与进程堆栈地址的前19位相同,在发生进程上下午切换的时候,当前CPU的堆栈指针寄存器(ESP寄存器)存放的便是切换后的进程的内核堆栈,将此值与OxffffeOOO (十六进制)按位相与便得到task_strUCt 结构的地址。同时,考虑到内存虚拟化,从内存中读取进程描述符的时候要考虑两次地址转换的机制,即客户机虚拟机地址(GVA,Guest Virtual Address)- >客户机物理地址(GPA, Guest Physical Address)- >宿主机物理地址(ΗΡΑ,Host Physical Address)的转换。
(3)获得虚拟机监控器维护的VMM-level的进程列表。
具体的,VMM-level的进程列表可以但不限于通过如下方式进行获取
在虚拟机环境下,处理器与系统进程之间是存在逻辑的一致性的,于是尽管具体语义的系统进程对于虚拟机监控器是不可见的,但是进程所用的地址空间是对虚拟机监控器是可见的。于是虚拟机监控器想要维护进程列表便可以通过截获进程的CPU事件,比如进程的上下文切换。在X86架构下,CPU的第四个控制寄存器(CR3寄存器)保存着进程地址空间下页目录表的基地址,一旦一个新的进程使用CPU,其相应的页目录表基地址便被写入到CR3中,同时会将其内核堆栈地址写入ESP寄存器。于是,在系统虚拟化软件KVM的CR3 寄存器控制操作中设置截获点插入函数来判断是否有新的进程启动。关于进程的退出,采用固定时间间隔依据内核进程链表的进程状态对进程判断是否退出,并作出相应的操作。 VMM进程列表的获取流程图可以如图3所示。步骤301、等待CPU发生寄存器更新事件;步骤 302、CPU发生寄存器事件,KVM获得CPU控制权,KVM判断当前寄存器事件;步骤303、若当前寄存器是CR3寄存器发生变化,则进行步骤304 ;否则,从步骤301开始。步骤304、进程函数准备执行;步骤305、获取当前进程的信息;步骤306、根据获取的进程信息查询VMM-level 进程列表;步骤307、判断步骤306的结果,如果存在该进程,则转入步骤309 ;否则,转入步骤308 ;步骤308、将该进程信息添加进VMM-level进程列表;步骤309、查看VMM-level列表更新时间标志,判断距离上次更新时间是否超过2秒;如果超过,则进行步骤310,若无, 流程结束;步骤310、对VMM-level的列表进行更新操作准备;步骤311、从VMM-level的列表中取下一个进程,判断是否还有进程,如果有,进行步骤312,若无,流程退出;步骤312、 查询内核维护的进程数据结构双向链表;步骤313、判断该进程是否存在双向链表中,如果存在,则进行步骤311 ;否则,进行步骤314 ;步骤314、将该进程从VMM-level列表中删除, 转入步骤311。
在获得了进程列表之后,还包括进程语义信息获取。如上述O)中的描述,此处不做赘述。
步骤102、比较所述her-level的进程信息以及所述Kernel-level的进程信息, 获得her-level中的隐藏进程;
步骤103、比较所述Kernel-level的进程信息以及所述VMM-level的进程信息,获得Kernel-level中的隐藏进程。
其中,本实施例并不限制步骤102与步骤103之间的执行顺序,可以先执行步骤 102、后执行步骤103,也可以先执行步骤103、后执行步骤102,或者两个步骤同时进行。
下面具体对各步骤中的技术进行详细的介绍。
首先,多视图验证技术是通过多个角度对系统对象进行观察得出不同的视图,并且这些视图之间没有任何的相关性。在整个系统的层次中,越高的层次获得的视图可信度越低。按照对系统的攻击的难易,一个隐藏的系统对象更可能出现在较低层次的视图中。当一个系统对象出现在较高可信视图中而未出现在较低可信视图中,那么该隐藏对象便可被检测发现。
而对于进程来说,最不可信的视图,从系统提供的用户态的应用程序编程API函数(Application Programming Interface)便可获得,比如利用系统查看命令ps和top 来维护一个^er-Ievel的进程列表。同时,如果创建或者执行进程,一般是需要在用户态调用库函数以及系统调用来实现的,所以,通过截获系统调用便可以发现一个进程是否创建、活动或者销毁,因此,如图4所示的多视图示意图,可以通过截获系统调用来维护一个Kernel-level的进程列表。通过这个Kernel-level列表和刚才得到的her-level列表对比,便可以得到隐藏的进程,并且可知该进程隐藏于用户态,因为其对于用户态的API是不可见的,但是内核态的系统库函数是可以截获得到的。可是系统调用是可以绕过的,比如在内核内部通过直接执行内核函数或者修改系统调用表等等,以及通过可加载内核模块程序 (LKM,Loadable Kernel Module)实现的rootkit,隐藏在内核态里,不仅不会被用户态的程序发现,也不会被系统调用所发现,于是获取最可信视图便成为必需。在虚拟机环境下,虚拟机监控器对虚拟机拥有最高权限,虚拟机的任何活动权限都不可能越过虚拟机监控器的级别,于是,从虚拟机监控器维护一个真实VMM-level进程列表便成为可能,又如图4所示, 通过这个列表与Kernel-level列表对比,便可以发现Kernel-level列表所不能发现的隐藏于内核态的rootkit。
该发明满足如下要求1)对客户机透明。对于虚拟机来说,整个检测的活动是透明的,检测行为不会影响正常虚拟机的运行状态,并且,由于其透明性,使得虚拟机内部的恶意软件也对检测系统的存在不可知,更加提高了检测系统的安全性与准确性。2)跨越语义,用户交互。从虚拟机的外部实现检测功能,但是系统仍旧需要为用户提供清晰地语义和友好的界面,以便用户能够随时掌握自己虚拟机内部的状态和信息。同时,良好的语义为识别隐藏进程提供了便利。幻视图的更加完整,没有遗漏。通过多视图检测机制,尤其是通过 Kernel-level以及隐藏网络端口提供的进程信息,使得对于虚拟机内部隐藏进程的检测更加完善。同时,能够对隐藏进程的类型更细化的区分,比如,进程是隐藏于用户态还是内核态,甚至对于具有隐藏行为(如隐藏网络连接)的可疑进程进行探测和发掘,提高检测级别,进一步增强虚拟机的安全性。4)主动检测。由于一些对于隐藏进程的扫描是隔时的甚至被动的,也可能在不恰当的时间间隔内,隐藏进程巧妙躲避检测,所以,对于进程一旦创建甚至运行便进行捕捉检测是非常必要的。5)功能易用性。根据当前主机环境的需求,本系统应该是动态可加载可卸除的,不影响主机整体环境。
图5为本发明实施例提供的虚拟机监控器的隐藏进程检测方法流程图,如图5所示,该方法包括
步骤501、比较虚拟机内部用户态程序维护的网络连接信息(视图)与虚拟机监控器维护的网络连接信息相比较,获得隐藏的网络连接;
步骤502、利用虚拟机监控器获取进程与端口的映射信息,根据所述隐藏的网络连接的端口,获得隐藏进程。
其中,网络端口截获,依据虚拟机监控器KVM对于虚拟机的网卡是可见的,并且可以在宿主机的用户态便执行抓包截获的操作,本发明实施例主要就是通过这样的方式实现的。特别的,本文中虚拟机的网络配置是以网桥形式配置的,每一个虚拟机都有对应的测试访问端口(tap端口,Test Access Port)来进行数据包的接受和发送。宿主机对于tap端口是可见的,并且可以通过对tap端口的抓包来进行网络状态的控制。网络端口截获模块便对tap端口进行侦听,一旦有数据包发送便可以被获得。
进程与端口映射关系可以通过如下方式获取在Linux中,进程建立网络连接是通过创建套接字(socket)文件实现的,当进程进行网络通信的时候,就打开相应的socket 文件。Linux内核为每一个进程都维护了一个打开文件的列表。通过这个列表又可以去查询每个文件具体对应的目录,依据这个目录便可以搜索获得Linux文件系统上真实的索引文件。在Linux文件系统中,为每一个真实文件都维护了一个文件索引节点(inode)的索引数据结构,并且设置相应的模式属性字段(i_mode)来表示,通过内置的socket判断宏(S_ ISSOCK())可以来判断i_mode是否是socket类型。当进程的一个文件类型结构(file)指针指向socket文件时,会讲该文件对应的socket结构体地址赋值给文件的私有数据属性 (private_data属性),通过前面的判断,便可以得到socket结构体。在Linux的网络协议栈中,不会将具体的地址信息存放在socket结构中,socket结构是基于虚拟文件系统创建出来,不保存具体的网络连接信息,具体的网络协议信息存放在扩展的socket数据结构 (sock数据结构)中,但是它属于网络层的socket,更详细的网络域(INET域)信息,例如网络地址(IP地址),端口等存放在inet_S0Ck数据结构。于是通过这样的分析,便可以找到进程与端口的映射关系。
具体的,Rootkits的目的主要是通过网络连接来控制目的主机,于是隐藏掉相关的网络连接也是其重要的攻击手段。通过检测发现隐藏的网络端口,并且通过端口与进程的对应关系,从而可以进一步发现可疑的进程,防止了 rootkit利用看似正常的用户进程进行恶意的网络行为,比如远程访问命令(sshtelnet)等。网络连接的隐藏是用户态程序 (例如网络连接查看程序netstat程序)无法发现的,但是网络活动的存在是可以通过截获网卡网络活动发现的。在虚拟机内部实现,则存在被绕过的可能,但是虚拟机监控器由于对虚拟网卡是可见的,于是虚拟机监控器自然也对于该网卡上的网络活动具有全部视图获取的能力。从而,通过虚拟机内部用户态程序(例如netstat)维护的视图与虚拟机监控器维护的网络连接列表所对比,便可以发现隐藏的网络连接。发现了隐藏端口之后,利用虚拟机监控器获取进程与端口的映射信息,找到可以进程。
在上述实施方式的基础上,该方法还可以包括
获取从客户机内得到的进程列表和网络视图,获取从VMM得到的两个进程列表和进程与端口对应信息,获取从网络端口模块得到的网络视图,对得到的网络视图进行处理加上进程内容,对进程的三个视图进行整理,对网络的两个视图进行整理。由于可以采用设备的方式实现,宿主机内核与用户态的交互主要通过设备系统设备控制函数(ioctl)来实现,而其他的用户态的数据传送主要通过字符串以及缓存。
持久化处理位于宿主机用户态,主要实现的功能就是将从得到的各个视图信息存储到数据库中,例如Mysql数据库。对于进程列表和网络连接视图,需要存储的每条信息已经过整理。
用户界面的展示要实现的功能是动态的将本发明的检测的结果展示给用户。本实施例采用基于浏览器/服务器(B/S)的模式进行web客户端的展示,并且利用基于Ruby语言的网络框架Rails (Ruby On Rails)的敏捷开发方式,紧密与Mysql数据库进行结合,动态捕获数据库的变更,动态的页面显示,即一旦有进程创建便会有页面更新。
图6为本发明实施例提供的基于虚拟机监控器的隐藏进程检测装置结构示意图, 如图6所示,该装置可以包括获得模块601、第一比较模块602和第二比较模块603。其中, 获得模块601用于分别获得用户态、内核态以及虚拟机监控器中的进程信息,第一比较模块602用于比较用户态中的进程信息与内核态中的进程信息,获得用户态中的隐藏进程, 第二比较模块603用于比较内核态中的进程信息与虚拟机监控器中的进程信息,获得内核态中的隐藏进程。
一种实施方式下,进程信息包括进程列表和进程的寓意信息,则获得模块601可以包括第一单元、第二单元、第三单元和第四单元。其中,第一单元用于从系统提供的用户态的API获得用户态的进程列表,第二单元用于通过截获系统调用获得内核态的进程列表,第三单元用于通过截获进程的CPU事件获得虚拟机监控器的进程列表,第四单元用于通过读取内核为进程维护的数据结构描述符中的信息获得各进程列表中的各进程的语义 fn息ο
在上述实施方式的基础上,第二单元可以包括第一子单元、第二子单元和第三子单元。其中,第一子单元用于如果发生系统调用,则获得当前发生的系统调用号,第二子单元用于根据当前发生的系统调用号判定当前发生的系统调用类型,第三子单元用于如果当前发生的系统调用类型为进程的执行,则将该进程加入内核态的进程列表,如果当前发生的系统调用类型为进程的退出,则将该进程从内核态的进程列表中删除。
在上述实施方式的基础上,第三单元用于如果发生进程的CPU事件,则将该进程加入到虚拟机监控器的进程列表,根据预设时间间隔内内核进程链表的进程状态判断进程是否退出,如果退出,则将该进程从虚拟机监控器的进程中删除。
图7为本发明实施例提供的基于虚拟机监控器的隐藏进程检测装置结构示意图, 如图7所示,该装置可以包括第一模块701和第二模块702。其中,第一模块701用于比较虚拟机内部用户态程序维护的网络连接信息与虚拟机监控器维护的网络连接信息,获得隐藏的网络连接。第二模块702用于利用虚拟机监控器获取进程与端口的映射信息,根据隐藏的网络连接的网络端口,获得隐藏进程。
一种实施方式下,该第二模块702中包括处理单元,用于根据进程的文件指针所指向套接字文件,得到套接字结构体,该套接字结构体的inet_SOck数据结构中保存有端口,从而获得进程与端口的映射信息。
本领域普通技术人员可以理解实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括只读存储器 (ROM)、随机存储器(RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是以上各实施例仅用以说明本发明的技术方案,而非对其限制; 尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
权利要求
1.一种基于虚拟机监控器的隐藏进程检测方法,其特征在于,包括 分别获得用户态、内核态以及虚拟机监控器中的进程信息;比较所述用户态中的进程信息与所述内核态中的进程信息,获得用户态中的隐藏进程;比较所述内核态中的进程信息与所述虚拟机监控器中的进程信息,获得内核态中的隐藏进程。
2.根据权利要求1所述的方法,其特征在于,所述进程信息包括进程列表和进程的语义信息,则分别获得用户态、内核态以及虚拟机监控器中的进程信息的过程,包括从系统提供的用户态的应用程序编程接口 API获得用户态的进程列表; 通过截获系统调用获得内核态的进程列表; 通过截获进程的CPU事件获得虚拟机监控器的进程列表;通过读取内核为进程维护的数据结构进程描述符中的信息获得上述各进程列表中的各进程的语义信息。
3.根据权利要求2所述的方法,其特征在于,所述通过截获系统调用获得内核态的进程列表,包括如果发生系统调用,虚拟机监控器获取当前发生的系统调用号;根据所述当前发生的系统调用号判定当前发生的系统调用类型;如果当前发生的系统调用类型为进程的执行,则将该进程加入内核态的进程列表;如果当前发生的系统调用类型为进程的退出,则将该进程从内核态的进程列表中删除。
4.根据权利要求2所述的方法,其特征在于,所述通过截获进程的CPU事件获得虚拟机监控器的进程列表,包括如果发生进程的CPU事件,则将该进程加入虚拟机监控器的进程列表; 根据预设时间间隔内内核进程链表的进程状态判断进程是否退出,如果退出,则将该进程从虚拟机监控器的进程列表中删除。
5.一种基于虚拟机监控器的隐藏进程检测方法,其特征在于,包括比较虚拟机内部用户态程序维护的网络连接信息与虚拟机监控器维护的网络连接信息,获得隐藏的网络连接;利用虚拟机监控器获取进程与端口的映射信息,根据所述隐藏的网络连接的网络端口,获得隐藏进程。
6.根据权利要求5所述的方法,其特征在于,所述利用虚拟机监控器获取进程与端口的映射信息,包括根据进程的文件指针所指向套接字文件,得到套接字结构体,该套接字的套接字专有属性扩展数据结构(inet_S0Ck)中保存有端口。
7.一种基于虚拟机监控器的隐藏进程检测装置,其特征在于,包括 获得模块,用于分别获得用户态、内核态以及虚拟机监控器中的进程信息;第一比较模块,用于比较所述用户态中的进程信息与所述内核态中的进程信息,获得用户态中的隐藏进程;第二比较模块,用于比较所述内核态中的进程信息与所述虚拟机监控器中的进程信息,获得内核态中的隐藏进程。
8.根据权利要求7所述的装置,其特征在于,所述进程信息包括进程列表和进程的语义信息,则所述获得模块包括第一单元,用于从系统提供的用户态的应用程序编程接口 API获得用户态的进程列表;第二单元,用于通过截获系统调用获得内核态的进程列表; 第三单元,用于通过截获进程的CPU事件获得虚拟机监控器的进程列表; 第四单元,用于通过读取内核为进程维护的数据结构进程描述符中的信息获得上述各进程列表中的各进程的语义信息。
9.根据权利要求8所述的装置,其特征在于,所述第二单元包括 第一子单元,用于如果发生系统调用,获取当前发生的系统调用号;第二子单元,用于根据所述当前发生的系统调用号判定当前发生的系统调用类型; 第三子单元,用于如果当前发生的系统调用类型为进程的执行,则将该进程加入内核态的进程列表;如果当前发生的系统调用类型为进程的退出,则将该进程从内核态的进程列表中删除。
10.根据权利要求8所述的装置,其特征在于,所述第三单元用于如果发生进程的CPU 事件,则将该进程加入虚拟机监控器的进程列表;根据预设时间间隔内内核进程链表的进程状态判断进程是否退出,如果退出,则将该进程从虚拟机监控器的进程列表中删除。
全文摘要
本发明提供一种基于虚拟机监控器的隐藏进程检测方法和装置,该方法包括分别获得用户态、内核态以及虚拟机监控器中的进程信息;比较所述用户态中的进程信息与所述内核态中的进程信息,获得用户态中的隐藏进程;比较所述内核态中的进程信息与所述虚拟机监控器中的进程信息,获得内核态中的隐藏进程。该装置包括获得模块、第一比较模块和第二比较模块。本发明提供的方案实现了多种视图的隐藏进程检测及识别技术,为虚拟机提供更好的安全保障。
文档编号G06F21/00GK102521537SQ20111040170
公开日2012年6月27日 申请日期2011年12月6日 优先权日2011年12月6日
发明者李博, 李建欣, 沃天宇, 王颖 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1