APP下载

Android恶意程序常用权限分析及统计研究

2017-11-20李红灵

计算机技术与发展 2017年11期
关键词:应用程序静态代码

李红灵,詹 翊

(1.云南大学 信息学院 计算机科学与工程系,云南 昆明 650091;2.云南省信息安全测评中心,云南 昆明 650000)

Android恶意程序常用权限分析及统计研究

李红灵1,詹 翊2

(1.云南大学 信息学院 计算机科学与工程系,云南 昆明 650091;2.云南省信息安全测评中心,云南 昆明 650000)

为解决Android恶意程序检测中代码分析量大、核心代码定位难、检测判断效率低等问题,提出了将静态分析与动态分析相结合的Android恶意程序行为监测和分析的复合检测方法。该方法在对收集整理的226个和开放的恶意程序样本进行综合分析的基础上,用Python语言编写了自动化Android恶意程序权限统计程序,并统计分析了打开网络套接字、将数据写到外部存储设备和接收系统启动时的广播事件动作等15种常用权限,确定了静态分析中需要重点关注的权限及其调用函数。以Android恶意程序CutePuppiesWallpaper.apk作为实例,应用Apktool工具对待检测APK文件进行反编译,得到反汇编后的Smali文件,通过定位程序关键代码、定位重要权限关联API函数两种途径快速找到程序的入口和其重要功能代码部分。同时,采用沙箱系统的Android恶意软件动态分析方法,得到开机启动、应用程序变更等事件及其对应的激活方式。研究表明,使用该复合检测方法可以有效提高分析效率,缩短恶意代码分析时间,快速定位核心代码,及时阻止恶意程序传播。

Android恶意程序;检测;常用权限;静态分析;动态分析

1 概 述

随着移动智能设备的普及,Android系统的发展也十分迅速,同时也使Android恶意程序快速发展和广泛传播,给Android用户带来了严重的安全隐患[1]。

恶意程序是一种软件程序代码,旨在干扰正常的使用,收集系统/用户的敏感信息,获取未经授权的信息等等。恶意程序包括病毒、蠕虫、木马、后门、逻辑炸弹、漏洞攻击程序、间谍软件、广告软件、rootkit后门以及其他恶意程序代码[2]。Android恶意程序是指在用户不知情或未授权的情况下,在移动智能终端系统中安装、运行,以达到不正当目的的APK文件[3]。

国内在Android安全研究及Android恶意程序检测等方面卓有成效。例如,蒋绍林等[4]通过分析Android安全机制,认为Android通过adb工具可以获取系统root权限,会对文件造成安全威胁,指出增强Android应用框架层的安全机制;张志远等[5]通过静态分析和动态调试以及反逆向技术等方法来介绍怎样对Android应用进行逆向分析,从而实现Android应用的安全可控;李子锋等[6]提出一种采用静态分析检测Android恶意程序的方法。该方法使用静态数据流分析技术实现常量分析算法,通过追踪Android应用程序使用常量值的序列,达到检测应用程序恶意行为的目的。吴俊昌等[7]提出一种基于Android权限分类的静态分析方法,用于检测Android应用程序的恶意代码。王志强等[8]采用静态分析与动态分析相结合的方式,对Android应用程序的关键系统调用和方法的控制流序列进行提取。研究分析了已知恶意软件样本库,成功训练出恶意软件特征集合和恶意判定阈值,通过比对Android应用程序与恶意特征集的相似度判定是否为恶意程序。最终设计并实现了Android恶意行为检测系统SCADect。Zhou Yajin等[9]通过分析1 260个正常应用的权限使用,与收集的恶意应用申请的权限进行对比,在恶意应用和正常应用中,访问网络、读手机状态、访问网络状态、写SD卡等权限都被广泛使用,但恶意应用更倾向于使用短信相关的权限、开机自启动权限、更改网络状态的权限,正常应用很少使用这些权限。在国外,Akash Malhotra等[10]通过静态分析和动态分析结合黑白名单的方法,对Android恶意软件进行研究,使用逆向分析检查恶意代码,又使用工具来识别包结构,再用白名单过滤的策略来识别恶意程序。Thomas等[11]提出一种Android应用程序沙箱。该沙箱使用Android SDK中的Monkey工具,生成伪随机事件流,并模拟用户点击、触摸、手势或系统事件等操作,通过监测系统和库函数调用,生成的日志记录,来分析Android应用程序是否存在恶意行为。

