杀毒软件查杀原理

杀毒软件查杀原理
杀毒软件查杀原理

1.3杀毒软件查杀原理

杀毒软件是根据什么来进行病毒判断并查杀的呢?在讲这个问题之前首先要弄清楚杀毒软件检测病毒的方法,在与病毒的对抗中,及早发现病毒有重要。早发现,早处理,可以减少损失。检测病毒的方法有:特征码法、校验和法、行为检测法、软件模拟法。这些方法依据原理不同,实现时所需开销不同,检测范围不同,各有所长。

1.3.1

特征码法被早期应用于SCAN、CPAV等著名病毒检测工具中。国外专家认为特征码法是检测已知病毒的最简单、开销最小的方法,特征码法的实现步凑如下:

1、抽取的代码比较特殊,不大可能与普通正常程序代码吻合。

2、抽取的代码要适当长度,一方面维持特征码的唯一性,另一方面又不要有太大

的空间与时间的开销。如果一种病毒的特征码增强一字节,要检测3000种病毒,增加的空间就是3000字节。在保持唯一性的前提下,尽量使特征码长度短些。

杀毒软件在扫描文件的时候,在文件中搜索是否含有病毒数据库中的病毒特征码。如果发现病毒特征码,由于特征码与病毒一一对应,便可以断定为病毒。

这里的特征码分为两个部分,第一个是特征码位置;第二部分是狭义上的特征码。

杀毒软件运用特征码扫描确定某文件为病毒时,这个文件需要满足两个条件:

1、该文件中的某一位置与杀毒软件病毒库的某一位置相对应。

2、该位置上存放的代码与病毒库中定义的该位置上的代码相同。

采用病毒特征码法的检测工具,面对不断出现的新病毒必须不断更新版本,否则检测工具便会老化,逐渐失去实用价值。病毒特征码法对从未见过的新病毒,自然无法知道其特征码,因而无法去检测这些新病毒。

特征码法的优点是检测准确快速、可识别病毒的名称、误报率低、依据检测结果可做解毒处理。缺点是不能检测未知病毒、搜集已知病毒的特征码,费用开销大、在网络上效率低(在网络服务器上,因长时间检索会使整个网络性能变坏)。特征码分为文件特征码和内存特征码两种。内存特征码是程序载入内存之后所具有的特征码,在非运行状态下是不可发觉的。关于有关特征码的知识,笔者会在后面的章节中详细介绍。

特征码的特点:

A、速度慢。随着病毒种类的增多、检索时间变长。如果检索5000种病毒,必须对5000个病毒特征码逐一检查。如果病毒种数在增加,检病毒的时间开销就变得十分可观。

B、误报率低。

C、不能检查多态性病毒。特征码法是不可能检测多态性病毒的。国外专家认为多态性病毒是病毒特征码法的索命者。

D、不能对付隐藏性病毒。隐藏性病毒如果先于检测工具运行的时间进驻内存,在被检测工具扫描前已经将被查文件中的病毒代码剥去,检测工具运行时便是在检查一个虚假的“好文件”,因而不会报警,会被隐藏性病毒所蒙骗。

1.3.2校验和法

将正常文件的内容,计算其效验和,将该效验和写入文件中或写入别的文件中保存。在文件使用过程中,定期或不定期的检查文件当前内容算出的校验和与原来保存的校验和是否一致,因而得出文件是否被感染的结论,这种方法叫校验和法,它即可发现已知病毒又可发现未知病毒。在SCAN和CPAV工具的后期版本中除了病毒特征码法之外,还纳入校验和法,以提高其检测能力。

运用校验和法查病毒采用三种方式:

1、在检测病毒工具中纳入校验和法,对被查的对象文件计算其正常状态的校验和,将校验和值写入被查文件中或检测工具中,而后进行比较。

2、在应用程序中,放入校验和法自我检查功能,将文件正常状态的校验和写入文件本身中,每当应用程序启动时,比较现行校验和与原校验和值。实现应用程序的自检测。

3、将校验和检查程序常驻内存,每当应用程序开始运行时,自动比较检查应用程序内部或别的文件中预先保存的校验和。

校验和法既能发现已知病毒也能发现未知病毒,但不能识别病毒类,不能报出病毒名称。由于病毒感染并非文件内容改变的唯一原因,正常程序有时也会造成文件内容的改变,所以校验和法常常误报警。而且此种方法也会影响文件的运行速度,所以用监视文件的校验和来检测病毒,不是最好的方法。

