计算机病毒防范艺术
2015-05-30林清风
林清风
摘 要: 随着网络的快速兴起,计算机领域有了全新的前景。但是,随之而来的还有各种让人防不胜防的病毒,本文主要就计算机病毒为研究对象,分析病毒的传播以及防范病毒的措施。
关键词: 计算机;病毒;防范
何为病毒,对于病毒,我们所了解的只是破坏计算机环境的软件。为了深刻地理解计算机病毒,最重要的步骤之一,就是要了解病毒执行所需要的特定执行环境。理论上,对于任何给定的符号序列,我们都可以定义一个环境,该序列号可以在其中进行自我复制。在实际操作中,我们必须能够找到这样的环境,在此环境中符号序列可以执行,并证明它的确利用自身代码进行自我复制,并且递归的复制下去。
只有当恶意代码所依赖的各种条件与可能的环境相匹配的时候,病毒代码才能够成功地渗透系统。完美的恶意代码常见环境是很难用二维的形式画出来的。
大部分计算机病毒是以可执行的、二进制的形式(又称作编译过的形式)进行传播的。例如:引导区病毒将自己的代码复制到一个或几个扇区中,并接管计算机的引导顺序。在最早有记录的计算机病毒事件中,Apple II上的Elk Cloner 就是一个引导区病毒。Elk cloner修改了加载的操作系统,加入了一个和自己关联的钩子(hook),就这样Elk Cloner拦截了磁盘的访问,利用其自身代码的拷贝覆盖新插入的磁盘的系统引导扇区来感染新插入的磁盘。Brain是最早知道的PC上的计算机病毒。还有另外一种形式的病毒是CPU依赖型病毒,当某一特定的处理器对其之前版本并不是100%的向下兼容,而且对之前版本的特性并不是很好的支持或是完全不支持的时候,便会发生这种情况。
有些病毒只是从磁盘上找一个文件,然后简单的用自己的拷贝改写该文件。当然,这是一种非常初级的而技术,不过确实是最为简单的方法。如果这种简单的病毒重写磁盘上所有文件的话,可能造成很大的破坏。
重写病毒是不能从系统中彻底删掉的,只能删掉被感染的文件,然后再从备份介质恢复。一般来说,重写病毒不是非常成功的威胁,因为病毒造成的威胁明显太容易被发现了。然而,这种病毒效果如果基于网络的传播技术结合起来,可能产生很大的威胁,比如:VBS/LoveLetter.A@mm通过群发邮件把病毒发送到其他系统中,当该病毒执行时,它会用自己的拷贝重写本地所有下面扩展名的文件:
.vbs,.vbe,.js,.css,.wsh,.sct,.gta,.jpg,.jpeg,.wav,.txt,.gif,.doc,.htm,.html,.xls,.ini,.bat,.com,.avi,.mpg,.mpeg,.cpp,.c,.h,.swd,.psd,.wri,.mp3,.and,.mp2等。
重写技术的另一种罕见形式是不改变文件顶部的代码,而是在宿主文件中随机找一个位置把自己写进去。显然,这种病毒不太可能获得控制权,它通常会导致宿主在执行到病毒代码之前就崩溃了。这种病毒的例子是俄罗斯的Omud。
现在的反病毒扫描程序会为了提高性能而减少磁盘I/O,因此如果可能的话,只查找已知的位置。扫描器在查找随机重写病毒时有一定的问题,因为扫描器必须搜索宿主程序的全部内容,这种操作的I/O开销太大了。
有些比较简单的而病毒并不主动驻留在内存中,最先感染IBM PC的文件感染类型病毒Virdem和Vienna就是这样,通常,直接感染型病毒的传播速度比较慢,传播范围也比较窄。
直接感染型病毒随着宿主程序一起装入内存中。在取得系统控制权后,他们以搜索新文件的方式搜索可能感染的对象。很多常见的计算机病毒都使用直接感染方式的传播引擎,这种病毒在各个平台都很容易构造,无论是二进制还是脚本形式。历史上曾经有过这样的例子。Borland公司在DOS环境下开发的Quattro spreadsheet 系统的第一个版本是全部使用Hungary汇编语言开发的。在系统的开发过程中发生了意见非常有趣的事情。有时候,系统命名在执行一个循环,可是系统的实际流程和控制流程的期望值刚好相反。代码本身并没有什么错误,因此通过阅读代码的方式根本不可能解释发生这种现象的原因。最后发现产生这个错误的原因是因为一个时钟程序偶尔会改变系统的执行流程,原因是时钟程序改变了方向标记,而有时又忘记恢复这个标记,结果,时钟程序五一地破坏了spreadsheets系统的内容,当然它也会对其他程序造成破坏。这个具有破坏性的时钟程序就是一个TSR程序。
病毒采用各种方式入侵电脑程序和服务器程序,大部分电脑书籍对病毒检测的讨论都停留在相当浅的层次上,就连一些比较新的书都把防毒扫描器描述为“在文件和内存中检索病毒特征字节序列的普通程序”。这种说法所描述的当然是最流行的计算机病毒检测方法之一——这种方法也很有效,但当今最先进的防毒软件使用了更多出色的方法检测仅用第一代扫描器无法对付的复杂病毒。例如:字符串扫描、通配符扫描、不匹配字节数、通用检测法、书签、首位扫描、入口点固定点扫描等等。
随着时代的进步第二代扫描器也随之来临,第二代扫描器采用近似精确识别法(nearly exact identification)和精确识别法(exact identification),有助于提高对计算机病毒和恶意程序的检测精度。第二代扫描器同样包括很多种方式,例如:智能扫描、骨架扫描法、近似精确识别法和精确识别法等。
扫描技术的多样性清楚地表明:给予对一只病毒的识别能力来检测病毒是多么困难。因此,看来采取更为通用的方法——如给予文件和可执行对象的完整性来检测和预防病毒对其内容的篡改——可以更好的解决病毒检测这个问题。
手工启动型完整性扫描工具需要使用一个校验和数据库,该数据库要么在受保护的系统中生成的,要么是一个远程在线数据库。完整性检查工具每次检查系统中是否有新生成对象,或者是否有任何对象的校验值发生变化,都用到该数据库。通过检验出新的或发生了变化的对象,显然最容易发现病毒感染及系统受到的其他侵害。然而,这种方法也有很多缺点,例如:(1)虚警;(2)要有干净的初始化状态,而实际上不一定会有这么一个状态;(3)速度。完整性检查通常很慢;(4)特殊对象。工作需要懂得一些特殊对象;(5)必须有对象发生改变等等。
还有一些方案试图基于应用程序的行为来阻断病毒传染。最早的反病毒软件之一FluShot就是属于这一类病毒防护方案。如果一个应用程序以写入模式打开了 可执行文件,则阻断工具就会显示一条警告,要求用户授权写操作。不幸的是这种低级别时间可能会引起太多的警告,因而阻断工具受用户欢迎的程度常常还不如完整性检测工具。而且,不同类型的计算机病毒的行为可能差异很大,因而可能导致感染的行为模式数量有无穷多种。
由于Windows NT的内存管理器会回收未使用分界面,而内存中页面只有当被访问的时候才会被读取,因此内存扫描的速度大体上取决于内存的大小,一台计算机的内存越大则内存扫描器的速度就会越快——如果计算机拥有的物理内存非常有限,则页面错误数量将会大很多。
每当SCANPROC.EXE对所有运行中的进程扫描时,这些进程的内存会明显提高。对于病毒的防范也更加规范。 (作者单位:齐齐哈尔工程学院)
参考文献:
[1] Peter Szor,“The New 32-bit Medusa,”Virus Bulletin ,December 2013,pp.8-10.