内容源于网络。网络上流转的版本实在是不易阅读, 又不忍神作被糟蹋故稍作整理,对于内容仍然有识别不准的地方,网友可留言,我跟进修改。
雷 军
(武汉大学计算机系,430072)
摘要:
本文详细地描述了计轩机病毒判定专家余统的原理与具体设计方法,一定程度上解决了流行病毒的判定问题。该系统主要利用专家们研究计算机病毒所得的如识和经验构造而成的规则库以及已知病毒的档案库,运用正向不访确的推理机制,来鉴别某一程序是否染毒。该系统不仅克服了传统的检测技术误检测率高的缺点,而且适合于鉴别病毒变种,对判定将来出现的病毒也有一定作用。
关键字:
人工智能, 专家系统, 计算机安全, 计算机病毒。
一、引言
目前, 人们对计算机病毒的认识极不一致。在很多情况下,只是根据某种具体病毒的特点、特性来讨论病毒。要澄清病毒的实质,分析病毒的检测与免疫,就必须从具体的病毒中解脱出来。有关文献上关于病毒的定义很多,较为准确的如下:
算机病毒是隐蔽在计算机系统的数据资源中,利用系统数据资源进行繁殖并生存,能影响计算机系统正常运行的并通过系统数据共享的途径进行传染的程序。计算机病毒已包含了生物病毒的特点,即病毒的传染性、潜伏性、针对性和破坏性。病毒的分类方式很多,为了叙述方便,本文主要采用按传染方式分类。这种方式分类,主要有两种情况:
(1)传染磁盘引导区(BOOT)的计算机病毒。磁盘主要有软盘和硬盘,软盘只是一个BOOT区,硬盘上分主BOOT区和分区BOOT区;
(2)传染可执行文件(FILE)的计算机病毒。文件主要是指可运行的程序代码,如以.COM和,EXE为后缀的文件。
我国用户主要使用的是IBM PC及其兼容机,而感染这种机型的病毒种类占总数的90%以上,所以本文选择IBM PC机作代表,来讨论计算机病毒。传统的病毒检测方法主要是在程序中寻找已发现病毒的特征串,如找到,则认为该程序染毒,否则,认为该程序是干净的。目前,这种方法也是最常用的。
病毒的特征串是病毒标本中一段有代表性的程序代码或数据。如果某个程序含有这个串,一般来说是染上了这种病毒,但也有可能是该程序自身也有类似的代码。这样,这个不带病毒的程序很容易被判断为染病毒(我们称这种情况叫误检测)。传统的检测方法不但误检测情况多,而且对于病毒的变种无能为力。如把病毒某处两条无相关性的指令前后换一下,这样不影响病毒的工作,但特征串就发生了变化,使用原来特征串的检测程序就再也检测不到这种病毒。仅根据无相关性指令倒置的方法去修改某个病毒,这个病毒将会有成千上万种变种,传统的检测方法将无法解决。传统的检测程序有着严重的不足,越来越适应不了当前形势的需要,于是我们就提出了一种智能性的检测方法。
二、病毒判定专家系统的基本原理
1. 病毒不可判定原理
冯·诺依曼提出了存储程序的概念(stored program concept),即将程序全部存放在存储器中,可在存储器中修改,也可和参与运算的数据一起存储。当今世界上的各种计算机几乎都是根据这一原理而开发研究出来的。病毒要进行传染、破坏,就必须掌握控制权,达到这一目的的唯一途径是修改载体的可执行代码。可见,病毒只有在冯·诺依曼体系的计算机中才能生存。也就是说,病毒是冯·诺依曼体系计算机的必然产物,并且只有废除冯·诺依曼体系,病毒才彻底消除。从体系结构上我们已经认识到病毒的不可判定性。同时,Fred Cohn博士在理论上也证明了这一点。但是,在特定的机器上,运行特定的操作系统,绝大部分流行的计算机病毒都是可以判定的。对于某个具体的病毒来说,随着时间的推移,迟早会被人们发现。在病毒对世界计算机应用产生深远危害之时,尽早地研究一套近似判定的方法也是非常重要的。
2. 智能判定原理
病毒是可以认识的,因为不管怎么说,病毒总是一段程序代码,专家们对它进行详细分析,总能判断这段代码是不是具有传染性。传染性是病毒最主要的特征,也是决定性特征。判定某个程序是否是病毒,仅需判定它是否具有传染性。用程序的方法对病毒进行精确判定是不可能的,但是我们可以利用专家们的知识、经验完成一套专家系统,模拟专家工作,对特定的病毒种类进行判定。这套专家系统所使用的就是我们研制的一套智能判定方法。
智能判定就是用专家们的知识、经验构成一个规则库,在计算机里虚拟一个环境对某软件进行安全测试,模拟运行每条指令,并监控运行结果,如有违反规则的操作,则记录下来。运行完毕后,再一起分析推理,最后根据推理结论,判定该软件是否带毒。推理过程由专家系统完成,采用了正向不精确推理机。
在实践中,人们经常使用的一些不精确的或不完善的资料进行工作,专家系统是模拟专家们的工作,所以在专家系统中,采用不精确推理,几乎是难于避免的。病毒判定专家系统主要采用的是MYCIN的不精确推理。由于这个问题不是判定的关键问题,这里就不详细讨论了。
智能判定要求系统在实际使用过程中,不断丰宫,完善自己。如发现新病毒,要自动记录到档案,以后遇到类似问题可以直接判定。在运用过程中,根据实际情况,可以修改规则的权值, 补充新规则。
三、病毒判定专家系统的设计方法
病毒主要分BOOT类病毒和FILE类病毒两类,机理大致相同,但具体实现方法不同,BOOT类病毒相对面言要简单一些,下面我们以BOOT类病毒为例,具体谈一下这套专家系统的实现方法。软盘,硬盘,硬盘比软盘多一个主引导区,硬盘上的分区引导块 BOOT类病毒是指替换磁盘上的引导块,在DOS启动时获取控制权的一类病毒。磁盘包括与软盘上的引导块大致相同。硬盘主引导块主要功能是判断活动分区,并把活动分区的引导块读入内存。分区引导块先判断磁盘上是否存在系统文件,若存在则加载DOS内核IBMBIO.COM(PC DOS系统文件)或IO.SYS(MS DOS系统文件)。
BOOT(自举)是DOS启动的第一步,至关重要,但又比较脆弱,易受攻击。每个BOOT区虽只有512个字节,但切不可忽视。BOOT中有许多提示信息,一般情况下用Debug调出查看一下,即可判断,但这种方法并不保险。一方面很多软件,特别是游戏,都是自启动的,即具有自己的BOOT程序;另一方面有的病毒很隐蔽,仅占有原有的BOOT的几十个字节,简单的查看是无法鉴别的。另外,DOS的版本繁多,也是一个重要原因。图2是硬盘自举流程。
智能判定主要步骤为,首先判定未知的BOOT是否是某个版本的DOS引导块和已知软件的引导块,若是,显然不是病毒,否则到已知病毒的档案库中查寻,若找到,显然是病毒,若未找到, 则在一个虚拟环境中运行这个未知BOOT,进行安全检查,判断是否违反规则,若有严重违规行为,即判定为病毒。智能判定必须先准备三个库:合法BOOT库、非法BOOT库(即病毒档案库)和规则库。首先穷举BOOT,构造合法BOOT库和非法BOOT库。合法BOOT库里主要是各种操作系统的引导区以及现有的流行软件及游戏的引导区。再运行匹配法则,在这两个库中搜索是否有与未知BOOT类似的 BOOT。
在匹配过程中不能采用完全的一对一的比较。这主要是因为磁盘的种类很多,如360KB、1.2MB的软盘,20M、40M的硬盘等,这样每一种盘上的BOOT中关于磁盘和数据都不同。不同厂商提供的系统盘标识符不同,如IBM提供的DOS盘标识为“IBM 3.3”,Microsoft公司提供的DOS盘标识为“MS 3.3”,这些BOOT表面上不一致,而实质是相同的。如果采用完全匹配,那么必须采集一个BOOT在不同情况下的具体数据,这样,不但增加了数据冗余度,减慢了匹配的效率,而且易于出错。为了克服这些缺点,我们给出一种模糊匹配法。
模糊匹配的主要思想是仅比较两个BOOT之间的代码部分,而且只要相同率达到95%以上,即认为相同。这样,允许用户对BOOT稍作修改。代码部分的5%至多有十几个字节,不可能对系统构成威胁。
[算法]
1. 根据第一条JMP语句,找到第二条指令开始地址,如果第二条指令仍是JMP语句,就继
续查找,直到连续几条指令都是非JMP语句为止。然后再搜索提示信息的 开始地址,即代码结束地址,得到代码长度;
2. 把未知BOOT的代码区与库中一个已知BOOT比较,得到相同字节数;
3. 计算相同率:
若相同率大于95%,则退出。
4. 若库为空,退出,提示未确诊;否则,取下一个BOOT,转到2继续执行。
采用“模糊匹配”算法,对一个正常BOOT加上一些特定的免疫标记的系统 都可得到确诊的信息。例如,有的用户为了免疫小球病毒,把自己盘上的BOOT扇区的[IFC]处改为1357。在模糊匹配中,这些地方根本没有比较,所以不会引起误差。再举一例,《计算机病毒概论>提 供的大麻免疫方法如下:
先读出主引导区,放在200处。
2.修改内存大小字节,向高端传送,达到高端驻留日的;
3. 读入原BOOT 到 0000:7 C00:
4. 判尚时间标志;
5. 跳转到 0000:7 C00处执行真正的BOOT。
系统病毒的主要特点是通过战获中断向量,来取得控制权,要想接管中断,就必须驻留在内存中。一般程序驻留方法有两种,一种驻留在内存地址低的地方,也称低端驻留,主要通过调用DOS中断完成;另一种是通过修改内存控制块,把自身放在内存地址高的地方,来进行高端驻留。这两种方法都是在DOS装配完毕后进行的。BOOT类病毒进入内存时,DOS还未装人,DOS主要使用低端,所以为了避免冲突,BOOT类病毒只能使用高端。采用的方法是修改内存大小单元[40:13],将该值减小,使DOS误认为内存只有那么大,不去覆盖病毒体。接管敏感性中断,如INT 13,INT 8,和高端驻留是病毒最重要的特征,任何BOOT类病毒都必须完成这一点。于是,我们总结出一个原则:
【原则 1】在DOS自举过程中,任何企图接管敏感性中断和高端驻留的请求都是不允的。
对原则1进行详细分析,结合典型病毒实例理解,可以把它具体化。接管中断必须读写中断向量表。高端驻留分两步,首先是修改[0000:0413]单元的内容,再进行一次向高端的传送。在自举过程中,不允许读写[0000:0413]的内容。当出现 MOVSB,MOVSW,LODSB,LODSW,STOSB, STOSW 时要尤其注意DS的值,是否指向内存地址高端,以便准确地成获向高端的传送。
根据前面介绍的硬盘BOOT区执行的简要流程,我们可以知道硬盘主引导区需要进行一次,向低端的传送和一次读盘(读入分区引导记录), 分区引导记录需要读两次盘(一次读目录扇第一扇,第二次读IBMBIO.COM,即数据区第一扇开始的连续簇), 复位一次磁盘机,共使用了三次INT 13H。有的软件如PC Tools格式化的系统盘的BOOT中只有两处INT 13H,这是因为两次读数据使用了同一处的INT 13H。还有可能其它的 BOOT 中有多于三处的 INT 13H。但有一点是明确的, BOOT 中绝对没有写盘操作,而且读出来的数据只能是分区引导记录、根目录区第一扇和 IBMBIO.COM, 不可能是其它数据。这样,我们得到了第二条原则。
【原则 2】磁盘引导扇中绝对不能出现写盘指令;自举过程中只允许读出自举过程需要的数据。
在这里,还有一点需要说明,在有些自举的游戏中,需要读入其它数据。这与原则2不矛盾。原则2主要讨论的是DOS格式。非 DOS 格式原则2的第二句不适用。在BOOT区运行过程中, 从未取过或置过系统日期时间,更没有对时间进行判断。病毒具有潜伏性和可激活性,激活条件多都是采用时间的, 因此应谨防这类操作。还有的触发条件是随机数, 这也是要引起大家注意的。
【原则3】BOOT中判别时间和产生随机数进行判断, 都是可疑的。
在模拟运行中,违背可疑性原则,将出现警告信息。病毒最后都是装入真正的BOOT区,再把控制权移交过去。而真正的 BOOT 总是存放在 0000:7C00 处, 最后把控制权移交给存放在70:0处的IBMBIO.COM。
【原则 4】要密切注意最后控制权的移交。
违反原则4将会出警告信息。对目前发现的所有BOOT类的病毒而言,它们都不可避免地同时违背了这四个原则。在将来出現的病毒中,它们有可能符合某些规则,但它们将不可避免地违背大部分原则。如某病毒不保存原来的 BOOT 区,自己完成 BOOT 功能, 这样它就不会违背原则2, 但它肯定违背原则1。
这四条原则是针对BOOT类病毒的特点,经过反复论证得到的。在将来与病毒的对抗中, 还将不断丰富、完善,显示更大的威力。由这些原则即可构成所需的规则库。由于规则库很复杂,仅列出由原则1总结的规则供大家参考。
规则 01: 前提:(读取井修改[0000:4CJ内存单元的内容)
结论,(接管敏感性中断)
规则 02: 前提:(读取并修改[0000:0020]内存单元的内容)
培论,(接管敏感性中断)
规则 03: 前提:(读取并修改[0000:0418]的内容)
结论,(分配内存)
规则04: 前提:(申传送指令,且日标中位于内存地址高端)
结论:(向高端传送)
规则 05: 前提:((分配內存)《向高端传送))
结论:(高端驻留)
规则 06: 前提:(接蓉故茎性中断) (?)
结论:(有可能是薪市)
规则07: 前提:(高端驻定)
结论: (有可能是病福)
Turbo Debugger 这类高级跟踪中都有自动跟踪功能,但达只是这类机制的雏形, 这套机制的关键在于虚环境。关于这套机制的具体实现就不多说了。模拟运行中判别违规的过程主要由推理机完成。利用现行的专家系统工具可以自动完成推理过程,得出结论。由于BOOT类病毒判断规则不超过一百条,可以考虑重写推理机。一旦得出结论,未知BOOT为病毒,智能判断系统就会把它记录在非法BOOT档案中,否则记录在合法BOOT库中, 以后遇到类似的BOOT, 便可马上确诊。这样病毒判定专家系统就可以在实际使用过程中不断丰富完善自己。
这套专家系统也可用在检测FILE类病毒上,但这样规则库要复杂得多,而且可靠性要差一些。买使智能判定能判断FILE类病毒,就必须进一步对文件类病毒进行分类,保存各种病毒的“指纹”,即特征串和常用程序段,同时归纳出各种原则。如判别文件类病毒可使用这样一条原则: 在程序开始运行不久安装INT 21H中断向量, 并旁路4BH功能调用, 最后还驻留内存, 可以怀疑为TSR病毒。
四、新的病毒模型及判定策略
我们把病毒分为两类,FILE类和BOOT类,有没有可能出现两者结合的产物呢? BOOT 区已被密切注视了,但自举过程中是否还存在薄弱环节呢?我们发现 BOOT 区执行后调入 IBMBIO.COM 执行是一个薄弱环节。以后的COMMAND.COM是人们注意的焦点, DOS加教完毕后,又有很多防御程序保护系统不受感染,所以,这些都不是薄弱环节,只有 IBMBIO,COM 及 IBMDOS.COM 不引人注目。我们设想了一个模型,把一个典型的BOOT类病毒放在IBMBIO.COM的第1扇中, 而不是BOOT中。
那么这个病毒具备与BOOT类完全一样的特点和机理,但它沾染在文件上。这种病毒是极容易完成的,我们之所以公开这种设想,是想引起各位同行、专家的重视。对付这种病毒,智能判定专家系统的判定策略是收集了各个版本的系统文件进行校验的。由于自举环节一直是DOS的薄弱环节,要想做到完全弥补,可以使用DOS卡的方法。把所有的系统文件都固化在ROM中, 做成一块DOS卡,就不用担心系统文件被修改, BOOT 类病毒以及沾染 COMMAND.COM 及其它系统文件的病毒也就绝迹了。这也是对冯·诺依曼体系的计算机的一点改进,即操作系统固化。据 『计算机世界』 消息, Microsoft公司的DOS 6.0版本将放在一张硬卡中,这将有助于加强系统的安全性。
五、结束语
研制解决流行病毒的判定问题的专家系统,在目前具有相当大的实用价值。本文介绍的这种智能判定方法大大优于传统的检测方法,具有准确率高,适用性广的优点,还可以不断发展和扩充。关于这种方法,目前国内外文献上尚未提及。(参考文献略)
Theory and Experiments of Detection
Expert System of Computer Viruses
Lei Jun
Wuhan Unieeraity. 430072
Abstraet: This paper diseribes the theory and experiments about Detection Expert Syctem of Computer Viruses (VDES) and solves the problem of determining a pepular virus in some degree. In orderto determine that a given program has been infected by viruses, VDES is based on the rule set formed by knowledge and experience of experts and a forward inexact inference method is used VDES notonly overcomes shortcomings of past checking techniques, such as inexactitude in some care, but alsocan determine a virus variety, in other words, VDES can determine viruses appearing in the future.
Keywords: artificial intelligence, expert system, computer security, computer viruses.
快科技