遇到下述情况:已有软件版更新、变更口令、修改运行参数,校验和法都会误报警。

还有就是,校验和法对隐藏性病毒也无效。隐藏性病毒进驻内存后,会自动剥去染毒程序中的病毒代码,使校验和法受骗,对一个有毒文件算出正常校验和。

优点:方法简单,能发现未知病毒,被查文件的细微变化也能发现。缺点:发布通行记录正常态的校验和、会误报警、不能识别病毒名称、不能对付隐蔽性病毒。

1.3.3行为监控法

利用病毒的特有行为特征性来检测病毒的方法,称为行为监控法。通过对病毒多年的观察、研究,有一些行为是病毒的共同行为,而且比较特殊。在正常程序中这些行为比较罕见。当程序运行时监控其行为,如果发现了病毒行为,立即报警。

这些做为监控病毒的行为特征码如下:

A.占有INT 13H

所有的引导型病毒,都攻击boot扇区或主引导扇区。系统启动时,但boot扇区或主引导扇区获得执行权时,系统刚刚开工。一般引导型病毒都会占用INT 13H功能,因为其他系统功能未设置好,无法利用。引导型病毒占据INT 13H 功能,在其中放置病毒所需的代码。

B、改DOS系统为数据区的内存总量

病毒常驻内存后,为防止DOS系统将其覆盖,必须修改系统内存总量。

C、对COM、EXE文件做写入动作

病毒要感染,必须写COM、EXE文件。

D、病毒程序与宿主程序的切换

染毒程序运行中,先运行病毒,而后执行宿主程序。在两者切换时,有许多特征行为。

行为监测法的特点:

行为监测法的长处:可发现未知病毒、可相当准确地预报未知的多数病毒。行为监测法的短处:可能误报警、不能识别病毒名称、实现时有一定难度。

1.3.4软件模拟法

多态性病毒每次感染都变化其病毒密码,对付这种病毒,特征代码法失效。因为多态性病毒代码实施密码化,而且每次所用密钥不同,把染毒的病毒代码相互比较,也无法找出相同的可能做为特征的稳定代码。虽然行为检测法可以检测多态性病毒,但是在检测出病毒后,因为不知病毒的种类,难以将病毒彻底清除。

软件模拟法的长处:对病毒的判断能力最强(因为综合了多种查毒方法)。

软件模拟法的短处:扫描速度慢,查毒往往不准确。

1.3.5总结

了解完以上几种检测方法,最终的结论就是:目前杀毒软件最主要还是依靠特征码识别技术来检测病毒。也就说特征码就是杀毒软件为了判定病毒而从病毒本身提取出来的有特点的代码(病毒和人一样,总会有特点的)我们的免杀就是专门针对这些特征码的,也就是说让杀毒软件找不到这些特征码就可以达到免杀的目的了。不过还有一点要强调的是,文件本身的功能是不能损坏的,也就是说免杀之后的文件和原文件在功能上要做到完全相同。只有这样才算是真正有效的免杀。

1.4常见杀毒软件及其引擎特点

1.卡巴斯基:这款杀毒软件是俄罗斯出品的,就目前国内免杀的情况来看,卡巴斯基就是免杀的主要对象(扫描未知病毒非常厉害),我们到网上搜索“免杀”,在返回的页面随处可见形如“某某木马免杀过卡巴”这样的教程。从其在免杀教程中出现的频率就可以看出卡巴斯基的应用范围很广。事实确实如此。小到个人计算机,大到企业服务器,随处可见卡巴斯基的身影。卡巴斯基的病毒库很大,扫描速度特别慢,而且非常占资源,曾经国内最流行的版本是360安全卫士和卡巴斯基合作的卡巴斯基7.0版本,因为这个版本可以免费使用半年。现在的卡巴斯基不但杀毒能力卓越,主动防御能力更是在界内颇有口碑,尽管卡巴斯基非常占用资源,不过算是瑕不掩瑜吧。

2、瑞星:这个杀毒软件是国产的,和卡巴斯基一样出名,而且瑞星公司自己也特别能炒作,在互联网上有一定的影响力,用户非常多,所以针对这个杀毒软件的免杀教程也很多,不过就笔者认为,瑞星的杀毒能力和卡巴斯基差距很大,主动防御功能模块和卡巴斯基也没有办法相比,优势就是速度快、系统占用资源相对较小。

3、江民杀毒软件:这个杀毒软件可以说得上是真正的实力派(尽管实力上还是有些差距,不过在国内就算是实力派了)。他的杀毒能力不错,耗费资源一般,主动防御功能也很不错。可以说得上是中规中矩的一款杀毒软件了。

