对未知病毒能否未卜先知

软件世界

“能够防范未知病毒”的招牌出现在目前几乎所有的反病毒软件身上,因为在此之前,媒体和公众一直认为现在的反病毒软件还只是停留在亡羊补牢的阶段,是否恶意代码被编制出来并被反病毒公司捕获之后,反病毒软件才能断定这段代码是不是病毒呢?是否能防范乃至完全防范未知病毒也一直是被广泛争论的一个问题,而且还有人开始认为“防范未知病毒”已经变成了一种商业炒作。

未知病毒不可检测?

在我们谈及未知病毒的检测时,总会有人对我们说,检测未知病毒是不可能的。公众的这种观点从何而来呢?至少笔者在一本某教授撰写的计算机教材上就曾经看到过这样的观点。这种观点其实最早来自国内某些人对国外20世纪80年代末期反病毒技术一些理论成果的理解。
国际上关于未知病毒检测的重要观点,一个是来自IBM的著名研究人员Fred Cohen博士1987年的公开推理,他通过对角线法论证了检测全部未知病毒是不可能的。另一个可以看成是对上述范例的一个发展,William Dowling博士在1989年的一篇论文论证了一个程序不可能既能检测病毒又能证实自身的安全性。
事实上上述成果并不是给检测未知病毒技术敲响了丧钟,也不是给病毒作者注入强心剂,其价值一方面在于打破了制造“病毒识别永动机”那种一劳永逸的天真想法,而另一方面则引发了反病毒技术从科学化向工程化的变革。
而在中国,相关的成果则遭到了莫名其妙的曲解,前一个观点变成了──“检测未知病毒是不可能的”。而后者则奇妙地变成了“行为检测是不可能的”。如果说前者只是混淆了检测未知病毒和检测全部未知病毒的区别,而后者则完全不能被理解。

并非商业炒作

笔者曾经去掉俄罗斯著名反病毒产品AVP(已经更名KAV)的已知病毒样本库,仅依靠检测未知病毒的机制对6433种DOS病毒样本进行测试,报警率达到了84.5%,结合AVP极低的误报率,这是一个非常了不起的成绩,基本是对DOS未知病毒检测的极限。
当然,防范未知病毒的技术是亟待发展的技术。同样是AVP,在同样的测试中,对PE病毒的表现则很不理想,报警率不超过10%,而对后门和特洛伊木马的检测率则更低。
但事实胜于一切雄辩,公众至少应该认识到,未知病毒是可以检测的。
检测未知病毒的意义不止于此,一些主流的国外反病毒企业,其内部搭建的分布式分析平台,在收到可疑文件时,可以代替反病毒工作者完成文件合法性检查、定性,也能够判定病毒的家族隶属关系,甚至能智能地提取特征标志等。
所以,对于中国的反病毒工作者、媒体和公众来说,必须彻底抛弃对未知病毒检测的误解和偏见,检测未知病毒是真实存在的技术,不是商业炒作。

仍处探索阶段

其实在探索检测未知病毒的道路上,反病毒工作者们作过很多的努力,目前在众多杀毒软件里也只能在局部范围内,实现对某些未知病毒行为的判断和检测。
以前,反病毒软件对未知病毒常用的方法是“比较法”、“免疫法”和“诱饵法”。“比较法”是制作现有文件/扇区的备份或者数字签名,依靠对比判断文件的变化,来判断文件是否感染病毒。但这种方法不够科学,特别是用单纯的引导区覆盖法对付未知的病毒,当病毒是对磁盘数据加密的时候,就有很大危险,很可能导致数据再也无法恢复。因此这种方法已经基本被抛弃。
而“免疫法”则是通过在可执行程序上添加一个外壳,实现程序的自我校验机制,当被病毒感染的程序执行时,由于发现了程序的改变,外壳会报警,用户只要选择了脱壳,就可以解除病毒。这种方法看似巧妙,但它违反了反病毒产品应该尽量少对系统进行修改的原则。因为外挂的外壳,容易引起程序的不稳定性,同时,也容易把病毒包裹在外壳之中,影响对病毒的检测。
“诱饵法”也是一个比较早期的方法,通过诱饵文件是否变化判断系统是否染毒,也是曾经风行一时的方法。当然现在看来也是一种不太可靠的方法,一些病毒代码中都有不感染小于一定长度的可执行程序的例程,都是为了对抗反病毒软件的诱饵。不过至今为止,它还生存在一些反病毒软件当中。
另一个已经被放弃的方法就是“广谱特征码法”。应该说,通过一些典型代码判断未知病毒的思路没有错误,但问题在于没有任何先决条件的简单特征匹配就给文件定型则是非常草率的。

未知病毒检测技术现状

检测未知病毒技术在不断的失败中成长,而逐渐形成了成熟而规范的体系。目前在主流的反病毒产品中都包含了相应的检测未知病毒的机制,但它们名称不同,如NAV的技术被称为BloodHound,而Trend则被称为“trap”等。
事实上,这些方法基本上都是基于虚拟机的,把虚拟机应用到反病毒软件中,就是要让程序在一个虚拟的环境中而不是实际的系统中模拟执行,从而判断程序的特性。这样反病毒软件可以安全地检测程序的部分动态特性,而不会导致病毒的感染。由于病毒的一些典型特性,如特殊内存请求,文件访问的中断调用等等,则可能在虚拟执行的过程中被发现。
目前,对未知病毒检测的最大的挑战是Win32文件型病毒(PE病毒)和特洛伊木马。但随着研究的深入和系统能力的加强,最终突破未知PE病毒检测的技术关键应该为期不远。
编后:未知病毒的检测技术不可能在产品舞台上独立扮演某种角色,必然要与现有的成熟的已知病毒检测体制结合。对于技术人员、媒体和公众来说,一方面需要避免“反病毒产品永远只能是被动的”消极情绪,另一方面也要打消一劳永逸消灭病毒的不切实际的幻想。
判断一款反病毒软件是否具有未知病毒检测能力,对于普通用户来说是很难完成的。现在,我们不用去怀疑一款杀毒软件所具有检测未知病毒能力,但就如文中所说,虽然未知病毒检测的发展已经有了很大的进步,但对反病毒厂商来说,发展之路其实还很漫长。