通过AndroidManifest和API调用追踪的恶意检测

2017-03-29 04:52王轶骏
计算机技术与发展 2017年3期
关键词:调用合法静态

郑 尧,王轶骏,薛 质

(上海交通大学 电子信息与电气工程学院,上海 200240)

通过AndroidManifest和API调用追踪的恶意检测

郑 尧,王轶骏,薛 质

(上海交通大学 电子信息与电气工程学院,上海 200240)

研究了一种静态基于特征向量的机制,提供了一种静态分析的方法,用来检测Android恶意应用。为了识别不同Android恶意软件的意图,各种聚类算法被应用在此机制中,用来增强对Android任意应用程序的行为建模能力。同时研发了一套系统—XDroidMat。XDroidMat从每个Android应用程序的AndroidManifest.xml中抽取出静态信息,把组件作为切入点,往后追踪组件间通信及其API的调用。然后使用“k-means”算法加强建立恶意程序模型的能力。聚类的个数是通过奇异值分解算法决定的。最后采用“kNN”算法判别应用程序是恶意应用还是正常合法的应用。实验结果表明,XDroidMat的准确率达到了98.12%,在检测Android恶意应用中性能优异。

Android恶意应用;静态分析;基于特征;组件间通信

0 引 言

随着科技的发展,移动手机早已进入智能手机时代,较以前具有了更多复杂的功能。不仅仅是官方市场(Google Play),而且第三方市场也在提供Android应用,推动了Android的发展。不幸的是,这种发展也带来了很多恶意应用开发者。智能手机已经变成恶意软件恶意行为的另一个温床。

Android市场是增长最快的移动应用平台。有报告显示,Android市场的增长率是Apple应用商店增长率的三倍以上。Apple的应用商店,每个可用的应用都要被安全工程师检查。但是在Android市场,在应用发布到市场之前,没有一套完整的应用检测程序。

在此研究中,提出一种基于特征的机制,为检测Android恶意软件提供一种静态分析方法。在该机制中,考虑了包括permissions,component配置,Intent消息传递和API调用等静态信息,给Android应用的行为建模。为了识别不同Android恶意软件的意图,各种聚类算法被应用在此机制中,用来增强对Android任意应用程序的行为建模能力。利用提出的机制研发了一套系统—XDroidMat,从每个Android应用程序的AndroidManifest.xml中抽取静态信息,并把每个组件(Activity,Service和Receiver)作为切入点,往后追踪组件间通信及其API的调用。使用“k-means”算法加强建立恶意程序模型的能力,以及“kNN”算法判别应用程序是恶意应用还是合法应用。

1 相关工作

文中描述了从不同方面对Android恶意软件检测的相关工作。此外,讨论了其他相关[1]工作使用的不同特征。

1.1 误用检测模型

误用检测是一种基于签名的方法,通过一套规则或策略检测到恶意软件。

有相关研究工作应用该机制来检测移动恶意软件。例如,Kim等[1]从收集到的样本中建立能耗的历史,从这段历史库中建立了一种能量特征,来做能量性的恶意应用检测;Fuchs等[2]提出了一种ScanSroid机制,提取应用程序的安全规范,应用数据流分析来检测某一数据流是否违反这些策略。

1.2 异常检测

异常检测不同于误用检测,它运用机器学习算法来学习已知恶意行为,预测未知或新的恶意软件。尽管异常检测能够检测较新的恶意应用,但也会提高漏报率。

Bose等[3]为检测框架,通过观察应用的逻辑顺序检测Android恶意应用,而不是基于签名的解决方案。更进一步,他们基于SVM训练一个分类器,用来把恶意应用从正常应用中区分出来。

Zhao[4]等利用SVD算法,专注于基于恶意软件检测软件行为的框架—AntiMalDroid。这种框架将恶意软件特征动态扩展到数据库中。

Teufl[5]等提取了关键权限,执行语义搜索查询,获得权限之间的关系,用来检测可疑异常的应用程序。

1.3 提取特征

提取的特征通常对于创建分析模型是有用的和有意义的。文中提取的特性对仿真结果有一定影响。因此,对提取特征进行分类和定义。将调查到的特征分为三类:动态的、静态的和额外信息。

(1)动态特征。

相关工作中涉及到集中动态特征,如下所述:

登录行为序列:Zhao等[4]提出以登录行为序列作为特征,检测Android恶意应用,然后建立了特征模型来检测恶意应用与其在运行时的有效变异。

系统调用:耿东久等[6]追踪系统调用行为。