4、诺顿:这个杀毒软件是诺顿公司的,性能卓越。病毒库很大,扫描速度慢。不同版本的诺顿占用系统资源的程度相差很大。这个杀毒软件的免杀非常好做。可谓是著名杀毒软件中实力最弱的杀毒软件。

5、金山毒霸:杀毒能力很差,占用资源一般,速度快。因为操作简单,界面不错,所以能满足一般家庭用户的需要。

6、NOD32:这个杀毒软件我得详细的讲讲,这个杀毒软件的查杀机制和其他几个差别很大,针对他的免杀比较难做。如今新版的NOD32加入了主动防御功能,功能上的提升使他成为目前最难对付的杀毒软件。系统占用资源一般,扫描速度非常的快。启动扫描特别厉害,查杀未知病毒的性能和卡巴斯基旗鼓相当。

7、麦咖啡:国外杀毒软件,功能一般,查杀能力一般,占用资源一般。国内PC用户很少使用,但经常可以在服务器上看到其身影,高级版本对未知病毒的查杀能力很强。

8、小红伞:这是款非常出名的杀毒软件,尽管在国内没有广告宣传,但是依旧有一批忠实的用户。小红伞的启发式扫描很厉害,可以说和NOD32的启发扫描不分伯仲,各有各的特点。

9、F-Prot Antivirus:这是一款来自冰岛的杀毒软件。国内很少有资料介绍这款杀毒软件,而这款杀毒软件恰恰是笔者最看好的。该杀毒软件查杀能力决对一流,对未知病毒的查杀能力远在卡巴斯基和NOD32之上,不过因为其公司并未开拓中国市场,所以我们很少见到有人使用这款杀毒软件。该杀毒软件性能卓越,本书作者鼎力推荐。

10、微软杀毒:微软的杀毒软件一经推出,便受到免杀爱好者的关注。依仗着微软在操作系统的占有率,其杀毒软件也有一定的占有率。几乎所有的木马都不能过微软的杀毒软件,等到大家对微软杀毒研究相对较深入之后,不难发现,目前的微软杀毒引擎和NOD32的杀毒引擎很像,基本都是使用启发式扫描对API函数的调用进行判定和加权(关于启发式扫描的知识,在后面的章节中会有详细的讲解)。

1.5免杀技术的分类

免杀技术是病毒隐藏性变种技术的重要分支,这是一个非常庞大的分支,因为免杀技术的类别和方法都有很多,那么免杀技术究竟可以分为哪几类呢,下面我们来具体看看。

1.5.1内部免杀和外部免杀

按照免杀针对的原文件的不同,可以将免杀分为内部免杀和外部免杀,外部免杀又通常被称为PE免杀。内部免杀指的是从病毒的源代码入手,通过修改病毒的源代码实现病毒的隐藏性变种,外部免杀指的是将已经编译连接后的病毒文件通过加密等手段将病毒的代码复杂化,从而干扰杀毒软件对其的判定,使之免杀。

内部免杀有一个必要的前提,就是免杀制作者必须要有病毒的源代码,这一条件非常苛刻,所以在网上关于内部免杀的讨论并不热烈,更多的是关于外部免杀技术细节的讨论。外部免杀需要一定的反汇编基础和PE结构知识,有了这些之后,只需要一些常见的反汇编工具,就可以对很多病毒进行免杀处理了。

对于这两种不同的免杀方式,网上一直争论不休,有的人认为内部免杀是外部免杀层面至上的技术,而外部免杀则是免杀基础。针对这一看法,大叔要客观的说一下,内部免杀和外部免杀属同一技术层次,没有高低之分。而如果非要说出哪种方式的技术难度更高,那答案只能是“因人而异”,有些人高级语言编程基础比较好,可以更擅长内部免杀,而另外一些人可能了解反汇编以及离散数学等知识,对这些人来说,使用外部免杀往往更得心应手。至于两种免杀方式最终得出的免杀效果而言,并没有区别,最终目的都是让病毒免杀,仅此而已。

1.5.2特征码免杀和大范围免杀

根据免杀效果的不同,还可以将免杀分为特征码免杀和大范围免杀。