在对工作中收集整理到的226份Android恶意程序样本和一些公开的恶意程序样本进行综合分析的基础上,应用Python编写了相关的统计程序,统计出Android恶意程序常用的权限类型与使用频度,并确定了静态分析环节中需要重点关注的权限。另外,结合信息安全测评工作的实践活动,基于沙箱系统的Android恶意程序动态分析方法,进行了Android恶意程序激活方式研究,归纳了动态分析中激活恶意程序的方法。结合静态分析与动态分析,总结出恶意程序行为分析的有效方法。

2 Android恶意程序常用权限统计

访问控制是系统实施安全控制的有效手段之一,而访问控制具体体现在主体对客体的访问权,即主体对系统资源的访问权限上[12],因此对恶意程序常用权限的统计分析是恶意程序行为研究的基础。

2.1Android恶意程序常用权限统计的目的

Android系统在应用程序框架中提供了权限许可机制,为开发者定义了一百多种权限用于保护系统资源,并提供了对应的API用于访问上述系统资源。

由于Android严格的权限许可机制,恶意程序如果试图获取用户隐私、系统信息或者执行系统操作,都必须在AndroidManifest.xml文件中申明相应的权限,否则在程序运行时就会触发安全异常[13]。Android系统也规定应用程序在运行过程中无法动态地改变自身权限。故恶意权限的使用情况可以作为Android应用恶意行为判别的重要依据。因此有必要针对Android恶意程序进行权限统计,由此得到恶意程序最常用的权限。这些权限使用情况及其对应的API函数,是静态分析的核心部分,优先分析这些权限组合及函数调用可以大幅缩减代码分析量,有效降低人为分析的强度,提高恶意程序分析的效率。

2.2Android恶意程序样本介绍

对于此次研究,统计分析的Android恶意程序样本部分源于以下各开放网站:https://zeltser.com/malware-sample-sources/;https://www.mediafire.com/?78npy8h7h0g9y;http://contagiodump.blogspot.com/。其余样本是由实际工作中收集整理的,共226个。

2.3Android恶意程序常用权限统计的实现

所用命令与参数如下:

main.py -i -o

程序输出结果略(鉴于篇幅)。

2.4Android恶意程序常用权限统计结果分析

根据以上样本及程序分析得出如表1所示的统计结果。表中所反映的这些权限及相关的API函数就是在静态分析中需要重点关注的部分。

3 Android恶意程序反编译实例

3.1Android恶意程序反编译

下面以分析Android恶意程序CutePuppiesWallpaper.apk为例进行说明。通过使用Apktool工具可对待检测APK文件进行反编译(过程略)。

编译后可以产生和程序包层次结构相同的Smali目录,目录中包含着反汇编后的Smali文件[14]。

表1 恶意程序常用权限及使用频率

反编译后的Smali文件代码通常较长,而且指令繁多,代码分析时很难捕捉到重点,因此有必要快速定位程序关键代码,提高分析效率,降低分析强度。

3.2快速定位程序关键代码

Android程序由一个或多个Activity以及其他组件构成,不同的Activity实现不同的功能,但每个程序有且只有一个主Activity。对于大多数应用程序而言,主Activity的OnCreate()就是程序的代码入口,所有功能从这里开始执行[14]。

以下是快速定位的操作步骤。

步骤1:先解析出AndroidManifest.xml文件,找到主Activity,如图1所示。

图1 解析AndroidManifest.xml文件找到主Activity

步骤2:查看其所在类的OnCreate()方法的反汇编代码,提高分析效率,如图2所示。

virtualmethods.methodpubliconBind(Landroid/content/Intent;)Landroid/os/IBinder;.locals1.paramp1,"arg0"#Landroid/content/Intent;.prologue.line17const/4v0,0x0return-objectv0.endmethod.methodpubliconCreate()V.locals0.prologue.line22invoke-super{p0},Landroid/app/Service;->onCreate()V.line23return-void.endmethod

图2 定位OnCreate()方法

通过以上两个步骤就可以定位到程序的代码入口。

3.3快速定位重要权限关联API函数

还需要根据表1,重点分析恶意程序常用权限的函数调用情况。

通过定位程序关键代码、定位重要权限关联API函数两种途径,就可以快速找到程序的入口及其重要功能代码部分。在源代码分析过程中,优先分析程序关键代码可以避免顺序分析中阅读大量无关代码,加快了分析速度,提高了分析效率。

4 Android恶意程序动态分析

