首页> 中国专利> 一种利用代理技术实现计算机病毒防治的方法

一种利用代理技术实现计算机病毒防治的方法

摘要

本发明涉及一种利用代理技术实现计算机病毒防治的方法,具体步骤:1)分成管理器和代理两个软件成分,正常安装软件时向管理器登记,由管理器将安装的所有可执行文件的文件名、文件长度等特征作为一个记录存入管理器中的一个数据库中;2)每当有新进程创建时就向管理器发出事件报告;3)管理器接收到进程创建报告后以获得的文件名为键值查询数据库,3.1)如查不到原始记录就说明发现了非正常安装的软件。3.2)如果查到原始记录,则向代理获取其文件长度并与原始记录比对,如不相符就说明有可能已感染病毒。本发明优点是:利用代理技术实现,简单有效、不依靠病毒库、无需扫描比对病毒特征串、能对非正常代码的执行即时发出警告。

著录项

  • 公开/公告号CN1728035A

    专利类型发明专利

  • 公开/公告日2006-02-01

    原文格式PDF

  • 申请/专利权人 毛德操;

    申请/专利号CN200510060205.X

  • 发明设计人 毛德操;

    申请日2005-07-27

  • 分类号G06F1/00(20060101);

  • 代理机构33101 杭州九洲专利事务所有限公司;

  • 代理人陈继亮

  • 地址 310007 浙江省杭州市黄龙洞世贸中心写字楼C12浙大网新科技有限公司

  • 入库时间 2023-12-17 16:59:29

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2008-12-17

    专利申请权、专利权的转移(专利权的转移) 变更前: 变更后: 登记生效日:20081107 申请日:20050727

    专利申请权、专利权的转移(专利权的转移)

  • 2007-12-05

    授权

    授权

  • 2006-03-29

    实质审查的生效

    实质审查的生效

  • 2006-02-01

    公开

    公开

说明书

                                   技术领域

本发明涉及计算机病毒的防治,主要是一种利用代理技术实现计算机病毒防治的方法。

                                   背景技术

计算机病毒的防治是个很使人头痛的问题,企业环境下的计算机病毒防治更是有着特别重要的意义。目前主流病毒防治技术的基础是在受关注对象的内容中比对各种病毒的特征字节串(也称为病毒的“签名”)。从防的角度着手,就是在防火墙上对来自网上的内容进行扫描/比对,看是否出现某种已知病毒的特征,如果发现就加以过滤,即丢弃载有病毒的IP包,或断开已经建立的TCP连接。从治的角度着手,就是在计算机上安装杀毒软件,对机器上的文件进行扫描/比对,看是否带毒,如果是就加以删除或修复。这样的方法有两大缺陷:

1)首先是效率低。以防火墙为例,就要对流入防火墙的IP包的内容加以扫描/比对,而且还不只是跟一个特定病毒的特征比对,而是要跟许多不同病毒的特征比对。这么大的计算量显然不是常规的CPU所能承受,所以得要采用ASIC、网络处理器等等技术手段才行,这就使得有关设备的复杂度和价格都大大提高。甚至,如果需要比对/检测的病毒数量足够多,或者说“病毒(特征)库”足够大的话,即使采用ASIC或网络处理器也不现实。

2)计算机病毒的变化很快,哪怕病毒库更新得再快,也没有一个病毒库可以说是绝对完整的。许多杀毒软件之所以不能有效杀毒,就是因为有些病毒的特征不在这杀毒软件的病毒库中,因此成为漏网之鱼。

另一种技术称为“文件完整性检查”,这种技术不再关心病毒的代码上的特征,而改以监视软件的行为和病毒感染后的症状和踪迹为基础来实现病毒的防治。人们日常所说的“病毒”严格地说应该称为“恶意代码”,实际上包括病毒、臑虫、木马等不同类型。但是,所有这些恶意代码都有个共同点,就是都会在受感染的系统中有某些行为并留下一些踪迹,这一方面是恶意代码运行的后果,另一方面又是它进一步扩大损害的手段。这样的踪迹主要有两种:

