面向安卓Malware逆向分析用例自动生成的研究

2016-06-17 09:32健,肖

焦 健,肖 庆

(1.北京信息科技大学 计算机学院,北京 100101;2.广西师范大学 历史文化与旅游学院,广西 桂林 541004)



面向安卓Malware逆向分析用例自动生成的研究

焦健1,肖庆2

(1.北京信息科技大学 计算机学院,北京100101;2.广西师范大学 历史文化与旅游学院,广西 桂林541004)

摘要:文章提出了一种针对安卓恶意代码的逆向分析用例自动生成系统,系统从XML敏感权限分析入手,使用程序切片技术从恶意代码中获取调用序列,再利用逆向用例生成技术获得其对应的用例图,帮助分析人员准确获知代码的真实意图。实验结果表明,该系统对基于安卓的系统恶意代码有较为准确的用例还原效果,使用该系统还可以对安卓恶意代码家族的相似性和演变实施深入分析。

关键词:恶意代码;逆向分析;程序切片;用例图

0引言

恶意代码近年来已经成为危害互联网的主要威胁之一,特别是对移动互联网的威胁尤为突出。以安卓系统为例,安天实验室的移动安全报告[1]显示,自2011—2015年,被发现代码的增长速度呈现快速增长的态势,恶意代码的检测和识别工作面临着严峻的挑战。

目前针对网络恶意代码检测最有效的技术是基于特征码的检测方式[2],分析人员通过手工的方式识别出源程序中的恶意代码,并提取特征值存入恶意代码特征库,以此为基础对未知软件实施检测。但该方法一直面临恶意代码混淆和变种的挑战[3],因此近年来针对恶意代码检测的技术开始逐渐向代码行为和语义方向发展[4]。研究者试图通过污点传播技术[5]、系统调用[6]和动态分析[7]等技术对恶意代码实现深层次的挖掘,并取得了一定的进展,但这些技术的介入也极大地增加了恶意代码识别过程的资源开销,特别是面向动态代码的分析技术,始终无法避免执行监控过程中的单一路径问题[8]。

文献[9]针对APP中特殊的操作行为,通过对代码实施语义分析给出了一种可视化的检验方法,但恶意代码的分析人员仍然需要对大量的源代码实施人工分析,从中找出可疑样本并完成分析工作。对此本文研究了一种实现恶意代码逆向分析的提取系统,借助程序切片和逆向工程的方法,从源程序中快速发现匹配的可疑样本,而后对该代码实施用例一级的逆向分析和描述。

1模型描述

本文系统分为初始化、切片生成、用例逆向生成等几个主要阶段。系统的工作过程描述如图1所示。

由于安卓系统对系统访问权限有严格的要求,目前已知的安卓恶意代码的主要种类可分为恶意扣费、信息窃取、远程控制等8类内容。分析可知这些行为都涉及外部通信调用、敏感信息访问等调用操作,因此可以从系统的敏感行为(Supicious Action)入手,构建行为数据库,主要记录可能用于实现恶意功能的系统函数调用,从目前已有的资料显示来看,大部分恶意代码的实现是依靠系统函数的调用。

图1 系统结构图

在系统初始化阶段,为保证检测的准确性,对Andorid系统中XML文档做初步解析。XML文档对于APP系统的访问权限有着比较明确的规定,而网络APP的实现需要大量API的支持,因此针对不同的访问权限和API之间具备对应的映射关系,获取其中的敏感函数,使用针对此类调用的程序切片方法获得其具体的程序切片序列。

程序切片[10]是指程序中与某个输出有关的部分语句和控制谓词及相关内容的集合,因此对于JAVA代码而言,其程序切片应该是针对恶意操作而引发的一系列程序语句以及相关的变量内容,其切片的主要表示形式如下:

(1)

其中,fun(par1,par2,…)为需要执行的特权信息的API;CallFuni(par1,par2,…)为调用该API的有关函数,该相关函数被其他函数进一步调用的结果可以表示为:

(2)

在切片的生成过程中,XML中的访问权限可能会涉及多个敏感API操作,因此会生成多个程序切片,其程序切片之间存在交叉的可能,因此需要使用相关的生成规则获取。为描述方便,进一步构造调用序列图(ISG)来表征系统的实现过程,调用序列图可以形式化表示为:

ISG=〈F,I,R〉;

其中,F为系统调用组成的集合,该集合中包含若干敏感API和相关的调用函数;I为系统调用涉及的输入和输出内容,可记作:

R为函数和输入输出集合组成的边集,记作R⊆IF。

程序切片到ISG的生成规则如下:

(1)fun(),CallFun()→F,表示将程序切片中的调用函数转换成ISG中F的元素。