先进的杀毒引擎使用的杀毒技术依然是围绕特征码展开的,所以修改病毒的特征码在可预见的很长一段时间里还是会是免杀技术的中流砥柱。大范围免杀通常又被称为“无特征码免杀”,指的是使用一些例如加花加壳这种使病毒代码复杂化的方法对病毒进行处理,处理过的病毒很可能会同时免杀掉多种杀毒软件。这里所说的“大范围”只是狭义上的,并不代表范围一定很大,大范围指的不是直接针对特征码的修改,只是指通过其他的方法使代码病毒的代码复杂化,从而间接影响杀毒软件对病毒特征码的识别。

1.5.3文件免杀、内存免杀和行为免杀

免杀还可以分为三类:文件免杀、内存免杀、行为免杀。

文件免杀指的是在计算机硬盘上存放的被某杀毒软件查杀的病毒,经过免杀处理后,再对病毒进行静态的病毒扫描时,该杀毒软件不将这个原本被自己查杀的文件判断为病毒。这其中所指的静态扫描时什么意思呢?最初的杀毒软件只具有静态扫描功能,但是随着免杀技术的兴起,杀毒引擎也在不断的更新换代,现在的杀毒软件已经可以自动的将硬盘上某些特定的文件的代码段或其他PE区段载入到内存并对内存中的数据进行病毒扫描,而这已脱离了文件免杀的范畴。这种将硬盘上的病毒文件中特定的PE 区段载入到内存并进行病毒鉴定的方法,被称为对病毒的动态文件扫描,这并不等同于杀毒软件的内存扫描。杀毒软件的内存查杀是指在病毒运行的时候,病毒被载入计算机的内存后,杀毒软件在内存中侦测到病毒的运行,并将病毒在内存中击杀。内存免杀指的是在上述例子中的病毒被载入到内存后,系统无法通过杀毒软件的内存扫描功能从内存中找出该病毒。

行为免杀的概念出现在文件免杀和内存免杀之后,是一个相对比较新的概念。病毒程序大都有很多共性,如:在系统文件中释放一些动态链接库文件并添加启动项或服务等。杀毒软件可以抓住病毒的这一特性,监控计算机运行的程序,控制程序可能产生

的对计算机系统有危害的行为,杀毒软件的这种监控方式就是行为监控,而突破这种监控的方式的工作就称为病毒的行为免杀。

1.5.4盲免技术

盲免技术又被简称为“盲免”,盲免可以说得上是一个隐藏在圈内很久未被公开的免杀技术。这是因为盲免技术除了对免杀制作者自身的免杀技术实力要强要求非常高之外,还需要一定的运气。那么究竟什么是盲免呢,盲免真的有那么难吗?大叔给大家举一个真实的例子,通过这个例子,大家就可以对盲免有一个初步的了解。

2009年一天,教主同志渗透某著名网络游戏公司,并且已经进入了最关键的阶段。该公司员工的电脑安装的都是诺顿11杀毒软件,教主自己的电脑木马在装有诺顿11的机器上运行执行后会导致诺顿11的驱动程序崩溃,进而使WINDOWS系统蓝屏。因为该网络游戏公司在下午4:30的时候下班,此时已经4:00了,如果再不抓紧渗透,今天的工作就要告一段落了。就在此时教主找到了我,让我给他一个过诺顿11的免杀木马,而此时大叔刚来到长春不久,计算机也重新配置过,虚拟机中刚好没有诺顿11杀毒软件,教主的再三催促下,大叔决定盲免PCSHARE 20071125。大叔拿出PCSHARE 20071125,直接将PE头和配置文件的代码段移动了一段距离,然后又做了一些简单的干扰码修改和加花工作,对最终生成的文件(无驱动的服务端)又进行了上述修改(整个过程不到5分钟),在没有任何测试的情况下把这个文件发送给教主。教主在网络游戏公司的员工电脑上运行大叔传过去的木马,木马成功上线,诺顿11没有任何提示。这就是一次成功的盲免,相信读者对盲免已经有一个初步的认识了。盲免指的就是在不使用杀毒软件定位特征码也不需要杀毒软件测试免杀的效果,直接制作出最终的免杀样本。在这看似投机的结果中,其实有很多技术细节和经验在里面,盲免不是瞎搞,与特征码免杀一样,盲免也是有很强的针对性的。能熟练盲免的免杀制作者,他们对各种杀毒引擎都非常了解,这些都是靠平时做一般性免杀的过程中得到的,有了这个前提,才能在不借助杀毒软件的情况下,判断出杀毒软件对特征码识别的弱点。就拿上面免杀诺顿11的例子来说,诺顿11喜欢把特征码定位在代码段的开始处,所以我移动了代码段的起始位置并给PCSHARE加了一套花指令,移动PE头则是干扰诺顿11对代码段头的判断,而修改的干扰码则是PCSHARE木马服务端中很多显眼的ASCII码,这些明显的ASCII码很可能被设定为特征码或干扰码。总之,盲免技术是免杀技术实力的一个重要体现,体现出免杀制作者对杀毒引擎的了解,当然,只是了解杀毒引擎是不够的,针对各种不同的杀毒引擎,修改特征码的方法也是不尽相同,所以在研究查毒引擎之前,需要掌握好PE结构、反汇编等基础知识。

