病毒在变得简单而又全能
瑞星对2011年1月至5月期间新增感染型病毒记录的病毒样本的感染行为分析情况来看,病毒的编译方式正在从传统的全部直接由低级汇编语言撰写逐渐转变为兼并使用低级和高级语言混合撰写的方式,病毒已经开始采用使用少量的汇编编写的引导部分去加载由高级语言的主体功能部分这种混合方式。
通过对嵌入C语言程序的Kuku家族和加载动态链接库的Loader家族分析来看,这种新型的感染型病毒在结构和分工上较传统的单一语言编写的感染型病毒显得更为明朗和清晰。由高级语言编写的主体部分可以更加容易地添加实现更多的功能,简化后的汇编部分的功能则更为单一,但随着编写难度上大幅度降低,促成了更多新型功能更强的病毒诞生。预计用高级语言编写病毒会在未来形成主流,数目上可能会成为仅次于木马的第二大恶意软件,在功能上未来可能会揉合更多后门和木马功能的特征,如下载运行、广告程序、盗取隐私、远程控制等。可以说,感染型病毒正向着结构简单但功能多元化的方向发展。
感染型病毒结构趋于简单化——DLL文件同样可能是感染源
传统意义上的感染型病毒,通常的目标是可执行性文件(在Windows平台下,只有后缀为.exe的文件,用户双击后才可以运行),但是就目前截获到的感染型病毒记录来看,出现了一批后缀为.dll的感染型病毒样本。这种后缀为.dll的文件是Windows下的动态库文件,通常情况下,此种文件是不能够直接运行的,而是需要通过应用程序的主执行文件动态加载使用的。就目前的样本来看,此种后缀为.dll文件的宿主文件多为Windows操作系统的系统动态库。

图1:Win32.Loader.la样本文件
这种感染型病毒并不是使用传统意义上通过用户点击感染的可执行程序获得执行的,而是骗取操作系统或者应用程序的信任。当被感染的机器上运行了某些正常程序需要加载系统的动态链接库来使用某种API函数的过程中,不幸将感染后的系统动态库加载,在这加载过程中,感染病毒的样本就会获得执行机会,并得以传播。由于此种病毒需要依靠其他可执行程序的运行来被动加载,所以一般此种病毒一般会存在于当前应用程序的所在目录或者直接存在于系统目录。
这种感染型病毒的最大特点是结构极其简单,只完成从指定的位置加载另一个动态库后就退出,而真正的功能(如感染功能)则由另一个动态库来完成,所以通常这种病毒被命名为Loader。这种看似简单的结构给感染型病毒带来了更多的发展机会,由于Loader操作简单,所以很容易实现代码短小,被修改的宿主程序的变化不大,因此隐蔽性好。短小的汇编代码又更容易编写,且更容易使用变形引擎做变形躲避查杀。而主要功能转移到另一dll文件,就可以使用常规的软件开发工具和高级语言快速实现各种功能,且变种繁多。
高级语言编写的病毒开始流行——Dephi编写的感染型病毒乍现
感染型病毒由于其自身的特性,需要附加到其他宿主程序上进行运行,并且为了躲避杀毒软件的查杀,通常感染型病毒都会将自身分割、变形或加密后,再将自身的一部分或者全部附加到宿主程序上。这种特殊的要求使得传统的病毒来使用汇编作为最为适合的编写语言,但是由于汇编语言在编写上十分抽象且易于出错,所以制作隐蔽性好且功能丰富的感染型病毒难度过高,并且制作周期十分漫长。而且往往这种精雕细琢的病毒出现后,虽然有着变形引擎的保护,但如果特征上存在着一些共性,就很容易被杀毒软件公司添加了杀毒方法后杀绝。而另一方面,病毒一旦写好,再做大幅度的修改来躲避查杀的成本又过大。所以在于杀毒厂商抗衡的过程中,这种病毒的制作者发现了这个问题,逐渐的引进了高级语言来协助快速地开发感染型病毒。目前最早发现使用高级语言编写的感染型病毒之一是Kuku,它使用了内嵌C++语言编写病毒主体,外层使用了汇编编写一个PE加载器来自己加载内嵌的病毒体。

图2:Kuku感染型病毒结构示例
当宿主程序执行时,病毒会截获到执行权限,将执行流程跳转到事先编写的加载器上,通过加载器来加载高级语言生成的病毒主体,其主要的病毒功能就是在这里实现。由于使用了高级语言来实现主要功能,所以一些曾经不可思议的高级功能都可以由这个病毒主体来实现,同时这些病毒还可以使用正常软件的功能代码,如Win32.Kuku家族的病毒主体中就包含着一套类似常规P2P下载软件的网络传输引擎,用于在不同的主机中实现病毒更新和信息共享。

图3:Kuku感染型病毒运行示例
目前,病毒正逐渐向着简单化的形式发展,这种趋势不仅在木马程序上有所体现,在感染型病毒的制作上也同样如此。新生的感染型病毒在逐渐缩小使用传统病毒制作语言进行编写的部分,逐步更加青睐于使用高级语言进行撰写主体的功能部分。最近的感染型样本中的Win32.Logogo.a(下文简称为Logogo病毒)家族的感染型病毒,更是将高级语言Dephi引入到了病毒的制作之中。
Logogo病毒使用高级语言的思路极其简单,它借鉴了Dropper类型的木马工作机制,篡改宿主文件入口点到病毒新添加的节开始的小段汇编代码。这段汇编代码主要完成从新添加的节中读取嵌入在节中的内涵的病毒体文件后释放到硬盘,并在其运行后删除。其中这个内涵的病毒体文件就是直接使用的Dephi编写的病毒应用程序。

图4:Logogo病毒主体释放方法示例
高级语言编写的感染型病毒的出现,对于病毒制作者意味着可以快速、容易地开发出新的变体,或者用已有的病毒模块方便地相互组合。预计未来可能会出现比较通用的用于高级语言编写病毒的模块,如释放器和加载器等。高级语言出现的同时也会给病毒带来更加强大的功能,比如可以重用现有的后门程序的代码,还可以更容易地编写出更富有变化性的变形引擎,用于感染型病毒入口点的汇编代码的混合,给病毒的查杀带来更多难度。
除此之外,对于病毒分析人员来说,分析格式未公开的高级编译器编译出的代码要比用较低级编译语言的难度大得多。对于目前Microsoft公司的VisualBasic编译器编译出的PCode代码和吴涛公司的易语言编译器编译出的易语言二进制文件的分析都是难点。按照目前的感染型病毒发展趋势来看,使用更高级且格式未公开的编译语言制作感染型病毒的可能性都很高。从这个角度来说,高级语言感染型病毒的出现对病毒分析人员的能力提出了更高的要求。