Android恶意程序动态分析利用沙箱原理,即在计算机系统内部构造一个独立的虚拟空间,恶意程序所作的任何写磁盘操作,都将重定向到这个虚拟空间[15]。这样将阻止可疑程序对系统访问,转变成将可疑程序对磁盘、注册表等的访问重定向到指定文件夹下,从而消除恶意程序对系统的危害。

4.1分析环境搭建

将装有Droidbox、Wireshark、Androguard等检测分析工具的主机(或是笔记本电脑)通过有线或无线方式接入互联网,打开笔记本电脑无线网络,将其设置为访问接入点AP(SSID:Test),打开待检测手机的WIFI功能,接入无线网络,这样就完成了分析环境的搭建。其拓扑结构如图3所示。

4.2触发恶意程序

以下从分析恶意程序的激活方式,创建激活条件激活恶意程序,使用APIMonitor对恶意程序进行分析三个方面进行介绍。

图3 分析环境网络拓扑

(1)恶意程序激活方式。

经对Android恶意程序实例分析并结合工作实践经验,分析和总结了Android恶意程序的主要激活方式,如表2所示。

表2 运行main.py程序的输出内容

(2)创建激活条件激活恶意程序。

通过以下四个步骤可以完成恶意程序激活的全过程。

步骤1:提供WIFI与移动数据网络两个Internet网络出口。有些恶意程序为了规避流量监测,采取了智能判断,仅当有WIFI连接时才有网络行为。

步骤2:需更改测试环境的时区及时间设置。有些恶意程序,为了提高其隐蔽性,在其源代码中加入了时间判断,在正常工作时间(07:00-24:00)不工作,有效规避了分析人员在正常时间内对其进行动态分析。

步骤3:尽可能尝试多种网络协议类型的操作。有些恶意程序通常在用户主动进行网络操作时才运行,如打开浏览器(HTTP)、网络下载(FTP)等,因此在动态分析时需要主动尝试多种网络行为。

步骤4:根据表2总结的恶意程序激活方式尽可能模拟很多的监听事件,触发木马恶意行为。

(3)使用APIMonitor对恶意程序进行分析。

APIMonitor是DroidBox中独立的动态分析工具,它通过向目标APK包中插入监视代码来监测应用程序在运行过程中调用的API。

APIMonitor首先反编译所要处理的APK包,接着遍历Smali代码。如果找到在配置文件中配置的需要监测的API,则分析这个API参数,插入DroidBox包下相应的类的静态函数,最后重新打包这个APK包。这样,当应用程序在运行过程中调用到插入了监视代码的API后,系统日志就会出现标签DroidBox标记的日志信息,只需过滤出这些日志信息,就可以获得应用程序调用系统API的信息。

默认监控的API列表存放在config/default_api_collection文件下。其内容如图4所示。

#DEFAULTAPILIST#IntentLandroid/content/Intent;->#signatureofmethodswiththesamenameLandroid/content/ContextWrapper;->sendBroadcast#signa-tureofonemethodsLandroid/content/ContextWrapper;->sendOrderedBroadcastLandroid/content/ContextWrapper;->sendStickyBroadcastLandroid/content/ContextWrapper;->sendStickyOrdered-BroadcastLandroid/content/ContextWrapper;->startActivityLandroid/content/ContextWrapper;->startActivities#UriLandroid/net/Uri;->parse(Ljava/lang/String;)

图4 程序调用系统API的信息

通过静态分析结合动态分析,可在短时间内快速全面掌握Android恶意程序的基本功能、程序流程、网络行为。较传统分析而言,大大缩短了分析时间,提高了分析效率。

5 结束语

为解决Android恶意程序检测中代码分析量大、核心代码定位难、检测判断效率低等问题,提出了将静态分析与动态分析相结合的Android恶意程序行为监测和分析的复合检测方法。该方法对收集整理的226个和开放的恶意程序样本进行了综合分析,应用Python语言编写了自动化Android恶意程序权限统计程序,统计分析了打开网络套接字、将数据写到外部存储设备和接收系统启动时的广播事件动作等15种常用权限,并以此确定静态分析中需要重点关注的权限及其调用函数。以Android恶意程序CutePuppiesWallpaper.apk为验证实例,使用Apktool工具对待检测的APK文件进行了反编译,得到了反汇编后的Smali文件,通过定位程序关键代码、定位重要权限关联API函数两种途径快速找到程序入口及其重要功能代码部分。同时,采用沙箱系统的Android恶意软件动态分析方法,得到开机启动、应用程序变更等事件及其对应的激活方式。使用该方法,可以有效提高分析效率,缩短恶意代码分析时间,快速定位核心代码,及时阻止恶意程序传播。

