恶意代码的分析技术

2024-10-19

恶意代码的分析技术(精选5篇)

恶意代码的分析技术 篇1

计算机技术、互联网、分布式系统的广泛应用,给人们的工作和生活带来了前所未有的效率和便利。然而,恶意代码技术也随之突飞猛进,数量急剧增加,已成为信息社会的最大威胁。从卡巴斯机实验室2009年上半年恶意代码统计报告中可以看出,2009年上半年就发现了367772个恶意程序,数量是08年全年的1.5倍。恶意代码分析的主要目的是在捕获到恶意代码样本的前提下,对恶意代码进行定义,并提取其特征,为下一步的恶意代码检测、控制和清除提供依据。是否可以快速有效的对恶意代码进行分析是防范恶意代码的关键。传统的恶意代码分析技术一般分为静态分析和动态分析两类。手工分析已经无法应对平均每月6万个恶意代码的分析需求。恶意代码自动分析已经成为有效对抗恶意代码的主要途径。

1 静态自动分析技术

静态分析是一种白盒分析方法,它不实际运行恶意代码,而是通过文件结构解析、反汇编、反编译等手段对恶意代码的二进制文件进行分析。通过静态分析可以了解恶意代码的程序流程和功能,获取用于检测和查杀恶意代码的特征定义。静态自动分析与静态手工分析相比较,其技术上的特色主要体现在:特征码自动提取技术和行为特征静态自动提取技术。

1.1 特征码自动提取技术

特征码就是某个恶意代码所具有的与其它恶意代码不同,而且又可以把它和正常程序区别开的一些代码。通过特征码,可实现对恶意代码的精确匹配。绝大多数自动提取特征码的方法都是采用统计,比较和数据挖掘等技术。Kephart提出了一种基于统计和比较的方法,可自动提取一个固定长度(24字节)的特征码,最初被应用于DIS系统中。Deng Peter对上述方法进行了改进,提出了使用多个可变长度并且相互关联的字符串来表示特征码的方法。多态(polymorphic)和变形(metamorphic)技术是特征码静态自动提取技术无法逾越的障碍,因为它可以使一种病毒千变万化,找不到固定不变的病毒体,提取的特征码也就没有意义。

1.2 SAFE和SAVE

使用反汇编技术可对恶意代码的内部结构与流程进行深入分析,如SAFE和SAVE。SAFE通过对恶意代码进行反汇编并使用模式识别的方法可以很好的对抗恶意代码的代码迷惑(obfuscation)技术。但是这种方法依赖于第三方的反汇编工具(IDA Pro),在很大程度上影响了分析效率。SAVE通过自己开发的PE文件解析器对恶意代码进行反汇编,提取恶意代码的API调用序列作为恶意代码的行为特征。通过反汇编和反编译技术容易对恶意代码所有可能的执行路径进行全面分析,但是要求技术难度很高,并且难以应对采用复杂的加壳、多态和变形技术的恶意代码,对恶意代码进行自动分析的成功率不高。

2 动态自动分析技术

动态分析是一种黑盒分析方法,它需要在一个可控的环境中运行恶意代码,分析恶意代码与终端操作系统之间的行为特征,动态分析结果近似于所见即所得,比较直观,如对注册表、文件系统、网络的访问行为等等。

动态自动分析与动态手工分析的主要区别是:动态自动分析主要利用API Hooking等技术对在恶意代码运行过程中进行行为监测,而动态手工分析则更多的是利用调试工具(如OllyDbg、SoftICE等)对恶意代码进行动态调试跟踪。

动态分析技术是恶意代码主机行为主动检测技术的基础,采用这种技术可以轻松对抗加壳、多态和变形技术的恶意代码。基于行为的恶意代码特征定义虽不能实现精确匹配,但普适性很好。具统计,近期超过三分之一的恶意代码检测归功于基于行为的动态检测技术。

2.1 状态对比法

状态对比法是通过恶意代码执行前和执行完毕后,比较操作系统的前后状态变化来分析恶意代码的行为。这种方法在实现上简单快速,但是它忽略了恶意代码的中间行为,得到的分析结果往往不能全面、准备的反映恶意代码的真实行为,所以也就不能成为恶意代码行为特征定义和监测的依据。

2.2 动态追踪法

动态追踪法是在恶意代码的执行过程中监视其动态行为。与状态对比法相比,这种方法可以更加真实的反应恶意代码执行全过程的行为特征。在动态追踪法中采用的行为监测手段大致可分为:User Level Monitor、Kernel Level Monitor和基于指令集仿真环境的行为监测技术等。User Level Monitor技术一般指操作系统用户层的User API Hooking技术,它利用系统提供的编程接口进行钩挂,可以通过监测恶意代码执行过程中的系统API调用及其输入输出参数进一步得出恶意代码的行为。

