杀毒软件(Anti-virus Software),也称反病毒软件或防毒软件,是可以用来扫描文件,以确定和消除计算机病毒、特洛伊木马和其他恶意软件的一类软件。杀毒软件一般由扫描器、病毒库与虚拟机组成。
对于一款杀毒软件来说,一次成功的病毒查杀过程,通常都要经历病毒识别、病毒报警、病毒清除、文件或系统复原这几个过程。最关键的是杀毒引擎技术,从广义上来讲,是指通过文件、网页监视等实时监控行为,运用文件识别技术来完成病毒扫描、识别、报警以及清除,甚至防御的一整套的机制,因此引擎技术也决定了杀毒软件的优劣,而引擎所包含的众多技术中,病毒识别技术又是重中之重。病毒库是存储病毒的特征码。而虚拟机可以使病毒在一个由杀毒软件构建的虚拟环境中执行,与现实的CPU、硬盘等完全隔离,从而可以更加深入的检测文件的安全性。
1、检测杀毒软件的方法
检测病毒方法通常有:特征代码法、校验和法、行为监测法、软件模拟法、启发式扫描。
特征代码法:“同一病毒或同类病毒的某一部分代码相同”的原理来识别病毒文件。该技术是利用留在受感染文件中的病毒特征值进行检测。发现新病毒后,对其进行分析,根据其特征编成病毒码,加入到数据库中。今后在执行查毒程序时,通过对比文件与病毒数据库中的病毒特征码,检查文件是否含有病毒。
校验和法:此法计算文件的校验和并保存,可定期或调用文件时进行对比,从而判断文件是否被病毒感染。
行为监测法:此法根据病毒的行为特征来识别病毒,这需要对病毒行为进行详细的分类和研究,分析那些病毒共同的行为,以及正常程序的罕见行为,根据程序运行时的行为进行病毒判断和预警。
软件模拟法:这种方法通过模拟病毒运行的方式来检测病毒特征。
启发式扫描是特征码扫描的一个分支,病毒完成特定的功能需要有相应的代码,启发式扫描的特征码就是针对病毒的这些功能总结出来的一套可以判定文件行为的代码。
启发式扫描就是给各种威胁计算机安全的代码进行加权,举一个简单的例子,杀毒软件设置了如下加权标准:
在系统目录下释放文件得20分
格式化分区得100分
插入远程线程得50分
……………
一个新病毒,他会在系统目录下释放3个文件并且会插入到IE的进程中,杀毒软件使用了启发式扫描并定义了一个判定病毒的分数。假设这里的分数为60分,当杀毒软件对某文件的加权得分达到60分之后,就将该文件判定为病毒,不到60分则放过该文件。
2、脱壳
加壳其实就是把木马病毒文件用加密算法压缩,让杀毒引擎无法读取这个文件,从而不能和特征库匹配。
加壳和脱壳,简单说就是软件的加密和解密。病毒、木马加壳已经是非常普遍的现象了,目前主要有两种脱壳技术:算法脱壳和动态脱壳,目前主流的杀毒软件都引入了虚拟机技术,虽然这会占用一定的系统资源,但使带壳的病毒文件,运行于虚拟机之上,不仅可以更好的识别各种壳,还可以有效防止病毒真正的感染文件。
算法脱壳:此法是根据加壳程序的解密算法对病毒进行脱壳,虽然有速度快、消耗资源少的优点,但也有无法脱变形壳的缺点。不过,很多杀毒软件还是能够向用户发出警报,以弥补无法脱壳的缺憾。
动态脱壳:众所周知,只有让加过壳的程序运行起来,才能将其还原成本来的面目,此时为了避免程序运行后真正感染系统文件,因此引入了虚拟机技术,为带壳的病毒程序虚拟一个计算机环境,使它运行于虚拟环境。此法虽优势明显,但也会消耗很多的系统资源。
3、特征码扫描样例
病毒特征码需要满足以下几个要求:
1、不能从数据区提取,因为数据区的内容很容易改变,一旦病毒程序变更版本,改变了数据内容,特征码就会失效。而其它的区块则相对来说保险一些。
2、在保持特征码的唯一性的前提下,应当尽量使得特征码短小精悍,从而减少检测过程中的时间与空间的复杂度,提高检测效率。
3、经过详细的逆向分析之后选取出来的特征码,才足以将该病毒与其它病毒或正常程序相区别。
4、病毒程序的特征码一定不能匹配到普通程序,比如选取病毒入口点的二进制代码,就必然出现误报的情况。
5、特征码的长度应当控制在64个字节以内。
病毒文件中总会存在一些可供识别的字符串,很多时候,这些字符串是某个病毒所特有的,因此这种方式适用于所有病毒的特征码的提取。采用这种方式甚至还能识别某一大类病毒,但是缺点是需要耗费比较多的扫描时间。以我们之前讨论过的“熊猫烧香”病毒为例,经过我们之前的逆向分析可以知道,病毒最开始会使用“xboy”以及“whboy”这两个字符串来进行解密的操作。比如我们尝试一下,在病毒程序的二进制代码中搜索“whboy”:
相信一般的程序中不会出现“whboy”以及“xboy”这两段字符,因此就可以考虑将这两个字符串或者其中的一个字符串作为“熊猫烧香”病毒的特征码。这样只要对目标程序中的可打印字符串进行检索,如果发现了“whboy”就可以认为目标程序是“熊猫烧香”病毒程序。这样即便是病毒出现了变种,只要它依旧包含有“whboy”,我们就依然能够实现查杀的工作。或者我们也可以考虑使用更长的字符串,比如上图中开始的那32个字节,即“武汉男生感染下载者**”,将其十六进制代码提取出来作为特征码。将这段字符串作为“熊猫烧香”的特征码。然后可以使用PEiD查看一下该段代码所在的区段:
可见,文件偏移0x0c040位于CODE,即代码区段中,那么其实在进行匹配的时候,我们只要检索目标程序的这个区段就可以了。或者为了方便起见,我们在检测目标程序时,只检测位于文件偏移0x0c040处的字符,如果能够匹配病毒特征码,就认为目标程序是病毒。