7.1再谈特征码

在第一章讲解杀毒软件对病毒的查杀原理的时候,我们曾经提到过特征码这个概念。没错,特征码查杀技术就是当今主流杀毒软件引擎的灵魂。在本节,你将会了解到关于特征码查杀技术更为深入的知识。相比于在第一章对特征码查杀技术的讲解,本节的内容显得更容易理解,因为是笔者总结多年免杀经验对此类知识最直接最肯定的阐述。

7.1.1特征码查杀两要素

当杀毒软件捕获到一个病毒样本之后,杀毒软件公司的技术人员会提取病毒样本内比较特殊的代码或者数据,并记录下所提取的代码或者数据在病毒样本中的文件偏移,最后将病毒样本的特征码或特征码所在文件的偏移存放在杀毒软件的病毒库中。当用户使用杀毒软件对某一个文件进行扫描时,杀毒软件的杀毒引擎会将病毒库中的特征码与被扫描文件进行对比,特征码比对的大致过程很简单,就是从病毒库中提取出第一条特征码和该特征码(记作特征码A)所对应的文件偏移(记作文件偏移A),然后比对被扫描文件在文件偏移A处的代码或数据与特征码A的一致性。如果被扫描文件在文件偏移A处的代码或数据与特征码A相同,那么被扫描文件在文件偏移A处的代码或数据与特征码A不相同,则杀毒引擎会从病毒库中提取下一条特征码记录,继续进行上述操作,如果将病毒库中所有特征码记录与被扫描文件对比完毕后都没有相同的部分,则杀毒软件判断被扫描文件不为病毒。综上所述,特征码查杀技术的两个基本的要素就是特征码和该特征码所在的文件偏移。而这种说法并不完全正确,因为将这两个要素中的文件偏移转换做是RVA,也就是相对镜像基址的偏移,则该特征码就是内存特征码,具体的原因很好理解,此处不再阐述。所以正确的说法是特征码查杀技术的两个最基本的要素是特征码和该特征码所在的偏移。

有的读者可能会生产疑问,上面的这些知识在第一章里面也讲过啊,尽管讲解与第一章中有关特征码查杀技术的讲解并不完全相同,但是主旨都是强调特征码查杀技术的两个要素——特征码和该特征码所在的文件偏移,为什么这里还要重复一次呢?笔者想说的是,此处再次强调这些知识是为了引入即将讲解的更为深入的关于特征码查杀技术的知识,从而能够让读者一气呵成掌握当今主流的特征码查杀技术之原理,闲话少说,回到技术问题上来。

上面所说的特征码查杀技术是最基本最纯粹的特征码识别技术原理,而在实际杀毒软件中,杀毒软件对于上述过程往往有优化措施,例如:复合特征码查杀、隐藏特征码查杀等。接下来,笔者会向读者依次介绍复合特征码查杀和隐藏特征码查杀技术。

7.1.2复合特征码查杀

当免杀技术爱好者了解到杀毒软件特征码查杀的原理后,使用特定的办法获取杀毒软件对某病毒的特征码和该特征码所在的偏移,然后通过一些手段改掉病毒在这个偏移

处的代码或者数据,这个修改过的文件通常被称为该病毒的变种,至此,杀毒软件就不在能判断该病毒的变种为一个病毒了。

还有另外一种情况,病毒也是程序,特征码也是二进制数据,天下的程序如此之多,很可能出现在一个非病毒程序在杀毒软件病毒库中所记录的一条偏移处存在这条偏移相对应的特征码,如果真的发生了这种情况,杀毒软件就会将这个非病毒文件判定为病毒,从而造成通常所说的杀毒软件误杀。

