采用函数调用关系的注入型Android恶意应用检测

2015-03-07 05:40王欢来欢李国栋田达梁博
西安交通大学学报 2015年10期
关键词:子图调用应用程序

王欢,来欢,李国栋,田达,梁博

(1.西安工程大学服装与设计艺术学院, 710048, 西安; 2.西安阎良国家航空高技术产业基地管理委员会, 710089, 西安; 3.西安交通大学网络中心, 710049, 西安)



采用函数调用关系的注入型Android恶意应用检测

王欢1,来欢2,李国栋3,田达2,梁博2

(1.西安工程大学服装与设计艺术学院, 710048, 西安; 2.西安阎良国家航空高技术产业基地管理委员会, 710089, 西安; 3.西安交通大学网络中心, 710049, 西安)

针对注入型Android恶意应用日益泛滥、传统检测方法依赖大量已知特征的问题,提出了采用函数调用关系的注入型Android恶意应用检测方法。该方法无须依赖大量已知特征,仅通过分析注入型Android恶意应用的自身结构特征即可实现对该类恶意应用的有效检测,并能够实现对未知恶意代码家族的识别。所提方法在smali代码的基础上构建函数调用关系图,并进一步进行子图划分,通过判定各子图威胁度确定是否存在恶意行为。检测过程无需动态行为分析辅助,因此分析检测时间短、效率高。该方法不仅可以检测出Android应用是否存在恶意行为,还可根据子图威胁度确定包含恶意行为的具体代码。经过对1 260个Android恶意应用和1 000个正常应用的实验分析发现:所提方法能够很好地检测注入型Android恶意应用,当误报率为8.90%的时候,检测率达到95.94%,相对于主流Android恶意应用检测系统Androguard,检测效果有显著提升。

Android;恶意代码;静态分析;函数调用关系

随着智能手机的快速发展,Android操作系统成为当前最流行的移动终端平台。IDC的统计数据显示,2014年第4季度Android市场占有率达到76.6%[1]。Android系统的快速发展也伴随着Android恶意应用的出现,攻击者为了更好地传播Android恶意应用,会采用注入技术将恶意代码重打包到当下流行的Android应用程序中,并通过第三方电子市场、Android应用程序分享论坛等途径进行传播。Zhou的研究结果表明,第三方电子市场上5%至13%的应用程序属于注入型Android恶意应用[2]。

Android恶意代码静态检测研究方面,文献[3]基于API信息构建Android恶意应用的检测模型,取得了较好的检测效果。Wu等提取Android应用程序中的权限、组件以及Intent等信息构建特征向量,并利用k-均值算法建立恶意代码检测模型[4]。

Android恶意代码动态检测研究方面,文献[5-6]分别实现了动态行为监控的沙盒系统,可在不同层次监控应用程序的运行行为。DroidScope系统则进一步重新构建了Android系统与Dalvik虚拟机,实现了Android恶意代码的动态检测[7]。

本文针对注入型Android恶意应用提出了基于函数调用关系的恶意代码检测方法。为了保证应用程序功能正常执行,大部分注入型Android恶意应用通过注入的独立组件执行恶意行为,例如注入一个广播接收器用于监听开机启动事件,当手机重启后,该广播接收器便可被触发用于执行恶意行为。此种注入型Android恶意应用的特征使得恶意代码部分与正常应用代码之间在函数调用关系上联系较弱。

对于待检测的Android应用程序,首先进行反编译并在smali代码级别构建函数调用关系图,在此基础上将函数调用关系图进一步划分为函数调用子图,进一步基于子图中敏感API的调用次数计算子图威胁度,最后根据威胁度判定子图中是否包含恶意代码。

本文提出了针对注入型Android恶意应用的检测方法,所提方法基于静态分析,相对于动态分析系统,具有较高的代码覆盖率,同时也更加简单易行。针对1 260个Android恶意应用和1 000个正常应用样本的测试表明,所提方法针对注入型Android恶意应用具有很好的检测效果。

1 Android应用程序基本结构

