恶意代码多态技术研究
2010-08-07常艳
常艳
辽宁警官高等专科学校 辽宁 116023
0 前言
恶意代码是一种可以中断或破坏计算机及网络正常工作的程序或代码。随着计算机技术的发展,恶意代码的实现技术也在不断更新和升级,其技术主要集中在实现其隐蔽性,这样才能避开反恶意代码软件的检测,实现预定的破环目的。多态型恶意代码是目前隐蔽性很强的一种恶意代码,它是通过不断改变自身代码来实现隐蔽性,实现多态的方法各不相同,这样大大增加了恶意代码检测的难度。
1 恶意代码检测技术
恶意代码技术在不断发展,恶意代码的隐蔽性不断增强,研发快速、有效的检测平台已是当务之急,这对于减少恶意代码对网络的破坏,或将破坏造成的损失减到最低有着很大的现实意义,可这并不是一件简单的事情。由于不同恶意代码具有不同的隐蔽特征,所以应该采用不同的检测技术才有效。随着恶意代码隐蔽技术的升级,其检测技术也在不断改变。
1.1 特征码检测技术
特征码是惟一确定某种恶意代码的一段字符序列,通常称为恶意代码的“指纹”,是区分恶意代码的标志。反恶意代码软件通过特征码鉴别恶意代码;恶意代码本身也通过特征码鉴别文件是否已经被感染,否则就会重复感染文件并使文件长度无限变大,这样很容易被发觉。特征码检测技术实现起来相对简单,对大多恶意代码比较有效,但特征码提取需要人工完成,费时费力,而且对于未知的特征库中没有的恶意代码无能为力。由于多态型恶意代码是通过不断改变代码实现隐蔽,所以使用特征码检测技术将失效。
1.2 校验检测法
校验检测法对系统里的可执行文件计算后得出的比较值,这些值通常保存在数据库里,当进行校验搜索时,将重新计算校验,并把结果和数据库里的原始值做比较,当校验异常,检测工具会发出警报。多态型恶意代码通常采用变形、加密等手段使每一次感染的代码形式不一样,可以通过校验的方法监控。但是文件发生改变并不意味一定感染了恶意代码,因此可能出现误报或漏报现象,并且该方法不能识别恶意代码种类,不能报出恶意代码名称,对一些隐蔽性强的恶意代码无法检测。
1.3 行为检测法
利用恶意代码特有的行为特征来监测恶意代码。通过对恶意代码多年的观察、研究,有一些行为是恶意代码的共同行为,并且具有正常进程所不具备的特征。当程序运行时,监视其行为,如果发现恶意代码特征性行为,立即报警。该检测法对多态型恶意代码检测比较有效,在检测过程中,无论代码体怎么改变,只要其行为符合某种恶意代码行为特征,将报警。缺点是误报率比较高、不能识别恶意代码名称及类型、实现监测有一定难度。
1.4 虚拟机检测法
虚拟机检测主要针对多态型恶意代码,通过程序来模拟CPU的执行,像真正的CPU一样取指、译码、执行,可以模拟指令在真正CPU上执行的结果。通过给出一组机器码序列,虚拟机会自动从中取出第一条指令操作码部分,判断操作码类型和寻址方式以确定指令长度,然后在相应函数中执行该指令,并根据执行后结果确定下一条指令的位置,如此反复执行直到某个特定情况结束工作。当恶意软件使用加密/加壳这类变形技术时,若不解密,普通的特征码扫描无法检测。而使用虚拟机检测技术可实现自动解密,虚拟机从文件入口点处一条一条的取指令执行,直至解密段指令执行完成,此时文件解密完毕,可以进行特征检测。虚拟机检测技术的主要优点是可以有效检测通常的加密变形的恶意代码,其缺点是仍然需要配合特征扫描,因此无法检测未知的恶意代码,并且有的变形代码可以使用一些特殊的指令来绕过虚拟机检测。
2 多态技术介绍
恶意代码传播到目标后,自身代码和结构在空间上、时间上产生不同的变化,恶意代码的这种技术被称为多态。从上世纪 90年代第一个多态恶意代码出现从到现在,多态技术在不断的发展,根据其代码的演化分类,可以将多态型恶意代码分为四类:
(1)加密阶段
这是恶意代码变形的初级阶段,其目的在于隐藏代码体,它以一个不变的解密器开始,其后的恶意代码体利用加密进行保护。必须要指出的一点是,并不是所有的加密恶意代码都具有变形特性的,只有那些每次使用不同加密密钥的加密恶意代码才具有变形特征。缺点是加密器代码仍然是不变的,可以作为特征码检测。
(2)单变形阶段
这个阶段是在加密阶段基础上发展而来的,其最大改进点在于对解密器进行保护,这也正是针对特征码技术的一种设计方法,它的目的在于使得作为特征的解密器也隐藏起来,让反恶意代码软件无从下手,并且在这个阶段变形机已经出现,其缺点是只能生成有限种解密器变体。
(3)准变形阶段
这个阶段最大变化在于真正的变形机的出现,因为它可以生成足够多的变体,而且不同变体之间也没有可以利用的特征码,这就足以使得利用传统的特征码技术对这种恶意代码进行检测理论上的可能性不存在了,其加密从过去单层加密发展到了多层加密,同时采用随机解密算法。但是,该类算法在正常程序当中使用很少,经常被认为是可疑代码,然后结合虚拟机技术对代码进行模拟运行,以确定其是否为恶意代码程序。
(4)全变形阶段
这个阶段的变形机能够对恶意代码体进行变形,不在保持恶意代码的结构,变体之间无论结构还是代码都是完全不同的,克服了前三个阶段恶意代码程序都是静态的缺点,因为在前三个阶段的变体中,如果解密器被破译,解密后得到的病毒体代码都是一样的。
从其分类可以会看出,恶意代码技术在不断的发展,并且多态的发展将大大的增强了恶意代码检测的难度。
3 多态技术分析
根据多态技术分类可以总体将前三个阶段定义为它变阶段,可以将第四个阶段定义为自变阶段。它变阶段主要依靠变形机对恶意代码整体为对象进行结构变换;自变阶段是对恶意代码的内部指令进行变换,但保证执行结果不发生改变,其主要通过代码交换、压缩、扩展、替换、花指令等方法实现,并且多种方法可以同时使用,已达同一功能的恶意代码其代码体各不相同,从而躲避特征码技术的检测。
3.1 填充垃圾指令
垃圾指令就是在程序中加入不影响程序执行效果的一个字节或多个字节。其原则是:
(1)不能改变有用的寄存器和标志的状态;
(2)不能改变程序中的数据;
(3)不能改变内存的内容。
总之,不可以干扰程序的正常执行。
如:
Add eax , 3
Sub eax , 3
3.2 代码交换
多态变形很重要的一个工作就是变换指令的位置,仅这个特性就可以使特征码检测失效,例如:
VStatr:
I2 call start ;[1]
Statr:
I2 pop ebx ;[2]
I3 sub ebx , offser start ;[3]
I3 mov ecx , Vend-EncryptStart ;[4]
I3 lea edi , [offsrt EncryptStart+ebx] ;[5]
DeryptLoop:
I3 xor [edi] , byte prt ooh ;[6]
DeryptKey =byte prt $-1 ;[7]
I3 inc edi ;[8]
I2 loop DeryptLoop ;[9]
EncryptStart:
Call GetKBase
Call GetAPIz
Call InfectThread
Ret2Host:
Push HosrEntry[ebx]
Ret
通过指令交换的方法,可知上面[1]-[9]可排列的指令具有如下规则:
指令[1]-[3]顺序不能改变;
指令[4]可以在VStart ,DecryptLoop之间的任何地方;
指令[5]必须在指令[3]之后,指令[6]之前;
指令[6]-[9]顺序不能改变;
根据以上原则,可能改变采用指令序列是:
(1)123456789
(2)412356789
(3)142356789
(4)124356789
(5)123546789
3.3 代码替换
替换指令就是把指令变换为相同功能的指令,例如:
以上指令可以实现相同的功能,在程序实现过程中可以随意的选择,使程序代码各不相同。
3.4 代码压缩
压缩指令就是把已知的复杂指令集转换为单条指令,例如:
(1) Mov [edi] , eax
(2) Push edx
3.5 代码扩展
扩展指令其原理和压缩指令相反,时间单条指令展开为复杂的指令集,如:
通过比较可以看出,源代码只是简单的两条指令,源代码只是经过指令扩展和填充了垃圾指令之后,变得复杂难懂,所以利用简单的特征码检测技术已经很难检测到。
4 总结
通过对变形技术的分析会发现,检测多态恶意代码使用常规的特征码检测方法将失效,只能使用行为检测和虚拟机检测法,但是由于软硬件资源的限制,快速有效的检测到多态恶意代码将是一个有待继续研究的难题。
[1] 祝恩,殷建平,蔡志平,赵建民.计算机病毒自动变形机理的分析.计算机工程与科学.2002.
[2] 米佳,侯丽波,黄波.公共信息网络安全管理教程.大连理工出版社.2008.
[3] 张勐,杨大全,辛义忠,赵德平.计算机病毒变形技术研究.沈阳工业大学学报.2004.
[4] 孙淑华,马恒太,张楠,卿斯汉,王晓翠.后门植入、隐藏与检测技术研究.计算机应用研究.2004.