Kernel Level Monitor技术指Kernel API Hooking技术和设备过滤驱动(Filter Driver)技术。Kernel API Hooking技术一般通过修改内核SSDT表(System Service Dispatch Table)中系统服务函数地址实现。另外,多个用户层函数(如多个DLL中的函数)可能对应一个内核层函数,因此实现同样的功能,User API Hooking技术钩挂的位置多而分散,而User API Hooking技术钩挂的位置少而集中。

3 网络行为自动分析技术

恶意的网络行为通常分为以下五类:扫描,入侵,控制,复制,攻击。恶意代码的网络行为分析一般指:将被感染主机置于一个隔离的小型网络环境中,在恶意代码执行过程中监测其访问网络环境的所有流量,并对其进行分析得出恶意网络行为特征。

网络行为分析与动态分析都需要运行恶意代码,它们的主要区别是:动态分析主要侧重于分析恶意代码与终端操作系统之间的行为特征,这种行为特征主要应用于基于主机的恶意行为检测;网络行为分析主要侧重于分析恶意代码与网络环境之间的行为特征,这种行为特征主要应用于网络监控和入侵检测。

网络行为分析的关键技术主要包括:构建虚拟Internet,模拟普遍的网络服务(如DNS、FTP、TFTP、HTTP、HTTPS、SMTP等),诱骗恶意代码产生恶意网络行为;对监测的网络流量进行分析得出恶意网络行为特征;虚拟网络初始状态的自动恢复等。

具有网络行为自动分析功能的分析器有NICTER (Network Incident analysis Center for Tactical Emergency Response), AMCAS等。其中NICTER构建的虚拟Internet很出色,但未将恶意网络行为抽象出可用于检测的行为特征;而AMCAS提出了一种基于事件序列的网络行为分析方法,并采用snort格式对特征码进行了规范。

4 结束语

对于恶意代码,人工分析是必要的。虽然国内外各大安全厂商部署的恶意代码自动分析系统替代了人的绝大部分工作,但是就如同“机器人不能取代人类”一样,人所具备的优势在于:智慧、经验和灵感。如何仿真网络环境,如何诱骗恶意代码的恶意网络行为,如何将恶意网络行为特征运用到实际的检测工作中等等都将是这个领域研究的热点问题。

参考文献

[1]Kaspersky Security Bulletin[EB/OL].http://www.viruslist.com/, 2008-09-21.

[2]Static Code Analysis[EB/OL].http://en.wikipedia.org/wiki/Static_code_analysis.2008-01-07.

[3]J.O.Kephart and W.C.Arnold.Automatic Extraction of Computer Virus Signatures[J].The4th Virus Bulletin International Conference, 1994 (2) :178-184.

[4]Jeffrey O.Kephart, Gregory B.Sorkin, et al.Blueprint for a Computer Immune System[J].Virus Bulletin Conference, 1997 (3) :159-173.

[5]Deng P S, Wang J H, et al.Intelligent Automatic Malicious Code Signatures Extraction[J].IEEE37th Annual2003International Carnahan Conference on Security Technology, 2003 (10) :600-603.

[6]Polymorphic Code[EB/OL].http://en.wikipedia.org/wiki/Polymorphic_code.2008-01-05.

恶意代码的分析技术 篇2

恶意代码可屏蔽10086短信

中国移动近日在监测时发现了6款新型手机病毒,这些病毒导致用户后台自动联网、点播手机游戏类业务、发送垃圾短信,甚至屏蔽10086短信提醒,严重侵害了用户权益。

对此,资深技术人士解释称,这类恶意代码注册的短信息接收器,通过拦截号码为“10”开头的短信,使手机无法接收到“10”开头的短信,导致用户无法收到扣费确认信息。而后,该软件再自动代用户回复确认短信,从而直接操作用户的手机,完成扣费行为。

运营商技术人士介绍称,目前,除了手机无法正常接收运营商下发的10086、10010、10000客服短信外,若手机无故自动下载并且安装应用程序、预存话费无故减少甚至出现欠费停机,出现不知情订购业务、不知情向其他手机发送大量垃圾短信,手机上网数据流量异常增加等现象时,则很有可能已经被恶意代码侵入了。

伪装良民恶意代码频袭手机

根据国家互联网应急中心的分类标准,目前恶意代码主要包括恶意扣费、隐私窃取、远程控制、资费消耗、系统破坏、流氓行为、诱骗欺诈、恶意传播八类。而当下,这类披着良民外衣的恶意代码最容易潜入手机,侵害用户利益。

有数据显示,当前安卓手机被恶意代码命中的几率最高。近日,趋势科技就发现了一款伪装成Google+的恶意代码。该应用程序能记录用户电话、收集用户手机GPS定位、短信和通话记录等信息,并将其发送到远程服务器上,导致用户隐私泄露。

另外,据网秦的监测数据,如手机系统优化、来电查询、锁屏等工具类APP程序是当前最易被黑客利用的。