这两种情况说明了一个共同的问题,那就是杀毒软件只给病毒样本定义一处特征码是十分不安全的,既容易让病毒出现新变种,又容易造成对正常程序的误杀。为了解决这些问题,杀毒软件公司的技术人员想出了复合特征码这一概念,也就是为了病毒样本提取多处特征码和特征码对应的偏移地址,在用户使用杀毒软件扫描该病毒的时候,只要该文件与代码病毒库的复合特征码中的任意2处甚至1处特征码吻合,杀毒软件就将该文件判断为病毒。而且杀毒软件公司的技术人员在提取特征码的时候也格外用心,他们将特征码定位在病毒的一些关键部位,这是为了使免杀技术爱好者不容易对特征码进行修改。有了符合特征码查杀技术,杀毒软件对正常程序的误报率大大降低,同时也对免杀造成了更大的困难,因为面对复合特征码,免杀技术爱好者需要修改更多的特征码才能使病毒得以免杀。

尽管复合特征码有如此权重的优点,但是复合特征码在病毒库中占有的体积很大,如果杀毒软件对所有的病毒都进行复合特征码定位的话,杀毒软件的病毒库会非常大,这不但不利于杀毒软件平时的更新,更重要的是,这会大大增加杀毒软件扫描文件的时间。所以杀毒软件公司的技术人员往往只对流行的或者破坏性极大的病毒进行符合特征码提取,而对一般的招摇过市的小病毒则依然采取单一特征码提取。

7.1.3隐藏特征码

隐藏特征码就被叫做隐含特征码,是续复合特征码之后的高级特征码查杀技术之一。隐藏特征码有两种,分别是“显式隐含特征码”和“隐式隐含特征码”。

先来看一下什么是显式隐含特征码。显式隐含特征码往往和复合特征码同时出现,杀毒软件公司的技术人员对某病毒样本进行分析,从病毒样本中提取了多处特征码和这些特征码所对应的偏移,这里将其命名为第一套特征码。而后杀毒软件公司的技术人员又对同一个病毒样本进行分析,提取出了另一套特征码这里称其为第二套特征码。这两套特征码中没有重复的部分,而且并不是并列关系。如果用该杀毒软件扫描病毒,扫描软件通过第一套特征码将病毒识别出来(此时第二套特征码没有用处)。然而一个免杀技术爱好者将该病毒的第一套特征码都改掉了,制作出一个病毒变种,按照前面讲解知识推断,这个变种病毒应该不被杀毒软件查杀了。然而事实恰恰相反,该变种病毒依然被该杀毒软件查杀,这就是第二套特征码在起作用了,这种使用两种

或者更多套特征码进行叠加识别病毒的特征码查杀技术中的第二套和其后的特征码被称为“显式隐含特征码”。

说完了显式隐含特征码,下面讲解另外一种隐含特征码——隐式隐含特征码(隐式隐含特征码也被称为是干扰码)。某些杀毒软件使用了隐式隐含特征码杀毒软件公司的技术人员得到病毒样本后对这个病毒样本进行分析,从病毒样本中提取出一个特征码和该特征码对应的偏移(记为特征码A),然后再按照一般的特征码提取原则,提取一些特征码(特征码B)。当杀毒软件扫描该病毒时,首先检查该文件是否存在特征码A,若存在,则在检测该文件是否存在特征码B,若存在,则将该文件判定为病毒。这个特征码A就是隐式隐含特征码。

7.1.4启发式扫描

启发式扫描可谓是查杀未知木马的利器之一。那么什么是启发式扫描呢?关于这个问题,在专业的黑客网站也不容易找到便于让初学者理解的概念。甚至在一些其他的免杀类文章甚至书籍中对启发式扫描的概念也只是含糊的讲几句“启发式扫描是新型的特征码扫描技术”一类的字样。这并不能怪那些作者没有在文章中讲清楚,因为关于启发式扫描概念的通俗易懂的讲解的确很少。值得高兴的是,本书作者可以初步了解启发式扫描的概念,没错,就是现在,笔者会用通俗易懂的语言向尊敬的读者讲述启发式扫描的实现过程。

启发式扫描是特征码扫描的一个分支,也就是说,启发式扫描利用的也是特征码技术,因为这里的特征码是没有明确偏移地址的。既然是特征码识别技术,却又没有偏移地址,那么启发式扫描是如何实现特征码对比的呢?说白了,启发式扫描就是给各种威胁计算机安全的代码进行加权,举一个简单的例子,杀毒软件设置了如下加权标准:

在系统目录下释放文件得20分

格式化分区得100分

插入远程线程得50分

……………

……………