Android应用程序以APK文件的形式发布,结构上主要包括4大组件,分别为:①Activity组件提供与用户交互的界面,每个应用程序一般都存在一个主Activity作为应用程序启动的入口;②Service与Activity不同的是,Service组件主要运行在后台。Android恶意应用为了防止被用户察觉,一般会通过Service在后台悄悄执行恶意行为;③Broadcast Receiver组件接受来自应用程序内部其他组件或者其他应用程序发送的广播消息,因此可以用于监听系统的广播事件,例如网络状态变化、电池电量低、短信接收等;④Content Provider组件提供数据操作的统一接口,可以通过URI声明数据访问地址,允许应用程序之间的数据共享。

2 案例分析

Geinimi是Android平台上首个僵尸网络恶意应用,采用注入技术将其自身注入到流行的Android应用程序中,供Android用户下载,实现广泛传播的目的[8]。该恶意应用会收集被感染用户的隐私信息并可以接受远程控制服务器下发的命令,可对广大用户的个人隐私信息造成严重的威胁。以MD5值为08E4A73F0F352C3ACCC03EA9D4E946 7F的恶意样本为例,从AndroidManifest.xml配置文件中可以发现该样本添加了一个名为com.geinimi.AdServiceReceiver的广播接收器,用于监听开机广播事件,并进一步触发恶意行为的执行。

图1为该样本的函数调用关系图,图中每个节点代表了一个方法,节点之间的边表示方法之间存在调用关系,空心节点表示调用的敏感API,其他节点皆为非敏感API。右上方的节点来自于应用程序中的正常代码部分,而左下方的节点则是来自于注入的恶意代码Geinimi。从函数调用关系图可以看出,在该应用程序的正常代码部分,基本没有对敏感API的调用,而恶意代码部分则调用了大量敏感API用于实现恶意行为。另一方面,该样本的函数调用关系图明显地分为两个部分,同时两个部分之间没有明显的联系。通过对该样本的分析可以发现,函数调用关系在一定程度上反映了Android应用程序内部各部分之间的关系,注入型Android恶意应用内部注入的恶意代码部分与正常代码部分之间存在明显的割裂性。

图1 Geinimi样本函数调用关系图

3 基于函数调用关系的检测方法

本文提出的基于函数调用关系的检测方法如图2所示,主要包含两个模块:函数调用关系图构建模块负责构建Android应用程序的函数调用关系图;恶意代码检测模块则负责识别函数调用关系图中包含恶意代码的部分。

图2 注入型Android恶意应用检测基本算法

3.1 函数调用关系图的构建

在函数调用关系图的构建过程中,主要包括APK反汇编、API调用序列提取、函数调用关系图构建以及子图划分4个部分。

(1)APK反汇编:在构建函数调用关系图之前,需要获得APK中调用的所有方法。为了获得精确的函数调用关系,首先利用Android应用程序逆向分析技术将待分析的APK文件经过反汇编得到细粒度的smali代码,并进一步基于smali代码构建函数调用关系。

(2)API调用序列提取:在反汇编生成的smali代码基础上,从应用程序的每个入口点处搜索并回溯以构建API调用序列,函数的返回值以及参数可作为附加信息进行提取,进而构建信息更为丰富的API调用序列。

(3)函数调用关系图构建:Android应用程序在开发过程中,主要以类和包的形式进行组织,开发者在开发过程中将具有一定关联的代码放入一个类中,进而组织到一个包下,因此类和包具有特定的语义信息。本文根据此语义信息,将前述提取的API调用序列基于类进行聚合,从而构建出函数调用关系图。