1)对已有可执行代码的篡改。由于文件是可执行代码的主要存在形式,这主要体现为(可执行)文件篡改。

2)可执行代码的潜入。同样,由于文件是可执行代码的主要存在形式,这主要体现为(可执行)文件潜入。

前者是病毒的行为特征,后者是臑虫和木马的行为特征。一言以敝之,就是系统中的可执行代码集合发生了非预期的改变。这里的所谓“完整性(Integrity)”有“正宗”的意思。

“文件完整性检查”的思路就是:在安装软件时将所有可执行软件的原始形态特征(例如文件的大小、CRC或奇偶校验计算的结果、甚至用MD5一类算法生成的“签名”等等)纪录存档,每当启动执行/装入一个软件时就读取其当前的形态特征并与原始纪录加以比对,如果不符就说明该可执行软件已经受到篡改,如无原始记录就说明这是个非正常安装的软件(也可能是使用者不按规定流程私自安装的软件)。检测到这种情况以后,就可以对目标主机实行进一步的杀毒处理,或者简单地删除有关的可执行文件、或以原始文件的副本加以替换。

开源软件Tripwire就是这种技术的一种典型实现。虽然Tripwire是Unix/Linux操作系统上的软件,但是把它移植到Windows上并非难事。

然而以Tripwire为代表的“文件完整性检查”还有缺陷,主要是:

1.文件完整性检查的根据是一个数据库和一张监视名单,每过一定时间就检查名单上所有的文件,将文件的特征与数据库中的原始记录比对。但是监视名单往往很大,所以每次检查时虽然不至于像按病毒特征扫瞄比对哪样费事,但为此而增加的系统开销仍很可观。这还只是应付了对文件的篡改。这里的问题在于检查的范围太宽而缺乏针对性。

2.要对付文件的潜入,就要看系统中是否出现了监视名单中没有的可执行文件,而这很可能要求扫描整个文件系统,这就更加重了系统的负担。如果说对文件篡改的检测已经缺乏针对性,那么对文件潜入的检查范围就更是大而无边了。

3.正因为这样,文件完整性检查只是过一段时间运行一遍,例如每天深夜运行一遍。这样,时效性就不强了,恶意代码对系统的损害很可能在检测到它的存在之前就已扩大。

本发明所述方法就是针对常规“文件完整性检查”技术的改进。其主要特征是对可执行文件的完整性检查是在启动/执行或者装入/连接时即时地、针对地进行,执行那一个文件就检查哪一个文件,而不是大规模的普查。这样做的理由是:即使恶意代码已经存在,只要不执行,其后果就不会扩大。另一方面,由于是即时的检查,在发现异常时很可能还来得及制止。也就是说,这种方法抓的是现行而不是潜伏。而这种方法的实现,特别是在网络环境下的实现,则有赖于代理技术。代理技术,特别是微软的WMI技术、以及Windows操作系统对WMI的支持,为本方法的实施提供了方便而有效的手段。

微软的WMI,意为“视窗管理手段(Windows Management Instrumentation)”,是对WBEM、即“基于Web的企业管理(Web Based Enterprise Management)”框架的一种实现。九十年代中期,人们就认识到传统“网络管理”及其规程SNMP对于企业环境下的内网资源管理存在许多不足之处,因而提出了“基于Web的企业管理”这么个概念和框架、并制定了一些标准。