一个新病毒,他会在系统目录下释放3个文件并且会插入到IE的进程中,之所以谈论的是新病毒,言外之意就是杀毒软件公司的技术人员还没有来得及提取这个病毒的特征码,按照常理推断,杀毒软件不会将这个文件判定为病毒。然而实际情况与推理值恰恰相反,杀毒软件却将这个文件判定为病毒,就是因为杀毒软件使用了启发式扫描并定义了一个判定病毒的分数。假设这里的分数为60分,当杀毒软件对某文件的加权

得分达到60分之后,就将该文件判定为病毒。,不到60分则放过该文件。那么上面的情况就很好解释,按照之前定制的标准,这个病毒在系统目录下释放了文件,得到20分,而后又使用远程线程插入了IE进程,这里得到了50分,将两个值加在一起就是70分,最后得分超过了60分,所以杀毒软件判定其为病毒。

病毒完成特定的功能需要有相应的代码,启发式扫描的特征码就是针对病毒的这些功能总结出来的一套可以判定文件行为的代码。尽管上面的例子很形象,但是真实的情况要比这里例子复杂得多,笔者是为了让读者容易理解启发式扫描的概念而举出这么一个原理相同但是并不相同的例子,所以笔者要再次强调,真实的情况比上面的例子要复杂得多。

7.1.5狭义上的特征码与广义上的特征码

来看这样一句话,杀毒软件对某病毒定位了一处特征码和该特征码所对应的偏移。这里所说的特征码就是狭义上的特征码,是一段二进制数据。广义上的特征码则包括狭义上的特征码和狭义上的特征码所对应的偏移两部分。大家在阅读本书或者其他免杀教程当中要配合上下文去理解文中所说的特征码是狭义上特征码还是广义上的特征码,切忌断章取义。

最后强调一下,上面给出的例子都是最典型最直接的例子。在实际的杀毒软件中,很多杀毒软件会同时使用上述多种特征码识别技术,而且原理上也不尽相同,上面给出的例子只能说是比较有代表性的,读者在学习的时候千万不可以偏概全,认为特征码识别技术仅限于此。

7.7启发式扫描与主动防御

在本章的第一节,笔者已经比较详细的讲解了特征码的一些基本概念和相关知识。不过对于主动防御和启发式扫描的讲解还是远远不够的。单拿主动防御这项技术来说,还没有图书详细讲解其原理,绝大多数的免杀爱好者对主动防御这个概念都是一知半解,并不了解其基本原理。所以在这里还要详细的讲解一下启发式扫描和主动防御的原理。尽管大叔单独拿出本章的一个节内容对启发式扫描和主动防御进行讲解,但是这样的篇幅也很难把这方面的知识讲解全面,不过对于一个非专业级别的免杀爱好者,本节的内容已经够用了。

本节的讲解落实到明确的杀毒软件上,大叔将用NOD32和卡巴斯基2010的原理讲解启发式扫描和主动防御的原理。

7.7.1启发式扫描

在章节7.1中,我们已经了解了启发式扫描的评分原理。而本节对启发式扫描的讲解将直接针对NOD32这款杀毒软件的启发式扫描。如何躲过NOD32的启发式扫描可以

说是免杀技术讨论圈子中讨论的最火热的话题了。现在就让大叔给大家揭开NOD32启发式扫描的神秘面纱。

NOD32启发式扫描的原理十分简单,同其他的启发式扫描一样,也是一种评分原理。举一个简单的例子,一般的下载者程序都要用到两个API,分别是URLDownloadToFile和ShellExecute。

URLDownloadToFile这个API用于将文件下载到本机。而ShellExecute这个API用于执行某个文件。这两个API结合使用就可以达到某个文件下载到本地计算机并执行的功能了,这也就是下载者的基本功能。

如果一个下载者程序先调用了URLDownloadToFile,而后又调用了ShellExecute。即时ShellExecute。执行的不是URLDownloadToFile下载的文件,NOD32也会将其列为病毒,病毒类型就是Downloader.

但如果我们再编写一个程序,程序先调用ShellExecute,而后在调用URLDownloadToFile。那么NOD32不会判断这个程序为病毒。

可见NOD32是将危险的函数(病毒中常见的函数)整理出来,按照病毒的特性排列这些API的顺序,只要发现类似的API调用顺序,便将其判定为病毒。NOD32启发式扫描的基本原理就是这么简单,更深入的知识应该在黑客编程书中讲解,这里不再进行深入。