(4)子图划分:本文主要采用深度优先遍历算法在函数调用关系图的基础上进行子图划分,在对函数调用关系图进行遍历后,可以将调用的方法聚类到不同的子图中,同一个子图中的方法之间具有强相关性,而不同子图中的方法具有弱相关性。为了进一步识别子图中是否包含恶意代码,首先需要解决两个问题,一个是Android应用程序中存在的代码碎片问题,另一个是Android应用程序中广泛存在的广告模块问题。本文所指的代码碎片是指存在于应用程序中但没有实际功能的代码片段,其存在对后续的恶意代码识别具有干扰作用。为排除代码碎片的影响,本文提出了简单有效的方法用于识别Android应用程序中的代码碎片,其基本规则包括两方面:当子图中仅有一个类,且该类没有敏感API调用并且类中的方法数不超过4个时,该子图被标识为代码碎片;当子图中方法的方法体为空时,该子图被标识为代码碎片。

Android应用程序开发者通常会在应用程序中添加广告模块,通过广告分成的方式获取收益。开发者通常可以在不修改应用程序整体代码的情况下利用广告软件开发包方便地集成广告模块,广告模块的实现机制导致广告模块在函数调用关系图上呈现独立的子图。另外,为了实现精确推送,部分广告模块会通过调用敏感API来收集用户的隐私信息,例如地理位置、浏览器搜索历史等。图3为包含广告模块应用程序的函数调用关系图,右上方的部分来自某广告模块,由图可见,该广告模块中同样包含了针对若干敏感API的调用。因此,广告模块与注入型恶意应用在函数调用关系图上具有相似的部分,在恶意代码检测过程中会导致误报。

为了区别广告模块和注入型Android恶意应用,需要对广告模块进行识别。通过分析发现,每个广告模块都有其对应的唯一包名,因此,可以基于广告模块的包名建立白名单,并依据此白名单对广告模块进行过滤,从而降低误报率。

图3 包含广告模块应用程序的方法调用图

3.2 恶意代码检测

在完成函数调用关系图构建与子图划分处理后,需要进一步判定Android应用程序中是否存在恶意代码。恶意代码的判定主要包括两个步骤:子图威胁度计算以及子图恶意代码判定。

(1)子图威胁度计算:Android恶意代码通过调用敏感API来实现恶意行为,例如发送短信需要调用sendTextMessage函数,因此可以通过对敏感API的调用情况来计算子图的威胁度,本文首先通过对1 000个样本的统计分析得到了Android恶意代码中使用频率较高的API列表,表1显示了使用率最高的前10个API以及API的调用次数。每个敏感API会根据其潜在的威胁以及被恶意代码调用的次数赋予相应的威胁度值。对于每个子图,会进一步根据敏感API调用的次数计算子图的威胁度值,子图威胁度值为所有敏感API的威胁度值总和。

表1 使用率最高的前10个系统API

(2)子图恶意代码判定:在对100个注入型Android恶意应用程序的子图威胁度进行分析后发现,包含恶意代码的子图具有较高威胁度的同时其函数(所有函数)调用数目较少,而正常子图在具有较低威胁度的同时函数调用数目较多,因此可以进一步将子图威胁度值除以函数调用次数获得平均子图威胁度值。平均子图威胁度值越高,其包含恶意代码的可能性越大,为了确定恶意代码判定的阈值,对上述100个注入型恶意应用样本进行检测实验,结果如图4所示。当阈值超过0.4以后,恶意代码子图识别出现了漏报,且随着阈值的提高,漏报率逐渐上升;而当阈值低于0.4时,正常功能代码子图部分出现了误报,且随着阈值的降低,误报率快速上升。因此,本文将阈值设为0.4,当平均子图威胁度值超过该阈值时,则判定该子图包含恶意代码。

图4 恶意代码子图漏报率和误报率随阈值变化曲线

4 实验结果与分析

