APP下载

基于Dalvik指令的Android应用检测方法

2016-09-13白鸽钱步仁

电子设计工程 2016年5期
关键词:数据流静态应用程序

白鸽,钱步仁

(中国石油大学 地球物理与信息工程学院,北京 102249)

基于Dalvik指令的Android应用检测方法

白鸽,钱步仁

(中国石油大学 地球物理与信息工程学院,北京102249)

为提高Android移动平台的安全性,提出一种基于Dalvik指令的静态检测方法,通过分析应用程序的虚拟机代码,找出敏感信息的数据流,包括跟踪敏感信息、函数的调用,从而判断出该应用程序是否有恶意行为。用上述方法建立系统模型来验证其有效性,最终实验结果表明此方法既避免了检测方法的滞后性,又能有效的检测出恶意软件。

Android;行为检测;数据流;Dalvik指令

随着Android用户数量的迅速增长,Android恶意软件的数量也呈喷井式增加,对于移动平台上面临的这种严峻考验,加大移动平台安全研究十分重要。因此,实现实时、准确的检测对减少用户的财产损失和隐私威胁有重要的作用。目前,Android平台下恶意软件的检测方法主要有特征码(Signature-based)检测和行为(Behavior-based)检测两种[1]。为了实现实时性检测必须采用行为检测的方法,因为特征码检测有滞后性,也就是只有用户受到损失一定时间之后,恶意样本才能被发现,而行为检测的优点就是实时性,但由于Java代码混淆等原因造成这种检测方法的检测率较低。为了在实现实时性的前提下来提高检测率,必须解决代码混淆问题。因此,文中提出一种基于Dalvik虚拟机指令的行为检测方法。该检测方法通过反编译来分析Dalvik虚拟机代码,获取敏感信息的数据流,包括跟踪敏感变量,函数和方法的调用等详细情况进行分析研究,最终判断该应用程序是否有恶意行为。

1 研究现状

目前,基于行为检测主要包括静态检测方法和动态检测方法两种[2]。静态检测是指无需安装和运行Android应用程序,通过利用现有的Android软件逆向技术来获取应用程序反编译后的代码,并分析应用程序代码从而判断应用是否拥有恶意行为。动态检测方法指的是在虚拟机上安装应用,之后模拟用户的使用,并监控应用软件的运行情况记录其行为,最后进行分析,确定其是否具有恶意行为。由于动态检测方法难以触发完全,本文选用静态检测方法。国内外对于静态和动态检测的研究很多,在此不赘述,但是基于Dalvik的虚拟机指令的检测方法还是初始阶段,李寅和李子锋等人采用静态分析方法,分别通过跟踪应用程序对敏感权限和常量值的使用来分析恶意行为,这些方法存在局限性,不能完整的分析应用软件的恶意行为[3-4];杨博,彭智俊等人采用基于数据流分析方法开发了Brox[5]和LogMiner[6],在安全性检测的准确性和性能上取得了一定的效果,但这些工具不能完整的反应出应用程序的恶意行为;李挺等人提出了一种基于Dalvik指令的Android恶意代码特征形式化分析方法,快速准确的提取恶意特征[7],但不能解决滞后性的问题。为了解决上述问题,本文采用静态检测方式,通过分析应用程序的Dalvik虚拟机指令数据流来跟踪检测敏感API(Application Programming Interface)和敏感字符,最终达到检测出恶意软件和恶意行为的目的。

2 Dalvik虚拟机及其指令

Android应用程序是使用Java编程语言编写的,但是其并未像其他的Java程序一样运行在Jvm(Java虚拟机)上,而是弃用了已有的字节码文件 (*.class),采用了新的格式(*.dex),最终运行在Dalvik虚拟机中。这是因为一个应用程序中会定义很多类,Jvm编译完成后即会有很多相应的Class文件,这些Class文件间存在不少冗余的信息,而Dex文件格式会把所有的Class文件内容整合到一个文件里面,从而减少整体的文件大小,并提高了类的查找速度。