动态污染的数据流和控制流:杨博[7]研究了第三方应用程序隐私敏感数据流动,提出了基于控制流和数据流的Android应用分析技术,为权限检测和通信系统分析提供了可靠的数据。张一等[8]提出了动态跟踪防御方法,可以对应用进程间通信(IPC)进行监测,监测是否发生恶意的权限提升。

能量功耗:文献[1]考虑把能量功耗作为区分合法应用与恶意应用的特征。

(2)静态特征。

另一种流行的恶意软件分析方法是静态分析。它通过分析应用程序的每个组件实现目标。尽管对恶意软件使用动态分析可以提供全面的了解,但仍受到高成本环境部署和手动调查的限制。相关工作中涉及到集中动态特征,下面列出文中主要使用的静态特性。

请求的权限:张叶慧等[9]统计每一个类别应用程序权限使用情况,利用应用程序的访问权限,计算该类别恶意阈值。沈才樑等[10]的研究也聚焦在权限提升。

载入的包:Zhou等[11]考虑了被应用载入的包。李宇翔等[12]利用重打包注入安全防护代码的加固系统,不仅提供应用动态权限管理机制,还提供权限划分细粒度的安全策略。

API调用:Zhou等[11]、曾立鹍等[13]、吕晓庆等[14]也在他们的研究中考虑了API调用。

(3)额外信息。

通过上述内容可以发现,不管对于PC还是智能手机,动态分析和静态分析都是两种主要机制。但是,不仅来自应用程序本身的信息很重要,来自其他方面的信息也非常重要。很多研究者认为,这些信息可能帮助来鉴别重包装的应用是否为原始合法应用的更新版本,还是被注入了另外一些功能,比如广告和恶意模式。而在安卓市场上的应用程序的信息,比如应用程序描述、下载数量,价格和激活模式应用范畴,也是重点研究的对象。例如,祝为等[15]利用Android Rootkit等技术特征,从内核级别对Android系统进行检测。另外一些研究者通过对应用程序的网络行为进行观察,从而对其进行检测。

2 静态功能行为分析

提出一种静态特征机制为Android恶意应用检测提供一种静态分析方法,考虑了检测效率和跨版本的分析能力。这种机制涉及到静态信息,包括权限、组件配置、Intent消息传递和API调用,用这些特征来描述Android恶意应用行为。该系统的构架如图1所示。将从构架和详细机制两个部分来介绍。

在说明使用什么样的特征之前,首先描述一些良性的应用和Android恶意软件之间的观测结果。统计了搜集的正常合法应用与恶意应用中每个组件的使用情况,如表1所示。从中发现,Android恶意应用比合法应用往往要求更多的Permission、Service和Receiver组件。它们通常在悄悄地运行后台服务时隐藏恶意行为。

图1 XDroidMat系统架构

应用类型良性应用恶意应用Permission4.7812.51Activity10.23.60Service0.421.10Receiver0.651.72Provider0.120.23

调查了合法应用软件和恶意应用软件需要的前30个权限,发现在权限需求方面两者有一个非常重要的区别。对于合法软件来说,它们通常需要的是正常合法的非敏感权限,比如网络权限INTERNET、获取网络状态权限ACCESS NETWORK STATE等等。但是,对于应用软件来说,它们经常请求敏感权限,而这些权限可能对应相关的恶意行为,比如申请SEND SMS权限用来发送高费率短信,申请INSTALL PACKAGE权限用来安装从其地方来的Android恶意软件。虽然有些权限都被合法应用软件和恶意应用软件申请,但是这些权限被用在不同的组件中(比如,合法软件在Activity组件中使用这个权限,而恶意软件在Service组件中使用该权限)。

2.1 静态行为提取

从AndroidManifest.xml和smali文件中提取出足够的信息进行深入分析。定义以下静态特征,这些特征隐含了每个应用的配置和意图。在提取特征完毕后,为每个应用建立一个特征向量。如果元素不包括在应用程序中,向量中对应元素的值为0,如果元素是应用程序包含的,则该元素的值为1。

(1)AndroidManifest.xml文件是每个应用对于Android系统的重要信息,是系统在运行任何应用的代码时所必须的信息。它提供了应用的所有设置信息,包含了一些区分的很显然的特点,比如Permission和Component(包括Activity,Service和Receiver)。

(2)Intent消息也是用到的一个特征。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述。应用的三个核心组件Activities,Services和Broadcast Receivers都是通过Intents来激活的。