虽然WBEM与SNMP有不同的标准和规程,并且WBEM更贴近“面向对象的程序设计”,二者的本质却是相同的,都属于代理(agent)技术,就是在受管的机器或设备中有个充当管理者代理的软件成分,按约定将其驻地的各种情况向管理者报告,或接受管理者的询问。所不同的是,对于网中的各台主机而言,WBEM代理所提供的信息在广度上和深度上都远远超过SNMP代理(SNMP agent),因为WBEM主要是面向主机管理的,而SNMP主要是面向网络设备管理的。代理的作用和价值只有通过管理者、或“管理器”才能体现出来。管理器接收来自代理的事件报告,也可以向代理询问/收集某些信息,还可以要求代理在其驻地执行某些操作。也有人把代理称为“服务端”、把管理器称为“客户端”,因为代理是为管理器服务的。管理器和代理一般在不同的机器上,但也可以在同一台机器上。

有了WBEM之后,传统的网管就可以扩展到对于网中各主机上许多行为细节的监视。例如,可以要求各台主机中的WBEM代理每当系统中启动一个“任务”即进程时就发出一个报告,称为“事件”,并在事件报告中提供所启动任务所运行的软件文件名及其路径,例如“C:\Windows\notepad.exe”。又如,还可以要求各个代理每当系统装入一个“动态连接库”即.dll文件时就发出一个事件报告。这样,集中的网管软件就可以监视各台主机上的各种活动,以提供统计、报表、存档、报警、干预等等功能,本发明就是利用这种机制来实现病毒防治。自从有了WBEM框架、并制定出有关标准以后,许多企业就开始来实现WBEM和开发有关的产品,微软就是其中比较积极的一家,而微软对WBEM的实现就称为WMI。从Win95/98开始,微软就开始支持WMI,即提供WMI代理,不过那是作为选件提供的。但是,到了Win2000,对WMI的支持就包含在标准配置中了。这正好为本发明的实施提供了方便和基础,因为这样就不必再来开发并在各台主机上安装代理软件了。

这样,WMI代理在管理器的要求下监视其驻地的进程活动,发现创建进程或装入插件时就向管理器报告,管理器就来检查有关文件的完整性(正当性),发现异常即发出警报。进一步,还可以要求WMI代理强行终结目标进程。

当然,更好的办法是在启动执行前先通过一段“外挂”的程序检查可执行代码的完整性,如果有问题就根本不创建进程。这在Linux操作操作系统上不难实现,因为它的源代码是公开的。而在Windows上,则需要由微软提供“外挂”的手段。

                               发明内容

本发明针对采用扫描/比对病毒特征的方法以及文件完整性检查方法的不足和缺点,提供了一种利用代理技术实现的简单有效、不依靠病毒库、无需扫描比对病毒特征串、能对非正常代码的执行即时发出警告和采取应对措施的计算机病毒防治方法。

这种方法通过管理器和代理双方的协作实现病毒防治,管理器和代理一般在不同的机器上,但是也可以在同一台机器上。这里所述的管理器和代理都是软件,代理软件嵌入在受管理的主机中。双方通过以下步骤实现对计算机病毒的防治:

1)管理器维持着一个数据库,数据库中记录了所有已正常安装的软件的特征。要正常安装一个软件(包括操作系统本身)时,须先将安装盘交给管理员登记,管理员运行管理器的一个登计软件,该软件执行下列操作:

1.1)对安装盘上的内容进行解压缩,恢复出所有的可执行文件,包括但不限于(以Windows为例).exe、.dll、.sys、.ocx、.scr、等等。

1.2)获取每个可执行文件的大小,以及版本号等信息。

1.3)进一步,作为可选项,还可以对每个可执行文件进行CRC校验和/或奇偶校验计算,或更复杂的签名计算(如MD5和SHA等),获取计算的结果。

1.4)可以使用多种不同计算方法来进一步加强抗篡改的能力。既可以对同一个文件进行多种计算,并记录多个结果;也可以对不同的文件随机选用不同的计算方法,并把所使用的计算方法也纪录下来。

1.5)将每个可执行文件的文件名、大小、CRC校验和/或奇偶校验计算的结果等信息作为一个纪录存入数据库。纪录中还可包括版本号、提供者、按装的批准人等面向管理的信息。