本节对Android Malware Genome Project[9]中包含的1 260个恶意代码样本进行实验,测试本文方法对真实Android恶意代码的检测效果,同时与Androguard[10]进行对比,Androguard主要是基于特征匹配进行恶意代码检测。实验过程中首先对应用程序样本进行反汇编得到smali代码,其次在smali代码的基础上提取API调用序列并构建函数调用关系图,同时进一步进行子图划分,最后对每部分子图进行威胁度计算,判断子图是否包含恶意代码。表2显示了对注入型Android恶意应用的最终检测结果,表3则为对非注入型Android恶意应用的检测结果。由实验结果可见,本文方法能够很好地检测注入型Android恶意应用,平均检测率达到95.94%,远高于Androguard 32.63%的平均检测率;从对非注入型恶意应用检测效果来看,仍然可以检测出部分恶意应用。与基于特征的静态恶意代码检测系统不同的是,本文方法除了需要敏感API信息外不需要任何其他先验特征信息。Android恶意代码执行恶意行为一般需要调用系统API来实现,而这些API在一定程度上是稳定不变的,因此基于函数调用关系图的方法相比基于特征的恶意代码检测方法具有更好的稳定性,同时可以用于检测未知的恶意代码。

表2 注入型Android恶意应用检测结果

表3 非注入型Android恶意应用检测结果

对于检测率低的恶意样本,我们将手动分析并解释本文方法所存在的局限性。

(1)Asroot:该恶意代码具有获取root权限的功能。该家族中的部分样本并没有采用注入技术将恶意代码注入到正常应用中,而是实现了一个具有恶意行为的完整Android应用程序,因此函数调用关系图之间没有明显的差异,这也导致了低检测率情况的发生。

(2)SndApps:该恶意代码样本实际上没有严重的安全威胁,其仅仅在正常应用中注入了大量广告模块并绑定了自己的广告ID,以此来窃取其他开发者的广告分成利益。由于本文方法在子图划分过程中过滤了所有广告模块,因此对于SndApps的检测率为0。

(3)zHash:该恶意代码样本通过添加垃圾代码实现变种目的,同时其自身也实现了部分对用户有用的功能,因此恶意代码与正常代码之间具有较强的相关性,从函数调用关系图来看,两个部分是一个整体,这也必然导致了基于函数调用关系检测方法失效。

进一步随机选取1 000个来自Google Play的正常Android应用程序作为数据集,测试了本文方法的误报率。表4显示了被检测出包含恶意代码的包名以及样本数量,一共有89个样本被标定为恶意代码,因此误报率为8.90%。但是进一步分析发现,大多数被标定为包含恶意代码的包是来自于广告模块或者其他第三方模块。例如,com.smaato.SMOA来自于名为SMAATO的广告模块;com.phonegap来自第三方模块PhoneGap,该模块可以为Android应用程序提供Web开发技术。因此,可以通过扩展白名单降低误报率。

表4 正常Android应用程序检测结果

5 结 论

本文提出了针对注入型Android恶意应用的检测方法,首先从待分析的Android应用程序中提取API调用序列,基于此调用序列进一步构造函数调用关系图。在函数调用关系图的基础上进行子图划分,通过计算平均子图威胁度值来判定是否包含恶意代码。实验结果表明,本文方法对于注入型Android恶意应用具有很好的检测效果。本文方法不依赖于先验特征,可以用于检测已知和未知Android恶意应用。实验部分选取的样本较老,随着注入型Android恶意应用的技术发展,可能会出现新型的样本,因此在后续工作中,会继续对新发现的注入型Android恶意应用进行分析,进一步改进检测方法。

[1] IDC. Smartphone OS market share, Q4 2014 [EB/OL]. (2015-01-20) [2015-03-12]. http:∥www.idc. com/prodserv/smartphone-os-market-share.jsp.

[2] ZHOU Wu, ZHOU Yajin, JIANG Xuxian, et al. Detecting repackaged smartphone applications in third-party Android marketplaces [C]∥Proceedings of the Second ACM Conference on Data and Application Security and Privacy. New York, USA: ACM, 2012: 317-326.

[3] AAFER Y, DU Wenliang, YIN Heng. DroidAPIMiner: mining API-level features for robust malware detection in Android [C]∥Proceedings of the 9th International Conference on Security and Privacy in Communication Networks. Berlin, Germany: Springer, 2013: 86-103.