对于NOD32启发式扫描还有一个问题,这个问题困扰着很多初学者免杀的朋友们。那就是在特征码定位准确的情况下,为什么移动了PE文件中的输入表中的API函数,为什么PE文件还是被杀。道理很简单,因为NOD32不是按照传统的文件偏移对应特征码的进行启发式扫描的,而是从PE文件中读出输入表的位置,又从输入表的表头的相关字段找到被杀的API函数。因为移动了输入表的API函数,想要让程序正常执行,通常会使用LordPE这款工具修改被移动API函数的名称RVA。而LordPE这款工具也是通过修改输入表的表头结构中的相关字段来完成修改API名称RVA的功能的。所以移动输入表函数对NOD32起不到任何免杀的效果(NOD32查杀的时候照样会从输入表表头结构中读取修改后的API名称RVA)。

7.7.2主动防御

主动防御可谓是前一阵子研究的最火热的安全问题。主动防御技术被广泛应用到各大杀毒软件上后,当时几乎所有的木马都难逃被杀的命运。后来大家纷纷转入SSDT的研究,从而突破主动防御,而杀毒软件也不甘示弱,将SSDT看守的非常严密。

那么主动防御技术到底是怎样拦截木马的呢?关于这个问题,资料并不是很多,还没有图书详细的讲解过主动防御技术的基本原理。对于主动防御,多数免杀制作者还是

一知半解,只知道主动防御技术对木马的查杀很厉害,却不知道主动防御拦截木马病毒的原理,下面大叔就来给读者就这一问题进行讲解。这里讲解的主动防御完全针对卡巴斯基2010,其他杀毒软件的主动防御与其大同小异,不另行阐述。

主动防御是一种特殊的API HOOK,它HOOK了一些木马病毒中比较常用的API。举一个简单的例子,现在一般都需要用的这样一个API——CreateRemoteThread。CreateRemoteThread用于将在远程进程中启动一个线程,并指定线程函数。

我们对一个远程线程插入型木马定位针对卡巴斯基2010的特征码,然后成功修改掉所有的特征码,并使用卡巴斯基2010对其进行文件扫描,木马不报病毒。但是运行这个木马之后,卡巴斯基马上报告该木马有安全风险,这也就是主动防御的检测结果。

而这个木马是一个测试程序,只有远程线程插入功能,并没有实质性的控制功能。但是程序运行一样被主动防御拦截,这就排除了其他危险API的干扰,使得我们能就CreateRemoteThread这个API进行主动防御原理的研究。

下面在CreateRemoteThread这个API调用之前加入另外一个API函数Sleep,让程序停止30秒,编译连接程序。运行这个程序,卡巴斯基开始报告安全威胁,警告框和上面的那个一模一样。可见,当程序运行到CreateRemoteThread这个危险API的时候调用了卡巴斯基的检测,卡巴斯基检测CreateRemoteThread之前的环境,然后判定此时此刻的CreateRemoteThread函数的调用是否会带来安全隐患,然后给出提示。

再举一个简单的例子,如果一个程序只用到URLDownloadToFile这个API而没有使用ShellExecute,也就是只完成下载工作,并不执行程序。那么NOD32的启发式扫描便会对这个程序视而不见。但是如果这个程序是使用URLDownloadToFile将URL上的文件下载到系统目录里,这个程序便会被卡巴斯基的主动防御拦截,而NOD32依旧对其视而不见。

这就是前面所指的卡巴斯基主动防御对函数的监控及环境的判断了。卡巴斯基主动防御检测到该程序执行URLDownloadToFile函数,然后暂停这个程序,检测该函数执行的环境,并从中发现系统目录路径字符串,随后则判定此程序为危险进程。而如果使用URLDownloadToFile将URL下的文件下载到一些没有特点的文件夹中,比如下载到迅雷下载文件夹中,卡巴斯基的主动防御便不会弹出任何提示。

文章进行到这里,相信很多读者都会产生疑问。就拿上面举例这个只会将URL下的文件下载到系统目录下的测试程序来说。即使我们不执行这个程序,而只是用卡巴斯基扫描一下该程序,卡巴斯基也会准确的判定其为URLDownloadToFile。道理很简单,因为卡巴斯基运用了虚拟机技术,扫描文件的时候,可以将文件在一个与真实系统隔绝的环境中模拟执行,然后主动防御会判断其为危险程序,从而给出提示。

NOD32的启发式扫描和卡巴斯基2010的主动防御模块都是各自的重要反病毒技术,不可能将技术细节泄露出去,以上对于二者的研究均是从网上热心技术爱好者的研究结果以及作者的实际测试结果推断出来的,难免会有错误,有不同意见的朋友可以联系笔者,望不吝赐教。

相关主题
相关文档
最新文档