陈共龙
摘 要:随着全球信息化的不断推进,整个世界越来越被连成一个整体,威胁计算机系统安全的领域也越来越广泛,其中以恶意代码最为严重。而随着计算机系统安全攻击与防御技术的不断较量,恶意代码的攻击手法、攻击形式也越来越趋于隐秘化、复杂化。因此,有必要对当下的恶意代码分析技术进行总结,从中发现新的发展方向,以应对不断变化的恶意代码形势。
关键词:恶意代码;静态分析;动态分析
Abstract:With the advancement of global informationization, the whole world is increasingly tending together as a whole, the realm of threat to the computer system security is becoming more and more widely, of which the malicious code is the most influential. And with the constantly battle between the computer system security attack and defense technologies, the attacks technique and the form of attack of malicious code are more and more tend to be secret, complicated. Therefore, it is necessary to summarize the current malicious code analysis technology to find a new development direction, in response to the changing situation of malicious code.
Key words:malicious code;static analysis;dynamic analysis
隨着全球信息化进程的不断推进,网络开放性的不断增强,网络应用系统涉及领域的扩展,计算机所面临的威胁也越来越广泛了,其中恶意代码对计算机安全的威胁是最为严重的[1]。恶意代码是一类在不被察觉的情况下嵌入代码到另一段程序中,以达到破坏计算机系统数据、破坏数据的安全性和完整性、影响用户心理的程序。恶意代码的分类主要有计算机病毒、网络蠕虫、特洛伊木马、后门等。目前恶意代码的技术手段日益丰富,如多态、代码混淆等,但与此同时,与恶意代码之矛对立的恶意代码分析之盾也有了巨大的进步。
本文分析研究了当前主流的恶意代码分析技术及其进展,首先对恶意代码分析技术进行了概述,接着从静态分析和动态分析的角度,对不同的分析技术进行了研究和比对,最后对本文进行了总结。
1 恶意代码分析技术概述
恶意代码分析器借助某种恶意代码分析方法,判断程序是否有恶意行为。
现假定D=
分析器M分析程序X,得出分析结果。若R=Y,则该程序为恶意程序;反之,该程序为非恶意程序。虽然COHEN[2]已经证明了任意一个程序是否包含恶意行为是不可判定的,但是我们仍然能够根据恶意代码在传播过程中的特性,来判定程序是否为恶意程序。
恶意代码分析技术的分类方法有两种。一种是按照分析目标的差别分类:基于主机和基于网络。基于主机分析的方式包括基于特征码签名、基于校检和、启发式数据挖掘方法;基于网络分析的方式有基于Deep packet Inspection和基于HoneyPot方式[3]。另一种是按照分析时是否执行代码分类:静态分析和动态分析。静态分析方法是指在不执行二进制程序情况下进行分析的方法,如二进制统计分析、反编译、反汇编等;动态分析方法是指在目标程序执行的情况下,通过分析调用的函数等确定目标程序执行的过程,匹配特征函数序列库,从而判定目标程序是否为恶意代码。
本文主要依据后者对恶意代码分析技术进行分类。
2 静态分析技术
2.1 特征码扫描技术
特征码扫描技术是恶意代码扫描技术的一种,它是传统杀毒软件的主要利器。特征码扫描技术主要依赖的数据集是特征码数据库,该数据集是通过函数运算或者从程序直接提取的唯一标志。特征码的线性结构可以表示成:Sig(I)=
目前的基于传统特征码扫描改进的技术,在提高检测变种、未知恶意代码方面也有了不错的提高。假定特征向量F=<相似代码特征S,行为特征M,系统函数集合A>,则在原来简单的特征码基础上,使用这三个特征来表征一类恶意代码的特征,以达到缩小特征库规模,快速检测恶意代码,特别是变种代码的目的[1]。除了同一类型的恶意代码具有实现模式的相似性以外,不同类型的恶意代码也具有作为其编程实现的重要属性,即字符空间关系的独特特征。利用这个特征,能够为未知恶意代码的自动分析提供很好的基础[6]。
2.2 启发式扫描技术
启发式指的是“运用某种方式或方法去判定事物的知识和技能”或“自我发现的能力”。启发式扫描技术是基于定义的扫描技术和给定的判定规则,检测程序中是否存在可疑功能,并判定恶意代码的扫描方法[7-8]。
启发式扫描技术在某种意义上是基于专家系统产生的,由于正常程序和恶意程序在执行上的不同,熟练的汇编级程序员能够迅速的發现这类非正常的程序。常见的异常表现有使用非常规指令、存在花指令、解密循环代码、调用未导出的API等[9]。其衍生思路可以用于恶意软件的取证分析,以软件为实现反取证目的使用的技术程度来作为判定恶意软件的指标,即反取证的行为越多,越可能是恶意软件。这个方法被Murray[10]灵活的运用于分析恶意软件的反取证行为。
2.3 文件完整性分析技术
基于文件完整性的分析技术是指,通过使用某种单向散列算法,如MD5、SHA1、CRC32、Xerox等,计算系统动态链接库函数的哈希值,与在干净的系统环境下计算的哈希值进行比对。如果有变化,则可以判断该文件很可能被恶意代码修改了,该系统很可能已经不再安全。
这个思想早在1999年Cohen的一篇论文中就已经提出过,当时展现出来的优势是,以散列值的变化作为判断恶意代码感染的依据,容易实现且保护能力较强。但其问题也十分明显。某些正常程序会在更新的时候对自己进行修改,根据这种方式进行的检测必定会产生不小的误判问题[9]。
在之后的完整性分析技术研究中,都对Cohen的思想进行了较好的改进。如果对系统中所有文件都进行哈希值检测,必定会对系统造成巨大的开销,用户友好性和用户体验度必将极大的降低。为了解决这个问题,新的研究中只分析系统中关键部分的动态链接库文件,这些库文件在系统中往往是不会改变的。当恶意代码制造者试图修改系统库函数时,用户通过计算其哈希值并进行校验,就能立刻检测出恶意代码,同时也在一定程度上降低了修改自身函数的正常程序的误判[2]。
系统库函数的签名(即单向散列哈希值)是保存在系统的数据库中,数据库如果不加强保密工作,也会成为黑客入侵的重点。一种简单的保护签名的方法,是将签名存储在只读介质的数据库中。但这种方法对于用户来说,是十分不方便管理与维护的。另一种比较容易想到的方法是对数据库进行加密,但是每次取出、放回签名的解密、加密过程又会增加系统开销[11]。
可见,基于文件完整性的分析技术的优势和缺陷是十分明显的。因此,在使用基于文件完整性的分析技术时,应当根据使用的对象以及环境需求来选择分析技术。
3 动态分析技术
3.1 代码仿真分析技术
在恶意代码运行时追踪恶意代码的行为,能够高效的捕捉到异常行为。这种方法允许在真实环境中运行,但是一旦恶意代码失控,将会感染真实主机,造成不必要的损失。因此,使用代码仿真分析技术模拟真实环境,将是一个非常好的选择。
目前,已经出现了一些恶意代码仿真分析工具。开源虚拟机bochs是一个全系统仿真的虚拟机,模拟Intel X86架构的CPU以及计算机的其他设备,其良好的代码设计十分适合进行二次开发,如增加指令记录功能等,并能在一定程度上抵抗反调试技术[12]。Sandboxie[13]允许系统在“沙盘环境”中运行浏览器或者其他的程序,它是基于系统局部进行的保护,仅仅是几个危险的程序在沙盘中运行,其他一切规则都正常运行。BSA是基于Sandboxie的恶意代码分析工具,它能够捕获Sandboxie中的注册表修改、文件修改、API调用、访问网络的行为,并能自动的进行恶意代码分析。
3.2 行为监控分析技术
行为监控分析技术是通过监控、记录目标程序的各种类型的行为,根据其对系统产生的负面影响的程度来判定其是否为恶意代码。
行为监控分析技术按照分析的行为类型可以分为网络行为分析和主机行为分析。
网络行为分析是通过分析目标程序在网络中的通信行为来判定其恶意性的。传统的网络通信行为分析的方法是深度包检测技术,即从网络层和传输层两个层面分析恶意代码行为,并提取能够有效描述恶意代码行为的四个特征,用正则表达式匹配攻击模式检测木马程序,从而识别出恶意代码,但是当网络流量数据巨大的时候,无法及时分析出结果[14-15]。因此,一种新的分析系统应运而生,该系统使分析系统的前端主机能够在不重组数据包的情况下,就分析出数据包是否为恶意代码,从而提高了分析效率[16]。
主机行为分析是依据恶意程序的恶意行为,如API调用序列、参数的依赖轮廓等,来对目标程序进行判断[17]。运用的比较好的模型,是通过组合对应权限下用户可能的操作构建的攻击树模型,在基础的攻击树模型上增加危害权值、攻击树文本图等元素,并结合代码仿真技术中的虚拟机运行技术,解决了传统攻击树模型行为差异性描述不准确、危害量化不合理等问题,从而提供更为高效的恶意代码分析结果[18-20]。
3.3 可执行路径分析技术
基于可行路径的分析技术有两种应用思路:一种是结合静态分析中的完整性校验技术,对内核级恶意代码在内存中的执行路径进行完整性校验;另一种是为了对恶意代码进行更为完整的功能分析,遍历恶意代码所有可能的执行路径。
内核级恶意代码实现静默修改系统的执行路径,一般是通过修改系统库函数的返回值、修改系统库函数表的转向等手法来实现。一旦内核级恶意代码拿到了系统内核的控制权,那么对于应用层上的任何用户软件,包括应用层的杀毒软件都将会造成巨大的威胁。此时的杀毒软件将形同虚设,被内核级恶意代码玩弄于鼓掌之中,系统将永远不会返回一个真实的值,此时的系统也已然成为了恶意代码的傀儡。通过分析发现,恶意代码不管使用何种隐藏手法,其最终必将运行于内存中。其中,系统库函数在内存中执行的指令顺序、指令数都是固定的,通过计算正常的系统库函数内存指令的哈希值,并与被测系统库函数内存指令哈希值进行比对,一旦发现两者不同,就可以立即判定系统被恶意代码修改了,应当及时采取措施[11]。
为了更为完善的分析恶意代码的功能,经常会借助多路径分析的方法。其基本思想是,通过修改变量或者系统环境,以实现代码不同的执行路径。现有的基于代码覆盖的多路径分析方法中,通过标记已经执行过的路径以减少重复遍历,提高了分析的执行效率;对于传統多路径分析无法比较好的解决循环的问题,现有的分析方法中对循环的语句结构设定了一个时间界限,防止了循环语句在某些情况下陷入死循环的问题[21]。
4 总结
从本文的分析比较中,可以发现,恶意代码的分析技术有基于特征码的、基于启发式的、基于代码仿真的和基于行为监控的。除了本文描述的几种方法外,还有动静态分析相结合的双重恶意代码检测技术、程序语义的逻辑分析技术、基于社会计算的分析技术等。相信在恶意代码分析这个活跃的领域中,将会源源不断的有新的技术被挖掘与应用进来。
[参考文献]
[1]陈娟英,范明钰,王光卫.一种基于亲缘性的恶意代码分析方法[J].信息安全技术,2014(1).
[2]COHEN,F:Computational aspects of computer viruses[J].Computer&Security.Volume 8,Issue 4,June 1989,pp.297-298.
[3]秦军m张海鹏m苏志和m林巧明.一种基于二维行为特征的恶意代码识别方法[J].计算机技术与发展,2013(6).
[4]王海峰.基于智能特征码的反病毒引擎设计[J].计算机工程,2010(3).
[5]单长虹.杀毒软件编程精华[J].黑客防线,2004(03S).
[6]李鹏m王汝传m武宁.基于空间关系特征的未知恶意代码自动检测技术研究[J].计算机研究与发展,2012(5).
[7]Symantec:Understanding heuristics:Symantecs Bloodhound technology[Z].Symantec White Paper Series,Volume XXXIV,1997.
[8]曾宪伟,张智军,张志.基于虚拟机的启发式扫描反病毒技术[J].计算机应用与软件,2005(9).
[9]奚琪,王清贤,曾勇军.恶意代码检测技术综述[C].计算机研究新进展——河南省计算机学会2010年学术年会论文集,2010.
[10]Murray Brand.Malware Forensics:Discovery of the Intent of Deception[J].Journal of Digital Forensics,Security&Law;2010,Vol.5 Issue 4,pp.31.
[11]齐琪.基于内存完整性的木马检测技术[D].华中科技大学,2006.
[12]邓超国,谷大武,李卷孺,孙明.一种基于全系统仿真和指令流分析的二进制代码分析方法[J].计算机应用研究,2011(4).
[13]http://www.sandboxie.com/,http://bsa.isoftware.nl/,last visited at 2014-3-9.
[14]蔡洪民,伍乃骐,滕少华.分布式木马检测系统设计实现[J].计算机应用与软件,2012(5).
[15]李世淙,云晓春,张永铮.一种基于分层聚类方法的木马通信行为检测模型[J].计算机研究与发展,2012(2).
[16]舒胤明,范明钰,王光卫.一种新的恶意代码检测方法[J].计算机安全,2013(9).
[17]苗启广,王蕴,曹莹,刘文闯.面向最小行为的恶意程序检测研究[J].系统工程与电子技术,2012(4).
[18]谢乐川,袁平.改进攻击树的恶意代码检测方法[J].计算机工程与设计,2013(5).
[19]温志渊,翟健宏,徐径山,欧阳建国.基于攻击行为树的恶意代码检测平台[J].信息网络安全,2013(9).
[20]姜政伟,王晓箴,刘宝旭.基于最小攻击树的UEFI恶意行为检测模型[J].计算机工程与应用,2012(32).
[21]王祥根,司端锋,冯登国,苏璞睿.基于代码覆盖的恶意代码多路径分析方法[J].电子学报.2009(4).