随着新一轮病毒的来袭,杀毒软件显示了它的脆弱。从熊猫烧香、AV终结者、机器狗、磁碟机病毒,拥有的反杀毒能力越来越强,没有自我防护功能的检测软件注定不受市场欢迎

了解恶意软件隐藏自己、对抗跟踪的生存方式,不仅对检测软件的研发有非常重要的作用,对用户手动检测也有极大的参考价值。

对大部分用户来说,靠肉眼发现病毒是不容易的,检测软件的扫描器可部分的弥补这个缺陷。如何在扫描器前隐藏自己,甚至反制检测软件,是恶意软件的重要目标。

一、对抗检测软件的方式

1、 扫描可见的窗口标题,对含检测软件名称的窗口,发送一条退出消息关闭窗口或者发送大量的垃圾消息使其反应缓慢。或者自动点击检测软件界面上的下一步、跳过等按钮使检测软件部分的失去作用。

2、 利用垃圾数据覆盖检测软件空间,使其崩溃退出。

3、 采用守护进程,多个线程互相监视,发现一个被关闭立即生成新的线程。

4、 将自身注入检测软件进程空间,钩住检测软件使用的某些函数,使检测软件工作无法进行。

5、 修改检测软件数据库,使检测软件不能识别或错误识别。或者替换检测软件的某些关键文件以达到同样的目的。

运行在用户模式下的恶意软件对于具有System权限的检测软件上述一些手段无法成功。这可以通过提升权限获得关闭检测软件的能力,但这样比较容易检测。更通用的方式是释放一个.sys文件,然后加载该驱动程序,从而获得完全控制计算机的能力。

二、隐藏自己的手段

一直以来病毒有一些通用的隐藏手段,这些手段对一般的恶意软件同样适用,使得检测软件无法识别出这是恶意软件,这些方法包括:

1、 加密

这种恶意软件包括解密引擎,运行时引擎读出被加密的内容,然后在内存中重建原执行体。仅仅一个解密引擎容易被检测,一般采用多个解密引擎,运行时随机选择一个。

2、 多态

多态病毒的解密引擎可以大幅度改变,一般通过随机插入垃圾块或指令从而创造出无穷多个解密引擎。

3、 变形

变形病毒并没有解密引擎,它的病毒体是变化的。通过等价指令替换,随机插入垃圾指令,在感染文件时对宿主大幅度改变从而使检测软件难以识别。

Windows时代也有一些防止被用户查知的方法,如将病毒插入PE文件的空闲区域,使文件看起来没有任何变化,在任务管理器中隐藏自己等手段,但这些方法一般逃不过检测软件的眼睛。现在rootkit技术被越来越多的恶意软件所喜爱。通过挂接内核钩子rootk可以与检测软件同步,达到隐藏自己的能力。常用的挂钩位置有

1、 钩住系统服务调度表(SSDT),可以使大部分检测软件监控功能失效。

2、 Winxp及以后可以通过rdmsrwrmsr指令修改IA32_SYSENTER_EIP寄存器在SSDT之前截获调用,达到同样的目的。

3、 钩住设备驱动程序对象中主要的I/O请求报文函数表,也是常用的隐藏自己的手段。

三、防止被删除的方式

1 以独占方式打开文件,这样使得打开该文件的进程关闭之前基本无法删除该文件。

2 监控文件变动,发现文件被改动之后立即还原。微软提供的FindFirstChangeNotification FindNextChangeNotificationReadDirectoryChanges可以达到监控作用。

3 释放文件系统过滤型驱动程序。再用将自己创建的设备对象加到文件系统对象上层,就可作过滤删除操作。

4、第二部分提到的钩子技巧同样也可以达到这个目的。

恶意软件是计算机技术中一个复杂并且不断发展的领域。在 IT 业面临的所有问题中,几乎没有比恶意软件攻击更具普遍性,也几乎没有比处理恶意软件的相关费用更昂贵的了。了解恶意软件的生存原理,将有助于您以主动的方式处理此问题。