(3)应用程序的字节码包含丰富的语义信息,比如API calls。想知道的是应用执行什么样的操作是敏感的。特别地,关注那些权限受到保护的API的调用。另外,想知道它们在什么组件中被使用。API在不同组件中使用暗示着不同的意图。例如,Android恶意应用软件通常在Service组件中调用getDeviceId()这个API,然后在后台悄悄运行,来搜集手机信息。然而合法应用软件则是在Activity组件中调用这个API,并且显示在界面上。有了API调用信息,能间接地推断出app的意图。

(4)Inter-Component Communication(ICC),组件间通信。文中研究发现,大多数Android恶意软件都喜欢在后台悄悄运行来隐藏自己,做一些恶意行为,比如偷取私人信息或者控制整个装置并使之成为一个蠕虫一样。通常,它们是由Broadcast Receiver来监听和获取特殊的广播,比如BOOT COMPLETED(当Android系统完成启动程序时会发送出来)。此后,Receiver要么自己运行,要么永久地在后台运行。把组件(Activity,Service,Broadcast Receiver)作为切入点,深入追踪应用软件的组件间通信和与权限相关的API调用的情况。

2.2 功能行为识别

为了识别不同的Android应用的意图,应用不同的聚类算法。文中选择最常用k-means和EM算法。

首先研究的问题是确定聚类数目。运用TF-IDF算法做出应用特征矩阵。TF-IDF是一种关于信息检索与信息勘探的统计方法。它实际上是一种加权技术,常常被用于资讯检索与资讯探勘的加权。用它对每个字词相对于一个文件集或一个语料库中的某一份文件的重要程度进行评估。

文中使用奇异值分解(SingularValueDecomposition)算法确定最佳聚类数量。

对合法应用来说,每个合法应用属于由Android市场决定的根据其功能的一个主题类别。文中参考GooglePlay类别(共26个),认为每个类别作为一个聚类,因为文中认为同一类别的应用具有相似的功能。

奇异值分解算法描述如下:

F表示一个数据矩阵,m行n列,即m种Android资源,n种属性。文中使用合适的分类方法,把F矩阵分解成l基的线性光谱混合模型。在系统设置中,列数太大,即F矩阵中的行数太大,使奇异值分解加大分解计算量,才能得到重要的特征。文中不直接使用F矩阵来实施SVD算法。

(1)

F×FT=U×D2×UT

(2)

U=F×FT/D2×UT

(3)

V=D-1×UT×F

(4)

在此系统中,隐藏变量的数量优先被决定。文中利用频谱分析所用到的SVD,选取占总频谱能量λ(比如λ=95%)比例的前l个奇异值,作为聚类个数。进一步使用式(5)的SVD算法来分解F矩阵。

M=U×S×VT

(5)

式(5)中,利用对角矩阵S,选取占总频谱能量λ(比如λ=95%)比例的前l个奇异值作为隐藏变量的个数,如式(6)所示。

(6)

k表示占总频谱能量λ的所有频率数的最小整数,满足式(7)。

(7)

2.3 Android恶意软件识别

行为识别能总结Android恶意软件的不同功能,用来做进一步的预测参考。具有类似功能的应用程序可以归在一类。在认识了应用程序的行为意图后,最后的目标就是识别Android恶意应用。在给定代表聚类的概要信息后,原则上能利用任意分类器进行Android恶意应用的检测。文中采用朴素贝叶斯算法和kNN(k=1)算法。

2.4 构造ICC特权图推理

前一阶段是设计检测单独的Android恶意应用。对于重新打包的Android恶意应用软件来说,它们与合法应用软件非常相似。如果仍旧采用基于向量的机制,那么这些Android恶意应用软件可能轻易地伪装,被系统认为是合法应用软件。因为它们使用的大多数组件都是合法的,而只有很少的一部分是恶意的。

为了解决这种类型的伪装,采用ICC特权图推理方法识别恶意组件。尽管只有很少的一部分恶意模式可能被注入到合法应用中,但最终它们需要权限才能做恶意行为。可以通过ICC特权图总结出重打包的Android恶意应用的行为。

在此阶段,前面基于向量机制检测出来的合法程序含有部分恶意组件的标签,尝试构建这些应用的ICC特征图以进行更深入的分析。

在ICC特权图中,有四种顶点(Activity,Service,Broadcast Receiver和Permission),两种边(ICC和ICC-Permission)。每个应用软件都有自己的ICC结构,通过追踪特权API的使用,把每个组件与其相联系的权限连接起来。最后,把这些应用软件的ICC特权图合成一个图。假设,在底部不同的应用软件在ICC图中没有任何联系,但是它们共享同一套权限。

