【IT168 评论】摘要:瑞星对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代码和吴涛公司的易语言编译器编译出的易语言二进制文件的分析都是难点。按照目前的感染型病毒发展趋势来看,使用更高级且格式未公开的编译语言制作感染型病毒的可能性都很高。从这个角度来说,高级语言感染型病毒的出现对病毒分析人员的能力提出了更高的要求。
感染型病毒功能趋于多元化——潜在威胁无所不在
通常提到感染型病毒,用户可能更关心它的传播途径是什么、传播速度有多快等,但感染型病毒的目的不仅仅是为了传播自身到更广的范围,同时也有出于达到某种目的来编写的。从病毒的发展史来看,从最初的为了炫耀程序员的能力,到达某种政治目标,到最近出现的攻击伊朗核电站的国家病毒。病毒一直都是为了实现某种目的,而感染型病毒借助着自身的传染特性,可以将带有特定功能的病毒渗透到系统的各个角落,并等待时机到来后发起行动。
感染型病毒可能包含有后门功能,如目前还活动的Virut变种病毒,含有一个小型的后门客户端,用于获取用户操作系统信息、系统运行情况以及下载运行指定应用程序等功能。在感染了此种病毒用户的机器上,病毒的操纵者可以远程连接到用户电脑,首先获取用户电脑的配置信息,再根据配置情况指定一个网络路径,要求客户机去自动下载某个攻击程序后运行攻击某些重要目标主机,同时病毒的操纵者还可以监视着客户机运行情况,在适当的情况下,再将下载的程序删除掉摸清痕迹,让侦查人员无从下手。除此之外virut病毒在设计的过程中就考虑到了不同操作系统的兼容问题,它同时包含两套功能等价代码,分别用于win98系列的系统和winnt内核系列的系统,这一设计让病毒的适用范围更加广阔,无论新老电脑都会受到影响。
感染型病毒还可能揉合木马程序的各种功能,如目前新增病毒Win32.Crypt.p,它可以感染如.exe一类的可执行程序、如rar压缩包一类的非可执行程序以及网页内容。Win32.Crypt.p病毒会从被感染程序中释放文件到硬盘,然后执行病毒的主体。该病毒主体外层加有两层壳进行保护,并使用高级语言编写,其中包含有rar的解包功能感染压缩包中的文件,能够释放驱动强制在系统级别将杀毒软件终止,自身复制删除并将自身安装成为服务,除此之外它还拥有盗号木马的一些特征,如截取用户屏幕后保存为文件,将释放出的imm.dll注册为输入法注入到其他进程后截取用户信息,最终还会把所有截获的信息通过http协议发送出去。
从以上两个方面我们可以看出,感染型病毒并不是以传播作为最终目的,而是作为其他病毒程序的跳板,将它们传播到计算机的各个角落后,再将其载体激活后完成最终的目的。感染型病毒就好比是一架B2轰炸机,其负载的功能就如同机舱中负载的货物,这些货物有可能是普通一批深入敌后的空降部队,也有可能是具有毁灭性质的原子弹。而感染型病毒的性能就如轰炸机的轰炸范围,炸到地方可能是无人的沙漠,也有可能是人口密集的广岛。
感染型病毒发展趋势——木马与病毒趋于合二为一
木马和病毒被经常被混淆,传统意义上木马和病毒的区分主要在于他们的特征,木马善于潜伏并完成某种预先设定的功能,而病毒主要拥有感染传播的能力。就目前的感染型病毒的发展趋势来看,感染型病毒逐渐采纳了木马程序的编写手段和功能,而木马程序的传播途径上又存在着与感染型病毒趋近的趋势,它们之间的距离正在逐步缩小。
恶意程序都是出于某种特殊目的而产生的,病毒的制作者也会考虑到各种不同恶意程序的优处和不足,并使之相互弥补和融合。但总体上,不论木马还是病毒的发展趋势都是向着简单高效的开发方式发展的,功能上的相互融合使感染型病毒拥有了前所未有的对被感染机器的控制能力和隐蔽性。