注意,这里所说的数据库是逻辑意义上的,实际的实现可以有多种形式,例如也可以是个数据文件。

此外,也可以在管理器的文件系统中为所有正常安装的可执行文件都保留一个原始副本,以备日后受到篡改时加以恢复。

2)管理器要求各台受管主机上的代理每当所在主机启动一个任务(进程)时就提供一个事件报告,报告中包括(但不限于)所执行文件的文件名与进程号。报告中也可以包括所执行文件的路径(例如“C:\windows\system32\notepad.exe”)。

3)驻在各目标主机中的代理接到管理器的指令以后就开始监视所在主机中的进程创建,并在发生创建进程时向管理器发送报告。

4)进一步,管理器还可以要求各台受管主机上的代理每当所在主机装入一个可执行插件时(如Windows上的.dll文件、.sys文件等等)就提供一个事件报告,报告中包括(但不限于)所装入可执行文件的路径与文件名。

5)代理接到管理器的指令以后就开始监视可执行软件模块的装入,并在发生装入时向管理器发送报告。

6)在收到某个代理发来的创建进程事件报告时,如果报告中不包含可执行文件的路径,则管理器可以进一步向代理查询所执行文件的路径。代理予以回答。

7)获知目标文件的路径以后,管理器根据路径与文件名向代理发出读取该目标文件有关特征信息的请求,包括(但不限于)文件的大小等等。

8)进一步,管理器还可以要求代理就地计算目标文件的CRC校验和/或奇偶校验计算的结果,并将结果发回给管理器。或者,也可以要求代理将整个目标文件发送给管理器,由管理器自行计算。

9)代理按管理者的要求从文件系统获取有关信息,并立即将有关信息发回管理器。

10)取得目标文件的文件名、大小、和/或CRC校验/奇偶校验等计算的结果以后,管理器以文件名为条件查询其数据库。

11)如果查不到具有相同文件名的原始纪录,那么目标文件是个非正常安装的软件,管理器发出警报并记入日志。

12)如果查到具有相同文件名的原始纪录(可以不止一个),就将新获取的文件大小、CRC、校验/奇偶校验计算的结果等参数与原始记录比对,如不相符就说明该文件已经受到篡改,管理器发出警报并记入日志。如果管理器存有该文件的原始副本的话,也可以将原始副本拷贝到目标机器上覆盖已受篡改的文件。

13)进一步,还可以通过代理立即终结目标进程,即正在执行受篡改文件或非正常安装软件的进程。

14)否则,如果与原始记录相符,就说明该目标文件正常无误。管理器继续等待来自代理的事件报告。

作为本方法的主体,上述过程可以实现对计算机病毒的防治。在实际实施中,则还可以让代理提供更多的信息,例如所在主机上登记本受到修改,某个文件的访问模式与权限要求受到更改等等,这些信息也可以有助于病毒的防治。

                               附图说明

图1是本发明的安装新软件的流程示意图;

图2是本发明的管理器发现非正常软件的流程示意图。

                            具体实施方式

虽然本发明所述方法的实施可以通过各种不同的代理来实现,也不必受限于某种特定的规程,但是微软的WMI技术以及Windows操作系统对WMI的支持(即WMI代理的实现)使WMI成为最理想的实施手段,这是因为:

●WMI代理所提供的信息已能满足本发明所述方法的需要。

●WMI代理已经实现于Windows操作系统内部,因而无需另行开发和安装WMI代理,而只需实现管理器一边的功能就可以了。

●WMI是WBEM的一种主要的实现,已经成为事实上的标准。

所以,下面以采用WMI作为实施例来说明本发明的实施方式,但是具体实施方式的不同并不影响本发明通过代理技术实现计算机病毒防治的实质。

