网络安全 频道

深入剖析nod32启发机制

    摘要:本文主要为网友从实践出发,深入剖析nod32启发机制和主动防御。是一篇难得的实践性分析nod32原理的技术性文章。

      启发机制是目前杀软的主流方向,因为启发机制——直接影响杀毒软件文件监控以及文件扫描对于未知病毒的防杀以及查杀能力。那么说到启发就不得不说下主动防御,主动防御目前也是很多杀软的主流方向。但主动防御虽然固好,但是效率等都不如启发。想知道为什么就往下看吧。

     因为主动防御是基于行为规则判断的,一般的杀毒软件都采用内核级hook,而一般的杀毒软件采用内核级hook来拦截NATIVE API(指的就是内核执行体的输出函数),而内核级hook大部分都是采用HOOK SERVICE TABLE(系统服务描述表)。大家可以用一些内核的工具(如IceSword,wSyscheck)查看下。

    为了给大家一个更直观的印象,我用IceSword查看了下安装了瑞星杀毒软件的计算机系统的服务描述表情况。

   这些函数是以ntkrnlpa.exe(双核cpu内核执行体,单核的为ntoskrnl.exe)输出的接口!!

    一般我们的程序都是调用的是用户模式上(Ring 3)一些环境子系统输出的api函数,而我们平常调用的api函数其实仅仅只是一个外壳,而真正的实现代码其实是在内核执行体中。用户模式的下的程序仅仅只能访问进程的低2GB地址空间,而高2GB是操作系统的内核空间,我们是无法访问的。这样做是为了确保操作系统的稳定性。

    平常我们调用的函数要经历大致如下步骤(以下为自己对于操作系统内核的理解来说的,不敢保证完全正确):

    举例说明: 如SetContextThread函数:
    SetContextThread ——NTDLL(NtSetContextThread, 通过传递系统服务号,以及调用中断转到内核)——Windows从系统服务描述表查询传递的系统服务号——最终调用的是内核执行体的接口函数 NtSetContextThread

   所以一般杀毒软件只需要修改系统服务描述表对应例程地址,则你在调用这些函数的时候就会转向到它自己定义的例程中。因为这样在这个例程中它就可以进行一些操作,例如弹出消息框提示用户,或者直接结束这个调用函数的程序等等)。从这里我们可以看到主动防御是基于行为查杀的,也就是通过行为来进行判断,例如一般我们注入进程会调用CreateRemoteThread, SetContextThread 等函数。那么杀毒软件则hook这些函数对应的系统原生态函数,则当程序调用这些函数发生一些危险动作的时候,杀毒软件主动防御就会提示给用户 如: xxxx进程试图将数据注入到xxx进程中的提示框。然后让用户选择结束还是放行。这就存在了一个问题:那就是很多如果不懂任何计算机安全相关的人看到这样的提示他就不知道该如何去做了,这也是主动防御的弊端之处。

     那么是不是有主动防御就万事大吉了,当然不是,它Hook这些函数,那么只要我们的木马不调用这些函数,或者将系统服务描述表它hook的函数全部恢复掉,这样主动防御也就等于失效了。 这时候任何的木马就可以明目张胆的侵入你的计算机。

    而启发式扫描则不同,启发式扫描一般通过虚拟机代码仿真技术对你的文件在一个虚拟的环境中进行模拟运行,这样就可以分析出你的行为,这样未知病毒的行为都暴露出来了,这样通过此项技术一般都可以发现很多的未知病毒和木马。

   启发式有弊端,例如如果某个木马或者是病毒通过某种方式躲过了启发式扫描,则这时候基本杀毒软件就废了,因为已经没有任何作用了,木马几乎可以横行了。这个时候就该考虑要是多个主动防御该多好啊,起码还能进行二次拦截提示用户呵呵。。

    以上就是启发式与主动防御的利与弊,至于启发的利,首先效率是相当高的,因为不像主动防御Hook一大堆NATIVE API,这样只要程序调用它hook的函数,则必须要经过它自定义的例程去处理,这样肯定是及其耗系统资源的。并且如果驱动不是很稳定的话,则总会造成蓝屏等状况。   启发则不同,拥有效率高,耗系统资源少,稳定性高等优势。所以建议大家选杀毒软件,如果你的配置不是大众化的,nod32是你的选择,否则我想你肯定不愿意出现蓝屏等情况吧。   还有我想以后大家如果说xxx杀软垃圾,xxxx杀软好的时候,你应该看下此篇文章认识下各个杀毒软件的机制在评论不迟。

0
相关文章