Android应用程序详细的运行过程如图1所示。Android应用程序(*.jar)首先经过Java虚拟机(Jvm)编译成为字节码文件(*.class),之后使用Android操作系统和Dalvik虚拟机提供的Dx工具,将字节码文件编译成Dalvik虚拟机的可执行文件(*.dex),最后,为了节省空间和加快运行速度,*.dex被优化成*.odex文件并在Dalvik里面运行。Dalvik虚拟机指令语言俗称Smali语言,Smali是一种基于寄存器的语言,相比于Java语言,Smali语言更难混淆,因此,分析Smali语言准确率更高。

图1 Dalvik内的运行过程Fig.1 Operation process in Dalvik

3 检测方法的实现

文中提出一种基于Dalvik虚拟机指令的静态检测方式,流程图如图2所示。从图中可以看出,该检测方法通过反编译Android应用程序,得到对应的Dalvik虚拟机指令代码,将这部分代码通过静态数据流模块,分析内部代码数据流情况,确定该应用是否为恶意应用,最后得出恶意软件的详细恶意行为。

图2 检测方法流程图Fig.2 Flow chart of detection method

3.1反编译

反编译就是对应用程序进行逆向的研究与分析。由于Java程序最终是在Dalvik虚拟机里面执行的,所以通过反编译找出原始虚拟机指令再进行代码分析,这样有利于提高检测率。反编译的方式有很多种,在此选用 Apktool工具。Apktool将Dex可执行文件翻译成Smali目录,Smali代码相当于Java代码与Dex文件之间的中间代码。反编译出的Smali文件夹是根据程序包的层次结构生成相应的目录,程序中所有的类都会在相应的目录下生成独立的Smali文件,内部类作为一个独立的类,它也拥有自己独立的Smali文件,只是内部类的文件名形式为“[外部类]$[内部类].smali”。此外,反编译还会得到一些Apk的配置文件和基本信息等内容。本检测方法主要分析反编译之后生成的Dalvik指令。

3.2数据流模块

数据流分析模块是该检测方法的主要部分,是以敏感信息为目标来进行跟踪的。其中,敏感信息包括敏感API和敏感字符。比如 abortBroadcast(拦截短信接收),sendText Message(发送短信),'/root/su'(切换用户),delete(删除短信,联系人)等都是敏感信息。而外发方式主要包括短信发出和网络发出两种。首先,总结出Android平台中所有敏感信息(API和字符)集合和外发函数的集合。然后,编写数据流分析模块代码,主要思想为遍历整个应用代码,当找到某个敏感API函数的时候,记录函数的寄存器和返回值作为敏感信息加入敏感信息列表内,再分析上下文程序[8]。当出现敏感信息的传递(比如move、return函数)时,将该寄存器加入敏感信息列表,对于原敏感寄存器若被重新赋值,则从敏感列表内删除;当出现敏感信息相关的调用,比如invoke,参数和返回值使用再进行跟踪,如此循环。跟踪到敏感信息的外发时,记录完整数据流。此外,对于一些无关的命令可以直接忽略,不进行跟踪。最后再使用代码将反编译之后的Dalvik虚拟机指令进行扫描。

数据流模块的检测结果写入Xml文件中,数据流部分结果在<DATAFOLW_ANALYSIS>里面,其中outMethod所对应的值,是泄露方式,strSensitiveType的值是外泄的敏感信息。通过数据流结果,就可以对样本可能存在的危害进行分析。图3为ADW Launcher 2的数据流检测结果。外泄的敏感信息包括IMEI(International Mobile Equipment Identity),IMSI (InternationalMobileSubscriberIdentificationNumber),DATABASE(数据库),SMS_BODY(短信内容)和SMS_ADDRESS(短信发送者地址)。外发方式可以总结为网络(HTTP)外发和短信(SMS)外发。

图3 数据流检测结果Fig.3 Result of the data flow

3.3打分模块

为了更好地体现应用程序的危险程度,在系统中加入打分模块,分数越高越危险。根据样本分析经验,根据不同敏感API带来的不同层次的危害来定义不同的分数,最后根据总分范围来确定样本的危害程度。但是,当某一种恶意行为已经很严重时,比如,后台私自通过sendTextMessage定制业务,直接恶意扣费;通过广播拦截用户短信,读取用户的支付密码,并上传到的服务器,这种恶意行为危害非常大,直接判定为malware。打分模块结果写在<FINAl_SCORE>里面,如图4所示。通过打分模块的计算,样本ADW Launcher 2的危险程度为malware。

图4 打分模块结果Fig.4 Result of the score model