首先,由于微软已经实现了能够提供前述第3、5、6、7、9、13各条功能的WMI代理,并且已经嵌入在Win2000及此后的Windows操作系统中,所以针对Windows、并采用WMI实施本方法时不需要再来实现WMI代理和在目标机上安装WMI代理。而且,微软为WMI管理器(或WMI客户端)的软件开发提供了很好的开发环境,使得WMI管理器的开发得以大大简化,从而不但可以用C++语言开发,还可以用VBScript脚本语言开发。例如,下面这段简单的脚本语言就可以在本机上监视进程的创建,使得每启动一个任务时就显示新进程的进程号和所执行的文件名:

strComputer=″.″Set objWMIService=GetObject(″winmgmts:\\″_&amp; strComputer &amp; ″\root\CIMV2″)Set objEvents=objWMIService.ExecNotificationQuery_(″SELECT*FROM Win32_ProcessStartTrace WITHIN 0.01″)Wscript.Echo″Waiting for events…″i=0Do Until i=50Set objReceivedEvent=objEvents.NextEvent′report an eventWscript.Echo″Win32_ModuleTrace event occurred″&amp; VBNewLine_&amp;″Process Name=″_&amp; obiReceivedEvent.ProcessName &amp; VBNewLine_<!-- SIPO <DP n="6"> --><dp n="d6"/>&amp;″Process ID=″_&amp; objReceivedEvent.Processid &amp; VBNewLine_&amp;″Session ID=″&amp; objReceivedEvent.SessionIDi=i+1Loop

脚本中的关键是“SELECT*FROM Win32_ProcessStartTrace WITHIN 10″,这就是发给代理的命令,而所用的语言则与数据库查询语言SQL十分相似,所以称为WQL。这个命令的意思是=监视Win32_ProcessStartTrace这个类,每0.01秒检查一次,发现新进程就报告。这段脚本可以从微软的MSDN网站上找到,只不过原来是每10秒检查一次,这里改成了0.01秒。这段脚本就相当于一个很简单的管理器,不过它所监视的是本机,即管理器与代理处于同一主机上。如果要让管理器与代理分别处于不同主机上、通过网络进行通信,则可参考微软的MSDN网站上“WMI C++Application Examples″下面的“Example:Getting WMI DataFrom a Remote Computer″一文。MSDN网站上提供了完整的WMI资料,包括许多采用C++或VBScript语言的实例,还有一个“WMI教程(WMI Tutorial)″,供开发人员参考。

又如,在创建进程报告提供了新进程的进程号、假定为3456、以后,就可以用下面这段脚本来获取并显示所执行文件的路径:

strComputer=″.″Set objWMIService=GetObject(″winmgmts:″_&amp;″{impersonationLevel=impersonate}!\\″_&amp; strComputer&amp;″\root\cimv2″)Set colProcesses=obj WMIService.ExecQuery(_″select*from win32_process where ProcessId=3456″)For Each objProcess in colProcessesWscript.Echo″Process″&amp; ObjProcess.Name &amp;_″path=″&amp;objProcess.ExecutablePathNext

W32_Process是WMI的一个类,ProcessID(进程号)、Name(进程名)、和ExecutablePath(所执行文件的路径)都是这个类的属性。而且,这个类还提供了几个操作(Method),其中之一就是Terminate(),用来终结进程。所以,如果需要的话,只要在上面的脚本后面加一行“objProcess.Terminate()”就可以把目标进程杀死。

上面举例说明的时候使用的是VBScript脚本语言,实际实施的时候当然可以使用别的编程语言,例如C++。

WMI的功能十分丰富。我们只是利用其中很小的一部分来实现我们的目的,即病毒防治。关于WMI的资料都可以在MSDN网站上查到。既然WMI代理是现成的,下面就是管理器部分的实施了。

管理器分成两大部分,第一部分是用于可执行文件登记存档的,第二部分是用于实时监督和检测病毒的部分。下面是两大部分的伪代码说明。

登记存档()