不久前,就有一款名为SpyPhone的APP软件,可访问最近20个Safari搜索、YouTube视频播放纪录、电子邮件账户资料。如使用者名称、电邮地址、主机、登录等,以及iPhone本身的详细资料,都有可能被黑客用来追踪使用者,甚至手机换了也可能继续追踪。

别把安全软件当门神

“某些手机安全厂商其实就是恶意代码的始作俑者。”有業内人士如此表示。早在2011年3.15时,央视曝光网秦吸费但遭其否认。然而,对于普通用户而言,安装了安全软件,手机并非“一路平安”——经常提醒“软件要更新”、手机运行变慢等体验不佳。腾讯移动安全实验室专家表示,主流安全类软件目前均为免费应用,初衷是保护手机用户安全上网的基本需求。提醒“软件更新”是一般安全软件的其中一项常用功能,其初衷是提醒用户现在手机里哪些软件有新的版本,但用户对是否更新有绝对的选择权,腾讯手机管家的版本更新提醒设置在软件界面内,不会跳出界面外去骚扰用户。若用户不想被提醒更新,可以自定义选择忽略提醒。

同时,安全软件的运行要占用内存,这是为了实时对手机上恶意软件入侵进行实时防护,这与PC相似。手机管家等安全工具有便捷的手机一键加速功能,可以快速清理缓存、系统进程、开机启动项等,优化手机运行速度。

有些用户出现高流量,该专家称,手机流量消耗可能与某些软件的在线升级有关,用户可以及时关闭手机系统自动更新、某些资源下载类软件(如音乐下载)自动下载、软件版本自动升级功能等。360公司相关人士也表示,不排除部分所谓的安全工具有作弊的嫌疑。

基于恶意代码的检测技术研究 篇3

本文通过分析一些常见的检测方法, 并通过分析其原理, 来判断各种方法的优势和劣势。因为各种新型恶意代码的出现, 在识别能力和处理量上, 对于检测程序都有了新的要求。伴随着这些变化, 一些更加智能化的检测手段相继出现。这些手段改进的一个主要目标, 就在于将静态的比对方法, 通过知识库中各个点间的相互联系, 甚至自动的获取知识分析, 来达到检测的目的。这些方法的出现, 一方面是应对新型恶意代码的需要出现的, 另一方面也是在各种资源成本与检测效益间的平衡中发展起来的。

1 特征码识别法

这是一种最常见的检测方法, 它用恶意代码中特有的特征代码检测, 这些字节序列是不太可能出现在正常文件中, 通过查询比对即可以检测出一批恶意代码。比如依据如下原则:抽取的代码比较特殊, 所以不大可能与普通正常程序代码吻合。抽取的代码要有适当长度, 一方面保证特征代码的惟一性, 另一方面又不要保证有太大的空间。

例如KMP算法的时间复杂度为O (m+n) , 如果待检测的特征代码个数为k, 而特征代码平均长度为M, 待检测代码长度为N, 则可以设系统资源消耗为Pay。

其最终的时间复杂度为O (K· (M+N) ) ,

Pay=k (m+n) ·α (α是一个稳定的系数, 它与具体系统有关) 。

可以看到, Pay (系统资源消耗) 其随着特征代码量k的增加呈线性变化, 其随着k的增长线性增长。这种检测方法它有一个弱点就是:现今随着恶意代码量呈指数级增长之势, 如果要保证安全性, 那么配套就需要庞大的特征库, 这样就造成检测代码的工作量, 伴随着特征库的增大随之放大。与此同时一些新型代码采用了加壳, 变形, 多态等各种新技术来躲避查杀, 这样就更加加重了特征码检测的难度, 因此单纯依靠特征码比对, 已不足以应对新型代码。并且在恶意代码检测方面, 很重要的一点就是, 做到早发现, 早处置, 就可以减少损失, 但这种检测方法属于事后补救方式。同时整个检测系统的可靠性, 强烈依赖于特征库的完整性, 如果特征库并没有随时更新, 其面对新代码也就无能为力。所以, 这种方法伴随着时代发展, 已经不再很适合应对各种新情况了。

2 启发式检测技术

启发式扫描技术检测程序, 实际上就是以特定方式实现对代码行为的检测, 通过对代码行为的观测来推测代码动机。从工作原理上可以分为静态启发以及动态启发两种。启发式实现检测程序可以实现能够分析自动文件代码的逻辑结构, 并判断是否含有恶意程序特征, 或者通过在一个虚拟的模拟执行环境中, 通过模拟性质的执行代码来判断输入其中的代码其是否有恶意属性, 并最终决定处理动作。一般前者被称为静态代码分析, 而后者则被称为动态启发式。

2.1 静态启发式检测

其原理在于, 恶意代码与普通程序在启动时, 它们的行为存在明显差异。利用这个区别, 检测程序就可以通过扫描程序的特征指令, 并与一般的常规指令比较, 观察命中的条数综合起来就可以判别代码是否为恶意代码, 这种方法也可以作为特征码识别的一种补充。与特征码识别最大的不同就在于, 这种方式判断的依据在于代码的行为特征, 而非其他。