[1] 张艺腾.基于并行计算弱KMP模式挖掘算法的Android恶意应用检测[EB/OL].2014.http://d.wanfangdata.com.cn/Thesis/Y2695006.

[2] Stallings W,Brown L.计算机安全原理与实践[M].贾春福,刘春波,高敏芬,等,译.北京:机械工业出版社,2008:75-142.

[3] 王 叶.PC与智能手机黑客攻防大全[M].北京:机械工业出版社,2015.

[4] 蒋绍林,王金双,张 涛,等.Android安全研究综述[J].计算机应用与软件,2012,29(10):205-210.

[5] 张志远,万月亮,翁越龙,等.Android应用逆向分析方法研究[J].信息网络安全,2013(6):65-68.

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

[7] 吴俊昌,骆培杰,程绍银,等.基于权限分类的Android应用程序的静态分析[C]//第四届信息安全漏洞分析与风险评估大会.出版地不详:出版者不详,2011:24-28.

[8] 王志强,张玉清,刘奇旭,等.一种Android恶意行为检测算法[J].西安电子科技大学学报,2015,42(3):8-14.

[9] Zhou Y,Jiang X.Dissecting android malware:characterization and evolution[C]//2012 IEEE symposium on security and privacy.[s.l.]:IEEE,2012:95-109.

[10] Malhotra A.Android malware:study and analysis of malware for privacy leak in ad-hoc network[J].International Journal of Computer Science & Network Security,2013,12(3):39-43.

[11] Bläsing T,Batyuk T,Schmidt L,et al.An Android application sandbox system for suspicious software detection[C]//International conference on malicious and unwanted software.[s.l.]:[s.n.],2010:55-62.

[12] 李 洋.Android安全架构及权限控制机制剖析[EB/OL].2013-09-08.http://tieba.baidu.com/p/2582088334.

[13] 高 岳,胡爱群.基于权限分析的Android隐私数据泄露动态检测方法[EB/OL].2013-08-09.http://www.docin.com/p-1395465408.html.

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

[15] 刘志永,王红凯,李高磊,等.一种基于主机特征的未知恶意程序动态识别系统[J].计算机与现代化,2016(3):105-110.

StatisticsAnalysisandResearchonCommonPermissionsofAndroidMalwares

LI Hong-ling1,ZHAN Yi2

(1.Department of Computer Science and Engineering,School of Information Science and Engineering,Yunnan University,Kunming 650091,China;2.Information Security Evaluation Center of Yunnan Province,Kunming 650000,China)

In order to solve problems including excessive codes,key-permission orientation difficulty and low detection efficiency in Android malware detection,a composite detection solution with static and dynamic analysis is proposed for Android malware monitoring and analyzing.On the basis of synthetic analysis of collected 226 samples and public malware samples,it uses Python language to compile an automatic Android malware permissions statistical program.Besides,15 most common permissions including unfolding network socket and activating broadcast event action while transferring data to external storage device or receiving system are carried on statistical analysis,determination of those key permissions and corresponding call functions which required further attention.Malware CutePuppiesWallpaper.apk,taken as an example,has been decompiled via APKtool and the decompiled Smali file has been obtained.By locating key codes of the malware and locating crucial permission-related API functions the entering and crucial functioning parts of the codes have been efficiently located.Meanwhile,Sandbox Android malware dynamic analysis on events including booting up and application change along with their corresponding activation patterns have been summarized.The time consumption of codes analysis has been reduced by using it and the key codes have been quickly located while spreading of malware is terminated in time.

Android malware program;detection;common permissions;static analysis;dynamic analysis

2016-10-19

2017-02-23 < class="emphasis_bold">网络出版时间

时间:2017-08-01

国家自然科学基金资助项目(61562090);云南大学教育教学改革研究项目

李红灵(1966-),女,副教授,研究方向为计算机网络、信息安全。

http://kns.cnki.net/kcms/detail/61.1450.TP.20170801.1550.030.html

TP309;TP393

A

1673-629X(2017)11-0132-05

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

猜你喜欢

应用程序静态代码
静态随机存储器在轨自检算法
删除Win10中自带的应用程序
创世代码
创世代码
创世代码
创世代码
机床静态及动态分析
具7μA静态电流的2A、70V SEPIC/升压型DC/DC转换器
50t转炉静态控制模型开发及生产实践
关闭应用程序更新提醒