在ICC特权图建立好之后,用PageRank算法来给组件打分,并通过关系传播。一旦某个组件得到高分,它可能被认定是恶意的,进而其所属的应用软件被认为是Android恶意软件。在ICC特权图中,节点可能是组件或者权限,但把它们当做同样的目标,即节点。

3 实验结果

为了评估该方法,文中对XDroidMat的有效性进行验证。另外,将XDroidMat和另一款常用的基于签名的Android恶意应用检测Androguard[4]进行比较,在Blackhat2011上发布。

3.1 数据集

在Contagio mobile和VirusShare网站上搜集恶意软件。文中随机在Google Play商店给每个类别(共26类)下载了50个应用程序。默认这1 300个应用是安全合法的。总共搜集了223个Android恶意应用,包含了34个恶意程序家族。

3.2 评价标准

评估时把每个Android恶意程序作为一个实例。把Android恶意程序检测为真实例True instance,而把合法应用检测为假实例False instance。

定义了一组相关指标,从各个方面来衡量实验效果。现设TP(True Positive)为恶意软件被正确检测出来,即恶意软件被检测为恶意软件的数量。FP(False Positive)表示恶意软件没有被正确检测出来(而被检测为合法软件)的数量。TN(True Negative)表示合法软件被检测出来的数量,即被检测为合法软件的数量。FN(False Negative)表示合法软件没有被正确检测出来(而被检测为恶意软件)的数量。

3.3 有效性分析

为了评估XDroidMat的有效性,设置了两个系列的实验,一个是基本参数比较,另一个是与Androguard(一个很受欢迎的开源的Android恶意应用分析检测工具)进行比较。

这四种特征集如下:

(1)Intent+API:此特征集涵盖了应用的所有信息,包括组件类别、所需权限、Intents以及API调用。

(2)有API而没有Intent:此特征集几乎和前者一样,除了没有考虑Intents信息。

(3)Permission+API:此特征集包含所需权限和API调用。

(4)Intent+Permission+API:此特征集在文中方法中用到,包含所需权限、Intents以及API调用。

表2显示了应用不同特征集到XDroidMat中的实验结果。

基本参数有效性的比较结果显示,特征集“with+Intent+API”有最好的召回率。文中方法用到的特征集“Permission+Intents+API”,有最佳的准确率。前者包含了与应用相关的所有信息,而这些信息能够检测出更多的Android恶意应用软件。但是由于大部分特征是组间类别,这些组间类别对于每个应用都是唯一的,所以前者不是经常用。尽管后者的召回率(recall rate)不像前者那么好,但是它的精确率(precision)是最好的,而且更常被用到。

表2 不同特征组合的召回率、精确率比较

表3显示了应用不同的聚类和分类算法在此机制中的不同结果。文中采用四种不同组合的分类算法来分析结果。

表3 不同的聚类和分类算法的召回率、精确率比较

文中选择了k-means和kNN的组合。

比较了XDroidMat和Androguard的检测能力。实验结果见表3。此外,两个系统的混淆矩阵和评价标准结果显示在表4和表5中。

表4 Androguard的混淆矩阵

表5 XDroidMat的混淆矩阵

实验显示,XDroidMat能检测出更多的恶意应用。甚至在小样本情况下,XDroidMat也有更好的效果。此外,XDroidMat能识别大多数Android变异恶意软件。从平均召回率和F-measure等评价标准来看,XDroidMat相对于Androguard都要好。

由于考虑了Permissions,Intents和API调用等情况,实验结果表明XDroidMat比Androguard能检测出更多的Android恶意应用。但是,XDroidMat能检测出的Android恶意应用家族类别的数量要少于Androguard。因为大多数家族只有一个样本,使得XDroidMat学习它们的行为受限。其中,BaseBridge和DroidKungFu两类家族是XDroidMat不能检测出来的。

4 结束语

文中提出了XDroidMat,一种根据应用不同意图恶意应用新检测的方法。XDroidMat能够区分Android恶意软件变种截然不同的意图,准确率能达到98.12%。它是一个线性大小问题(输入矩阵的非零数量)。不需要在沙盒中动态检测Android应用的行为,节省环境配置开销和手工调查成本。

[1]KimH,ShinKG,PillaiP.MODELZ:monitoring,detection,andanalysisofenergy-greedyanomaliesinmobilehandsets[J].IEEETransactionsonMobileComputing,2011,10(7):968-981.