{

    for(每一张安装盘)

    {

        打开放入光盘驱动器的安装盘

        在硬盘中创建一个临时目录;

        对安装盘的内容解压缩,解压缩后的内容写入临时目录;

        扫描临时目录,删去所有的非执行文件;//对非执行文件也可以根本就不解压缩。

        for(临时目录下面的每一个可执行文件)

        {

            if(需要CRC或奇偶校验)对文件进行CRC或奇偶校验运算。

            将文件名、文件长度(字节数)、以及校验运算结果等作为一个纪录插入数据库。

        }

        弹出安装盘,删除临时目录。

    }

}

也可以先直接在目标主机上安装,安装以后再由管理器来扫描、登记:

登记存档_另一种实现()

{

    询问所安装的目录;//例如C:\Program Files\NetMeeting

    从刚安装了新软件的主机上把这个目录远程映射到本机(管理器)上;

    for(这个目录下面的每一个可执行文件)//扫描这个目录

    {

        if(需要CRC或奇偶校验)对文件进行CRC或奇偶校验运算。

        将文件名、文件长度(字节数)、以及校验运算结果等作为一个纪录插入数据库。

    }

    拆除远程映射;

}

    这两种实现的编程对于一般的软件工程师应该是很简单的事。

    再看实时监督和检测部分。

实时监督()

{

    for(本企业网中的每一台主机)

    {

        通过WMI发出监视进程创建的命令;

        通过WMI发出监视模块安装的命令;

    }

    循环

    {

        等待来自任何主机的WMI事件报告;

        if(收到事件报告)

        {

            以可执行文件名为键值查询数据库;

            if(查询不到)

            {

                发现非正常安装的软件,报警,写入日志;

                if(要求杀死非法执行的进程){

                    通过代理终结该进程;

                }

            }

            else    //查询到了原始记录

            {

                if(事件是进程创建){

                    向代理查询可执行文件的路径;

                }//模块装入事件报告中已经包含路径,不需要再向代理查询。

                通过WMI或其他手段获取该文件的长度;

                if(需要CRC或奇偶校验或签名计算){

                    通过WMI代理或通过其他手段获取该文件的校验计算结果。

                }

                将获得的各种特征信息与查询到的原始记录进行比对;

                if(不符)

                {

                    发现受到篡改的软件,报警,写入日志;

                    if(要求杀死执行受篡改文件的进程){

                        通过代理终结该进程;

                    }

                }//如果相符就不需要做任何事。

            }

        }//end of收到事件报告

    }//回到循环的起点

}

对于认真学习了WMI的软件工程师,这个算法的实现也应该没有困难。

本发明的这个实施例因为采用了WMI而变得既方便又简单。但是,即使没有WMI,本发明的实施也并不是很困难的事。首先实现了WBEM的并不只是微软一家,别的厂商如Sun也有其WBEM的实现,网上还有实现WBEM的开源代码。而且,即使不用WBEM,也还有别的代理技术,例如SNMP,也可以借用来实现本发明所述的方法。只不过别的实现需要在主机上安装代理软件,显得不太方便而已。

附图中的图1说明了安装新软件的流程。在企业环境下,新软件的安装不应放任自流,而应该纳入统一的管理。安装新的软件应经过批准,安装盘应先经过病毒扫描,整个企业中安装了什么软件应该记录存档。总而言之,技术手段要有管理手段的配合。另一方面,这也正好可以跟可执行文件特征信息的采集和纪录结合起来。经过这样一个流程,企业中所有合法安装的可执行文件就都在集中的数据库中存了挡,凡是这个数据库中没有记录的文件就是非法安装的、从而很可能是潜入的。

图2是管理器发现非正常软件的流程,上面已经讲得很详细了。

图中没有代理的流程,这是因为WMI已经提供了现成的代理。而且,即使没有WMI代理,也有其它的WBEM代理,包括由开源代码所实现的代理,所以代理的实现不属于本发明的范畴。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号