著录项信息
专利名称 | 发现计算机程序的恶意行为的方法和装置 |
申请号 | CN200710162442.6 | 申请日期 | 2007-10-15 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2009-01-21 | 公开/公告号 | CN101350052 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/22 | IPC分类号 | G;0;6;F;2;1;/;2;2查看分类表>
|
申请人 | 北京瑞星国际软件有限公司 | 申请人地址 | 北京市海淀区中关村大街22号中科大厦1301室
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京瑞星网安技术股份有限公司 | 当前权利人 | 北京瑞星网安技术股份有限公司 |
发明人 | 叶超 |
代理机构 | 永新专利商标代理有限公司 | 代理人 | 覃鸣燕 |
摘要
本发明提出了一种发现计算机程序的恶意行为的方法和装置。利用本发明提出的方法和装置利用了被监视进程集合的概念来分析恶意程序的行为特征。本发明提出的发现计算机程序的恶意行为的方法包括:监视计算机程序执行的动作;在被监视进程集合库中,搜索与所监视的动作相关的一个进程集合,所述进程集合至少包括在创建关系上相互关联的至少一个可疑进程的信息;如果搜索到所述与所监视的动作相关的进程集合,则根据所述搜索出的进程集合中记载的信息,通过关联性分析判断所监视动作是否属于恶意行为。
1.一种发现计算机程序的恶意行为的方法,包括:
监视计算机程序执行的动作;
在被监视进程集合库中,搜索与所监视的动作相关的一个被监视进程集合,所述被监视进程集合包括在创建关系上相互关联的至少一个可疑进程的信息;
如果搜索到与所监视的动作相关的所述被监视进程集合,则根据搜索出的所述被监视进程集合中记载的信息,通过关联性分析判断所监视动作是否属于恶意行为。
2.如权利要求1所述的方法,其中:
所述被监视进程集合包括所述至少一个可疑进程的进程标识符、与所述至少一个可疑进程相对应的程序文件,以及所述至少一个可疑进程所执行的动作和该动作产生的数据的历史记录。
3.如权利要求1所述的方法,其中:
在进程创建时,如果新创建进程的父进程是一个被监视进程集合中的可疑进程,则所述新创建进程被确定为可疑进程,并且将所述新创建进程加入所述父进程所在的被监视进程集合中。
4.如权利要求1所述的方法,其中
在进程创建时,如果新创建进程的父进程不是可疑进程,则仅在所述新创建进程经过进程过滤后被确定为可疑进程的情况下,才为所述新创建进程建立相应的被监视进程集合。
5.如权利要求4所述的方法,其中,所述进程过滤包括:
判断与所述新创建进程相对应的程序文件是否为已知的安全程序文件,系统文件或默认的安全程序文件;
如果不是,则确定为可疑进程。
6.如权利要求2所述的方法,其中,所述搜索出的与所监视动作相关的所述被监视进程集合包含所监视动作的发起者进程的信息。
7.如权利要求6所述的方法,其中,所述判断步骤包括:
将所监视动作的对象的信息与搜索出的所述被监视进程集合中的所述历史记录进行比较;
根据比较结果,判断所监视动作是否属于恶意行为。
8.如权利要求7所述的方法,其中所监视动作的对象是所监视动作操作的文件,且
所述比较步骤包括比较所监视动作操作的文件与所述历史记录中的历史文件的全路径信息。
9.如权利要求7所述的方法,其中所监视动作的对象是所监视动作操作的文件,且
所述比较步骤包括比较所监视动作操作的文件与所述历史记录中的历史文件的文件内容。
10.如权利要求9所述的方法,其中,所述进行比较的文件均为可执行文件,且所述文件内容比较步骤还包括:
比较所监视动作操作的文件与所述历史记录中的历史文件的代码区域内容。
11.如权利要求10所述的方法,其中,所述比较代码区域内容的步骤包括:
分析进行比较的两个所述可执行文件的结构,获得所述可执行文件的程序入口点;
分析可执行文件的节表,分别找到所述可执行文件的程序入口点所在的节;
比较所找到的两个可执行文件的节的大小;
获得两个可执行文件的程序入口点所在节的内容,进行二进制比较,
如果所述节的内容相同则认为两个可执行文件拥有相同的代码区域。
12.如权利要求6所述的方法,其中所述判断步骤还包括:
判断所监视动作是否属于可能导致恶意行为的系统调用。
13.如权利要求2所述的方法,其中所述搜索出的与所监视动作相关的所述被监视进程集合包含所监视动作的对象的信息。
14.如权利要求7所述的方法,其中所监视动作的对象是所监视动作操作的文件,且
所述搜索步骤包括:
在所有被监视进程集合的历史记录中搜索所监视动作操作的文件的信息。
15.如权利要求2所述的方法,其中所述监视计算机程序的动作的步骤还包括杀毒引擎查到病毒的动作,
所述搜索步骤包括根据所述查到病毒的病毒文件信息搜索历史记录中包含所述查到病毒的病毒文件的信息的被监视进程集合。
16.一种发现计算机程序的恶意行为的装置,包括:
监视模块,用于监视计算机程序执行的动作;
搜索模块,用于在被监视进程集合库中,搜索与所监视的动作相关的一个被监视进程集合,所述被监视进程集合至少包括在创建关系上相互关联的至少一个可疑进程的信息;
判断模块,用于在搜索到与所监视的动作相关的所述被监视进程集合时,根据所述搜索出的被监视进程集合中记载的信息,通过关联性分析判断所监视动作是否属于恶意行为。
17.如权利要求16所述的装置,其中,
所述被监视进程集合包括所述至少一个可疑进程的进程标识符、与所述至少一个可疑进程相对应的程序文件,以及所述至少一个可疑进程所执行的动作及该动作所产生数据的历史记录。
18.如权利要求16所述的装置,还包括进程过滤模块,用于当新创建进程的父进程是一个被监视进程集合中的可疑进程时,确定所述新创建进程为可疑进程,并允许为所述新创建进程创建被监视进程集合;当新创建进程的父进程不是可疑进程,且所述新创建进程对应的程序文件为安全文件时,过滤掉所述新创建进程,不允许为所述新创建进程创建被监视进程集合。
19.如权利要求17所述的装置,其中,
所述监视模块所监视的动作还包括查毒引擎查到病毒的动作,以及所述搜索模块,根据所述查到病毒的病毒文件信息搜索历史记录中包含所述查到病毒的病毒文件的信息的被监视进程集合。
20.如权利要求16所述的装置,其中,所述搜索模块搜索出的与所监视动作相关的所述被监视进程集合包含发起所监视动作的进程的信息。
21.如权利要求16所述的装置,其中,所述搜索模块搜索出的与所监视动作相关的所述被监视进程集合包含所监视动作的对象的信息。
技术领域\n本发明涉及计算机防护方法和装置,本发明尤其涉及一种根据计算机程序的行为特征来即时准确地发现计算机程序的恶意行为的方法和装置。\n背景技术\n自1983年世界上第一个计算机病毒出现以来,在二十多年的时间里,计算机病毒随着计算机及网络技术的发展而不断演化更新。如今,诸如木马、蠕虫和后门程序的计算机病毒已经不仅能够破坏计算机系统,还能够盗取用户的账户密码等重要信息,从而严重威胁人们对计算机的正常使用,甚至可能造成巨大的经济损失。由此,如何防范病毒入侵已然成为人们最为关注的一个焦点。\n防范病毒侵袭的一个重要步骤是在病毒实施侵害之前识别出病毒,即查毒,从而及时采取相应的措施遏制其进一步侵害计算机系统。目前的杀毒软件普遍使用的查毒方法为特征码扫描。也就是说,利用从病毒样本中提取出来的特征码对被查文件进行扫描,从而发现并清除感染病毒的文件。\n然而,这种传统的查毒方法只有在捕获病毒样本之后才能提取病毒的特征码,这导致了查毒和杀毒将永远滞后于病毒的发生。例如,当出现新病毒时,即使用户安装了这种杀毒软件,也会受到侵害,只有在升级杀毒软件、更新病毒库之后才能得以解决,而这已经严重滞后于病毒的发生。\n而今,新的未知病毒和原有病毒的新变种层出不穷,同时还出现了一些针对这种传统方法的反查毒技术。这些都使得这种传统查毒方法的滞后缺点越来越显著,而且依赖于这种传统方法的实时监控程序也同于无形。\n针对传统特征码扫描的缺点,近期,反毒领域提出基于病毒程序行为特征的计算机防护方法。在这种方法中,通过拦截某一个计算机程序的动作来分析该动作是否是一个病毒程序发起的。这种计算机防护方法能够在一定程度上识别出原有病毒的新变种和一些相对简单的新病毒。但是,对于一些通过调用系统程序或安全程序来实现侵袭行为的隐蔽性好的病毒而言,这种防护方法的成功率还是比较低的。\n例如,近期比较流行的后门程序“灰鸽子”就是一种隐蔽性较好的病毒。灰鸽子的主程序c:\A.exe运行后,首先将自己复制到系统目录c:\windows\下,将副本重命名为wservices.exe,并且在将该副本wservices.exe启动后A.exe退出。wservices.exe启动后,直接启动系统所带的iexplore.exe(系统文件),然后将wservices.exe进程映像写入到iexplore.exe进程空间并获得执行权限,从而利用iexplore.exe进行侵害。\n在灰鸽子程序中,病毒程序隐藏在正常的系统程序iexplore.exe中运行,病毒在实现侵害的过程中先后涉及三个进程A.exe、wservices.exe和iexplore.exe,而且在真正的侵害行为执行前病毒的主程序A.exe已经结束。由此,灰鸽子程序可以很好地欺骗查毒软件对动作的监视,从而成功地将病毒代码隐藏在iexplore.exe进程空间中。在这种情况下,采用现有的这种简单的行为动作分析方法,就很难识别出这种隐蔽性好的病毒程序。\n目前,随着计算机技术的发展,如灰鸽子这样的隐蔽性好的病毒程序越来越多,因此需要一种新的计算机防护方法来识别出这种通过开启多个进程来实现侵袭的恶意程序。\n发明内容\n本发明的一个目的在于提出一种发现计算机程序的恶意行为的方法和装置。利用本发明提出的方法和装置可以识别出涉及多个进程的恶意程序的行为,从而追根溯源找出哪些程序属于病毒程序。\n本发明的另一个目的在于提出一种发现计算机程序的恶意行为的方法和装置,使用该方法和装置可以有效地搜索出释放病毒的程序。\n为了实现上述目的,本发明提出的发现计算机程序的恶意行为的方法包括:监视计算机程序执行的动作;在被监视进程集合库中,搜索与所监视的动作相关的一个进程集合,所述进程集合至少包括在创建关系上相互关联的至少一个可疑进程的信息;如果搜索到所述与所监视的动作相关的进程集合,则根据所述搜索出的进程集合中记载的信息,通过关联性分析判断所监视动作是否属于恶意行为。\n根据本发明提出的方法,由于使用了进程集合的概念,通过创建或调用多个进程来进行病毒侵袭的恶意程序能够被及时准确地识别出来,从而能够及时发现隐蔽性强的恶意程序,如灰鸽子后门程序。\n此外,为了实现上述目的,本发明还提出上述方法还包括:接收杀毒引擎查到病毒的通知,并获得查到的病毒文件的信息;以及所述搜索步骤包括搜索进程集合的历史记录中是否包含所述查到的病毒文件的信息的进程集合;如果搜到,则可找到释放病毒的进程。\n本发明提出的上述方法将查毒引擎的查毒结果与进程行为监视相结合,从而能够更加准确高效地发现恶意行为。\n此外,本发明还提出了与上述方法相对应的计算机保护装置。\n附图说明\n图1示出根据本发明一个实施例的发现程序恶意行为装置的总体框图;\n图2示出根据本发明一个实施例的进程集合建立和维护过程;\n图3示出根据本发明一个实施例的进程过滤过程;\n图4示出根据本发明一个实施例的利用进程集合来确定释放病毒文件的进程的过程;\n图5示出根据本发明一个实施例的利用进程集合来确定文件操作中的恶意行为的过程。\n图6示出根据本发明一个实施例的利用进程集合来确定注册表操作中的恶意行为的过程;\n图7示出根据本发明一个实施例的利用进程集合来确定系统调用中的恶意行为的过程;\n图8示出根据本发明一个实施例的利用进程集合来确定程序的恶意行为的另一个示例性过程。\n具体实施方式\n以下将结合具体实施例对本发明提出的发现计算机程序的恶意行为的方法和装置进行详细地描述。为了便于理解,在以下实施例中,仅以Windows操作系统为例进行描述。但是,本领域技术人员可以理解的是本发明的思想和精神还可应用于其它计算机系统中,并不局限于Windows操作系统。\n如前述的“灰鸽子”程序,现今的病毒或间谍软件已经不再是在单进程中完成对计算机的侵袭,而是要在创建和/或结束多个进程的过程中实施恶意动作,从而它们更容易蒙骗过杀毒软件的监视。\n此外,通过分析现今的众多计算机病毒程序、间谍软件还可以发现:恶意程序可能是由一些基本的恶意行为要素构成的,而今不仅一个完整的恶意程序可能涉及多个进程,这些恶意行为要素本身的实现也可能涉及不止一个进程。以下示例性地列出了一些通过分析抽象出的恶意行为要素,但本发明并不限于此。\n释放病毒文件:指一个进程直接创建了(将正常文件修改为)一个已经能够被反病毒引擎识别的计算机病毒。一个病毒文件在本地计算机生成时,其直接创建者有很高的几率为病毒释放者、下载者。\n自我复制:指一个进程直接或间接的创建一个副本。这个副本可能是恶意程序A直接创建的,也可能是恶意程序A通过调用其它安全程序,如SHELL程序来复制的。\n自修改的自我复制:指一个进程创建或修改了一个应用程序,并且修改后的应用程序的入口点所在的代码区域和该进程对应程序文件的入口点所在的代码区域相同,例如,“熊猫烧香”病毒。\n释放程序文件;指一个进程直接释放非当前进程副本的程序文件,程序文件可以是可执行文件(EXE)也可以是动态连接库(DLL)。\n启动自释放程序:指一个进程直接或间接地运行一个程序文件,该程序文件可以是该进程或者该进程相关进程所创建的。例如,恶意程序A释放程序B,并且调用SHELL启动程序B。\n建立自启动关联:指一个进程直接或间接的建立或修改自启动项目(如注册表中的启动项),以使得该进程的程序文件或者相关的程序文件能够被系统自动启动。这里,建立自启动项的进程程序可能是恶意程序A,也可能是系统中已经存在的services.exe。\n安装自释放服务:指一个进程直接或间接安装一个系统服务,例如,恶意程序A会释放几个可执行文件,并且将这些可执行文件注册为服务。\n加载自释放驱动:指一个进程直接或间接加载驱动程序,该驱动程序是由加载进程直接或间接创建的。例如:恶意程序A释放驱动程序B,将该驱动程序B注册为服务启动方式,并且由系统中已经存在的进程services.exe加载该驱动程序B。\n结束进程:指一个进程直接或间接的结束另外一个正常进程。同样,结束进程的发起者可能是恶意程序A,也可能是恶意程序A调用操作系统提供的结束进程工具(例如:Windows系统中的Taskkill.exe)。\n创建远程线程:指一个进程直接或间接在其他进程空间内创建一个远程线程,以此方法入侵其他进程。\n模拟输入(键盘鼠标等):指一个进程直接或间接对其它进程的窗口进行模拟输入,例如,不停发送QQ消息。\n发送WINDOWS消息:指一个进程为了获得窗口内容而直接或间接对其它进程的窗口发送Windows消息WM GETTEXT。\n挂接自释放程序钩子:指一个进程挂接全局的消息钩子,该消息钩子对应的动态连接库是由该进程直接或间接创建的。例如:恶意进程A释放拥有钩子处理函数的动态连接库B和挂接全局钩子的程序C,并运行程序C,程序C以动态连接库B中的钩子处理函数为参数挂接全局钩子。\n基于以上总结出的几种恶意行为要素不难看出,这些行为要素中的每一个都有可能涉及多个先后创建的相关进程。在这种情况下,通过拦截单个进程中的动作就很难准确地识别出这些恶意行为。\n为此,本发明提出了被监视进程集合的概念。简便起见,以下将“被监视进程集合”简称为“进程集合”,但在本文中提到的进程集合均指由防护软件监视的进程集合。\n根据本发明的实施例,每个进程集合包含在创建关系上相互关联的一个或多个可疑进程的信息。以上述“结束进程”的恶意行为为例,假设恶意进程A.exe已经在一个进程集合α中,进程A.exe调用了操作系统提供的工具Taskkill.exe来结束另一个正常进程,即建立了一个子进程Taskkill.exe。此时,父进程A.exe和子进程Taskkill.exe存在直接关系,二者共同完成了“故意结束其它进程”的行为。由此,根据本发明的原理,子进程Taskkill.exe也会包含在进程集合α中。由此可见,进程集合α在逻辑上体现了其中包含的一个或多个相关可疑进程共同的行为。进程集合所提供的这种逻辑上的关联性,对于识别恶意行为非常有利。\n根据本发明的实施例,本发明提出的进程集合在逻辑上划分系统中的各个相关进程。每个进程集合包括存放在其中的可疑进程的标识符(进程ID)和该进程对应的程序文件的信息,如程序文件(PE文件)全路径信息。此外,由于某些恶意行为需要通过追溯历史数据,例如父进程释放过的文件信息,才能被发现,因此根据本发明的进程集合还可以保存集合中每个进程动作的历史记录。例如,历史记录可包括创建的子进程ID,创建的文件、修改的文件等等。但是,本发明并不限于此,根据需要,历史记录还可以包含其它各种信息,例如访问网络的动作等等。\n由此,本发明提出的进程集合不仅体现了进程之间的关联关系,还包括了相关进程在历史动作上的内在联系。这些信息都将有助于对所监视动作进行关联性分析,从而及时准确地发现恶意行为。\n以下将以前面列举的几种恶意行为为例,结合具体的恶意程序实例,详细描述本发明提出的进程集合概念在对所监视动作进行关联性分析中的应用。\n图1示出了根据本发明实施例的发现计算机程序恶意行为的装置总体框图。\n如图1所示,首先计算机防护软件的监控模块100监控各个程序的动作,并对所监视的动作发出相应的动作通知,例如,进程创建/结束通知、查毒引擎查毒通知、文件操作通知、注册表操作通知、系统API调用通知等等。继而,根据关于所监视动作的通知,各个处理子模块分别响应于各个通知执行相应的子流程。这些处理子模块包括进程集合维护子模块200、查毒引擎通知处理子模块400、文件操作通知处理子模块500、注册表操作通知处理子模块600、系统调用动作通知处理子模块700,以及进程创建通知处理子模块800。\n根据本发明的实施例,在每个进程创建/结束时,维护本发明提出的进程集合,例如,创建或撤销进程集合,添加或删除已有集合中的进程信息等。进程集合维护子模块200执行的具体过程将在下文中参照图2和3详细描述。\n对于在每一进程运行过程中发生的动作的通知(如文件操作、系统调用通知),各个相应的子模块(400-800)首先会在进程集合库中搜索是否存在与该通知的动作相关的进程集合,例如包含动作发起者的集合或历史记录中包含动作对象信息(如所操作的文件)的集合。如果在集合库中找到相应的进程集合,则根据进程集合所提供的相关信息,结合前述抽象出的恶意行为的特征,对各个动作进行关联性的分析,从而识别出各恶意行为。这些子模块执行的具体过程将在下文中结合图4-8详细描述。\n图2示出了在进程创建/结束时,创建/维护根据本发明的进程集合的过程。这里依然以前面提到的“灰鸽子”程序为例进行描述。\n参见图2,子模块200在接收到进程创建/结束通知(步骤S201)后,首先获得新创建的或结束的进程的进程ID及其父进程ID。然后,判断接收到的通知是否表示进程创建(步骤S203)。如果是则转至步骤S211,进行进程集合的创建和/或新进程的添加,否则转至步骤S222,删除结束的进程或撤销空的进程集合。\n这里假设创建“灰鸽子”程序A.exe时,监控模块发送了进程创建动作通知。此时,在步骤S221中根据获得的父进程ID搜索已有的进程集合库,以确定是否存在父进程所对应的进程集合。“灰鸽子”程序A.exe是首次创建,其父进程是安全进程并未被监视,因此步骤S221的判断结果为否,流程进行至过滤步骤S213。\n步骤S213是一个可选步骤,其目的是通过过滤确定该新创建的进程是否是可疑的,即,是否需要为之建立一个进程集合。其具体的过滤过程在图3中示出。如图3所示,首先,子模块200获得新建进程所对应的可执行文件的全路径信息(步骤S2131)。之后,判断该可执行文件的全路径是否存在于一个外部安全程序列表中(步骤S2133)。这个安全程序列表包含了已经由系统或用户确认身份的安全程序的文件信息,且这个安全程序列表可以根据实际情况进行编辑,如扩充、删减等。如果步骤S2133的判断结果为是,则表明当前新建进程是安全的,不需要监视,因而将其过滤掉(步骤S2138)。否则,继续判断该可执行文件是否是系统文件(步骤S2135),如果是则转至步骤S2138。如果不是系统文件,继续判断该可执行文件是否在默认需要过滤掉的安全程序列表中(步骤S2137),如果是则转至步骤S2138,否则转至步骤S2139确定该进程可疑,需要为之创建一个进程集合。如上所述,过滤步骤S213可以通过筛掉一些安全程序,避免创建不必要的进程集合,从而加快防护软件的行为分析速度。进程过滤步骤还可以采用其他方式,例如,使用一些确定安全程序的规则等等。在一些特殊情况下,该过滤步骤也可以省略。\n这里,经过过滤,“灰鸽子”程序A.exe既不在安全列表中、也不是系统文件或默认安全程序,则过滤步骤确定该进程A.exe是可疑进程,需要创建相应的进程集合。因此,流程进行至步骤S215创建一个新的进程集合α,并将集合α内的第一个相关进程设为A.exe的进程ID,相关文件设置为A.exe的PE文件全路径信息c:\A.exe,之后此次集合维护结束。\n如果在步骤S211中找到父进程所在的进程集合,则转至步骤S217。例如,监控模块100监视到“灰鸽子”程序A.exe启动了复制在系统目录下的自身副本wservices.exe文件,即,监视到一个进程创建动作。此时,wservices.exe的父进程A.exe已经在进程集合α内,流程转至步骤S217。在步骤S217中,将wservices.exe的进程ID写入集合α的历史进程列表中,作为该集合的第二个相关进程,同时在历史进程列表中存入该第二相关进程的文件信息c:\windows\wservices.exe,之后,此次集合维护结束。\n若在步骤S203判断为进程结束通知,例如,监视到“灰鸽子”程序A.exe在启动wservices.exe之后退出的动作,则流程转至步骤S222。在步骤S222中依然首先判断是否存在一个该结束进程的父进程所对应的进程集合。对于“灰鸽子”程序A.exe而言,不存在父进程所在的进程集合。于是,流程行进至步骤S224,进一步判断是否存在结束进程所在的进程集合,如果判断结果为否则处理结束。这里,通过判断,找到A.exe所在的进程集合α。继而,从集合α中删除当前结束的进程A.exe(步骤S226)。删除进程后,再判断该集合α中是否还存有可疑进程(步骤S228),如果没有则撤销或销毁该集合α(步骤S229)。在灰鸽子的例子中,在A.exe退出时,wservices.exe还在运行,因此步骤S228的判断结果为否,处理结束。\n参见以上结合图2和3的描述,进程集合可在可疑进程创建之初建立,并随着相关进程的创建和结束而不断地更新集合内的相关信息。由此,进程集合可向其他动作通知的处理子模块提供有价值的进程间的关联信息。同时,其他动作通知处理流程也可将其各自处理中发生的动作或数据写入进程集合中的历史记录中,以增加关联信息量。\n下面将参照图4-8分别描述本发明提出的进程集合在各个动作通知子模块中的具体应用。\n图4示出了查毒引擎通知处理子模块的处理过程。下面结合一个木马程序来描述图4所示的过程。\n假设,已知的一个病毒木马A在运行时会释放一个已知的病毒动态链接库B。由于木马程序A和动态链接库B都是已知的病毒文件,通过传统的特征码扫描就可以将它们准确地识别出来。但是,木马程序A易于变种和伪装(例如通过加壳、加密、PEPatch、特征修改等手段),传统的特征码扫描无法发现伪装后的木马程序A’,而动态链接库B一般不进行伪装,能够被查毒引擎发现。\n在以上的木马例子中,假设,伪装后的木马程序A’运行并释放了动态链接库B,之后查毒引擎通过病毒特征扫描发现了动态链接库B,并发出查到病毒通知。此时,子模块400收到病毒通知,并先获得查到的病毒文件,即动态链接库B的全路径(步骤S420),继而在子模块200维护的所有进程集合中进行搜索,以找到包含有该病毒文件的进程集合(步骤S430)。此时,由于木马程序A’正在运行,子模块200已经在A’创建时为其建立了一个进程集合S,且集合S的历史记录中包含了A’创建的文件——动态链接库B。由此,在步骤S430中可以找到包含有该病毒文件——动态链接库B的进程集合S。基于这个判断,可以确定该病毒文件是由进程集合S中的进程A’释放的,即,确定为释放病毒文件行为(步骤S440),从而成功发现伪装后的木马程序A’。\n如图4所示的查毒引擎通知处理子流程将传统的基于特征码扫描的文件实时监控与本发明提出的基于进程集合的恶意行为特征分析相结合。这种处理不仅非常有效地利用了现有的、精确的病毒扫描技术,而且充分利用了进程集合提供的进程和文件之间的关联联系。因此这种处理能够更加快捷和准确地发现恶意行为,同时有助于更多地发现计算机病毒的衍生物。\n图5示出了文件操作通知处理子模块500的处理过程。下面,将以“熊猫烧香”病毒为例,描述文件操作通知处理的全过程。“熊猫烧香”病毒是一种蠕虫病毒,它可以感染正常的可执行文件。具体而言,“熊猫烧香”病毒用自身代码取代原始可执行程序,再将原始程序附加于自身代码之后,同时将原始程序的程序图标作为自己的程序图标,以便迷惑用户、隐蔽自己。这种行为可以抽象为前述的“自修改的自我复制”。\n在实际运行中,“熊猫烧香”病毒的主程序Panda.exe启动后会对可执行文件E.exe进行如上所述的修改,即,进行文件修改动作,并由监视模块100监视到。如图5所示,子模块500在接收到创建或修改文件的文件操作通知后,首先获得当前文件操作动作的发起者的进程ID,即Panda.exe的进程ID(步骤S510)。然后,根据所获得的进程ID,在所有进程集合中搜索当前进程Panda.exe所在的集合(步骤S520)。如果找不到,则表明当前进程是安全的,其进行的文件操作也是可信的,由此本次处理结束。在这个例子中,假设子模块200已经在Panda.exe创建之初为其建立了一个进程集合β,于是流程转至步骤S530。在步骤S530中,将所创建/修改的文件E.exe的信息插入搜索到的进程集合β的历史记录中,以便记载该被监视进程的历史动作。这里,如果集合的历史文件的存放空间已满或者插入失败(图中未示出),则直接结束处理(步骤S580)。\n继而,子模块S500判断该创建/修改的文件是否是可执行文件(步骤S541)或自动运行文件(步骤543)。如果是自动运行文件Autorun.inf,则判断搜索到的进程集合β的历史记录中是否包含有记载在Autorun.inf中的文件(步骤S545),即,判断是否历史文件被关联到自动运行程序中。如果是,则表明该进程集合实现了“自启动关联”行为(步骤S570),否则表明文件操作是安全的,处理结束(步骤S580)。\n在“熊猫烧香”例子中,被修改的文件E.exe是可执行文件,流程转至步骤S551。在步骤S551中,继续判断当前进程的程序文件是否是被创建的。如果不是,则表明当前进程可能是被病毒调用的系统文件。这时,需要将所创建/修改的文件与当前进程所在的进程集合中的每一个同类型的文件内容进行比较,并获得匹配结果(步骤S552)。在“熊猫烧香”例子中,经过步骤S551的判断,当前进程Panda.exe也是被创建出的程序文件,由此流程转至步骤S553,将所创建/修改的文件与当前进程对应的程序文件内容进行比较,并获得匹配结果。\n在步骤S552和S553中进行的匹配不仅要匹配文件的全部内容,还要单独匹配代码区域。这样,才有可能检查出“熊猫烧香”这种病毒。以Windows系统下的PE文件格式为例,在两个程序文件之间进行代码区域匹配的具体步骤如下:\n分析PE文件的结构,获得两个程序文件的程序入口点;\n分析PE文件的节表(Section Table),分别找到两个程序入口点所在的节(Section);\n比较节内的节信息(节大小);\n获得两个程序入口点所在节的内容,进行二进制比较,相同则认为两个程序拥有相同的代码区域。\n经过步骤S552和S553的匹配,可获得三种匹配结果,文件内容完全相同、仅代码区域相同以及文件不相同。随后,子模块S500根据步骤S552或S553的匹配结果进行识别。如果匹配结果为不相同,则确定为自释放文件行为(步骤S558)。如果匹配结果为完全相同(步骤S554),则确定是自我复制行为(步骤S556)。在“熊猫烧香”例子中匹配结果为只有代码完全相同(步骤S555),则确定是自修改的自我复制行为(步骤S557)。进而,在步骤S556-558的确定结果的基础上,还可进一步判断创建/修改的文件是否在“启动”目录中(步骤S560),如果在启动目录中,则可进一步确定为自启动关联行为(步骤S570)。\n在图5所示的子流程中,将进程所执行的文件操作记载到相应的进程集合的历史记录中,以备后续关联性分析使用。同时,通过将当前进程操作的文件与进程集合中记载的同类型历史文件进行比对,可以发现当前进程的行为是否是恶意行为。这里,进程集合提供了被监视进程间文件的相互关联性,由此采用图5所示的方法能够提高恶意行为识别的准确性和识别速度。\n图6示出了注册表操作处理子模块的处理流程。这里以一个病毒A的例子来说明子模块600的处理过程。假设,病毒A启动后,释放一个恶意程序文件B.exe,然后通过修改注册表将程序B加入自启动项中,从而程序B可以自行启动。按照前述进程集合维护子模块的处理,在病毒A的进程创建时,子模块200就为病毒A建立了一个进程集合γ。而且,按照文件操作通知子模块的处理,病毒A所释放的程序B也会作为历史文件记录在集合γ中。继而,当病毒A修改注册表时,监控模块可监视到这个动作并发出注册表操作通知。\n如图6所示,子模块600在接收到注册表操作通知后,首先获得被操作的注册表路径(步骤S610)。然后,根据该注册表路径判断是否是系统服务键(步骤S620)。如果不是,则可能是病毒程序自己发起的注册表修改动作,流程转至步骤S632。如果是,则可能是启动系统服务,这时需要进一步识别所启动的服务是否是安全的,由此流程转至步骤S631。\n在步骤S631中,从欲更新的注册表值中解析出一个或多个文件的全路径,即,获得将要启动的文件。然后,在所有进程集合的历史记录中进行搜索,以便判断上一步骤中获得的文件是否已经包含在一个进程集合中(步骤S633)。如果不是,则表明启动文件是安全的,处理结束(步骤S650)。如果判断结果为是,则表明将要启动的文件是进程集合中的可疑进程释放的,流程转至步骤S641。在步骤S641中进一步判断该文件是否是上一步获得的进程集合的第一个文件。如果判断结果为是,则可确定是安装自释放服务行为(步骤S643)。\n在病毒A的例子中,注册表路径不是系统服务键,流程转至步骤S632。在步骤S632中,子流程S600获得当前注册表修改动作的发起者的进程ID,即病毒A的进程ID。然后,根据所获得的进程ID,在所有进程集合中搜索当前进程所在的集合(步骤S634),从而找到包含病毒A的进程集合γ。于是,流程转至步骤S636,以获得将要启动的一个或多个文件的全路径。然后,经过步骤S642的判断,发现所获得将要启动的文件B.exe包含在集合γ中。于是,可确认当前的注册表操作是病毒A发起的建立自启动关联行为(步骤S644)。\n在图6所示的处理过程中,当某些操作的发起者为系统自动运行的程序时,可能无法根据当前进程ID获得与之相关的进程集合。但是,由于本发明提出的进程集合包含了其中进程动作的历史记录,因此可以通过在所有的进程集合的历史文件中搜索这些操作的对象文件而获得相关的进程集合,然后再基于获得的进程集合进行进一步的分析。\n图7示出了系统调用通知处理子模块700。下面,将以木马程序A为例描述系统调用通知处理的过程。假设木马A.exe是一个通过“加载自释放驱动”来侵害计算机的恶意程序。木马A.exe启动后,子模块200为其创建了进程集合S。A.exe运行后释放一个驱动程序C,驱动程序C的全路径信息被子模块500记载到监视进程集合S中。继而,A.exe调用服务相关的API,为程序C创建了一个服务注册表项并启动这个服务。这个注册表创建、启动服务的操作是由系统中早已存在的系统进程services.exe发起的。这时,监控模块可监视到这个驱动加载动作,并发出相应通知。\n在获得系统调用通知后,子模块700首先判断是否是驱动加载通知(步骤S710)。经过判断,确定是加载驱动程序C的通知。于是,从通知中获得驱动程序C的全路径(步骤S712),并根据驱动程序C的全路径,在所有进程集合的历史记录中搜索相同的文件(步骤S714),从而发现驱动程序C包含在相应的进程集合S中(步骤S716)。于是,判断出集合S中的A.exe在运行时执行了“加载自释放驱动”行为(步骤S718)。\n在这个木马程序例子中,由于加载驱动的动作发起者为早已运行的系统进程,通过发起者进程ID无法判断是否已经存在相应的监视进程集合。为此,本发明提出在监视进程集合的历史记录中搜索加载动作的对象信息,即驱动程序C的信息,从而找到相关的进程集合。\n除了上述加载驱动的系统调用外,图6所示的系统调用处理子系统还可以处理其他有可能是恶意行为的系统调用通知。例如,如图6所示,当接收到的系统调用通知不是加载驱动动作时,获得当前动作发起者的进程ID(步骤S720),再根据所获得的进程ID找到相应的进程集合(步骤S730)。如果找到了相应的进程集合,则表示这些系统调用是该进程集合中的可疑进程发起的。继而,根据系统调用的具体动作(步骤S741-745),确定相应的恶意行为(S751-755)。例如,当系统调用为挂接全局消息钩子操作时(步骤S745),进一步判断钩子处理函数对应的动态链接库是否在当前进程所在的监视进程集合中(步骤S746)。如果在就可以肯定地判断为挂接自释放钩子行为(步骤S755)。\n以上结合附图描述了子模块400-700根据进程集合所提供的进程之间以及进程与文件之间的相关关系发现恶意行为的过程。以上所描述的这些子模块的操作并不是孤立的,它们也可能相互交叠。换言之,同一个恶意行为有可能在以上多个模块中发现。例如,图5中已经提到了“自释放启动”行为的判别方法。然而,这一行为也可根据进程创建通知而识别出来。比如,当防护软件发出创建进程通知时,还可在如图2所示完成进程集合的维护之后,进一步判断所创建的进程对应的程序文件是否在所创建进程的父进程所在的进程集合中。如果在,就可确定为“自释放启动”行为(具体过程可参见图8)。\n有益效果\n以上结合具体实施例详细描述了本发明提出的进程集合的建立、维护以及利用。本发明提出的进程集合,将在创建关系上相互关联的多个进程划分在一起,并记录集合内各个进程的历史数据。因而,本发明提出的进程集合概念既体现了进程之间的相互关联性,也体现了进程与文件操作等动作之间的相互关联性。这些相关的信息可以将如进程创建、系统调用和文件操作等多个离散的动作关联在一起,从而识别出其中的恶意行为。由此,进程集合实际上是在逻辑层面上的一个恶意行为体现个体。因此,利用进程集合来发现恶意行为将会更加准确。\n此外,本发明提出的进程集合是在经过过滤之后建立的。如此,在经过过滤处理后,原有的系统所提供的父子进程关系可能被忽略,而直接针对可疑的子进程建立相应的进程集合。\n例如,用户接口程序explorer.exe创建了a.exe和b.exe。在系统提供的进程世代关系看来,a.exe和b.exe为兄弟关系。但是,根据本发明提出的进程集合创建原则,父进程explorer.exe是个安全的进程不会被监视,其创建的a.exe和b.exe可能分别涉及不同的恶意行为,因而分别属于两个相互独立的进程集合。由此,a.exe和b.exe之间不再有任何关系。这样,经过进程过滤,原有的进程之间的世代关系就转换为逻辑功能上的关联关系。\n此外,进程集合中的多个相关进程的地位彼此平等。这种简单的结构使得进程集合的维护简便、搜索迅速。这些优点特别适合于实时监控系统的要求,不会由于行为分析过于复杂而影响计算机的性能,妨碍用户的正常使用。\n虽然关于优选实施例示范和描述了本发明,本领域技术人员将理解可以不脱离如下述权利要求规定的发明精神和范围做出多种改变和修正。
法律信息
- 2018-03-16
专利权人的姓名或者名称、地址的变更
专利权人由北京瑞星信息技术股份有限公司变更为北京瑞星网安技术股份有限公司
地址由100190 北京市海淀区中关村大街22号中科大厦1301室变更为100190 北京市海淀区中关村大街22号中科大厦1301室
- 2016-05-25
专利权人的姓名或者名称、地址的变更
专利权人由北京瑞星信息技术有限公司变更为北京瑞星信息技术股份有限公司
地址由100190 北京市海淀区中关村大街22号中科大厦1301室变更为100190 北京市海淀区中关村大街22号中科大厦1301室
- 2010-11-03
- 2010-05-19
专利申请权的转移
登记生效日: 2010.04.13
申请人由北京瑞星国际软件有限公司变更为北京瑞星信息技术有限公司
地址由100080 北京市中关村大街22号中科大厦1305室变更为100190 北京市海淀区中关村大街22号中科大厦1301室
- 2009-03-11
- 2009-01-21
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2006-02-01
|
2005-07-27
| | |
2
| |
2006-07-12
|
2004-12-31
| | |
3
| |
2005-06-08
|
2003-12-05
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |