间谍程序、游戏木马、黑客程序等网络病毒的频频爆发,使国内外反病毒领域开始意识到,单纯依靠“特征码技术”已经不能适应反病毒需求。
那么什么是“主动防御”,它的实现技术又是怎样的呢?本人在这里简单献丑一下,说得不对的地方欢迎扔鞋砸鸡蛋!
所谓“主动防御”,就是全程监视进程的行为,一但发现“违规”行为,就通知用户,或者直接终止进程。它类似于警察判断潜在罪犯的技术,在成为一个罪犯之前,大多数的人都有一些异常行为,比如“性格孤僻,有暴力倾向,自私自利,对现实不满”等先兆,但是并不是说有这些先兆的人就都会发展为罪犯,或者罪犯都有这些先兆。因此“主动防御”并不能100%发现病毒,它的成功率大概在60%-80%之间。如果再加上传统的“特征码技术”,几乎可以发现100%的恶意程序了。在国外,诺顿,Kaspersky,McAfee等等杀毒巨头,都已经向“主动防御”+“特征码技术”过渡了,这是杀毒软件的必然发展趋势。
防火墙是一个运用“主动防御”技术的典型例子,大家都用过防火墙了,对于防火墙经常询问用户是否放行一个进程访问网络,或者有不明连接进入本机而发出警告是否印象深刻呢?其实防火墙就是在全程监视进程的网络行为,一但发现违反规则的行为就发出警告,或者直接根据用户设定拒绝进程访问网络。当然,现在的防火墙一般都把系统网络进程(比如services.exe,svchost.exe,lsass.exe等)记在“受信名单”里,这些进程是默认允许访问网络的,如果禁止的话,操作系统就不正常了,这也是现在很多病毒和木马都喜欢远程注入这些系统进程以突破防火墙而访问网络的原因。
下面重点说一下“主动防御”的实现技术。大家都写过程序,知道在一个程序里如果要实现自己的功能就必须要通过接口调用操作系统提供的功能函数,在DOS里几乎所有的系统功能或第三方插件都是通过中断提供的,在WINDOWS里一般是通过DLL里的API提供,也有少数通过INT
2E或SYSENTER提供。一个进程有怎么样的行为,通过看它调用了什么样的API就大概清楚了,比如它要读写文件就必然要调用CreateFile(),OpenFile(),NtOpenFile(),ZwOpenFile()等函数,要访问网络就必然要使用Socket函数。因此只要挂接系统API(尽量挂接RING0层的API,如果挂接RING3层的API将有可能被绕过),就可以知道一个进程将有什么动作,如果有危害系统的动作该怎么样处理等等。例如瑞星杀毒,大家可以在它的安装目录里找到几个驱动文件,其实这些驱动就是挂接了ntoskrnl.exe,ndis.sys等系统关键模块里的API,从而对进程的普通行为,网络行为,注册表行为进行监视的。
最后让我们设想一下一个“主动防御”型杀毒软件的一般流程:通过挂接系统建立进程的API,杀毒软件就在一个进程建立前对进程的代码进行扫描,如果发现SGDT,SIDT,自定位指令(一般正常软件不会有这些指令),就提示,如果用户放行,就让进程继续运行;接下来监视进程调用API的情况,如果发现以读写方式打开一个EXE文件,可能进程的线程想感染PE文件,就发出警告;如果收发数据违反了规则,发出提示;如果进程调用了CreateRemoteThread(),则发出警告(因为CreateRemoteThread()是一个非常危险的API,正常进程很少用到,倒是被病毒木马用得最多)。...。可以想象,未来我们运行程序可能要被提示多次,访问网络也被提示多次,各种各样的提示将大多数人搞的昏头转向。想安全就要管严,放松就不安全了!