一种虚拟机恶意行为检测方法和系统.pdf

上传人:54 文档编号:1745233 上传时间:2018-07-09 格式:PDF 页数:30 大小:2.22MB
返回 下载 相关 举报
摘要
申请专利号:

CN201510149761.8

申请日:

2015.03.31

公开号:

CN104715201A

公开日:

2015.06.17

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 21/56申请日:20150331|||公开

IPC分类号:

G06F21/56(2013.01)I

主分类号:

G06F21/56

申请人:

北京奇虎科技有限公司; 奇智软件(北京)有限公司

发明人:

罗凯

地址:

100088北京市西城区新街口外大街28号D座112室(德胜园区)

优先权:

专利代理机构:

北京市隆安律师事务所11323

代理人:

权鲜枝; 何立春

PDF下载: PDF下载
内容摘要

本发明公开了一种虚拟机恶意行为检测方法和系统。所述方法包括:监视目标虚拟机内进程的创建和退出事件,维护一个记录目标虚拟机内实际运行进程的可信进程列表,通过遍历记录有目标虚拟机中的进程信息的相关数据结构,获得记录目标虚拟机内的进程的不可信进程列表,通过比较可信进程列表和不可信进程列表,判断目标虚拟机中的隐藏进程;截获进出目标虚拟机的数据包,确定目标虚拟机中的当前活动的网络连接及其所属的进程在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。本发明的技术方案,能够全面检测虚拟机中的隐藏进程和寄生进程。

权利要求书

权利要求书
1.  一种虚拟机恶意行为检测方法,其中,该方法包括:
监视目标虚拟机内进程的创建和退出事件,维护一个记录所述目标虚拟机内实际运行进程的可信进程列表;通过遍历记录有目标虚拟机中的进程信息的相关数据结构,获得记录目标虚拟机内的进程的一个或多个不可信进程列表;通过比较可信进程列表和不可信进程列表,判断出目标虚拟机中的隐藏进程;
截获进出目标虚拟机的数据包,根据所截获的数据包,确定目标虚拟机中的当前活动的网络连接及其所属的进程;在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息;通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。

2.  如权利要求1所述的方法,其中,
在Xen内核层监视目标虚拟机内的进程创建和进程退出事件,并通知管理域Domain 0层;
在Domain 0层根据进程创建和进程退出事件的通知维护所述可信进程列表,以及获得一个或多个不可信进程列表,通过比较可信进程列表和不可信进程列表判断出目标虚拟机中的隐藏进程;
在Domain 0层的虚拟网桥处截获进出目标虚拟机的数据包;
在Domain 0层重构所述当前活动的网络连接及其所属进程的相关信息,以及通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。

3.  如权利要求1或2所述的方法,其中,所述在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息包括:
通过调用Libvmi库提供的相关接口函数以及配置文件机制,获取所述当前活动的网络连接及其所属进程的相关信息。

4.  如权利要求1或2所述的方法,其中,所述在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息包括:
获取目标虚拟机的内存中的目标进程的相关内容,具体为:使用Libvmi映射所述指定虚拟机的该目标进程对应的内存地址空间到Domain 0的内存地址空间,从而为Volatility框架提供地址空间支持;生成基于所述Volatility框架的用于对运行时的指定虚拟机内存进行分析读取的脚本;所述脚本通过 映射后的Domain 0的内存地址空间获取目标进程的相关内容。

5.  如权利要求2所述的方法,其中,实现Xen内核层和Domain 0层之间的通信包括:
基于Xen内核提供的__HYPERVISOR_domctl超级调用以及Xen内核为每个操作定义用于参数传递的数据结构的机制,在Xen内核中添加实现Domain 0和Xen内核之间关于进程创建和进程退出事件的通信操作以及相应的参数传递数据结构;
Xen内核层和Domain 0层基于添加的所述通信操作以及相应的参数传递数据结构进行通信。

6.  如权利要求2所述的方法,其中,该方法进一步包括:设置消息队列;
截获进出目标虚拟机的数据包并进行处理后,将处理结果数据放入所述消息队列;
从所述消息队列提取数据,根据提取的数据进行处理,包括:确定目标虚拟机中的当前活动的网络连接及其所属的进程,在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息,以及通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。

7.  如权利要求6所述的方法,其中,
所述截获进出目标虚拟机的数据包并进行处理后,将处理结果数据放入所述消息队列包括:由第一组生产者协程截获进出目标虚拟机的数据包,提取连接摘要信息放入第一任务队列中;由第一组消费者协程从第一任务队列中获取链接摘要信息,完成相关处理后,将处理结果数据发送到所述消息队列中;
和/或,
所述从所述消息队列提取数据,根据提取的数据进行处理包括:由第二组生产者协程监视所述消息队列,从中获取数据放入第二任务队列中;由第二组消费者协程从第二任务队列中获取数据并进行处理。

8.  如权利要求1或2所述的方法,其中,所述在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息,通过分析重构的所述相 关信息确定目标虚拟机中的寄生进程包括:
在所述目标虚拟机的外部重构所述目标虚拟机中的进程所持有的当前活动的网络连接的相关信息;对于当前活动的一个网络连接,通过将其相关信息与对应的安全检测规则进行匹配判断该网络连接是否为异常连接;如果判断出一个网络连接为异常连接,则确定该网络连接所属的进程是被注入恶意代码或被注入恶意动态链接库DLL的寄生进程;
和/或,
对于每个目标进程,在所述目标虚拟机外部重构该目标进程在所述目标虚拟机内部的进程管理结构;通过分析重构的进程管理结构,确定该目标进程是否为被注入恶意代码或被注入恶意动态链接库DLL的寄生进程。

9.  一种虚拟机恶意行为检测系统,其中,该系统包括:
进程行为检测模块,适于监视目标虚拟机内进程的创建和退出事件,并通知安全监测模块;
安全监测模块,适于根据进程创建和进程退出事件的通知维护一个记录所述目标虚拟机内实际运行进程的可信进程列表;通过遍历记录有目标虚拟机中的进程信息的相关数据结构,获得记录目标虚拟机内的进程的一个或多个不可信进程列表;以及通过比较可信进程列表和不可信进程列表,判断出目标虚拟机中的隐藏进程;
嗅探器,适于截获进出目标虚拟机的数据包,根据所截获的数据包,确定目标虚拟机中的当前活动的网络连接及其所属的进程;
虚拟机自省模块,适于在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息;
安全监测模块,进一步适于通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。

10.  如权利要求9所述的系统,其中,
所述进程行为检测模块位于Xen内核层;
所述安全监测模块位于管理域Domain 0层;
所述嗅探器位于Domain 0层的虚拟网桥处;
所述虚拟机自省模块位于Domain 0层;
所述安全检测模块包括:隐藏进程检测模块和寄生进程检测模块;
隐藏进程检测模块,适于根据进程创建和进程退出事件的通知维护所述可信进程列表,以及获得一个或多个不可信进程列表,通过比较可信进程列表和不可信进程列表判断出目标虚拟机中的隐藏进程;
寄生进程检测模块,适于通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。

说明书