比如恶意代码最初的指令却极有可能是一些危险指令例如写盘操作或者解码指令, 或者搜索某敏感路径下的可执行程序等等, 依据出现这些可疑行径的情况进行分析, 同专门的指令库进行比较, 则可以判定此代码的恶意属性。依靠专家经验, 可以建立一个恶意指令知识库, 那么如同特征码库一样就可以通过定期更新的办法维持对一些新型代码的查杀能力。

静态启发式检测, 主要可以通过反汇编方式, 实现在不执行代码的情况下, 通过核对病毒头指令, 来达到检测的目的。因为主要查杀的目标在于代码的最开始一段, 这样可以省去很多系统资源。

这种方法的资源消耗同特征码识别相比类似, 但是他的特征库可以做的更小一些。对比特征库动辄上万的记录, 恶意指令库要小上很多, 作为一种补充措施它相比起来更加高效一些。但是由于完备性不够, 实用效果并不如动态启发好, 只适宜于用作补充措施。

2.2 动态启发式检测

动态启发式的原理在于, 最初可以假设并不知道某个程序是否带有恶意代码属性, 如此就可以先虚拟出一个执行环境, 让代码在其中并模拟执行。如果是恶意代码, 代码在模拟执行的时候, 就会如期产生一些危险动作。这样一来就可以通过探针发现。它的关键思想是, 模拟实验方法以及纠正思想。如图1所示。

这种方法的一个关键思路, 就是虚拟机制。可以是模拟执行动态监测, 或者设置报警诱发装置。它通过虚拟机技术来仿真内存和CPU以及文件系统和网络连接进而模拟代码的执行过程。又或者采用蜜罐技术设置陷阱门, 进而诱发恶意行为而产生警报。这种方法由于代码执行区间在虚拟机中, 所以不会在真实环境中威胁用户数据。

由于动态启发式判断技术具有许多其他检测方法不可替代的优势, 故而仍然是现阶段检测未知病毒比较有效可靠的方法并得到了广泛的应用。

3 主动防御技术

这种方法检测的原理在于, 人们依靠对病毒行为规律分析和深入归纳总结, 并结合安全专家判定恶意代码的经验历史, 可以提炼出恶意代码识别规则知识库通用规则, 并依此模拟人类专家发现新病毒的机制, 通过对各种程序执行的动作进行监视, 并尝试自动分析程序动作之间的逻辑关系, 依靠知识库的知识进行动作识别, 以达到主动防御的目的。在具体的行为检查方面, 以检测工具具体利用的方法不同, 可以大致分为基于专家系统的检测和基于神经网络的检测两种。整个解决办法的模型如图2所示。

3.1 专家系统检测

专家系统是一个智能计算机系统, 它的知识库依靠某个领域专家水平的知识与经验, 即能够利用人类专家的行业知识和解决方法。亦即专家系统是一个具有大量的行业知识经验的计算机系统, 专家系统与传统的计算机程序系统有着完全不同的体系结构, 通常它由知识库、推理机、知识获取机制、解释机制和人机接口等几个基本独立部分所组成。专家系统依靠知识库和推理机, 在用户输入后推理分析得出结论, 并产生知识。而推理机用来将用户输入的信息与知识库中各个规则进行匹配比较。这种方法应用到在恶意代码检测领域, 病毒代码即为输入, 由专家系统推理产生代码的行为判定, 如图3所示。

专家系统的重点在于知识库的维护方式和知识获取机制。将知识库里面的单条记录确定为一个约束, 再将模式定义为多个约束的集合, 采用if-then产生式规则来描述知识规则, 同时配合阀值控制最终的反应行为。

3.2 神经网络检测

这种检测方式运用神经网络的自我学习能力, 结合专家系统的推理机制, 使得整个检测系统更加智能化, 从而具有了更强的自适应能力。神经网络是一种依靠模拟动物神经网络行为特征, 来进行复杂信息处理的数学算法模型。

其本质在于模拟动物神经网络的运行机制。依靠系统的复杂程度, 通过调整内部大量节点之间相互关联影响的关系, 以提供的一批初始值来计算推理并输出数据, 通过分析掌握两者之间的内在关联, 最终实现用新的用户输入数据来推算并输出用户结果, 最终导致系统的识别能力不断提高。依靠神经网络的这种自我学习能力, 将其扩展在恶意代码检测发现上面, 即可以动态的适应各种新情况, 由于现在的常规检测算法推理能力不高, 依靠神经网络高度智能化的推理能力以及知识库, 就可以将对恶意代码的识别能力提高不少。处理逻辑如图4所示。