(2){par1,par2,…}→I,表示将程序切片中函数所需要的参数转换成为ISG中I的元素。

假定在调用函数过程中,某恶意函数的调用集合F表示为:

F={init,start-B,start-C,start-D,download,install};

输入和输出内容I可以记作:

I={para,null,url,apk.nothing}。

根据转换规则可得到ISG样例,如图2所示。

图2 ISG样例

由图2可以看出从初始化函数开始整个函数的调用过程。该过程中系统运行的初始状态分别为初始化和定时,经过不同的序列变换,分别进入start-B、start-C和start-D 3个线程,其中后2个线程分别执行程序安装和调用的组合功能。

2用例还原算法

根据ISG图中所蕴含的信息,可将图中的节点分成3类,即源节点、中间节点和端节点。

源节点表示只有汇出数据而无汇入数据的节点;中间节点指既有汇出信息又有汇入信息的节点;端节点指只有汇入信息的节点,根据汇入的路径又可以划分为sink节点和end节点,其中sink型节点表示有多条信息汇入的节点,end则表示有1条信息汇入的节点。根据不同的节点类型,调用序列的描述可以分为2类。

(1)对于从源点出发,到达任意一个end节点的路径,记作:

link-end={(s,m1,m2,…,mi,d)|s∈S,m∈M,d∈Dend}。

(2)对于从源点出发到达每一条经不同信息汇入sink节点的路径,记作:

从图2中的ISG样例可抽取出序列1到序列6的调用序列,具体内容见表1所列。

表1 调用序列表

在获取序列之后,系统借助M-M的原理[8]需要完成逆向还原,该过程主要目的是从已经获得的序列图中获取相关片段,并根据各个片段构造相关的用例。

主要内容如下:

(2)序列图交叉和汇总节点解析。从序列图分析可知,多个序列存在交叉和汇总节点。例如节点NULL中汇集了1、2、3等多条序列,该节点可以作为一个历程节点,从历程节点之后的序列作为单独的片段;当多个序列汇集到某一个节点并且序列终结时,该节点可以记作汇聚节点。

构造用例还原算法如下:

Algorithm abstract-case

Input:G={n,link}

while ∃qi(qi(end)≠terminal)

Q←qi,G←G-qi

J←joint-end(Q)

E←terminal-end(Q-J)

J∪E

其中,G为输入的序列集合;输出为用例集合J∪E。

算法中的函数joint-end()从多个序列中找出重叠的序列片段并将其作为独立片段存在,输出则由集合J表示。函数terminal-end()则对序列中具有环路的节点实施消解,获得非重叠区域内的独立片段内容。算法中的J∪E是分解后获得的程序片段,即还原的用例部分,各用例由一系列操作构成,各个片段之间依据各自的关系确定彼此的调用关系。其中,集合J中的用例由于会在多条序列中重叠出现,需要表明被其他序列调用的结果,因此集合中元素可以表示为〈e,s〉,e∈E;集合E中的元素表示为〈s,j〉,j∈J;合集J∪E根据元素调用的前后顺序,决定彼此功能用例的先后顺序。

3系统验证

本实验系统以恶意代码的样例为基础,通过对其实现分析,最终产生描述恶意代码功能的用例图功能分析报告。验证过程首先从权限分析入手,针对敏感调用信息,完成ISG建模和用例生成,同时对算法的性能实施有效分析。

3.1实例分析

木马Trojan-Spy.AndroidOS.Zitmo.a主要用来实现对移动终端客户隐私信息的收集和向服务器端的发送过程,涉及后台程序的安装、线程广播监听等多种敏感程序的调用,其XML如图3所示。从图3中可以看出,木马涉及了发送调用SMS和截获SMS的权限。

图3 Trojan-Spy.AndroidOS.Zitmo.a XML

从发送和监听SMS等敏感性操作入手,系统Suspicious action 数据库中存储有相应的记录信息,内容见表2所列。系统使用切片算法,构造对应图描述可疑行为的ISG,如图4所示。

表2 木马敏感系统调用信息

图4 Trojan-Spy.AndroidOS.Zitmo.a ISG

由图4可知,切片结果显示在可疑的API调用时分别在该软件中产生了4条分支流程。

从图4中抽取出调用序列,使用算法abstract-case实现用例的还原,可得到用例图,如图5所示。从图5中可以得出该恶意软件的调用过程为:主用例为系统的激活函数,负责启动有关后台功能(线程);4个子用例分别表示激活后恶意代码窃取各种隐私信息并传输的行为。

图5 恢复用例图

3.2系统性能测试

本系统以北卡罗莱纳Malware数据库[11]提供的恶意代码数据库为例,对其中主要的几类恶意代码进行了相关分析。设定其相似度计算公式为:

其中,e、e′为2个需要进行比较的用例图;函数case(e,e′)为用例图中用例不重合的个数;函数rel(e,e′)为用例图中用例关系不一致的个数。

目前恶意代码可以根据其功能的相似性分成若干家族类,采用本系统可以对某家族的恶意代码实现用例的相似性比较,以母本的恶意代码为基准,对生成的用例图进行同构比较,每个家族选取5个比较样本,计算其平均同构相似度值,比较结果如图6所示。

图6 恶意代码用例相似度比较

由图6可以看出,由于目前恶意代码家族普遍采用软件包复制的方式实现恶意功能,因此大部分恶意代码还原后的用例图具有比较高的相似性,基本相似度在90%以上。但也存在例外,例如ADRD家族代码相似度偏低,通过比较发现在该家族的恶意代码样本中,存在个别恶意代码样本有较大变化(其特征值为4de0d89979-49265a4b5647bb9f9d42926bd88191),改变了以往传统模式下HTTP协议通信基础,而采用SMS方式。虽然这一情况目前还属于个例,但通信手段的日益多样化和编程技术的普及将会对恶意代码家族的变异特征带来新的不确定因素。

4结束语

本文构造了一种用于分析安卓恶意代码的自动化系统,从XML文档中的权限入手,对敏感函数的调用进行序列化分析,并依据API功能逆向分析还原出整个恶意代码用例图。通过对恶意代码的逆向还原用例过程,帮助分析人员较快地实现恶意代码的定位。

[参考文献]

[1]安天AVL Team.2011年信息安全威胁综合报告[EB/OL].[2015-12-01].http://blog.avlyun.com/2016/02/2759/2015report/.

[2]Yin H,Song D,Egele M,et al.Panorama:capturing system-wide information flow for malware detection and analysis[C]//Proceedings of the 2007 ACM Conference on Computer and Communications Security.ACM,2007:116-127.

[3]Christodorescu M,Jha S.Testing malware detectors[C]//Proceedings of the 2004 ACM SIGSOFT International Symposium on Software Testing and Analysis.ACM,2004:34-44.

[4]王蕊,冯登国,杨轶,等.基于语义的恶意代码行为特征提取及检测方法[J].软件学报,2012,23(2):378-393.

[5]Newsome J,Song D.Dynamic taint analysis for automatic detection,analysis,and signature generation of exploits on commodity software[C]//Proceedings of the 12th Annual Network and Distributed System Security Symposium.Intemet Society,2005:18-35.

[6]Kirda E,Kruegel C,Banks G,et al.Behavior-based spyware detection[C]//Proceedings of the 15th Conference on USENIX Security Symposium.Berlin:Springer-Verlag,2006:273-288.

[7]Willems C,Holz T,Freiling F.Toward automated dynamic malware analysis using CWSandbox[J].IEEE Security and Privacy,2007,5(2):32-39.

[8]Lucca G A D,Fasolino A R,Carlini U D.Recovering use case models from object-oriented code:a thread-based approach[C]//Proceedings of the Seventh Working Conference on Reverse Engineering.IEEE,2000:108-117.

[9]Zhan Y,Yan Y,Xu B,et al.Vetting undesirable behaviors in Android apps with permission use analysis[C]//Proceedings of the 2013 ACM SIGSAC conference on Computer and Communications Security.ACM,2013:611-622.

[10]Mark W.Program slicing:formal,psychological and practical investigations of an automatic program abstraction method[D].Ann Arbor:University of Michigan,1979.

[11]Zhou Y,Jiang X.Android malware genome project[EB/OL].[2015-02-16].http://www.malgenomeproject.org/.

(责任编辑胡亚敏)

On case auto generation using reverse analysis for Android malware

JIAO Jian1,XIAO Qing2

(1.School of Computer Science,Beijing Information Science and Technology University,Beijing 100101,China;2.College of History,Culture and Tourism,Guangxi Normal University,Guilin 541004,China)

Abstract:In this paper,a case auto generation system using reverse analysis for Android malware is presented.The system extracts the sensitive access from the XML,obtains the calling sequences using the program slicing technique,and generates the corresponding case diagrams by reverse generation techniques,which helps analysts accurately acquire the true intentions of malware.The experimental results show that the system has good accuracy in reversing case,and it can be used to analyze the similarity among the samples in Android malware family and their evolution.

Key words:malware;reverse analysis;program slice;use case diagram

收稿日期:2015-06-23;修回日期:2016-02-09

基金项目:国家自然科学基金资助项目(61370065)

作者简介:焦健(1978-),男,,河北沧州人,博士,北京信息科技大学副教授.

doi:10.3969/j.issn.1003-5060.2016.04.007

中图分类号:TP393.08

文献标识码:A

文章编号:1003-5060(2016)04-0466-05