说明书一种虚拟机恶意行为检测方法和系统
技术领域
本发明涉及计算机技术领域,具体涉及一种虚拟机恶意行为检测方法和系统。
背景技术
虚拟化技术实现了计算、存储、网络等IT资源的虚拟化,是云计算行业快速发展的基础。虚拟机(Virtual Machine)是云环境对外提供的一种最基本的服务形式,云服务提供商向个人、组织用户提供单个虚拟机或者多个虚拟机组成的虚拟网络,以满足用户对易维护、高可用性的弹性云服务的需求。在虚拟化环境中,服务以虚拟机的形式提供给用户使用,云服务提供商只能利用Libvirt等接口从虚拟机外部获得目标虚拟机的CPU、内存、磁盘、网络等资源分配和使用的信息,并不能监视到虚拟机中运行的进程行为的粒度,一旦虚拟机被攻击者植入的恶意软件控制,其对同一虚拟网络中虚拟机的安全乃至云平台本身的安全与稳定都是巨大的威胁,因此对虚拟机运行时的安全监测成为云服务提供商和用户的共同需求。目前虚拟机恶意行为监测方面的技术中存在如下问题:
1.许多安全监测工具需要依赖虚拟机内部的代理程序解决语义鸿沟问题,这在一定程度上破坏了虚拟化架构中的隔离性,并且也无法实现安全工具对虚拟机的透明性;
2.目前对虚拟机恶意行为监测更多关注的是恶意软件隐藏的特性,对已经成为主流的无进程、无端口、无文件的恶意软件行为监测效果有限;
3.缺少对恶意软件的网络和主机内部的行为方面综合地考虑,对网络层面异常行为的检测大多是在主机网络流粒度上进行的,粒度较粗。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种虚拟机恶意行为检测方法和系统。
依据本发明的一个方面,提供了一种虚拟机恶意行为检测方法,其中,该方法包括:
监视目标虚拟机内进程的创建和退出事件,维护一个记录所述目标虚拟机内实际运行进程的可信进程列表;通过遍历记录有目标虚拟机中的进程信息的相关数据结构,获得记录目标虚拟机内的进程的一个或多个不可信进程列表;通过比较可信进程列表和不可信进程列表,判断出目标虚拟机中的隐 藏进程;
截获进出目标虚拟机的数据包,根据所截获的数据包,确定目标虚拟机中的当前活动的网络连接及其所属的进程;在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息;通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
可选地,
在Xen内核层监视目标虚拟机内的进程创建和进程退出事件,并通知管理域Domain 0层;在Domain 0层根据进程创建和进程退出事件的通知维护所述可信进程列表,以及获得一个或多个不可信进程列表,通过比较可信进程列表和不可信进程列表判断出目标虚拟机中的隐藏进程;在Domain 0层的虚拟网桥处截获进出目标虚拟机的数据包;在Domain 0层重构所述当前活动的网络连接及其所属进程的相关信息,以及通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
可选地,所述在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息包括:通过调用Libvmi库提供的相关接口函数以及配置文件机制,获取所述当前活动的网络连接及其所属进程的相关信息。
可选地,所述在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息包括:获取目标虚拟机的内存中的目标进程的相关内容,具体为:使用Libvmi映射所述指定虚拟机的该目标进程对应的内存地址空间到Domain 0的内存地址空间,从而为Volatility框架提供地址空间支持;生成基于所述Volatility框架的用于对运行时的指定虚拟机内存进行分析读取的脚本;所述脚本通过映射后的Domain 0的内存地址空间获取目标进程的相关内容。
可选地,实现Xen内核层和Domain 0层之间的通信包括:基于Xen内核提供的__HYPERVISOR_domctl超级调用以及Xen内核为每个操作定义用于参数传递的数据结构的机制,在Xen内核中添加实现Domain 0和Xen内核之间关于进程创建和进程退出事件的通信操作以及相应的参数传递数据结构;Xen内核层和Domain 0层基于添加的所述通信操作以及相应的参数传递数据结构进行通信。
可选地,该方法进一步包括:设置消息队列;截获进出目标虚拟机的数据包并进行处理后,将处理结果数据放入所述消息队列;
从所述消息队列提取数据,根据提取的数据进行处理,包括:确定目标虚拟机中的当前活动的网络连接及其所属的进程,在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息,以及通过分析重构的所 述相关信息确定目标虚拟机中的寄生进程。
可选地,
所述截获进出目标虚拟机的数据包并进行处理后,将处理结果数据放入所述消息队列包括:由第一组生产者协程截获进出目标虚拟机的数据包,提取连接摘要信息放入第一任务队列中;由第一组消费者协程从第一任务队列中获取链接摘要信息,完成相关处理后,将处理结果数据发送到所述消息队列中;和/或,所述从所述消息队列提取数据,根据提取的数据进行处理包括:由第二组生产者协程监视所述消息队列,从中获取数据放入第二任务队列中;由第二组消费者协程从第二任务队列中获取数据并进行处理。
可选地,所述在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息,通过分析重构的所述相关信息确定目标虚拟机中的寄生进程包括:
在所述目标虚拟机的外部重构所述目标虚拟机中的进程所持有的当前活动的网络连接的相关信息;对于当前活动的一个网络连接,通过将其相关信息与对应的安全检测规则进行匹配判断该网络连接是否为异常连接;如果判断出一个网络连接为异常连接,则确定该网络连接所属的进程是被注入恶意代码或被注入恶意动态链接库DLL的寄生进程;
和/或,
对于每个目标进程,在所述目标虚拟机外部重构该目标进程在所述目标虚拟机内部的进程管理结构;通过分析重构的进程管理结构,确定该目标进程是否为被注入恶意代码或被注入恶意动态链接库DLL的寄生进程。
依据本发明的另一个方面,提供了一种虚拟机恶意行为检测系统,其中,该系统包括:
进程行为检测模块,适于监视目标虚拟机内进程的创建和退出事件,并通知安全监测模块;
安全监测模块,适于根据进程创建和进程退出事件的通知维护一个记录所述目标虚拟机内实际运行进程的可信进程列表;通过遍历记录有目标虚拟机中的进程信息的相关数据结构,获得记录目标虚拟机内的进程的一个或多个不可信进程列表;以及通过比较可信进程列表和不可信进程列表,判断出目标虚拟机中的隐藏进程;
嗅探器,适于截获进出目标虚拟机的数据包,根据所截获的数据包,确定目标虚拟机中的当前活动的网络连接及其所属的进程;
虚拟机自省模块,适于在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息;
安全监测模块,进一步适于通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
可选地,所述进程行为检测模块位于Xen内核层;所述安全监测模块位于管理域Domain 0层;所述嗅探器位于Domain 0层的虚拟网桥处;所述虚拟机自省模块位于Domain 0层;所述安全检测模块包括:隐藏进程检测模块和寄生进程检测模块;隐藏进程检测模块,适于根据进程创建和进程退出事件的通知维护所述可信进程列表,以及获得一个或多个不可信进程列表,通过比较可信进程列表和不可信进程列表判断出目标虚拟机中的隐藏进程;寄生进程检测模块,适于通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
可选地,所述虚拟机自省模块,适于通过调用Libvmi库提供的相关接口函数以及配置文件机制,获取所述当前活动的网络连接及其所属进程的相关信息。
可选地,所述虚拟机自省模块,适于获取目标虚拟机的内存中的目标进程的相关内容,具体为:使用Libvmi映射所述指定虚拟机的该目标进程对应的内存地址空间到Domain 0的内存地址空间,从而为Volatility框架提供地址空间支持;生成基于所述Volatility框架的用于对运行时的指定虚拟机内存进行分析读取的脚本,由所述脚本通过映射后的Domain 0的内存地址空间获取目标进程的相关内容。
可选地,基于Xen内核提供的__HYPERVISOR_domctl超级调用以及Xen内核为每个操作定义用于参数传递的数据结构的机制,在Xen内核中添加实现Domain 0和Xen内核之间关于进程创建和进程退出事件的通信操作以及相应的参数传递数据结构;
位于Xen内核层的进程行为检测模块和位于Domain 0层的安全监测模块,基于添加的所述通信操作以及相应的参数传递数据结构进行通信。
可选地,该系统进一步包括:消息队列模块,适于保存设置在嗅探器和寄生进程检测模块之间的消息队列;嗅探器截获进出目标虚拟机的数据包并进行处理,将处理结果数据放入所述消息队列;寄生进程检测模块从所述消息队列提取数据并进行处理。
可选地,嗅探器的生产者协程截获进出目标虚拟机的数据包,提取连接摘要信息放入嗅探器的任务队列中;嗅探器的消费者协程从嗅探器的任务队列中获取链接摘要信息,完成相关处理后,将处理结果数据发送到所述消息队列中;和/或,寄生进程检测模块中的生产者协程监视所述消息队列,从中获取数据放入寄生进程检测模块的任务队列中;寄生进程检测模块中的消费 者协程从寄生进程检测模块的任务队列中获取任务并处理。
可选地,所述安全监测模块,进一步适于,
在所述目标虚拟机的外部重构所述目标虚拟机中的进程所持有的当前活动的网络连接的相关信息;对于当前活动的一个网络连接,通过将其相关信息与对应的安全检测规则进行匹配判断该网络连接是否为异常连接;如果判断出一个网络连接为异常连接,则确定该网络连接所属的进程是被注入恶意代码或被注入恶意动态链接库DLL的寄生进程;
和/或,
对于每个目标进程,在所述目标虚拟机外部重构该目标进程在所述目标虚拟机内部的进程管理结构;通过分析重构的进程管理结构,确定该目标进程是否为被注入恶意代码或被注入恶意动态链接库DLL的寄生进程。
根据本发明的这种监视目标虚拟机内进程的创建和退出事件,维护一个记录所述目标虚拟机内实际运行进程的可信进程列表,通过遍历记录有目标虚拟机中的进程信息的相关数据结构,获得记录目标虚拟机内的进程的一个或多个不可信进程列表,通过比较可信进程列表和不可信进程列表,判断出目标虚拟机中的隐藏进程;以及截获进出目标虚拟机的数据包,根据所截获的数据包,确定目标虚拟机中的当前活动的网络连接及其所属的进程在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息通过分析重构的所述相关信息确定目标虚拟机中的寄生进程的技术方案,能够全面检测虚拟机中的隐藏进程和寄生进程,且不依赖于虚拟机中的代理程序,属于外部检测模式,不会对虚拟机产生性能上的影响,具有较好的透明性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种虚拟机恶意行为检测方法的流程图;
图2示出了根据本发明一个实施例的一种虚拟机恶意行为检测方案的框架图;
图3示出了根据本发明一个实施例的一种虚拟机恶意行为检测方案的设 计结构图;
图4示出了根据本发明一个实施例中的重构过程的顺序图;
图5示出了根据本发明一个实施例的Domain 0和Xen内核间的通信顺序图;
图6示出了根据本发明一个实施例的截获数据包的传递过程示意图;
图7示出了根据本发明一个实施例的进程级别网络行为监测的实现类图示意图;
图8示出了根据本发明一个实施例的注入行为监测的实现类图示意图;
图9示出了根据本发明一个实施例的一种虚拟机恶意行为检测系统的结构图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的一种虚拟机恶意行为检测方法的流程图。如图1所示,该方法包括:
步骤S110,监视目标虚拟机内进程的创建和退出事件,维护一个记录所述目标虚拟机内实际运行进程的可信进程列表;通过遍历记录有目标虚拟机中的进程信息的相关数据结构,获得记录目标虚拟机内的进程的一个或多个不可信进程列表;通过比较可信进程列表和不可信进程列表,判断出目标虚拟机中的隐藏进程;
步骤S120,截获进出目标虚拟机的数据包,根据所截获的数据包,确定目标虚拟机中的当前活动的网络连接及其所属的进程;在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息;通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
图1所示的方法,能够全面检测虚拟机中的隐藏进程和寄生进程,且不依赖于虚拟机中的代理程序,属于外部检测模式,不会对虚拟机产生性能上的影响,具有较好的透明性。
在本发明的一个实施例中,在图1所示的方法中,在Xen内核层监视目标虚拟机内的进程创建和进程退出事件,并通知管理域Domain 0层;在Domain 0层根据进程创建和进程退出事件的通知维护所述可信进程列表,以及获得一个或多个不可信进程列表,通过比较可信进程列表和不可信进程列表判断出目标虚拟机中的隐藏进程;在Domain 0层的虚拟网桥处截获进出目 标虚拟机的数据包;在Domain 0层重构所述当前活动的网络连接及其所属进程的相关信息,以及通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
Xen运行在硬件和虚拟机操作系统之间,统一管理物理机CPU、内存及I/O设备等资源,将其构造为虚拟资源池,并对外提供虚拟基础设施服务,即虚拟机,这些虚拟机共享硬件资源。Domain 0是管理域,具有很高的特权。
图2示出了根据本发明一个实施例的一种虚拟机恶意行为检测方案的框架图。图3示出了根据本发明一个实施例的一种虚拟机恶意行为检测方案的设计结构图。如图2和图3所示,在Xen虚拟化环境中实现虚拟机恶意行为监测技术,基本设计方案由控制模块、虚拟机自省模块、安全监测模块、嗅探器以及进程行为监测模块组成。各个模块的功能以及之间的联系如下:
进程行为监测模块:位于Xen内核层,负责截获和传递虚拟机内进程的创建和退出行为,维护Xen内核和Domain 0间用于参数传递的共享内存,并将事件发生的消息传送给控制模块;
控制模块:位于Domain 0,对外提供控制该监测系统的接口,当收到监视请求时完成创建Domain 0和Xen内核共享内存、事件通道以及在虚拟网桥处设置网络包嗅探器等准备性的工作,并将该请求传递给安全监测模块;
安全监测模块:从控制模块处获得对某虚拟机的监视请求,从嗅探器处获得进出该虚拟机的流量信息,根据既定策略对该流量所属进程进行安全检查,此时需要利用到虚拟机自省模块解决语义鸿沟问题;
虚拟机自省模块:该模块解决的是在虚拟机外部重构内部进程视图的问题,为安全监测模块提供访问虚拟机内管理结构以及获取系统API地址的接口。
本发明提出的虚拟机恶意行为监测系统工作流程由Domain 0层、Xen内核层的模块协调完成。当系统运行时,部署在虚拟网桥处的网络嗅探器截获到进出某虚拟机的数据包,嗅探器经过处理将(src_ip,src_port,dst_ip,dst_ip)四元组(表示源ip、源端口、目的ip和目的端口)发送给安全监测模块,安全监测模块会执行下面的安全状态的检查:
1)安全监测模块在运行时会实时监视目标虚拟机内各个进程的创建和退出行为,保存虚拟机内部实际运行的可信进程列表,通过和其它途径获得的进程列表比较确定是否有隐藏进程存在;
2)根据既定的安全策略,安全监测模块检测产生网络行为进程是否为被恶意软件注入的寄生进程。
虚拟机自省模块是从虚拟机外部实现监测功能的基础,该模块为上层的 寄生进程检测模块以及隐藏进程检测模块提供获取虚拟机内部管理结构与操作系统指定API地址的接口。
在本发明的一个实施例中,图1所示方法的步骤S120中所述在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息包括:通过调用Libvmi库提供的相关接口函数以及配置文件机制,获取所述当前活动的网络连接及其所属进程的相关信息。
Libvmi提供了访问虚拟机中指定地址空间的一些基本接口,常用的接口函数及其功能,如表1所示:
接口名称接口功能vmi_init创建libvmi连接,初始化相关数据结构vmi_destroy关闭libvmi连接,释放相关资源vmi_get_offset从配置文件libvmi.conf中获得特定数据结构成员变量的偏移量vmi_read_addr_va读取目标虚拟机某进程指定地址处的内容vmi_read_addr_pa读取目标虚拟机指定物理地址中的内容vmi_read_str_va读取目标虚拟机某进程指定地址处的字符串windows_symbol_to_address将windows中导出的变量、函数名转换为在内存中的地址
表1
Libvmi使用配置文件的方式为指定虚拟机定义一组变量名及其对应的值,这些变量十分灵活,可以是调试文件的位置、操作系统类型以及一些重要的数据结构偏移量等,我们以目标虚拟机操作系统类型为Windows XP SP3系统以及windows 7SP1系统版本为例说明该配置文件的内容,如表2所示:

表2
其中,win_pdbase对应于_KPROCESS数据结构的DirectoryTableBase变量的偏移量。win_pid对应于_EPROCESS数据结构中的UniqueProcessId变量的偏移量,win_tasks对应于_EPROCESS数据结构中的ActiveProcessLinks变量的偏移量,该变量指向由_EPROCESS结构组成的双向链表;win_pname 对应于_EPROCESS数据结构中的ImageFileName成员变量的偏移量;win_peb对应于_EPROCESS数据结构中的Peb成员变量的偏移。
需要利用上述的接口函数以及配置文件机制实现语义重建的功能,下面以重构EPROCESS链表为例说明语义重建功能的实现原理:
由EPROCESS数据结构组成的双向链表维护着系统中运行的进程相关的许多信息,因此重构出该数据结构对解决语义鸿沟问题有重要的意义。为了便于在Domain 0维护虚拟机中的进程的必要信息,实现了一个表示进程信息的结构体ProcNode,包含了进程的相关信息,比如进程的id、EPROCESS地址、页目录地址信息等,具体内容如表3所示所示:

表3
图4示出了本发明一个实施例中的重构过程的顺序图。参见4,可以看到虚拟机自省模块向外部提供refresh_proc_list接口获得进程的列表信息,该功能实现过程中主要调用到libvmi库提供的vmi_get_offset,vmi_read_addr_va等接口。
在本发明的另一个实施例中,图1所示方法的步骤S120所述在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息包括:获取目标虚拟机的内存中的目标进程的相关内容,具体为:使用Libvmi映射所述指定虚拟机的该目标进程对应的内存地址空间到Domain 0的内存地址空间,从而为Volatility框架提供地址空间支持;生成基于所述Volatility框架的用于对运行时的指定虚拟机内存进行分析读取的脚本;所述脚本通过映射后的Domain 0的内存地址空间获取目标进程的相关内容。
Volatility是内存取证领域的一个著名的开源框架,支持对Linux、Mac、Windows等系统的内存转储文件的分析和处理,其提供的插件机制简化了利用该框架进行二次开发的流程,本发明的实施例中基于该框架实现了对虚拟机运行时内存数据的语义重构。为了使Volatility支持对运行时虚拟机内存的分析,本发明的实施例中利用Libvmi为Volatility提供了一个兼容的地址空间。Libvmi是虚拟化社区向研究人员提供的一种开源的虚拟机自省工具,基 于该工具也可以实现对指定虚拟机地址空间的读写以及对特定事件的监视,并进一步实现对虚拟机内进程管理结构的重构功能,然而实现这一功能需要对不同类型操作系统的系统管理结构进行逆向分析,确定目标变量在上层数据结构的偏移量,缺乏通用性,因此本发明只用到Libvmi映射指定虚拟机地址空间到Domain 0中为Volatility框架提供地址空间的功能。
从图2可以看出,本发明实施例中提出的隐藏进程的检测和寄生进程的检测实现方法上最大的不同在于隐藏进程检测需要Domain0和Xen内核部分的配合来实现,因此需要实现两者的事件通知和消息通信机制。
在本发明的实施例中,实现Xen内核层和Domain 0层之间的通信包括:基于Xen内核提供的__HYPERVISOR_domctl超级调用以及Xen内核为每个操作定义用于参数传递的数据结构的机制,在Xen内核中添加实现Domain 0和Xen内核之间关于进程创建和进程退出事件的通信操作以及相应的参数传递数据结构;则Xen内核层和Domain 0层基于添加的所述通信操作以及相应的参数传递数据结构进行通信。
具体来说为了实现Domain 0对Xen内核部分的进程行为检测模块的控制,使用了Xen内核提供的__HYPERVISOR_domctl超级调用,该超级调用为管理域提供了管理虚拟机的接口,包括虚拟机创建(对应参数为XEN_DOMCTL_createdomain)、虚拟机销毁(对应参数为XEN_DOMCTL_destroydomain)等操作均通过该超级调用完成,Xen内核为每一个操作均定义了相应的操作编号以及用于参数传递的数据结构,基于该机制,我们在Xen内核中添加了如下的新的操作类型以及参数传递结构:


dom_xen_comm数据结构在Domain 0和Xen内核通信过程中起到非常重要的作用,是相互通信的中间结构。
图5示出了根据本发明一个实施例的Domain 0和Xen内核间的通信顺序图。如图5所示,请求监视某虚拟机的进程创建、退出事件,Xen内核向Domain 0进行事件通知和消息传递。
在Domain 0建立并维护进程的可信列表,Domain 0需要接收Xen内核传递的进程创建/退出的通知信息,为此定义了通信所用的数据结构如下:

使用前述介绍的方法可以建立起Domain 0和Xen内核用于参数传递的内存页,struct nt_pro_info即作为传递所使用的数据结构,可以看到,在该数据结构中,定义了事件的类型、事件对应的虚拟机ID以及作为进程标识符的页目录地址,Domain 0的事件处理部分根据事件的类型对保存的进程链表进行相应的添加、删除操作。
在本发明的一个实施例中,隐藏进程的检测方法包括:截获指定虚拟机内的进程退出事件,以及截获所述指定虚拟机内的进程创建事件;根据截获的所述指定虚拟机内的进程退出和进程创建事件,维护一个记录所述指定虚拟机内真实运行进程的可信进程列表;通过遍历记录有所述指定虚拟机中的进程信息的相关数据结构,获得记录所述指定虚拟机内的进程的一个或多个不可信进程列表;通过比较可信进程列表和不可信进程列表,判断出所述指 定虚拟机中的隐藏进程。
其中,所述通过遍历记录有所述指定虚拟机中的进程信息的相关数据结构,获得记录所述指定虚拟机内的进程的一个或多个不可信进程列表包括:通过遍历内核地址空间中的_EPROCESS数据结构、PspCidTable句柄表或者csrss.exe句柄表中的一个或多个,相应获得所述虚拟机内的一组或多组进程信息;根据所获得的一组或多组进程信息,生成相应的一个或多个不可信进程列表。
其中,所述截获指定虚拟机内的进程退出事件包括:获取进程退出关键位置地址;其中,系统对进程退出的处理在内核中都会调用NtTerminateProcess服务例程,NtTerminateProcess服务例程在完成关闭进程操作后会将退出进程的_EPROCESS管理结构的地址在进程管理结构组成的链表中解链并释放到指定地址,将该指定地址作为进程退出关键位置地址;监视进程退出关键位置地址执行事件,当该地址的代码被调用时表明一个进程将要结束,从该地址获得退出进程的_EPROCESS管理结构的地址。
其中,获取进程退出关键位置地址包括:获取NtTerminateProcess服务例程的地址,根据根据NtTerminateProcess服务例程的地址获取进程退出关键位置地址;所述获取NtTerminateProcess服务例程的地址包括:获得KeServiceDescriptorTable数据结构的地址;从KeServiceDescriptorTable数据结构中获得SSDT表的地址以及确定NtTerminateProcess服务例程在SSDT表中的偏移量;在SSDT表的指定偏移量处获得NtTerminateProcess服务例程的地址。
其中,所述根据根据NtTerminateProcess服务例程的地址获取进程退出关键位置地址包括:获取相对于NtTerminateProcess服务例程的地址偏移0x13c的地址,该地址即为ecx寄存器的地址。
其中,所述监视进程退出关键位置地址执行事件包括:当所述指定虚拟机发生虚拟机进入VM_ENTRY事件时:将该指定虚拟机的VCPU中的指定调试地址寄存器中地址设置为进程退出关键位置地址;置位该指定虚拟机的VCPU中的调试控制寄存器中的与所述指定调试地址寄存器对应执行控制位;置位该指定虚拟机的虚拟机控制域VMCS数据结构中的TRAP_debug控制位;当所述指定虚拟机发生虚拟机退出VM_EXIT事件时:如果是调试异常事件则判断产生异常的地址是否为进程退出关键位置的地址,是则读取进程退出关键位置地址中保存的退出进程的_EPROCESS管理结构的地址。
其中,所述截获所述指定虚拟机内的进程创建事件包括:维护一个关于所述指定虚拟机的当前运行进程列表;监视所述指定虚拟机内部发生的进程 切换事件,当监视到该事件时获取所述指定虚拟机的VCPU的CR3寄存器中的值;所述CR3寄存器中的值为切换后进程的相关信息;判断获取的所述CR3寄存器中的值是否存在于所述当前运行进程列表,如果不存在则说明创建了一个进程,将获取所述CR3寄存器中的值加入所述当前运行进程列表中;当截获所述指定虚拟中的进程退出事件时,从所述当前运行进程列表中删除该退出的进程。
其中,所述监视所述指定虚拟机内部发生的进程切换事件包括:设置所述指定虚拟机的虚拟机控制域VMCS数据结构中的CPU_BASED_CR3_LOAD_EXITING控制位;该控制位位于VMCS数据结构的针对处理器事件的虚拟机执行控制域,决定当虚拟机执行Move to CR3指令即进程切换时是否发生虚拟机退出VM_EXIT事件。
其中,所述维护一个记录所述指定虚拟机内真实运行进程的可信进程列表包括:当截获所述指定虚拟机内的一个进程创建事件时,判断该进程是否在可信进程列表中,如果不在则将该进程添加到可信进程列表中;当截获所述指定虚拟机内的一个进程退出事件时,将该进程从可信进程列表中删除。
在本发明的一个实施例中,在检测虚拟机中的寄生进程检测方案中,基于Volatility实现虚拟机的自省。基于Libvmi的虚拟机自省方案实现了虚拟机外部对内部进程地址空间指定位置数据的访问,然而这种方案需要对不同的操作系统进行逆向分析以确定目标数据对象的偏移量,十分不便;而Volatility作为成熟的内存取证分析框架,已经对各个操作系统类型提供了通用的支持,该框架基于Python实现,其提供的地址空间机制使它具有良好的扩展性。本发明使用Libvmi为Volatility提供地址空间使用的接口,将虚拟机的运行时内存抽象Volatility的输入文件。实现扩展Volatility支持的地址空间是通过继承BaseAddressSpace类并实现read、zread、get_available_addresses等接口来完成的。
本发明实施例中提出的寄生进程检测方案是由进程的网络行为驱动的,即虚拟机中指定的关键进程产生网络行为时才会对产生网络流量的进程进行寄生情况的检测。当虚拟机产生越来越多的网络流量时,采用“数据包、处理、下一个数据包”的同步处理模式会导致大量的丢包问题,并且会因为处理上一个数据包的延迟过长导致重构下一个数据包所属的进程信息失败的问题。对此本发明的实施例中提出了如下解决方案:
设置消息队列;截获进出目标虚拟机的数据包并进行处理后,将处理结果数据放入所述消息队列;从所述消息队列提取数据,根据提取的数据进行处理,包括:确定目标虚拟机中的当前活动的网络连接及其所属的进程,在 目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息,以及通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
其中,所述截获进出目标虚拟机的数据包并进行处理后,将处理结果数据放入所述消息队列包括:由第一组生产者协程截获进出目标虚拟机的数据包,提取连接摘要信息放入第一任务队列中;由第一组消费者协程从第一任务队列中获取链接摘要信息,完成相关处理后,将处理结果数据发送到所述消息队列中。所述从所述消息队列提取数据,根据提取的数据进行处理包括:由第二组生产者协程监视所述消息队列,从中获取数据放入第二任务队列中;由第二组消费者协程从第二任务队列中获取数据并进行处理。
图6示出了根据本发明一个实施例的截获数据包的传递过程示意图。基于图6可以有两种数据包传递机制:
(1)在嗅探器只保留截获数据包,提取连接摘要、检测进程异常网络连接三个基础功能,并且引入了异步事件处理中轻量级的协程(Coroutine)来提高处理的效率,生产者协程从虚拟网桥处截获目标虚拟机的网络流量,提取连接摘要信息并放入嗅探器中的任务队列中,消费者协程从任务队列中获取连接摘要,完成关联虚拟机内进程并检测连接合法性的工作,并将检测结果或者进一步检测的任务请求发送到指定的RabbitMQ消息队列中;为了及时提取到像UDP连接这样的生存周期较短的连接所属进程,本模块使用了优先队列机制保证该类型的连接优先获得处理;
(2)嗅探器和寄生进程检测模块之间是松耦合的关系,两者通过RabbitMQ消息队列机制传递需要检查的网络连接所属进程的安全状态,嗅探器将网络行为监测的结果或者待检测注入行为的进程信息通过消息队列传至寄生进程检测模块。为了提高寄生进程处理的效率,在寄生进程检测模块中同样使用了协程技术,生产者协程监视指定的RabbitMQ队列,获得新的任务并放入本模块的任务队列中,消费者协程从任务队列中获得任务并处理。
在本发明的一个实施例中,图1所示方法中所述在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息,通过分析重构的所述相关信息确定目标虚拟机中的寄生进程包括如下两种方法中的一种或两种:
第一种寄生进程检测方法:在所述目标虚拟机的外部重构所述目标虚拟机中的进程所持有的当前活动的网络连接的相关信息;对于当前活动的一个网络连接,通过将其相关信息与对应的安全检测规则进行匹配判断该网络连接是否为异常连接;如果判断出一个网络连接为异常连接,则确定该网络连接所属的进程是被注入恶意代码或被注入恶意动态链接库DLL的寄生进程;
第二种寄生进程方法:对于每个目标进程,在所述目标虚拟机外部重构 该目标进程在所述目标虚拟机内部的进程管理结构;通过分析重构的进程管理结构,确定该目标进程是否为被注入恶意代码或被注入恶意动态链接库DLL的寄生进程。
在本发明的一个实施例中,所述的第一种寄生进程检测方法为进程级别的网络行为检测,由NetAnomalyDetector类来实现。图7示出了根据本发明一个实施例的进程级别网络行为监测的实现类图示意图。参见图7,该类同样以Dlllist为基类以调用Volatility框架中的接口,提供了解析访问控制规则、监视指定虚拟机、重构进程的TCP/UDP连接信息,检测进程发出的数据包是否满足访问控制规则等功能接口。
在本发明的一个实施例中,所述的第二种的寄生进程检测方法为进程级别的注入行为检测。图8示出了根据本发明一个实施例的注入行为监测的实现类图示意图。如8所示,注入代码区块检测功能主要在InjectionDetector类中实现,为了使用Volatility框架中提供的接口,继承了DllList类,并调用了_EPROCESS类中获得DLL列表的三个函数,基于此实现了对DLL注入以及代码注入行为检测的函数。
在本发明的一个实施例中,所述的第一种寄生进程检测方法具体包括:截获进出指定虚拟机的数据包;根据所截获的数据包,确定指定虚拟机中的当前活动的网络连接;在所述指定虚拟机的外部重构所述指定虚拟机中的进程所持有的当前活动的网络连接的相关信息;对于当前活动的一个网络连接,通过将其相关信息与对应的安全检测规则进行匹配判断该网络连接是否为异常连接;如果判断出一个网络连接为异常连接,则确定该网络连接所属的进程是被注入恶意代码或被注入恶意动态链接库DLL的寄生进程。
其中,在所述指定虚拟机的外部重构所述指定虚拟机中的进程所持有的当前活动的网络连接的相关信息包括:使用Libvmi映射所述指定虚拟机的该目标进程对应的内存地址空间到Domain 0的内存地址空间,从而为Volatility框架提供地址空间支持;生成基于所述Volatility框架的用于对运行时的指定虚拟机内存进行分析读取的脚本;所述脚本通过映射后的Domain 0的内存地址空间获取该目标进程的相关内容。
其中,所述在所述指定虚拟机的外部重构所述指定虚拟机中的进程所持有的当前活动的网络连接的相关信息包括:查找到Windows系统中的保存tcpip.sys模块信息的节点;从所述保存tcpip.sys模块信息的节点中获得_AddrObjTable以及_TCBTable的地址;遍历AddrObjTable以及_TCBTable指向的单向链表,获得所述指定虚拟机中的进程所持有的当前活动的网络连接的相关信息。
其中,所述查找到Windows系统中的保存tcpip.sys模块信息的节点包括:从内核模式下的FS寄存器获得_KPCR数据结构的指针;从_KPCR数据结构中的KdVersionBlock变量中读取_DBGKD_GET_VERSION64数据结构的指针;从_DBGKD_GET_VERSION64数据结构的PsloadedModuleList成员变量中获得保存模块信息的双向链表头节点地址;遍历PsloadedModuleList指向的双向链表,找到保存tcpip.sys模块信息的节点。
其中,所述根据所截获的数据包,确定指定虚拟机中的当前活动的网络连接,以及在所述指定虚拟机的外部重构所述指定虚拟机中的进程所持有的当前活动的网络连接的相关信息包括:设立记录队列和进程队列;其中,记录队列维护所述指定虚拟机的当前活动的网络连接信息,包括:网络连接的标识、对应的进程、处理时间以及安全检测结果;所述进程队列保存所述指定虚拟机的进程列表。
其中,对于每个截获的数据包,执行如下流程:判断记录队列中是否已存在该数据包对应的当前活动的网络连接信息,如果存在则按照已有的安全检测结果进行相应处理,如果不存在则重构所述指定虚拟机中的进程持有的该当前活动的网络连接的相关信息;根据重构的该当前活动的网络连接的相关信息确定其所属的进程,并判断进程队列中是否存在该进程,如果不存在则将该进程更新到进程队列中,如果存在则根据该进程对应的安全检测规则判断该当前活动的网络连接是否为异常连接;根据安全检测结果进行相应的处理;将该当前活动的网络连接、对应的进程、处理时间以及安全检测结果更新到记录队列中。
其中,所述对于当前活动的一个网络连接,通过将其相关信息与对应的安全检测规则进行匹配判断该网络连接是否为异常连接包括:对于访问类型单一的应用程序的进程,提取该应用程序固有的可能执行的网络行为生成合法行为规则;将当前活动的网络连接的相关信息与其所属进程对应合法行为规则进行匹配,如果不存在匹配项,则判断为异常连接。
其中,对于当前活动的一个网络连接,通过将其相关信息与对应的安全检测规则进行匹配判断该网络连接是否为异常连接包括:预先设置包含一个或多个匹配项的默认拒绝规则,以及预先设置包含一个或多个匹配项的默认允许规则;对于当前活动的一个网络连接,先根据其所属进程判断采用默认拒绝规则还是采用默认允许规则;如果采用默认拒绝规则,则将该当前活动的网络连接的相关信息与定义的额外允许规则中的匹配项进行匹配,如果存在匹配的项,则确定该网络连接为正常连接,如果不存在匹配的项,则确定 该网络连接为异常连接;如果采用默认允许规则,则将该当前活动的网络连接的相关信息与定义的额外拒绝规则的匹配项进行匹配,如果存在匹配的项,则确定该网络连接为异常连接,如果不存在匹配的项,则确定该网络连接为正常连接。
在本发明的一个实施例中,所述的第二种寄生进程检测方法具体包括:确定指定虚拟机中的一个或多个进程作为目标进程;对于每个目标进程,在所述指定虚拟机外部重构该目标进程在所述指定虚拟机内部的进程管理结构;通过分析重构的进程管理结构,确定该目标进程是否为被注入恶意代码或被注入恶意动态链接库DLL的寄生进程。
其中,所述确定指定虚拟机中的一个或多个进程作为目标进程包括:将所述指定虚拟机中的产生网络行为的一个或多个进程作为目标进程。
所述在指定虚拟机外部重构该目标进程在所述指定虚拟机内部的进程管理结构包括:获取所述指定虚拟机的内存中的该目标进程的相关内容。
其中,所述获取所述指定虚拟机的内存中的该目标进程的相关内容包括:使用Libvmi映射所述指定虚拟机的该目标进程对应的内存地址空间到Domain 0的内存地址空间,从而为Volatility框架提供地址空间支持;生成基于所述Volatility框架的用于对运行时的指定虚拟机内存进行分析读取的脚本;所述脚本通过映射后的Domain 0的内存地址空间获取该目标进程的相关内容。
其中,所述获取所述指定虚拟机的内存中的该目标进程的相关内容包括:从位于用户地址空间的进程环境块PEB获取该目标进程加载的DLL信息;和从位于内核地址空间的虚拟地址描述符VAD结构中获取该目标进程加载的DLL信息。
其中,所述从位于用户地址空间的进程环境块PEB获取该目标进程加载的DLL信息包括:从PEB中的三条由记录DLL信息节点组成的双向链表获取该目标进程加载的DLL信息;其中,三条双向链表分表为:按照加载顺序排序的InLoadOrderList、按照在内存中的顺序排序的InMemoryOrderList以及按照初始化顺序排序的InInitOrderList。
其中,所述从位于内核地址空间的虚拟地址描述符VAD结构中获取该目标进程加载的DLL信息包括:遍历EPROCESS链表,获得该目标进程的EPROCESS地址;从该目标进程的EPROCESS地址中的EPROCESS数据结构中获取VAD树的根节点的地址VadRoot;使用先序遍历算法对VAD树进行遍历,提取具有执行权限且FileName不为空的VAD节点;根据提取的VAD节点中的信息获取该目标进程加载的DLL信息。
其中,从位于用户地址空间的进程环境块PEB获取该目标进程加载的DLL信息,以及,从位于内核地址空间的虚拟地址描述符VAD结构中获取该目标进程加载的DLL信息的情况下,通过如下方式确定该目标进程是否为被注入恶意DLL的寄生进程:如果一个DLL在从PEB获得的DLL信息中不存在,而在从VAD结构中获取的DLL信息中存在,则该DLL为恶意DLL,该目标进程是被注入恶意DLL的寄生进程。
其中,所述通过分析重构的进程管理结构,确定该目标进程是否为被注入恶意代码或被注入恶意动态链接库DLL的寄生进程包括:在所述重构的进程管理结构的数据中,如果存在PE格式文件的头结构,则将该PE格式文件的头结构所对应的内容作为安全监测的目标。
其中,所述在所述指定虚拟机外部重构该目标进程在所述指定虚拟机内部的进程管理结构包括:获取所述指定虚拟机的内存中位于不同可执行内存区块中的与该目标进程相关的可执行代码;所述通过分析重构的进程管理结构,确定该目标进程是否为被注入恶意代码或被注入恶意动态链接库DLL的寄生进程包括:分别计算所述不同内存区块中的可执行代码的熵值,如果计算得到的有熵值大于预设阈值的可执行代码,则确定该目标进程为被注入恶意代码或被注入恶意DLL的寄生进程。
基于上述的实施例给出本发明中的虚拟机恶意行为检测系统的结构图。
图9示出了根据本发明一个实施例的一种虚拟机恶意行为检测系统的结构图。如图9所示,该虚拟机恶意行为检测系统900包括:
进程行为检测模块910,适于监视目标虚拟机内进程的创建和退出事件,并通知安全监测模块;
安全监测模块920,适于根据进程创建和进程退出事件的通知维护一个记录所述目标虚拟机内实际运行进程的可信进程列表;通过遍历记录有目标虚拟机中的进程信息的相关数据结构,获得记录目标虚拟机内的进程的一个或多个不可信进程列表;以及通过比较可信进程列表和不可信进程列表,判断出目标虚拟机中的隐藏进程;
嗅探器930,适于截获进出目标虚拟机的数据包,根据所截获的数据包,确定目标虚拟机中的当前活动的网络连接及其所属的进程;
虚拟机自省模块940,适于在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息;
安全监测模块920,进一步适于通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
在本发明的一个实施例中,所述进程行为检测模块910位于Xen内核层; 所述安全监测模块920位于管理域Domain 0层;所述嗅探器930位于Domain0层的虚拟网桥处;所述虚拟机自省模块940位于Domain 0层;
所述安全检测模块920包括:隐藏进程检测模块921和寄生进程检测模块922;
隐藏进程检测模块921,适于根据进程创建和进程退出事件的通知维护所述可信进程列表,以及获得一个或多个不可信进程列表,通过比较可信进程列表和不可信进程列表判断出目标虚拟机中的隐藏进程;
寄生进程检测模块922,适于通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
在本发明的一个实施例中,所述虚拟机自省模块940,适于通过调用Libvmi库提供的相关接口函数以及配置文件机制,获取所述当前活动的网络连接及其所属进程的相关信息。
在本发明的一个实施例中,所述虚拟机自省模块940,适于获取目标虚拟机的内存中的目标进程的相关内容,具体为:使用Libvmi映射所述指定虚拟机的该目标进程对应的内存地址空间到Domain 0的内存地址空间,从而为Volatility框架提供地址空间支持;生成基于所述Volatility框架的用于对运行时的指定虚拟机内存进行分析读取的脚本,由所述脚本通过映射后的Domain 0的内存地址空间获取目标进程的相关内容。
在本发明的一个实施例中,基于Xen内核提供的__HYPERVISOR_domctl超级调用以及Xen内核为每个操作定义用于参数传递的数据结构的机制,在Xen内核中添加实现Domain 0和Xen内核之间关于进程创建和进程退出事件的通信操作以及相应的参数传递数据结构;位于Xen内核层的进程行为检测模块910和位于Domain 0层的安全监测模块920,基于添加的所述通信操作以及相应的参数传递数据结构进行通信。
在本发明的一个实施例中,该系统900进一步包括:消息队列模块950,适于保存设置在嗅探器和寄生进程检测模块之间的消息队列;
嗅探器930截获进出目标虚拟机的数据包并进行处理,将处理结果数据放入所述消息队列;寄生进程检测模块922从所述消息队列提取数据并进行处理。
在本发明的一个实施例中,嗅探器930的生产者协程截获进出目标虚拟机的数据包,提取连接摘要信息放入嗅探器的任务队列中;嗅探器930的消费者协程从嗅探器的任务队列中获取链接摘要信息,完成相关处理后,将处理结果数据发送到所述消息队列中。和/或,寄生进程检测模块922中的生产者协程监视所述消息队列,从中获取数据放入寄生进程检测模块的任务队列 中;寄生进程检测模块922中的消费者协程从寄生进程检测模块的任务队列中获取任务并处理。
在本发明的一个实施例中,所述安全监测模块920,进一步适于在所述目标虚拟机的外部重构所述目标虚拟机中的进程所持有的当前活动的网络连接的相关信息;对于当前活动的一个网络连接,通过将其相关信息与对应的安全检测规则进行匹配判断该网络连接是否为异常连接;如果判断出一个网络连接为异常连接,则确定该网络连接所属的进程是被注入恶意代码或被注入恶意动态链接库DLL的寄生进程;和/或,对于每个目标进程,在所述目标虚拟机外部重构该目标进程在所述目标虚拟机内部的进程管理结构;通过分析重构的进程管理结构,确定该目标进程是否为被注入恶意代码或被注入恶意动态链接库DLL的寄生进程。
本系统900的相关内容与前述的方法实施例中的内容相同,这里不再一一复述。
综上所述,根据本发明的这种监视目标虚拟机内进程的创建和退出事件,维护一个记录所述目标虚拟机内实际运行进程的可信进程列表,通过遍历记录有目标虚拟机中的进程信息的相关数据结构,获得记录目标虚拟机内的进程的一个或多个不可信进程列表,通过比较可信进程列表和不可信进程列表,判断出目标虚拟机中的隐藏进程;以及截获进出目标虚拟机的数据包,根据所截获的数据包,确定目标虚拟机中的当前活动的网络连接及其所属的进程在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息通过分析重构的所述相关信息确定目标虚拟机中的寄生进程的技术方案,能够全面检测虚拟机中的隐藏进程和寄生进程,且不依赖于虚拟机中的代理程序,属于外部检测模式,不会对虚拟机产生性能上的影响,具有较好的透明性。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个 或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的虚拟机恶意行为检测系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于 元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了A1、一种虚拟机恶意行为检测方法,其中,该方法包括:
监视目标虚拟机内进程的创建和退出事件,维护一个记录所述目标虚拟机内实际运行进程的可信进程列表;通过遍历记录有目标虚拟机中的进程信息的相关数据结构,获得记录目标虚拟机内的进程的一个或多个不可信进程列表;通过比较可信进程列表和不可信进程列表,判断出目标虚拟机中的隐藏进程;
截获进出目标虚拟机的数据包,根据所截获的数据包,确定目标虚拟机中的当前活动的网络连接及其所属的进程;在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息;通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
A2、如A1所述的方法,其中,
在Xen内核层监视目标虚拟机内的进程创建和进程退出事件,并通知管理域Domain 0层;在Domain 0层根据进程创建和进程退出事件的通知维护所述可信进程列表,以及获得一个或多个不可信进程列表,通过比较可信进程列表和不可信进程列表判断出目标虚拟机中的隐藏进程;在Domain 0层的虚拟网桥处截获进出目标虚拟机的数据包;在Domain 0层重构所述当前活动的网络连接及其所属进程的相关信息,以及通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
A3、如A1或A2所述的方法,其中,所述在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息包括:
通过调用Libvmi库提供的相关接口函数以及配置文件机制,获取所述当前活动的网络连接及其所属进程的相关信息。
A4、如A1或A2所述的方法,其中,所述在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息包括:
获取目标虚拟机的内存中的目标进程的相关内容,具体为:使用Libvmi映射所述指定虚拟机的该目标进程对应的内存地址空间到Domain 0的内存地址空间,从而为Volatility框架提供地址空间支持;生成基于所述Volatility框架的用于对运行时的指定虚拟机内存进行分析读取的脚本;所述脚本通过映射后的Domain 0的内存地址空间获取目标进程的相关内容。
A5、如A2所述的方法,其中,实现Xen内核层和Domain 0层之间的通信包括:
基于Xen内核提供的__HYPERVISOR_domctl超级调用以及Xen内核为每个操作定义用于参数传递的数据结构的机制,在Xen内核中添加实现Domain 0和Xen内核之间关于进程创建和进程退出事件的通信操作以及相应的参数传递数据结构;
Xen内核层和Domain 0层基于添加的所述通信操作以及相应的参数传递数据结构进行通信。
A6、如A 2所述的方法,其中,该方法进一步包括:设置消息队列;
截获进出目标虚拟机的数据包并进行处理后,将处理结果数据放入所述消息队列;
从所述消息队列提取数据,根据提取的数据进行处理,包括:确定目标虚拟机中的当前活动的网络连接及其所属的进程,在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息,以及通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
A7、如A6所述的方法,其中,
所述截获进出目标虚拟机的数据包并进行处理后,将处理结果数据放入所述消息队列包括:由第一组生产者协程截获进出目标虚拟机的数据包,提取连接摘要信息放入第一任务队列中;由第一组消费者协程从第一任务队列中获取链接摘要信息,完成相关处理后,将处理结果数据发送到所述消息队列中;
和/或,
所述从所述消息队列提取数据,根据提取的数据进行处理包括:由第二组生产者协程监视所述消息队列,从中获取数据放入第二任务队列中;由第二组消费者协程从第二任务队列中获取数据并进行处理。
A8、如A1或A2所述的方法,其中,所述在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息,通过分析重构的所述相关信息确定目标虚拟机中的寄生进程包括:
在所述目标虚拟机的外部重构所述目标虚拟机中的进程所持有的当前活动的网络连接的相关信息;对于当前活动的一个网络连接,通过将其相关信息与对应的安全检测规则进行匹配判断该网络连接是否为异常连接;如果判断出一个网络连接为异常连接,则确定该网络连接所属的进程是被注入恶意代码或被注入恶意动态链接库DLL的寄生进程;
和/或,
对于每个目标进程,在所述目标虚拟机外部重构该目标进程在所述目标虚拟机内部的进程管理结构;通过分析重构的进程管理结构,确定该目标进程是否为被注入恶意代码或被注入恶意动态链接库DLL的寄生进程。
本发明公开了B9、一种虚拟机恶意行为检测系统,其中,该系统包括:
进程行为检测模块,适于监视目标虚拟机内进程的创建和退出事件,并通知安全监测模块;
安全监测模块,适于根据进程创建和进程退出事件的通知维护一个记录所述目标虚拟机内实际运行进程的可信进程列表;通过遍历记录有目标虚拟机中的进程信息的相关数据结构,获得记录目标虚拟机内的进程的一个或多个不可信进程列表;以及通过比较可信进程列表和不可信进程列表,判断出目标虚拟机中的隐藏进程;
嗅探器,适于截获进出目标虚拟机的数据包,根据所截获的数据包,确定目标虚拟机中的当前活动的网络连接及其所属的进程;
虚拟机自省模块,适于在目标虚拟机的外部重构所述当前活动的网络连接及其所属进程的相关信息;
安全监测模块,进一步适于通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
B10、如B9所述的系统,其中,所述进程行为检测模块位于Xen内核层;所述安全监测模块位于管理域Domain 0层;所述嗅探器位于Domain 0层的虚拟网桥处;所述虚拟机自省模块位于Domain 0层;所述安全检测模块包括:隐藏进程检测模块和寄生进程检测模块;隐藏进程检测模块,适于根据进程创建和进程退出事件的通知维护所述可信进程列表,以及获得一个或多个不可信进程列表,通过比较可信进程列表和不可信进程列表判断出目标虚拟机中的隐藏进程;寄生进程检测模块,适于通过分析重构的所述相关信息确定目标虚拟机中的寄生进程。
B11、如B9或B10所述的系统,其中,
所述虚拟机自省模块,适于通过调用Libvmi库提供的相关接口函数以及配置文件机制,获取所述当前活动的网络连接及其所属进程的相关信息。
B12、如B9或B10所述的系统,其中,
所述虚拟机自省模块,适于获取目标虚拟机的内存中的目标进程的相关内容,具体为:使用Libvmi映射所述指定虚拟机的该目标进程对应的内存地址空间到Domain 0的内存地址空间,从而为Volatility框架提供地址空间支持;生成基于所述Volatility框架的用于对运行时的指定虚拟机内存进行分析读取的脚本,由所述脚本通过映射后的Domain 0的内存地址空间获取目标 进程的相关内容。
B13、如B10所述的系统,其中,
基于Xen内核提供的__HYPERVISOR_domctl超级调用以及Xen内核为每个操作定义用于参数传递的数据结构的机制,在Xen内核中添加实现Domain 0和Xen内核之间关于进程创建和进程退出事件的通信操作以及相应的参数传递数据结构;
位于Xen内核层的进程行为检测模块和位于Domain 0层的安全监测模块,基于添加的所述通信操作以及相应的参数传递数据结构进行通信。
B14、如B10所述的系统,其中,该系统进一步包括:消息队列模块,适于保存设置在嗅探器和寄生进程检测模块之间的消息队列;
嗅探器截获进出目标虚拟机的数据包并进行处理,将处理结果数据放入所述消息队列;
寄生进程检测模块从所述消息队列提取数据并进行处理。
B15、如B14所述的系统,其中,
嗅探器的生产者协程截获进出目标虚拟机的数据包,提取连接摘要信息放入嗅探器的任务队列中;嗅探器的消费者协程从嗅探器的任务队列中获取链接摘要信息,完成相关处理后,将处理结果数据发送到所述消息队列中;
和/或,
寄生进程检测模块中的生产者协程监视所述消息队列,从中获取数据放入寄生进程检测模块的任务队列中;寄生进程检测模块中的消费者协程从寄生进程检测模块的任务队列中获取任务并处理。
B16如B9或B10所述的系统,其中,所述安全监测模块,进一步适于,
在所述目标虚拟机的外部重构所述目标虚拟机中的进程所持有的当前活动的网络连接的相关信息;对于当前活动的一个网络连接,通过将其相关信息与对应的安全检测规则进行匹配判断该网络连接是否为异常连接;如果判断出一个网络连接为异常连接,则确定该网络连接所属的进程是被注入恶意代码或被注入恶意动态链接库DLL的寄生进程;
和/或,
对于每个目标进程,在所述目标虚拟机外部重构该目标进程在所述目标虚拟机内部的进程管理结构;通过分析重构的进程管理结构,确定该目标进程是否为被注入恶意代码或被注入恶意动态链接库DLL的寄生进程。

一种虚拟机恶意行为检测方法和系统.pdf_第1页
第1页 / 共30页
一种虚拟机恶意行为检测方法和系统.pdf_第2页
第2页 / 共30页
一种虚拟机恶意行为检测方法和系统.pdf_第3页
第3页 / 共30页
点击查看更多>>
资源描述

《一种虚拟机恶意行为检测方法和系统.pdf》由会员分享,可在线阅读,更多相关《一种虚拟机恶意行为检测方法和系统.pdf(30页珍藏版)》请在专利查询网上搜索。

本发明公开了一种虚拟机恶意行为检测方法和系统。所述方法包括:监视目标虚拟机内进程的创建和退出事件,维护一个记录目标虚拟机内实际运行进程的可信进程列表,通过遍历记录有目标虚拟机中的进程信息的相关数据结构,获得记录目标虚拟机内的进程的不可信进程列表,通过比较可信进程列表和不可信进程列表,判断目标虚拟机中的隐藏进程;截获进出目标虚拟机的数据包,确定目标虚拟机中的当前活动的网络连接及其所属的进程在目标虚拟。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 >


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1