发明内容
本发明正是为了解决现有技术的缺点而产生,并且更进一步地完善了基于程序行为分析地计算机防护方法,并为之提供了更有力系统解决方案,通过对程序或程序间的关联动作组成有意义的逻辑行为进行分析的方法,解决了现有杀毒软件、防火墙不能对未知病毒以及木马进行有效的防护的弊病。其目的在于提供一种计算机反病毒防护系统,能够主动有效的对新出现的病毒、木马的攻击进行拦截,保证计算机的安全。
本发明反病毒防护系统从与现有技术完全不同的途径,通过程序动作行为来定义计算机病毒概念,因此根据程序的行为是否符合病毒定义可以判断出病毒;并且通过人工分析程序行为是目前判断新病毒的唯一有效方法;因此,本发明提出了一种采用动态仿真方式的反病毒防护系统,依据程序行为识别病毒的一种新思路和它的实现方法。
本发明的计算机反病毒防护系统包括:程序判断部、程序监控部、关联性分析部、病毒识别知识库以及病毒防护识别部。
所述程序判断部:用于识别出用户计算机中存在的程序,并将这些程序分成正常程序和异常程序。
其中,所述正常程序包括:将计算机中的程序与后述已知程序知识库进行比对,识别出的所有的已知程序;计算机桌面上有图标的程序;出现在程序组中的程序以及由安装程序安装的程序;
其中,所述安装程序为,运行时有窗口,创建程序组或创建桌面图标,并且创建反安装项的程序。
所述异常程序为,上述正常程序以外的程序。正常程序,多数为已知程序,以及有确定来源的程序,因此其可靠性较高;但是异常程序,由于其来源不明,因此需要对其进行重点监控。
区分正常程序和异常程序其目的在于,模拟一个程序对计算机中的不同类型程序的影响。对于已知程序来说,由于其已经记录在本发明的计算机反病毒防护系统中的病毒识别知识库中,因此其可靠性非常高;而且对于由本发明所定义的安装程序创建的未知程序,由于其有可靠的来源,并且符合通常的程序安装过程,因此也可以认为该程序是正常程序。但是,对于其他的未知程序来说,由于可靠性无法估计,因此应该作为本发明重点监控的对象,即认为该程序有可能是有害程序,尤其是对于例如木马程序,一个木马程序一旦进入到安装有本发明的计算机反病毒识别系统的计算机中,或开始运行,即可被捕获,并根据本发明的区分正常程序和异常程序的方法被判断为异常程序,从而可以对其进行重点监控,同样蠕虫在进行远程攻击时,通常要攻击一个已知程序,一旦攻击成功,将生成一个程序,该程序也可以根据本发明被判断为异常程序;因此,区分正常程序和异常程序是本发明的一个重要组成部分。
所述程序监控部:监控、记录程序动作行为。该部分通过勾挂程序系统API(Application Programming Interface:应用编程接口)函数调用对程序进行监控、记录。在现有的操作系统中,程序执行时通常需要进行系统提供的API的调用,因此,只需要通过勾挂程序的系统API调用,即可对程序所执行的动作行为进行监控。
进行监控、记录动作行为包括:监控动作和危险动作。
所述监控动作,该动作可能影响计算机安全、需要对其进行实时监控;并且所述监控动作是计算机程序所执行的常见的动作,是多数的正常程序也必须执行的动作;所述监控动作,包括:文件操作;网络操作;创建进程、创建线程;注册表操作;窗口、托盘操作;堆栈溢出;注入线程;拦截系统API调用以及访问、修改和创建用户帐号。
所述危险动作,该动作首先是一个监控动作,在程序运行中,该动作可能威胁计算机安全;并且所述危险动作为少数正常程序会执行的动作,并且多数的病毒程序或木马程序需要执行的动作,因此执行这样的动作的程序具有危害性会更大,例如,程序自行改变运行层级,在微软Windows操作系统中,某程序自动从应用级(RING3)提升系统级(RING0)执行,只有少数的正常程序才具有这一特征,但是却是很多具有攻击性的病毒程序所共同具有的特征。
所述危险动作包括:调用SHELL程序;修改程序文件或写程序文件;调用FTP或TFTP;创建FTP或TFTP服务;发送邮件;浏览器或邮件系统自动运行其他程序;创建大量相同线程;修改和创建用户怅号;危险网络操作;向系统注册表添加启动项;修改系统启动文件;向其他进程注入线程;堆栈溢出;应用级进程自动提升为系统级进程操作;拦截系统API调用。
此外,还包括非监控动作,即不影响计算机安全无需进行监控的动作。
所述关联性分析部:创建关联树,并通过该关联树对程序动作行为进行关联性分析;
所述关联树包括加载关联树和创建关联树,其中:
所述加载关联树中,每个节点代表一个进程,保存该进程运行时的动作行为信息及其在创建关联树中的索引信息;并且每个节点的父节点是其父进程。所述加载关联树中每个节点所保存的信息包括:
PE文件的全路径、加载者全路径、文件有无描述、是否自启动、谁创建的自启动项、自身其他特征、是否被创建者启动、是否自己创建启动项、是否有窗口或托盘图标、父进程pid号、修改注册表项链表、网络动作链表。其中,所述注册表链表包括如下结构:
入口列表、键名、值名、值;所述网络动作链表包括如下结构:类型、本地端口、本地IP地址、远程端口、远程IP地址、使用协议。
所述创建关联树中,每个节点代表一个程序,保存有该程序文件创建时的相关信息及其在加载关联树中索引信息;并且每个节点的父节点是其创建者。本发明的计算机反病毒防护系统,其中,所述创建关联树中每个节点所保存的信息包括:
PE文件全路径、创建者的全路径、创建者的特性、创建者有无窗口、与创建者是否同一文件、拷贝自身。
其中,所述创建者特性为对系统中所有程序的分类,包括未知程序、其它已知程序、邮件系统、网络浏览器、网络交流系统,每个程序一定属于上述分类中的一种且仅属于上述分类中的一种。
由于计算机中的程序并不是仅仅通过一个程序的一个动作完成特定的功能,而是通过一个程序的一系列动作所组成的行为或是多个程序的一系列的动作所组成的行为才能实现,因此,基于这一特点,在本发明的计算机反病毒防护系统中,也需要根据前后相关联的多个进程的前后多个相关联的动作所组成的动作行为进行分析、判断。因此,本发明中建立了关联性分析部,以此对程序之间关联关系和程序的动作行为进行综合的分析判断。
所述病毒识别知识库:包括程序行为知识库和攻击识别规则库;其中,所述程序行为知识库为,通过前述程序监控部,逐一对合法的已知程序所执行的动作行为进行分析列表,并将所述分析列表进行存储的数据库。其结构描述包括:
程序ID、程序类型、程序运行层级、写PE文件权限、调用系统SHELL权限、网络行为和注册表操作。并且所述程序类型为程序分类枚举类型,分为可被缓冲区溢出攻击的程序和普通应用程序。其网络行为,其结构描述包括:
网络连接动作类型、使用端口数量以及连接描述;其中连接描述包括:本地端口、本地地址、远程端口、远程地址以及使用协议。其注册表操作,其结构描述包括:
该程序所操作的注册表项数、每项操作的键值。
并且,所述程序行为知识库,通过对本地计算机使用软件进行检查,添加与用户已经使用的已知程序相对应的已知程序行为的记录,作为本地计算机的程序行为知识库,并按照用户需要对用户将要使用的已知程序进行补充。
所述攻击识别规则库为,总结反病毒分析识别的规则,记录了计算机病毒、木马等有害程序的攻击行为特征的数据库,每一记录对应一类病毒,每一类病毒对应一个动作集,该动作集包括一系列动作及其之间特定的关联关系,该关联关系包括前后动作之间的时间关系及调用和被调用关系。
所述攻击识别规则库,其结构包括:可执行PE文件的全路径、创建者全路径、创建者的特性、创建者有无窗口、与创建者是否同一文件、是否拷贝自身、文件有无描述、是否自启动、谁创建的自启动项、是否被创建者启动、是否自己创建自启动项、是否有窗口或托盘图标、修改注册表项链表和网络动作链表;所述修改注册表项链表的子数据结构,包括:入口列表、键名、值名和值;所述网络动作链表的子数据结构,包括:类型、本地端口、本地地址、远程端口、远程地址和使用协议。
其中,所述攻击识别规则库,包括:
病毒规则一,
a)运行于用户层RING3的程序,转入系统核心层RING0运行;
病毒规则二,
b)该程序且不是杀毒软件,无窗口,并执行修改其他与该程序无关的程序文件的操作;
远程攻击规则一,
c)该程序通过监听端口接受数据后,立即调用SHELL程序;
远程攻击规则二,
d)该程序通过监听端口接收数据后,发生缓冲区溢出;
远程攻击规则三,
e)该程序通过监听端口接收数据后,立即调用一般文件传输协议TFTP程序;
邮件蠕虫规则一,
f)该程序由邮件系统自动生成,且该程序运行时修改注册表的自启动项,该程序无窗口、无托盘,并且立即开始发送邮件;
可疑木马规则一,
g)该程序由邮件系统自动生成,且该程序运行时修改注册表的自启动项,该程序无窗口、无托盘,并且立即开始创建监听端口;
网络病毒规则
h)如果一个异常程序运行时,其所有关联程序均没有窗口,且该异常程序复制自身,修改注册表,使自己或自身的备份具有系统自启动功能,并且执行了包括发送数据包、创建监听端口、将一个线程植入到其他进程中、创建全局钩子、发送邮件的动作。
蠕虫病毒规则
i)一个异常程序,该程序文件是由邮件系统或即时通讯软件接收到的,并且该程序运行后,指挥键盘或鼠标,并模拟用户的动作通过邮件系统自动发送邮件或通过即时通讯软件自动发送文件。
蠕虫病毒规则
j)一个异常的程序,该程序运行时无窗口,它创建10个以上相同的线程,在1秒钟内,每个线程均有发送数据包的动作。
如上所述,由于本发明的计算机反病毒防护系统在程序启动后对程序进行监控的同时,通过对程序进行了关联性分析,并建立了加载关联树和创建关联树,因此可以在以后在程序行为知识库和攻击规则识别库中进行比对的时候方便的进行相关信息的查询。
所述病毒防护识别部:接收前述程序监控部捕获的程序动作行为,结合前述程序判断部的信息,将捕获的动作行为与程序行为知识库或攻击识别规则库中的信息进行比较,并调用关联性分析部对该程序是否为病毒程序做出判断。
因此,如上所述本发明的计算机反病毒防护系统,可以根据其各部分的不同功能,进行相互间的通信,从而使病毒防护识别部对程序是否是病毒等有害程序作出准确的判断。
本发明的计算机反病毒防护方法,包括如下步骤:
17.1)计算机程序启动后,勾挂该程序的系统API函数调用;
17.2)监控将该程序的动作,并将该程序的动作记录到加载关联树中;
17.3)判断该动作是否为创建程序的动作;
17.4)如果该程序执行了创建程序的动作,则将程序创建信息添加到创建关联树中,判断被创建程序是否为正常程序,并进行记录;
如果该程序没有执行创建程序的动作,则判断该动作是否为危险动作;
17.5)如果该动作不是危险动作,则返回步骤17.2);如果该程序执行了危险动作,则通过病毒防护识别部判断该动作行为是否为有害程序行为;
17.6)如果判断结果不是有害程序行为,则返回步骤17.2);如果判断结果是害程序行为,则由病毒防护识别部对该程序作相应的处理。
本发明的计算机反病毒防护方法,所述步骤17.5)中,分别对已知程序和未知程序进行判断。
一方面,对于已知程序将其执行的危险动作与记录在程序行为知识库中的合法动作行为进行比较,判断其是否受到攻击;如果比较结果为合法程序则返回步骤17.2);如果比较结果为否,则证明该程序已经受到病毒攻击,并终止该程序继续运行。
另一方面,对于未知程序,将其执行的危险动作与病毒识别知识库的攻击识别规则库中所记录的规则相比对,并判断该程序是否为有害程序;
如果判断为是,则终止该程序运行;如果判断结果为否,则返回步骤17.2)。本发明的计算机反病毒防护方法,其中所述已知程序为记录在前述程序行为知识库中的程序,所述未知程序为除已知程序以外的其他程序。
本发明的计算机反病毒防护方法中,对已知程序是否受到攻击的判断,包括如下步骤:
20.1)监控并捕获该已知程序执行的危险动作;
20.2)将捕获的危险动作与程序行为知识库中的信息比较,判断是否为合法行为;
20.3)如果判断结果为是,则返回步骤20.1);如果判断结果为否,则根据程序行为知识库的定义,判断是否结束进程;
20.4)如果判断结果为是,则调用系统API结束该已知程序的当前进程;如果判断结果为否,则调用系统API结束该已知程序的当前线程。
其中,所述步骤20.3)中,知识库可以定义为,当系统进程被溢出时,调用系统API结束当前线程。为了保证系统的安全,通常需要将受到攻击的程序进程结束,但是在系统进程受到攻击时,则需要将当前线程结束以保证系统的稳定性。
本发明的计算机防病毒防护系统中,对未知程序是否为有害程序的判断,包括如下步骤:
23.1)监控并捕获该未知程序执行的危险动作;
23.2)判断是否为正常程序;
23.3)如果是正常程序,则将监控到的动作行为记录到程序行为知识库,并返回步骤23.1);如果不是正常程序,则与攻击识别规则库中的规则进行比对,判断是否为有害程序行为;
23.4)如果判断结果为否,则返回步骤23.1);如果判断结果为有害程序行为,则由用户确认是否允许当前动作;
23.5)如果用户确认允许当前动作,则将该程序标识为正常程序,将该动作行为记录到程序行为知识库,并返回步骤23.1);如果用户不允许该动作,则调用系统API函数结束该未知程序的当前进程。
另外,在步骤23.5)中,也可以根据用户的需要,选择直接调用系统API结束该未知程序的当前进程。
如上所述,为本发明的计算机反病毒防护系统的各组成部分及工作原理。
需要注意的是,本发明的计算机反病毒防护系统在分析有害程序行为时,并非仅仅依据程序的一个动作就作出判断,他要依据程序的来源、程序或程序组的一系列动作构成有意义的行为,才能做出判断是否是病毒。而这些信息早在程序开始运行或创建的当时就已经被关联性分析部记录到了加载树或创建树中,例如,一个木马,它为了在一台计算机中长期存在,它通常将自身拷到系统目录中,即它可能有两个以上的副本程序,这些程序运行时,互相配合工作,对于单个副本程序而言,可能很难判断出它是病毒行为,但是,如果结合其整体的加载和创建关系来判断,就很容易判定是病毒。程序关联性分析是本发明的一个重要组成部分。
具体实施方式
下面结合具体实施例对本发明的计算机反病毒防护系统和方法进行详细说明,为了理解方便理解本发明的内容,实施例中将以常用的微软Windows操作系统为例进行说明,但是本发明不仅仅局限于此。
本发明的计算机反病毒防护系统的方框图,如图1所示,包括:程序判断部、监控部、关联性分析部、病毒识别知识库、病毒防护识别部,每个部分都有其特定的功能。下面分别对各个部分进行详细的说明。
所述程序判断部,用于识别出用户计算机中存在的程序,并将这些程序分成正常程序和异常程序。其中正常程序包括:将计算机中的程序与后述程序行为知识库进行比对识别出的所有的已知程序,计算机桌面上有图标的程序,出现在程序组中的程序以及由安装程序安装的程序,经用户确认为正常的程序。其中所述安装程序为,运行时有窗口,创建程序组或创建桌面图标,并且创建反安装项的程序。所述异常程序,即,除前述正常程序以外的全部程序。
如上所述正常程序既是安全性较好的、可靠性较高的程序,因此,对于正常程序和异常程序的区分,可以为系统安全性的判断提供依据。
程序监控部:监控、记录程序动作行为。该部分通过勾挂程序系统API(Application Programming Interface:应用编程接口)函数调用对程序进行监控、记录。现有的操作系统,程序执行时通常需要进行系统提供的API的调用,因此,只需要通过勾挂程序的系统API调用,即可对程序所执行的动作行为进行监控。
计算机程序所执行的动作行为分为:监控动作、危险动作和非监控动作。
所述监控动作为,可能影响计算机安全,需要对其进行实时监控的动作;并且所述监控动作,是计算机程序所执行的常见的动作,是多数的正常程序也必须执行的动作。
并且所述监控动作包括:文件操作;网络操作;创建进程、创建线程;注册表操作;窗口、托盘操作;堆栈溢出;注入线程;拦截系统API调用以及访问、修改和创建用户帐号。
所述危险动作,该动作首先是一个监控动作,在程序运行中,该动作可能成胁计算机安全;并且所述危险动作为少数正常程序会执行的动作,但多数的病毒程序或木马程序需要执行的动作,因此执行这样的动作的程序具有危害性会更大,例如,程序自行改变运行层级,在微软Windows操作系统中,某程序自动从应用级(RING3)提升系统级(RING0)执行,只有少数的正常程序才具有这一特征,但是却是很多具有攻击性的病毒程序所共同具有的特征。
并且所述危险动作包括:调用SHELL程序;修改程序文件或写程序文件;调用FTP或TFTP;创建FTP或TFTP服务;发送邮件;浏览器或邮件系统自动运行其他程序;创建大量相同线程;修改和创建用户帐号;危险网络操作;向系统注册表添加启动项;修改系统启动文件;向其他进程注入线程;堆栈溢出;应用级进程时自动提升为系统级进程操作;拦截系统API调用。
关联性分析部:创建关联树,并通过该关联树对程序动作行为进行关联性分析。其中,关联树包括加载关联树和创建关联树。
加载关联树中,树中每个节点代表一个进程,保存该进程运行时的动作行为信息及其在创建关联树中的索引信息;并且每个节点的父节点是其父进程;其节点的实体结构为:
struct RuntimePEFileInMem
{
Char FileName[MAX_PATH];//PE文件全路径
Char LoaderFileName[MAX_PATH];//加载者全路径
Char LoaderDescription;//文件有无描述
CharAutoRun;//是否自启动
Char WhoWriteAutoRun;//谁创建的自启动项,
0未知;
1自己;
创建者;
Char CharacterOfSelf;//自身其他特性
BOOLEAN RunByCreator;//是否被创建者启动
BOOLEAN RunBySelf;//是否自己创建启动项
BOOLEAN CreateWindow;//是否有窗口或托盘图标
UNIT ppid;//父进程pid
LIST_ENTRY RegList;//修改注册表项链表
LIST_NET ListNetAction;//网络动作链表
}
其中RegList结构如下
struct REG_DATA
{
:LIST_ENTRY List;
char Key[];
char ValueName[];
char Value[];
}
struct LIST_NET
{
int type;
short lport;
IPADDR lipaddr;
short dport;
IPADDR dipaddr;
short protocol;
};
并且,如图2所示,以微软Windows操作系统中加载MSN和ICQ软件为例,对所述加载关联树的结构进行详细说明。
如图所示,显示了系统进程加载的关联关系,对于本技术领域的工作人员可以清楚掌握各个进程的加载关系,并且可以理解,从计算机启动开始首先加载system进程然后逐步到各个用户的软件,因此,加载关联树是随着系统各个时间的不同在不断变化更新的。建立该加载关联树可以方便了解计算机中的各个进程的运行状态,并且方便进程的管理。
所述创建关联树中,树中每个节点代表一个程序,保存有该程序文件创建时的相关信息及其在加载关联树中索引信息;并且每个节点的父节点是其创建者。
其中,所述创建关联树中每个节点所保存的信息包括:
PE文件全路径、创建者的全路径、创建者的特性、创建者有无窗口、与创建者是否同一文件、拷贝自身。
其中,所述创建者特性为,包括未知程序、其它已知程序、邮件系统、网络浏览器、网络交流系统在内的一种。其实体结构如下:
struct StaticPEFileInMem
{
Char FileName[MAX_PATH];//PE文件的全路径
Char CreatorName[MAX_PATH];//创建者全路径
Char CharacterOfCreator;//创建者特性:
-1未知程序;
0其他已知程序;
1邮件程序;
2网络浏览器;
3网络交流系统(如MSN、ICQ)
Char NoWindowOfCreator;//创建者有无窗口
Char SameAsCreator;//与创建者是同一个文件
Char CopySelf;//拷贝自身
}
并且,如图3所示,以微软Windows操作系统为例,对所述创建关联树的结构进行详细说明。
如图所示,显示了系统程序创建的关联关系,对于本领域工作人员可以清楚掌握各个程序的创建关系,并且可以理解,该MSN以及OUTLOOK程序是由misexec程序创建的,该创建关系记录了程序创建最初的父子关系,因此创建关联树一旦创建,即作为系统的日志被保存下来供以后使用,因此所述创建关联树在计算机运行过程中是不变的。
病毒识别知识库:包括程序行为知识库和攻击识别规则库。
其中,所述程序行为知识库为,通过前述程序监控部,逐一对合法的已知程序所执行的动作行为进行分析列表,并将所述分析列表进行存储的数据库。
其结构描述包括:程序ID、程序类型、程序运行层级、写PE文件权限、调用系统SHELL权限、网络行为和注册表操作。并且所述程序类型为程序分类枚举类型,分为可被缓冲区溢出攻击的程序和普通应用程序。其网络行为,其结构描述包括:网络连接动作类型、使用端口数量以及连接描述;其中连接描述包括:本地端口、本地地址、远程端口、远程地址以及使用协议。其注册表操作,其结构描述包括:该程序所操作的注册表项数、每项操作的键值。
所述程序行为知识库结构实体描述如下:
struct Know
{
DWORD type1;//程序分类枚举类型,目前暂时分为可被缓冲区
溢出攻击的程序和普通应用程序两类,描述为,
enum KnowType{OVERFLOW,NORMAL}
BOOL bAllowedWriteFile;//该程序是否可以写可执行PE文件
BOOL bCreateShell;//该程序是否可以调用系统shell
DWORD NetOffset;//在知识库文件中偏移多少的位置为对该程
序网络行为的描述
DWORD RegOffset;//在知识库文件中偏移多少的位置为对该
程序注册表操作行为的描述
};
在程序行为知识库中使用以下分结构描述该程序的网络动作行为的结构实体描述为:
struct Net
{
short type2;//网络连接的动作类型,分为两类,监听和连接,描
述为,
enum NetType{Listen,Connect}
int num;//涉及到的端口数量
ListenPort port[];
};
其中,ListenPort,针对每一个连接的具体描述,使用如下结构表示,
struct ListenPort
{
short lport;//使用的本地端口
IPADDR lipaddr;//使用的本地地址
short dport;//所连接的远程端口
IPADDR dipaddr;//所连接的远程地址
short protocol;//所使用的协议,使用TCP/IP协议定义
};
在程序行为知识库中使用以下分结构描述该程序的注册表操作动作行为的结构实体描述为:
struct Reg
{
int num;//操作的注册表项数
char fullregname[];//每一项操作的键值
};
并且,所述程序行为知识库,通过对本地计算机使用软件进行检查,添加与用户已经使用的已知程序相对应的已知程序行为的记录,作为本地计算机的程序行为知识库,并按照用户需要对用户将要使用的已知程序进行补充,从而可以节省系统资源的占用。
所述攻击识别规则库为,总结反病毒分析识别的规则,记录了计算机病毒、木马及有害程序的攻击行为特征的数据库,每一记录对应一类病毒,每一类病毒对应一个动作集,该动作集包括一系列动作及其之间特定的关联关系,该关联关系包括前后动作之间的时间关系及调用和被调用关系。
所述攻击识别规则库,其结构包括:可执行PE文件的全路径、创建者全路径、创建者的特性、创建者有无窗口、与创建者是否同一文件、是否拷贝自身、文件有无描述、是否自启动、谁创建的自启动项、是否被创建者启动、是否自己创建自启动项、是否有窗口或托盘图标、修改注册表项链表和网络动作链表;所述修改注册表项链表的子数据结构,包括:入口列表、键名、值名和值;所述网络动作链表的子数据结构,包括:类型、本地端口、本地地址、远程端口、远程地址和使用协议。
其中,每一记录的数据结构实体为:
struct UnknowPEFileInMem{
Char WeighofDanger;//危险权值
Char FileName[MAX_PATH];//新创建的PE文件的全路径
Char CreatorName[MAX_PATH];//创建者的全路径
Char CharacterOfCreator;//创建者的特性
Char NoWindowOfCreator;//创建者有无窗口
Char SameAsCreator;//与创建者是同一个文件
Char CopySelf;//拷贝自身,对于创建者是CopySelf,对于被复
制的文件是SameAsCreator,以此来区分两者
Char FileDescription;//文件有无描述
Char AutoRun;//是否自启动
Char WhoWriteAutoRun;//谁创建的自启动项
BOOLEAN RunByCreator;//是否被创建者启动
BOOLEAN RunBySelf;//是否自己创建启动项
BOOLEAN bCreateWindow;//是否有窗口或托盘图标
LIST_ENTRY RegList;//修改注册表项链表
LIST_NET ListNetAction;//网络动作链表
}
上述创建者的特性“CharacterOfCreator”的具体数据记录及描述是:
-1:未知程序;
0:其它已知程序;
1:邮件系统;
2:网络浏览器;
3:网络交流系统(如QQ、MSN等);
上述谁创建的自启动项“WhoWriteAutoRun”的具体数据记录及描述是:
0:未知;
1:自己;
2:创建者;
3:自己,创建者都会写
其中修改注册表项链表的子数据结构实体为。
struct REG_DATA
{
LIST_ENTRY List;//入口列表
char Key[];//键名
char ValueName[];//值名
char Value[];//值
}
其中网络动作链表的子数据结构实体为:
struct LIST_NET
{
int type;//类型
short lport;//本地端口
IPADDR lipaddr;//本地IP地址
short dport;//远程端口
IPADDR dipaddr;//远程IP地址
short protocol;//使用协议
};
其中,所述攻击识别规则库,包括:
病毒规则一,
a)运行于用户层RING3的程序,转入系统核心层RING0运行;
病毒规则二,
b)该程序且不是杀毒软件,无窗口,并执行修改其他与该程序无关的程序文件的操作;
远程攻击规则一,
c)该程序通过监听端口接受数据后,立即调用SHELL程序;
远程攻击规则二,
d)该程序通过监听端口接收数据后,发生缓冲区溢出;
远程攻击规则三,
e)该程序通过监听端口接收数据后,立即调用一般文件传输协议TFTP程序;
邮件蠕虫规则一,
f)该程序由邮件系统自动生成,且该程序运行时修改注册表的自启动项,该程序无窗口、无托盘,并且立即开始发送邮件;
可疑木马规则一,
g)该程序由邮件系统自动生成,且该程序运行时修改注册表的自启动项,该程序无窗口、无托盘,并且立即开始创建监听端口;
网络病毒规则
h)如果一个异常程序运行时,其所有关联程序均没有窗口,且该异常程序复制自身,修改注册表,使自己或自身的备份具有系统自启动功能,并且执行了包括发送数据包、创建监听端口、将一个线程植入到其他进程中、创建全局钩子、发送邮件的动作。
蠕虫病毒规则
i)一个异常程序,该程序文件是由邮件系统或即时通讯软件接收到的,并且该程序运行后,指挥键盘或鼠标,并模拟用户的动作通过邮件系统自动发送邮件或通过即时通讯软件自动发送文件。
蠕虫病毒规则
j)一个异常的程序,该程序运行时无窗口,它创建10个以上相同的线程,在1秒钟内,每个线程均有发送数据包的动作。
病毒防护识别部:接收前述程序监控部程序捕获的动作行为,结合前述程序判断部的信息,将捕获的程序动作行为与病毒识别知识库中的信息进行比较,并在需要时调用关联性分析部对该程序是否为病毒程序做出判断。
值得注意的是,本发明的计算机反病毒防护系统是对程序动作行为进行分析,从而判断该程序是否是有害程序,因此,在病毒识别知识库中进行查找时,并不仅仅对该程序当前动作进行查找,同时还需要结合该程序前一动作,对程序整个的行为进行分析判断。
下面以病毒攻击为例,对本发明的实施例作详细说明。
对于一个已知程序,如果程序行为描述为不能修改程序文件,当该程序运行时,却修改了其他程序文件,上述危险动作被系统监控,然后与程序行为知识库中存储的该已知程序的合法动作行为相比较,产生不同的动作,因此可以判断该已知程序一定是被病毒感染。利用这一方法可以发现CIH等病毒,对于被CIH等病毒感染的已知程序运行时,该已知程序就会试图感染其他PE文件,因此可以在对病毒并不了解的情况下,将其阻止,从而避免了由于病毒代码更新的滞后性而使新生的病毒有机可乘。
下面利用拦截震荡波病毒,对本发明的实施例作以说明:震荡波蠕虫病毒与其他蠕虫病毒不同,并不发送邮件,其工作原理为,在本地开辟后门。监听TCP 5554端口,做为FTP服务器等待远程控制命令。病毒以FTP的形式提供文件传送。黑客可以通过这个端口偷窃用户机器的文件和其他信息。病毒开辟128个扫描线程,以本地IP地址为基础,取随机IP地址,疯狂的试探连接445端口,试图利用windows操作系统中的LSASS中存在一个缓冲区溢出漏洞进行攻击,一旦攻击成功会导致对方机器感染此病毒并进行下一轮的传播。
当感染了震荡波病毒的的计算机发出攻击包至使用了本发明的防护系统时,本地计算机的LSASS进程溢出,溢出代码会调用GetProcAddress,就会被本发明的监控机制捕获,判断为缓冲区溢出,而且在溢出前,LSASS进程会从系统的139,445端口接收数据,这与上述d)规则所提供的规则相符;因此本发明可以准确判断出该远程攻击,于是系统调用ExitThread,将这个线程结束,从而使震荡波蠕虫无法进入下一步的动作,有效保护了本地计算机。
下面再利用截获著名的反弹行木马黑洞对本发明的实施例作以说明:由于其属于未知程序,该进程启动即被本发明的监控系统捕获,同时该程序没有创建应用程序窗口及系统托盘区图标;并且该程序启动后会修改注册表启动项,以保证自己可以在下次用户登录时自动启动,此动作行为也是危险动作,因此也被本发明的监控系统捕获,该进程继续执行将会连接远端web服务器以获得客户端服务的地址、端口信息,以便与其建立连接进行信息传输,此连网动作被捕获后,将上述动作一同与攻击识别规则库中的规则比较,符合攻击识别规则库中的规则g),便可判断为可疑木马,并向用户报警,同时说明该非法程序的属性为可疑木马,以便用户更准确的了解信息,避免了现有防火墙系统只要发生网络动作便报警,而且需要用户对报警动作安全性做出判断,避免了计算机知识较少的用户在使用防护系统时产生麻烦。
网络神偷系木马软件,通过邮件等形式进入用户计算机系统。它首次运行时,会将自己拷贝到系统目录下,并设置隐含属性。然后将其系统目录下的副本启动,自己就退出了。其副本运行时发现在自己在系统目录下,则不做拷贝动作,直接修改注册表启动项,把自己设置为自启动,然后根据自身携带的远端服务器信息,连接远端服务器,提供当前计算机信息,并接受远程控制。当此副本试图将本机信息传送到远程服务器时,触发本发明的反病毒防护系统对此程序的判断,首先它是异常程序,通过创建关系发现其创建者也是异常程序,并且创建此副本时没有窗口,且拷贝自身。通过进程关联树发现其加载者与创建者是同一个程序,且此副本设置了自启动项,那么我们可以知道这是该程序首次运行,如果不是首次运行,则其加载者应为Explorer,同时其尝试向一个远程地址发送数据包,则可准确判断该病毒是与规则h)相符合,并且可以根据此病毒的创建关系,知道该病毒的来源,比如来自邮件系统,则可根据这个信息进一步查找肇事者。
MSN性感鸡病毒,此病毒模拟联系人向用户发送自身,用户误操作将其保存并运行,该病毒的创建者即为MSN,其通过指挥键盘或鼠标,模拟用户向MSN联系人发送自身,完成病毒传播。因此该病毒符合规则i),可以确定为有害程序。
并且,由于本发明的计算机反病毒防护系统在程序启动后对程序进行监控的同时,通过对程序进行了关联性分析,并建立了加载关联树和创建关联树,因此可以方便的在对程序行为进行分析时对相关信息进行调用,实现在病毒识别知识库中进行高效的查找,也节省了系统开销。
由于病毒的多样性,但是作为有害程序,该病毒程序的破坏方法每一类病毒都有其共同点,因此只要掌握一类病毒程序其破坏的动作行为的共同点,就可以有效的发现并在其破坏计算机系统之前将其停止。本发明正是根据病毒程序的这一特点而产生的,不但具有与现有杀毒软件相比更高的执行效率更少的系统开销,而且最重要的是可以有效地保护计算机系统不被那些新产生的病毒、木马等有害程序破坏。
为了使本发明的实现方法更加清晰,现对本发明的计算机防护方法进行详细说明。
如图1所示本发明的计算机反病毒防护系统的方框图。如图所示,程序监控部将捕获的程序监控动作和危险动作发送至关联性分析部以建立加载树和创建树;同时通过危险动作触发病毒防护识别部对程序行为进行分析;在分析过程中,病毒防护识别部还需要调用程序判断部、病毒识别规则库和关联性分析部中的信息完成对程序动作行为是否有害的判断。
如图4所示,本发明的计算机反病毒防护系统的方法包括如下步骤:
17.1)计算机程序启动后,勾挂该程序的系统API函数调用;
17.2)监控将该程序的动作,并将该程序的动作记录到加载关联树中;
17.3)判断该动作是否为创建程序的动作;
17.4)如果该程序执行了创建程序的动作,则将程序创建信息添加到创建关联树中,判断被创建程序是否为正常程序,并进行记录;
如果该程序没有执行创建程序的动作,则判断该动作是否为危险动作;
17.5)如果该动作不是危险动作,则返回步骤17.2);如果该程序执行了危险动作,则通过病毒防护识别部判断该动作行为是否为有害程序行为;
17.6)如果判断结果不是有害程序行为,则返回步骤17.2);如果判断结果是害程序行为,则由病毒防护识别部对该程序作相应的处理。
本发明的计算机反病毒防护方法中,所述步骤17.5)采用,对已知程序和未知程序分别进行判断的方法,对于已知程序,将该程序的动作行为与程序行为知识库记录的已知程序的合法动作行为进行比对;对于未知程序,将该程序的动作行为与攻击识别规则库中记录的规则进行比对;从而可以分别判断出已知程序是否受到病毒攻击以及未知程序是否为有害程序。下面将对病毒防护识别部中对已知程序和未知程序进行判断以及处理的步骤进行详细说明。
如图5所示,判断已知程序是否受到攻击,包括如下步骤:
20.1)监控并捕获该已知程序执行的危险动作;
20.2)将捕获的危险动作与程序行为知识库中的信息比较,判断是否为合法行为;
20.3)如果判断结果为是,则返回步骤20.1);如果判断结果为否,则根据程序行为知识库的定义,判断是否结束进程;
20.4)如果判断结果为是,则调用系统API结束该已知程序的当前进程;如果判断结果为否,则调用系统API结束该已知程序的当前线程。
其中,所述步骤20.3)中,知识库的定义为,当系统进程被溢出时,调用系统API结束当前线程。
由于在已知程序中,有相当一部分程序其功能是系统的底层服务,如果直接将这些程序结束,会使系统重启,以致系统瘫痪。因此,在本发明中,对于程序行为知识库中的程序进行了定义,仅当那些系统程序被溢出攻击的时候才结束其当前线程。如上所述,即保证系统的安全,又可以不影响系统的工作,使系统稳定运行,避免了现有的病毒防火墙工具,由于对系统中的重要服务的程序病毒进行检查时,杀灭病毒的同时,使系统中重要的程序文件造成损坏,影响系统的稳定性。例如微软Windows操作系统中,Lsass.exe为系统服务程序,如果该程序可能受到溢出攻击,则不能将其进程结束,这样会使系统重启造成系统不稳定;因此,按照本发明的方法及程序行为知识库中对其定义,将该程序发生溢出攻击的线程结束,这样,即可以保证系统安全,又能够组织有害程序对系统的侵害;又如微软Word文字编辑软件,也存在溢出攻击的危险,但是由于其不是系统服务软件,因此根据本发明的方法及程序行为知识库的定义,可以将整个Word进程结束,以此保护了系统的安全。
如图6所示,判断未知程序是否为有害程序,包括如下步骤:
23.1)监控并捕获该未知程序执行的危险动作;
23.2)判断该未知程序是否为正常程序;
23.3)如果是正常程序,则将监控到的动作行为记录到程序行为知识库,并返回步骤23.1);如果不是正常程序,则与攻击识别规则库中的规则进行比对,判断是否为有害程序行为;
23.4)如果判断结果为否,则返回步骤23.1);如果判断结果为有害程序行为,则由用户确认是否允许当前动作;
23.5)如果用户确认允许当前动作,则将该程序标识为正常程序,将该动作行为记录到程序行为知识库,并返回步骤23.1);如果用户不允许该动作,则调用系统API函数结束该未知程序的当前进程。
另外,在步骤23.5)中,也可以根据用户的需要,选择直接调用系统API结束该未知程序的当前进程。这样,更方便了那些计算机知识较少的用户的使用。
如上所述,本发明的计算机反病毒防护系统,不但可以有效的对已知的病毒程序进行拦截,同样可以主动检测出未知的病毒、木马等有害程序的存在并将其拦截,从而保证计算机系统的安全。
并且,本发明的计算机反病毒防护系统从根本上避免了现有的杀毒软件只能识别出已有病毒,且对于病毒库更新永远落后于新病毒产生的弊端,建立崭新的计算机反病毒防护体系,对于计算机安全领域具有划时代的意义。
通过上述的说明内容,本发明领域相关工作人员完全可以在不偏离本项发明技术思想的范围内,进行多样的变更以及修改。因此,本项发明的技术性范围并不局限于说明书上的内容,必须要根据权利范围来确定其技术性范围。