但是现阶段, 基于神经网络的代码检测面临的问题导致似乎得不偿失, 一方面在于神经系统本身极其复杂, 耗费了大量数据和计算。而且另一方面检测过程中其固有的算法, 难以产生全局性的结果, 需要严格控制虚警率即误报率, 与此同时神经网络本身的特点又容易产生另一个问题就是, 在初始化时传入的参数偏差, 很容易导致训练过度, 并由此产生不会识别新样本集的现象。但在长远看来, 神经网络的这种自我学习能力和自我适应能力用于恶意代码检测非常合适, 只要神经网络本身的问题得到解决, 这种检测方法具有很强的实用价值。

4 总结

恶意代码因为有一定的传播机制和发作机理, 通过人工知识总结或者机器自我推理, 就可以提取恶意代码的语义特征。特征码匹配和静态启发式对应这种方式, 可以认为是一些孤立的单点集合, 并没有良好的组成连通图。随着技术的更新发展, 动态启发式和专家系统, 就可以比较好的实现这种知识间的联通和交流, 但是数据的自我更新能力相比基于神经系统的检测方法缺乏动态适应能力。

参考文献

[1]周瑞丽.基于专家系统的恶意代码检测.中国科学技术大学[学位论文].2009.

[2]崔鹏.基于形式化语义的启发式病毒检测引擎研究.辽东学院学报 (自然科学版) .2008.

[3]王海峰, 段友祥.基于行为分析的病毒检测引擎的改良研究.计算机应用.2004.

[4]周瑞丽, 潘剑锋等.应用专家系统开发Windows恶意代码检测系统的研究.信息安全与通信保密.2009.

恶意代码的分析技术 篇4

关键词:android,信息安全,恶意代码,代码分析

Android是一种基于Linux的自由及开放源代码的操作系统, 主要使用于移动设备, 如智能手机和平板电脑, 由Google公司和开放手机联盟领导及开发。2012年11月数据显示, Android占据全球智能手机操作系统市场76%的份额, 中国市场占有率为90%。

Android会同一系列核心应用程序包一起发布, 该应用程序包包括客户端, SMS短消息程序, 日历, 地图, 浏览器, 联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。手机中存储了个人的日常生活隐私和通信隐私等等, 因此android下的恶意软件危害及其严重。黑客可以通过android恶意软件、木马程序等攻击用户, 用户一旦遭受攻击, 将会暴露大量的隐私信息, 会带来诈骗、钓鱼、重要文件失窃等事件, 更有可能带来不可估量的经济损失。

1 Android软件APK结构和功能分析

Android应用程序包文件 (APK) 是一种Android操作系统上的应用程序安装文件格式, 其英文全称为“applicationpackagefile”。任意一个Android应用程序的代码想要在Android设备上运行, 必须先进行编译, 然后被打包成为一个被Android系统所能识别的文件才可以被运行, 这种能被Android系统识别并运行的文件格式称之为“APK”。

APK文件是基于ZIP文件格式, 它与JAR文件的构造方式相似。它的互联网媒体类型是application/vnd.android.package-archive.通过观察Android工程在Eclipse的目录结构分布。

2 基于代码特征的恶意代码特征库构建原理和设计

首先采集样本, 样本来源于contagiominidump.blogspot.com。人工构建敏感API名单, 通过对SDKAPI的分析, 将获取联系人、短信、通话、网络、录音、GPS、摄像等相关的API作为初始化敏感API。

Zip APk批量解压模块, 利用zlib库实现, 通过代码实现全自动解压缩, 将获取的样本逐一解压。APK缓存文件生成之后交由Dex2Jar处理。

Dex2Jar依赖于JDK环境, 将.dex/.odex的二进制字节码反编译, 转换为java的Jar包。

JAR (Java Archive, Java归档文件) 是与平台无关的文件格式, 它允许将许多文件组合成一个压缩文件。通过zlib库将得到的Jar文件进行解压缩处理, 放入缓存, 已备后续流程处理。

Jar预处理完成交由Smali->java模块处理, 该模块由Jad实现, Jad将生成smali文件反编译为能够有文本编辑器识别的Java代码, 将所有当前生成的Java文件夹放入缓存, 交由文本匹配模块进行特征提取。

根据手工设定的敏感API进行特征提取, 将每个样本的敏感API组合特征和出现频率等进行统计和入库。

3 基于代码特征的恶意APK静态分析系统原理与设计

恶意代码样本库特征初始化完成, 有本部分完成对待分析APK的恶意代码的静态分析。

首先将要分析的APK输入到该系统, 通过Dex2Jar, Jar转换Java代码文件, 待分析代码放入缓存区域, 将待分析代码输入到特征匹配模块, 利用之前生成的恶意代码特征库进行特征匹配, 将匹配的结果生成到分析报告中。

4 结语

首先对Android系统进行了简单的介绍, 并简略的叙述了当前Android恶意软件带来危害, 然后通过对Eclipse工程项目的结构对APK结构进行了简要的分析, 并分别介绍了各自的功能, 恶意代码通常包含在dex文件之中, 不排除有部分恶意软件动态加载加密的资源执行隐藏的代码。