[4] WU Dongjie, MAO Chinghao, WEI Teen, et al. Droidmat: Android malware detection through manifest and API calls tracing. [C]∥Proceedings of the 7th Asia Joint Conference on Information Security. Piscataway, NJ, USA: IEEE, 2012: 62-69.

[5] GRACE M, ZHOU Yajin, ZHANG Qiang, et al. Riskranker: scalable and accurate zero-day Android malware detection [C]∥Proceedings of the 10th International Conference on Mobile Systems, Applications, and Services. New York, USA: ACM, 2012: 281-294.

[6] ISOHARA T, TAKEMORI K, KUBOTA A. Kernel-based behavior analysis for Android malware detection [C]∥Proceedings of the 7th International Conference on Computational Intelligence and Security. Piscataway, NJ, USA: IEEE, 2011: 1011-1015.

[7] YAN L K, YIN Heng. DroidScope: seamlessly reconstructing the OS and Dalvik semantic views for dynamic Android malware analysis [C]∥Proceedings of the 21st USENIX Conference on Security Symposium. Berkeley, CA, USA: USENIX, 2012: 29.

[8] PIETERSE H, OLIVIER M S. Android botnets on the rise: trends and characteristics [C]∥Proceedings of the Conference on Information Security for South Africa. Piscataway, NJ, USA: IEEE, 2012: 1-5.

[9] JIANG Xuexian, ZHOU Yajin. Android malware genome project [EB/OL]. (2012-08-11)[2015-03-12]. http:∥www.malgenomeproject.org.

[10]DESNOS A. Androguard: reverse engineering, malware and goodware analysis of Android applications and more [EB/OL]. (2013-11-21) [2015-03-12]. http:∥code.google.com/p/androguard.

(编辑 武红江)

A Detection Method of Injected Android Malicious Applications Using Function Calling Graphs

WANG Huan1,LAI Huan2,LI Guodong3,TIAN Da2,LIANG Bo2

(1. Apparel and Art Design College, Xi’an Polytechnic University, Xi’an 710048, China;2. Xi’an Yanliang National Aviation Hi-Tech Industrial Base Management Committee, Xi’an 710048, China;3. Network Center, Xi’an Jiaotong University, Xi’an 710049, China)

The number of injected Android malicious applications is increasing, and the traditional detection method heavily relies on lots of extracted characteristics. A static analysis method based on function calling graph is proposed to detect injected Android malicious applications. The method can efficiently detect injected Android malicious applications only by analyzing the application’s structure, and there is no need for known characteristics. The method constructs a function calling graph based on decompiled smali code, and sub-graphs will be further processed to tell whether the Android application is malicious or not. The period of analysis is much shorter than that of any other dynamic detection method. The detection method not only detects whether the Android application is malicious or not, but also has the ability to tell which part of the Android application contains malicious code. The approach is tested on 1 260 Android malicious applications and 1 000 Android normal applications, and the test results show that the approach is effective in detecting injected Android malicious applications. The detection rate of the method for the injected Android malicious applications is 95.94% when the false positive rate is 8.90%. A comparison with the mainstream Android malware detection system Androguard shows that the detection performance of the proposed method has a remarkable promotion.

Android; malware; static analysis; function calling graph

2015-06-13。

王欢(1980—),女,讲师。

陕西省科技统筹创新工程计划资助项目(2013KTCQ01-51);国家自然科学基金资助项目(61103241)。

时间:2015-07-28

10.7652/xjtuxb201510014

TP393

A

0253-987X(2015)10-0084-06

网络出版地址:http://www.cnki.net/kcms/detail/61.1069.T.20150728.1755.006.html

猜你喜欢
子图调用应用程序
关于2树子图的一些性质
核电项目物项调用管理的应用研究
删除Win10中自带的应用程序
临界完全图Ramsey数
不含3K1和K1+C4为导出子图的图色数上界∗
谷歌禁止加密货币应用程序
基于系统调用的恶意软件检测技术研究
图G(p,q)的生成子图的构造与计数
利用RFC技术实现SAP系统接口通信
三星电子将开设应用程序下载商店