3.4结果分析

对100个Android应用软件进行检测分析,检测结果如表1所示。从表中能看出检测系统能够准确的检测出的恶意软件总共为17个,实际为23个,因此检测率为73.9%。误报率显然高于360、卡巴斯基等专业的安全检测系统,值得注意的是,本检测方法中不包括的黑白样本库和特征码检测,能实现完全依靠行为的实时检测,这对于移动安全发展仍有十分重要的作用。此外,检测结果与行为检测的局限性以及敏感信息库、恶意行为的判定规则等有关。为了进一步分析检测结果,部分样本检测恶意行为检测结果如表2所示,隐私泄露、后台下载、资费消耗和流氓行为是主要的恶意行为,本检测系统对于隐私窃取检测和资费消耗的恶意行为能够成功检测,而对于后台下载和流氓行为还不能成功检测出来。最后,对于进行人工分析,发现流氓行为和恶意下载并不经过数据流,还有部分样本有加密混淆的情况,因此仍存在误报,这部分的检测在后续工作中仍要继续研究。

表1 检测数据Tab.1 Related data of the detection

表2 检测结果Tab.2 Result of the detection

4 结 论

通过实现结果数据可以看出,本文检测方法达到实时性检测出恶意样本的目的。该检测方法可以有效检测出部分恶意样本及其恶意行为,同时相比于特征码检测方法具有更好的实时性,比基于Java语言的静态检测方式更好的避免代码的混淆。此外,本文对于行为检测研究起到积极的作用。但是,检测率与敏感信息库、恶意行为的判定规则以及静态检测自身的局限性等很多细节有关,尤其对于一些不需要经过数据流的恶意方式不能够检测出来,比如后台下载等,检测率仍有待提高。因此,在今后的研究中,要针对上述问题进行实验分析研究,进一步修改数据流检测部分,提高检测率。

[1]Idika N,Mathur A.A Survey of Malware Detection Techniques,Tech.Rep.SERC-TR-286[R].Department of Computer Science of Purdue University,West Lafayette,USA,2007.

[2]丰生强.Android软件安全与逆向分析[M].北京:人民邮电出版社,2013.

[3]李寅,范明钰,王光卫.基于反编译的Android平台恶意代码静态分析[J].计算机系统应用,2012,21(11):187-189.

[4]李子锋,程绍银,蒋凡.一种Android应用程序恶意行为的静态检测方法[J].计算机系统应用,2013,22(7):148-151.

[5]杨博,唐祝寿,朱浩谨,等.基于静态数据流分析的Android应用权限检测方法[J].计算机科学,2012,39(11A):16-18.

[6]彭智俊,张源,杨珉.用静态信息流分析检测Android应用中的日志隐患[J].小型微型计算机系统,2013,6(6):1276-1281.

[7]李挺,董航,袁春阳,等.基于Dalvik指令的Android恶意代码特征描述及验证[J].计算机研究与发展,2014,51(7): 1458-1466.

[8]魏松街,杨铃.基于分层API调用的Android恶意代码静态描述方法[J].计算机科学,2015(1):155-158,179.

Android malware detection based on Dalvik instructions

BAI Ge,QIAN Bu-ren
(College of Geophysics and Information Engineering,China University of Petroleum,Beijing 102249,China)

In order to improve the security of the Android platform,a method using Dalvik instructions is proposed.Through analyzing Dalvik instructions of the Android software,the data flow of sensitive information can be described,including the tracking of sensitive variables and call functions.Finally,the current software will be tested whether it has malicious behaviors.A system model has been made to validate the method,and the experimental results show that this method can effectively detect malware in real time.

Android;behavior detection;data flow;Dalvik instructions

TN915.08

A

1674-6236(2016)05-0032-03

2015-04-01稿件编号:201504003

白 鸽(1991—),女,河北秦皇岛人,硕士研究生。研究方向:移动安全。

猜你喜欢

数据流静态应用程序
最新进展!中老铁路开始静态验收
静态随机存储器在轨自检算法
汽车维修数据流基础(上)
汽车维修数据流基础(下)
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
基于数据流聚类的多目标跟踪算法
油罐车静态侧倾稳定角的多体仿真计算
北医三院 数据流疏通就诊量
三星电子将开设应用程序下载商店