在最后提出了Android下APK中的恶意代码特征库组建模型, 叙述了它的实现流程和原理, 再次基础上设计基于代码特征的APK恶意代码分析系统, 通过对特征的提取和分析得出分析报告。

该设计是在特征库足够完备和权重指标足够完美的前提下运作的, 能够更加快速的分析软件恶意特征。

参考文献

[1]戴明星, 陈正奎.Web网站的安全代码设计[J].信息安全与通信保密, 2010.

[2]wxSQLite3.wxSQLite3 Source Code[EB/OL]. (2011-02-12) [2012-09-15].

[3]刘嘉勇, 方勇, 胡勇.应用密码学[M].北京:清华大学出版社, 2008.

[4]李鑫, 周安民.对多种Web语言嵌套的跨站过滤分析[J].信息安全与通信保密, 2012.

[5]徐少培, 姚崎.基于操作劫持模式的Web攻击与防御技术研究[J].信息安全与通信保密, 2011.

恶意代码的分析技术 篇5

随着网络开放性的不断增强,网络应用系统涉及领域的扩展,计算机所面临的威胁也越来越广泛了,其中恶意代码对计算机安全的威胁是最为严重的。同时,网络的普及和发展也使得恶意代码的传播更为方便。

根据赛门铁克《互联网安全威胁报告》第14-17期, 如图1所示,可以窥见恶意代码迅速发展的情况。据分析,绝大多数新增恶意代码是由原有的恶意代码经过变形得到的,同时,恶意代码每年给全球造成的经济损失也在与日俱增。自恶意代码出现以来,社会各界一直在对恶意代码的分析与检测做着不懈努力,本文是对恶意代码分析的一种新尝试,并提出了一种基于亲缘性分析的恶意代码特征码提取方法, 意在加强特征码的通用性,以便检测未知的恶意代码。所谓亲缘性,即为同一种族的恶意代码之间所存在的某种联系,类似于人际关系间的亲属关系。

本文使用系统函数集合、行为特征、相似代码特征这三个方面来来定量的表征这种亲缘性。为表述简洁, 本文将基于亲缘性分析的恶意代码特征码简称为恶意代码亲 缘性特征 (Malicious code Affinity Signature,MAS)。

2传统特征提取技术面临的问题

传统杀毒软件主要依赖于恶意代码特征码来进行识别, 反病毒分析人员获取某一种恶意代码样本后,筛选出该恶意代码不同于其他恶意代码的一组特征二进制串,或者其散列值作为其特征码。若以此方式处理当今出现的变形恶意代码,则特征库要为每一种变种制作一份独立的特征数据,工作量非常大。

当前对抗传统特征提取的一般方法主要包括随机花指令和哑代码、等功能指令序列替换、代码段异或、加密等技术。更为复杂的对抗技术是采用多态和变形技 术。实现恶意代码多态变形有许多方法,其中一种方法是通过在原始代码中采用随机顺序排列指令、随机调用压缩器或扩展器来变形代码、随机优化压缩代码等手段生成具有同样功能的多条随机操作码来扩展代码,在此基础上进一步采用增加随机花指令、增加随机垃圾数据、加壳等方法获得最终代码[6]。如上所述,恶意代码在生成过程中经过了一系列的复杂变换、变形,反病毒程序无法找到真正的检查过程和解码程序,从而使得整个安全检查机制十分难于分析。

3MAS

3.1 MAS 基本原理

MAS方法的基本思想是首先对恶意软件样本库中的恶意软件进行分类,然后对每一类恶意软件提取若干能表征此类恶意软件的特征,并对提取到的特征进行筛选,选择满足条件的特征码来构建特征库。为了找到适合表征每一类恶意代码的特征码,在分析了多类恶意代码后,得到了几点启示。

(1)恶意代码为了要实现特定功能 ,必要使用系统的API函数(包括内核级和用户级的),而同一类的恶意代码往往使用了相同或者相似的系统API函数,以达到相同的破坏功能。所以可以考虑采用系统API集合(选用那些可能造成危险的函数)来表征一类恶意代码。

(2)恶意代码的目的在于造成一定的破坏 ,则其一定存在某些恶意的行为,而同一类恶意代码往往都实现相同的破坏功能, 所以可以对每一类恶意代码进行分析,得到每一类行为的恶意行为特征。

(3)同一类的恶意软件必定有相类似的代码段或者特殊指令的调用,所以可以考虑为每一类恶意代码提取相似的代码段。

综合考虑了以上三点之后,本文提出了MAS特征, 即对于每一类恶意代码将系统函数集合、恶意行为、相似代码段, 这三方面结合成一个通用的恶意代码特征 (以下把这三项称为MAS特征的子特征)。