[2]FuchsAP,ChaudhuriA,FosterJS.SCanDroid:automatedsecuritycertificationofAndroidapplications[R].Maryland:Univ.ofMaryland,2009.

[3]BoseA,HuX,ShinKG,etal.Behavioraldetectionofmalwareonmobilehandsets[C]//Proceedingsofthe6thinternationalconferenceonmobilesystems,applications,andservices.[s.l.]:ACM,2008:225-238.

[4]ZhaoM,GeF,ZhangT,etal.AntiMalDroid:anefficientSVM-basedmalwaredetectionframeworkforAndroid[C]//ProceedingsofICICA.[s.l.]:[s.n.],2011:158-166.

[5]TeuflP,KraxbergerS,OrthackerC,etal.Androidmarketanalysiswithactivationpatterns[M]//Securityandprivacyinmobileinformationandcommunicationsystems.[s.l.]:Springer,2012:1-12.

[6] 耿东久,索 岳,陈 渝,等.基于Android手机的远程访问和控制系统[J].计算机应用,2011,31(2):559-561.

[7] 杨 博.Android系统下应用程序的安全性研究[D].上海:上海交通大学,2013.

[8] 张 一,施 勇,薛 质.Android中权限提升漏洞的动态防御技术[J].信息安全与通信保密,2013(11):71-74.

[9] 张叶慧,彭新光,蔡志标.基于类别以及权限的Android恶意程序检测[J].计算机工程与设计,2014,35(5):1568-1571.

[10] 沈才樑,唐科萍,俞立峰,等.Android权限提升漏洞攻击的检测[J].电信科学,2012,28(5):115-119.

[11]ZhouY,WangZ,ZhouW,etal.Hey,You,getoffofmymarket:detectingmaliciousappsinofficialandalternativeandroidmarkets[C]//Proceedingsofannualnetwork&distributedsystemsecuritysymposium.[s.l.]:[s.n.],2012:1-13.

[12] 李宇翔,林柏钢.基于Android重打包的应用程序安全策略加固系统设计[J].信息网络安全,2014(1):43-47.

[13] 曾立鹍,唐泉彬,牛 斗.Android系统应用程序组件安全性分析[J].软件,2014,35(3):147-151.

[14] 吕晓庆,邹仕洪.基于smali的Android软件敏感API调用日志模块嵌入系统[EB/OL].[2012-12-28].http://www.paper.edu.cn/releasepaper/content/201212-1107.

[15] 祝 为,王轶骏,薛 质.基于VFS的AndroidRootkit技术研究[J].信息安全与通信保密,2013(1):68-69.

Android Malware Detection of Calls Tracing with AndroidManifest and API

ZHENG Yao,WANG Yi-jun,XUE Zhi

(School of Electronic Information and Electrical Engineering,Shanghai Jiaotong University,Shanghai 200240,China)

A static feature-based mechanism is studied to provide a static analysis method for detection of the Android malware.In order to identify the intention of different Android malware,all kinds of clustering algorithms are applied to enhance the malware modeling capability to any Android procedure.Besides,a system,called XDroidMat,is developed.The XDroidMat extracts the information from each application’s manifest file and regards components as entry points drilling down for tracing API Calls related to permissions.Then it usesk-meansalgorithmtostrengthenthemalwaremodelingcapability.ThenumberofclustersisdecidedbySingularValueDecomposition(SVD)methodonthelowrankapproximation.Finally,ituseskNNalgorithmtoclassifytheapplicationasbenignormalicious.TheexperimentalresultsshowXDroidMatcanget98.12%accuracyanddowellindetectingtheAndroidmalware.

Android malware;static analysis;feature-based;ICC

2015-06-06

2015-11-09

时间:2017-02-17

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

郑 尧(1988-),男,硕士,研究方向为信息安全;王轶骏,讲师,研究方向为信息安全;薛 质,教授,研究方向为信息安全。

http://www.cnki.net/kcms/detail/61.1450.TP.20170217.1623.006.html

TP

A

1673-629X(2017)03-0126-05

10.3969/j.issn.1673-629X.2017.03.026

猜你喜欢
调用合法静态
最新进展!中老铁路开始静态验收
静态随机存储器在轨自检算法
核电项目物项调用管理的应用研究
合法外衣下的多重阻挠
系统虚拟化环境下客户机系统调用信息捕获与分析①
西班牙推动废除合法卖淫
报告
油罐车静态侧倾稳定角的多体仿真计算
平行进口汽车将有“合法身份”?
利用RFC技术实现SAP系统接口通信