但是对于不同类别的恶意代码,它们在上述三个方面可能相差甚远,所以对于不同类别的恶意代码,它们的三个子特征所占的比重应有所差别。为了之后检测工作的准确度,应该根据三个子特征的轻重程度和表征的特殊度给出不同的权值。例如某些类的系统函数比较少,则可以适当减轻这一子特征的权值,而有些恶意代码含有某些特别大的破坏行为的,例如修改或删除系统文件,则应提高其行为子特征的权值。如此,根据各方面的分析,可以得出一个这三个方面的比率,这个比率也要作为MAS特征的一个必要项。所以一个完整的MAS特征包括四个方面,即危险函数、恶意行为、相似代码、前三者的比率。

3.2 算法步骤

依据MAS的基本原理,归纳算法的基本步骤。

3.2.1 恶意代码样本分类

为了能按照恶意代码类别对每一类恶意代码提取出通用的特征码, 首先需要对恶意代码样本进行分类, 这一步是MAS方法的基础。

本文所采用的恶意代码样本分类原理是将具有相似特征(主要是指令执行序列、特定指令、内存使用、端口使用等方面的相似性)的恶意代码归为疑似同一类恶意代码。为了提高恶意代码分类效率和准确性,本文采用自动化和人工相结合的分类方法。纯手工的方法需要大量的专业人员,费时费力,而纯自动化的方法不可避免的会产生一些失误之处。所以采用两者结合的方法能取得比较好的结果。 此处采取的是先使用自动分类系统进行自动分类,再人工确认的步骤。

本文借助了开源虚拟机进行自动分类系统的开发。首先对开源的虚拟机进行必要的裁剪, 去掉不必要的功能,以提高虚拟机的运行效率,然后在虚拟机中安装相应的操作系统, 将内核模式的监控程序加载到操作系统内核,以便监控恶意代码加载和运行过程的特征,最后把恶意代码在虚拟机中运行起来, 通过分析其在指令执行序列、特定指令、内存使用、端口使用、网络通信等方面的相似性,来实现恶意代码分类。采用这种方法实现对恶意代码自动分类的技术优势是分类速度快, 同时通过监控虚拟机可以获得程序执行时底层的信息,准确性相对较高。在自动化分类结束后, 再由工程人员对自动分类系统的结论进行核实,以实现恶意代码的准确分类。

3.2.2 系统函数集合收集

经过步骤1, 我们得到了已经分类的恶意代码样本。根据MAS的基本原理,在这一步对每一类恶意代码分别进行系统API函数的收集,得到的集合称为系统函数集合。

对于同属于一类的所有恶意代码,配合使用逆向技术和虚拟机技术,静态分析其源代码的输入表,获得系统函数集合。此处需注意一点,目前很多恶意代码都使用了加壳技术,如果不进行脱壳操作,静态分析结果会出现严重偏差。经过加壳的恶意代码样本,其输入表会被壳修改,所以首先要对其进行脱壳(可以使用脱壳工具或手段进行脱壳,也可以结合动态脱壳进行分析)。脱壳成功后再来分析“纯净”的代码,以得到正确的系统函数集合。对于这里得到的系统函数集合,将在步骤5做进一步的处理。

3.2.3 恶意行为特征收集

将经过步骤1分类的恶意代码样本, 按照类别,送入虚拟机运行,监视其行为,获取每一类恶意代码的恶意行为集合。所谓恶意行为,即可能对计算机造成严重破坏的行为,例如:删除、修改系统文件,创建、修改注册表等。如表1所示,为常见的恶意代码行为列表。由于在上述第2步中已经进行了API函数集合的收集,所以此处,忽略原生API这一项。所谓原生API,即系统最底层的API,而非上层扩展后的API。

在本步骤,我们利用虚拟机环境和主机间的管道通信,达到虚拟机将分析得到的恶意代码行为自动发送到主机的目的,从而实现恶意行为的收集。对于这里得到的恶意行为集合,将在步骤5做进一步的处理。

3.2.4 相似代码段特征抽取。

根据MAS原理, 对步骤1分好类的恶意代码进行相似代码特征的抽取,最后得到每一类的相似代码片段特征(若干条关键代码片段)。所谓相似代码,即相类似的代码段或者特殊指令。

本文对每一类恶意代码采用代码静态启发式分析技术进行代码级的分析,模拟代码执行逻辑,得到每一类恶意代码的相似、相近代码,提取若干条特征码[10]。由于是对每一类恶意软件相类似的代码段进行特征提取,这样的特征具有通用性,在一定程度上避免了为每一个恶意软件都必须提取一个或多个特征,导致特征库过于庞大的问题。

对于这里得到的相似代码特征,将在步骤5做进一步的处理。

3.2.5 恶意代码的特征整合。

经过上述2、3、4步骤之后,就分别获得了每一类恶意代码的系统函数集合、恶意行为集合、相似代码特征集合,但是这些初始的数据还是比较繁琐,不够统一, 还不能作为MAS特征的子特征。为了能更好的用于以后的检测工作,依据MAS原理,对这些信息进行必要的处理。

首先要对系统函数的集合做筛选和评级。由于所有的程序都会或多或少的调用系统函数,也并不是所有的系统函数都是只有恶意代码才调用的,所以要对已经获得的系统函数集合要做一个筛选,找出可能具有危险性的系统函数子集合。并且,不同的系统函数有不同的功能,对计算机的安全威胁是不同的,即其有不同的危险级别。其次是对恶意行为特征的处理,恶意行为所造成的的危害大小也是有所不同的,即恶意行为也有不同的危险级别。本文对危险级别做出一个大致的划分:极危险、很危险、一般危险、轻度危险。再次是对相似代码特征的处理,对于每一类恶意代码,本文定量的提取多个特征,之后对多个特征做一个排序处理,根据其通用程度排出先后顺序。最后是对上述的三个子特征的量化整合处理。 为了简化描述,此处参照了文献[11]的表述方法, 使用01编码来表示危险系统函数子特征和恶意行为子特征。

对于危险系统函数子特征,本文使用2个字节的编码来表示,其中第一个字节表示危险等级和dll名字,第二个表示API函数名。第一个字节,将最高的2位表示危险等级,如表2所示,后6位表示dll名称,例如用000 001表示kernal32.dll,000 010表示uesr32.dll等。第二个字节以相同的方式来表示不同函数。如此就可以用2个字节的01编码来唯一的表示一个API函数。对于恶意行为子特征,本文使用1个字节的编码来表示,其中最高的2位用来表示危险等级,如表2所示。之后的2位表示行为对象,如表所示。最后4位表征行为,例如以0001表示创建 ,0010表示删除等。对于相似代码子特 征,本文使用各个相似代码段的md5哈希值来存储,并且越在前面的表示其通用性越强。

之后对于三个子特征, 给它们分配不同的比例,整合成一个完整的MAS特征,即每一个MAS特征包含四个方面:危险函数、恶意行为、相似代码、前三者的比率。本文为了计算方便,将三者的比率统一设置为1:1:1.

将步骤1得到的已经分类的恶意代码样本,分别经过步骤2、3、4、5的处理后,便得到了一个可以用于之后检测工作的MAS特征库。

3.3 MAS 小结

以上对MAS的所有阐述, 可以用如图2所示的流程图来做一个总结, 该图清晰的表现了MAS方法的各个主要步骤。

MAS方法的优势在于,对于同一类的恶意代码,提取出一个通用的MAS特征,以显著缩小特征库的规模,明显减少匹配特征库的时间花费。

4实验设计与结果分析

将上述得到的MAS特征库用于恶意代码检测引擎,就可以实现对恶意代码的检测了。为了测试使用了MAS特征库的检测引擎的检测效果 , 本文设计了实验一和实验二这二个实验来测试检测引擎,又设计了实验三将本文的实验结果与其他文献作对比。

实验一:验证检测率

实验内容:随机抽取恶意代码,共计1378个,观察使用了本文提出的MAS特征库后的检测情况。

实验结果:如图3所示为检测的统计结果。

实验二:验证误报率

实验内容:随机抽取100个正常程序,观察使用了本文提出的MAS特征库后的检测情况。

实验结果:如图4所示为检测的统计结果。

实验结果分析:从图3所示表格可以计算出,检测引擎共检测出恶意代码的数量为1340个, 检测率达到了97.24%,漏报38个,漏报率为2.76%;从图4所示的表格可以计算出,检测引擎误报个数是6个,误报率为6%。可以看出使用了MAS特征库的检测引擎获得了良好的检测效率。对检测引擎的检测率、漏报率、误报率做出统计,如图5所示。

实验三:比对分析

为了对检测率、漏报率、误报率有更直观的认识,以下将本文的结果与其他2篇文献作比对分析。

文献12采用的是恶意代码行为的检测方法, 该文献使用了2731恶意代码来做检测率测试, 其检测率为65.2%,又使用了1043个正常代码做误报率测试 ,误报率为2.4%。与本文的实验一、实验二使用的是完全相同的策略,可以直接比较。可以发现,本文检测率远高于参考文献,但误报率稍高。

文献13采用的是API序列 + 集成学习的方法来检测恶意代码, 该文献使用从网络收集的116个PE类型的恶意代码, 从纯净的XP系统搜集到的284个正常文件,共400文件组成实验样本,按3:1的比例分为训练集和测试集。其检测率为92.6364%,误报率为3%。与本文不能直接对比,但是参照来说,本文有较高的检测率,但误报率稍高。

分析本文误报率稍高的原因, 由于我们在提出MAS特征库时,为了计算简单,将3个子特征的比率设置为了1:1:1, 若要达到更好的检测效果, 并降低误报率,应当更精确的计算三个子特征的比率。

5结束语

上一篇:天调系统下一篇:绝缘方法