徐永盛 纪跃波
(集美大学机械与能源工程学院 福建 厦门 361000)
Android系统是由谷歌公司所开发的移动端操作系统,该系统基于Linux内核,由谷歌公司对其开源,授予开放手机联盟中的手机制造商免费使用。自谷歌公司2008年9月发布第一版Android系统以来,截止2018年9月,Android系统市场占有率达到了85.7%[1],远高于ios系统市场份额。由于Android系统的开放性,谷歌公司允许手机制造商在Android系统下进行个性化的定制开发,得到了手机厂商的青睐,Android系统得到了迅速的发展壮大。
随着移动互联的不断发展,人们的衣食住行都离不开智能手机的身影,智能手机成了人们重要的私密物品。Android系统具有较高的市场占有率和系统开源性,一旦人们安装了恶性应用,不法分子就会通过应用获取人们的隐私或者控制手机进行恶意消费、勒索等不法行为。Android手机的安全性日益突出,根据2018年手机安全报告[2],360互联网安全中心上半年累计截获安卓平台新增恶意程序样本283.1万个,其中,新增手机勒索软件127 455个,1月-7月截获新增手机挖矿木马4 806个。可见,Android终端存在很大的安全隐患。
由于Android系统的特性,Android终端的安全隐患主要来自于其系统权限粗粒度的授予机制。Android应用在进行各种风险性活动时都离不开权限的获取。本文根据Android应用的权限特征,提出了基于权限特征的一种Android应用风险评估策略,该策略基于本文提出的权限树定义,计算Android应用权限风险值,通过AHP层次分析法对权限风险值进行校正,得到更精确的应用风险评估,进行应用安装时的指导。
由于手机作为人们比较私密且贵重的设备,存有人们许多重要且私密的数据。设计者在Android系统中为了保护隐私数据不被随意读取及平台资源的安全合法使用,对平台上的大部分资源设置了权限标签,当应用需要使用某一资源时必须在清单文件中进行申请才可使用,若不申请就使用该资源,应用将报错崩溃。例如一个应用需要调用相机进行拍照,就必须在清单文件中申请CAMERA权限。Android系统设置的权限标签多达140多个。Android系统将权限等级分为三种,分别为normal、dangerous、signature。其中normal表示正常权限,在应用中申请即可使用,无需用户同意,一般不会造成安全隐患。dangerous表示危险权限,危险权限与人们的隐私及设备安全密切相关,在应用申请后必须经过用户手动授予才可正常使用。危险权限分为九个危险权限组,所有危险权限属于九个危险权限组中。signature权限表示系统级权限,第三方应用无法使用该类权限,即使申请了,由于非系统应用,也无法使用。
危险权限涉及到了系统中的敏感资源,相对于ios的权限机制,Android系统对危险权限管理为粗粒度的。当某一危险权限被授予,其所属的危险权限组中其他危险权限也将被自动授予,系统不再通知用户。因此,对于危险权限的授予容易造成安全隐患。
权限机制是Android系统安全模型的第一道防线,保证了应用访问系统资源及跨进程间的通信。目前对于Android应用的检测主要分为三类:静态检测、动态检测、动静态结合检测。静态检测[3]是对应用中的权限、相关API的调用进行分析。动态检测[4]是对应用在运行过程中通过Zygote注入系统级进程,对应用在调用危险API时进行监控,XPosed框架正是利用了该原理。动静态结合检测是将两者相结合,使得检测准确率更高,但该方法效率较低,特征提取难度较大。
由于Android权限机制是应用正常运行的保证,对于权限机制的研究越来越受到研究人员的关注。文献[5]提出了计算恶意权限组合下的恶意值,并通过与实验计算得出的恶意阈值比较来判断应用是否为恶意应用。文献[6]提出了自定义权限漏洞所带来的风险,恶意软件开发者可以通过该漏洞绕过用户授予界面访问其他应用组件。文献[7]设计了一个Androdect检测工具,采用了一种三层混合系统算法THEA,结合了动静态分析提取有效的特征对Android应用进行检测,检测准确率较高,但该方法在检测过程中需要经常进行人工干预且检测效率不高,对加壳的恶意应用容易出现特征提取失败。文献[8]提出了一种权限挖掘算法来提取恶意应用特征,以此来检测其他应用是否为恶意应用。文献[9]基于FP-Growth算法设计了权限频繁项集挖掘算法,对样本应用提取权限特征得到最大权限频繁项集,利用恶意应用检测得到的阈值来判定应用是否为恶意应用。文献[10]提出了基于权限的Android平台恶意应用检测方法,该方法利用PCA算法提取权限特征,并应用SVM(支持向量机)来判定良性与恶性应用。文献[11]利用轻量级应用检测工具Kirin,提出了基于恶意权限组合的一组权限策略。相比于文献[12]中对于单个权限出现的概率计算权限风险,本文对恶意权限组合以及自定义权限的风险性进行更全面的评估。
对Android应用权限研究发现,由于应用所属类别的不同,所要申请的权限也有很大不同。例如对于聊天通信类软件,申请INTERNET、CAMERA权限是必要的,对于BLOOTH蓝牙权限则是不必要的。对于地图定位类软件,ACCESS_FINE_LOCATION定位权限则是必须的,READ_CONTACTS访问联系人权限则是完全不必要的。即使对于危险权限的申请使用,不同类别的应用也会有很大不同,因此对于系统权限风险评估必须根据应用类别进行相应的评估。为了使得评估准确,本文对每个类别的应用分别构建权限集合τ,集合τ中所包含的权限为该类别所有样本应用申请的所有权限。即:τ={c1,c2,…,cm},其中c1、c2、…、cm为样本集中应用申请的权限。
定义1权限申请率P(ci):在权限集合τ中,某一权限ci中出现的频率:
(1)
式中:N为样本集中某一类别应用总数,nci为权限ci在N中的频数。
定义2权限树T:将权限集合τ中的所有权限组成一个权限集合,称为权限树集合,用T表示。权限树由三个集合构成,分别为安全树、风险树和危险树集合,同一种权限在不同类别应用映射的所属的权限树集合不一定相同,每一种权限树其对应的风险值Ra。
定义3安全树Ts:对于某一类别应用,若某一权限ci是完全必要的,即该权限属于安全树集合,安全树的风险权值Ra定义为1。表达式为:
IfP(ci)≥0.68 thenci∈Ts
定义4风险树Tr:对于某一类别应用,若某一权限ci是非必要的,即该权限属于风险树集合,风险树的风险权值Ra定义为3。表达式为:
IfP(ci)<0.68&&ci∉危险权限组thenci∈Tr
定义5危险树Td:对于某一类别应用,若某一权限ci是完全不必要的,即该权限属于危险树集合,危险树的风险权值Ra定义为5。表达式为:
IfP(ci)<0.68&&ci∈危险权限组thenci∈Td
单一权限所带来的风险值Wi如下:
(2)
式中:Ra代表权限风险权值。
因此,对于某一测试应用,其所申请的系统权限的风险值Ws如下:
(3)
式中:Rs代表系统权限在应用风险评估中权重。
本文对Android恶意样本提取权限特征分析发现,大部分恶意样本往往是通过其危险的权限组合来进行恶意行为,如隐私泄露、恶意广告植入、勒索诈骗等。通过对恶意应用中权限组合分析,本文从中提取了24组带有恶意行为的权限组合,分别归为4类恶意行为,将24组恶意权限组构建成恶意权限组集合,如表1所示。
表1 恶意行为权限组合
由于恶意权限组所带来的风险更大,通过表1所列的权限组,恶意应用能轻松实施恶意行为或泄露用户隐私,造成巨大损失。本文定义单个恶意权限组合的风险值Ra=20,恶意权限组的风险值计算如下:
(4)
式中:Wg代表恶意权限组合风险评估值,λg代表恶意权限组合在应用风险评估中权重。
Android系统中除了本身权限集,还允许第三方应用自定义权限,通过自定义权限,第三方应用可以允许或限制其他应用对该应用程序组件的访问及通信。以往对于应用风险评估都仅仅对系统权限特征进行,忽略自定义权限。然而除了系统权限,自定义权限也容易造成巨大安全隐患,文献[6]发现可以利用自定义权限漏洞实施组件攻击,在一些重要应用软件如:社交、购物、地图类中已经广泛使用。Android系统通过构建权限模型,使得Android应用能够访问系统中的硬件和软件资源。同样的,应用之间也会产生数据通信、组件访问的需求,例如可以通过微信来打开京东购物等动作,因此Android系统允许开发者自定义权限,实现与其他应用之间的通信访问。Android系统中对自定义权限同样分为四种保护等级,分别为:Normal、Dangerous、Signature和SignatureorSystem。本文对爬取的部分应用进行自定义权限提取分析,发现约有78.6%的应用定义了自定义权限,其中32.5%的自定义权限保护等级为Normal,即其他应用只要申请了就可以使用。本文得到的自定义权限分布情况如表2所示。
表2 自定义权限保护等级分布表
由表2可知:大部分应用程序自定义权限的保护等级为Normal和Signature。Normal权限只要其他应用申请就可以使用,在安装时系统不会通知用户,自动授予该应用权限。Signature权限则要求两个应用拥有相同私钥签名即可自动授予权限无需用户同意。因此自定义权限可以轻松绕过用户授权页面,获取危险权限,存在较大的安全隐患。在Android系统中,每个应用都有一个独立的进程,互不影响,进程之间可以以IPC的方式进行数据共享,其中四大组件中的Activity、Service、Receiver都支持在intent中通过bundle传递数据。在自定义权限中容易出现两类安全隐患:
(1) 对于自定义权限保护等级为Normal的应用,一旦被不法分子对其反编译获取其自定义权限名,就可以在其恶意应用中申请该权限,进而对该应用组件进行访问,实施入侵。
(2) 由于Android系统不允许在同一物理设备上两个应用定义的权限名称相同,因此要完成攻击,开发者需要开发两个应用,其中一个应用使用自定义权限,另外一个应用程序只需申请该权限,由于两个应用为同一开发者开发,私钥签名一致,通过intent传递隐私数据,就可以完成攻击窃取用户隐私。
自定义权限的风险必须考虑在内,才可以更精确地评估应用的风险性。由于大部分应用自定义权限等级为Normal和Signature,本文仅对该两种等级自定义权限做风险计算。编写Python脚本提取应用的自定义权限,构建自定义权限集合,本文根据权限树中对应的保护等级设置一致的自定义权限风险值。风险性与权限树中的风险性认为一致,由于Nromal等级的自定义权限风险高于Signature,定义Normal风险值Ra=5,定义Signature的风险值Ra=3,则自定义权限风险值的计算如下:
(5)
式中:Wc代表自定义权限权重,λc为自定义权限在应用风险中的评估权重。
国内有许多应用市场提供应用的下载,本文选取了豌豆荚应用市场作为样本的来源。该应用市场对Android应用分类类别多达十四种,本文选取了其中的影音播放、通信社交、新闻阅读、手机美化、摄影图像以及旅游出行六类应用作为实验样本分析。通过编写Python爬虫程序从豌豆荚应用官网爬取了以上六类下载量高、官方评分高的应用200个,选取各类应用150个作为训练集样本,剩余50个用作测试集样本。同时从VirusShare[13]网站下载了1 266个恶意样本,作为恶意样本集。VirusShare是一个恶意样本收集库,其中包含了大量的Android及PC端的恶意样本。
Android应用是以apk结尾的文件,其本质是一个zip文件,将后缀名改为zip后进行解压就可以看见文件结构,图1为解压后的文件。其中AndroidManifest文件为Android应用中的重要文件之一,是全局的配置文件。Android应用申请及自定义的所有权限都必须在Manifest文件中进行申明,因此提取权限特征的工作在Manifest文件中进行。
图1 Android应用解压后文件结构
编写Python程序,提取训练集样本应用申请的所有系统权限,构建权限集τ,对每一种权限计算其P(ci)值,根据权限树的定义,将权限集中的每一种权限映射到对应的权限树中,分别构建安全树、风险树和危险树集合。例如对于影音播放类应用,提取到的权限如图2所示,由于提取出的权限集中含有权限较多,图中只选取了影音播放类应用中申请率为前20的权限。可以看到即使对于部分危险权限,影音播放类应用的申请也是较高的。
图2 影音播放类应用申请的主要权限(前20)
对于系统权限、恶意权限组和自定义权限漏洞所带来的风险评估,本文采用了层次分析法来计算三者的权重值。层次分析法简称AHP方法,是由美国运筹学家匹茨堡大学教授萨蒂于20世纪70年代提出,AHP方法将影响决策目标的因素进行量化分析,来解决多维度复杂因素影响下的决策方法。
利用层次分析法构建评估风险的因素有:系统权限、恶意权限组合和自定义权限。为了确定各个因素之间的权重值,利用一致矩阵法构建判断矩阵,所构建矩阵有其风险值确定,编写MATLAB程序对判断矩阵进行计算,归一化后计算出:系统权限风险权重λs=0.272;恶意权限组风险权重λg=0.545;自定义权限风险权重λc=0.183。对该判断矩阵进行一致性验证,CI=0.010 5<0.1,因此说明该判断矩阵具有满意的一致性。
对样本集应用提取权限特征,构建权限树集合及恶意权限组集合,对剩下的测试集样本进行风险值评估。编写Python脚本,提取测试集样本权限,对应用的风险评估将由以下步骤完成:
Step1提取单个应用申请的系统权限,根据权限所属的权限树,计算系统权限的风险评估值。
Step2提取应用自定义权限,根据自定义权限的保护等级,计算由自定义权限漏洞所带来的风险值。
Step3检测测试集样本申请的系统权限中属于恶意权限组真子集数量,计算由恶意权限组所带来的风险评估值。
由计算得到的三类因素风险评估值相加,计算应用最终的风险评估值,并得出应用的风险级别。图3展示了对应用风险评估的整体流程图。
图3 应用风险评估流程图
本文提出的方法中对样本应用所带来的风险由三个因素构成:应用申请的系统权限所带来的风险,自定义权限漏洞所带来的风险以及恶意权限组所带来的风险,基于以上三个因素计算样本应用的风险评估值。表3为部分样本应用的风险评估情况。从表中可看出,不同类别应用,其申请的权限数量和自定义权限数量并不是影响风险值的主要因素,应用com.hunantv.imgo与应用com.t-encent.qqmusic为同类别应用中,申请的权限数量与自定义权限数量接近时,恶意权限组对风险评估值成为主要因素。而对于应用com.duokan.reader和应用com.huangfang.gro-up,其系统权限数量相同,而风险评估值却不接近,说明了权限数量并不决定其风险值,而是由其综合因素影响。
表3 应用程序风险评估结果
通过对测试集样本应用统计发现,影音播放类应用平均申请的系统权限数量最多,同样地,平均风险值也是最高的。在社交通信类应用中自定义权限数量最多,由此带来的风险值较多。而在手机美化类应用中发现该类应用申请的恶意权限组的频率较高,因此该类应用对Android系统的恶意性概率较大。
Androguard是一个用Python编写的Android应用静态分析工具,该库中androrisk.py模块可以对Android应用进行风险性评估,androapkinfo.py模块可以分析出Android应用中的文件类型、权限、四大组件、是否NDK反射等信息,而androgexf.py模块则甚至可以生成函数调用图,是分析Android应用的强大静态分析工具,因此许多研究人员基于Androguard进行二次开发,很多提供上传检测的网站也是基于该工具进行分析。利用Androrisk.py模块的风险评估与本文提出的风险评估策略对测试集应用进行比较,表4展示了两种方法评估的主要因素及最终风险评估值。表中各列分别为:应用申请的系统权限数量(NSP);应用自定义权限数量(NCP);应用含有的恶意权限组子集数量(NGP),使用Androrisk.py模块得到的风险评估值(RASA);使用本文方法得到的风险评估值(RGC)。
表4 两种风险评估方法比较
从表4实验结果对比可以发现:Andro-irisk.py模块对于应用的风险评估只有大致估计,无法更精确地反映应用的风险值,与其实际风险值有较大误差,而本文提出的方法中对自定义权限和恶意权限组所带来的风险进行了更综合的评估,因此反映的应用风险评估值相比Androrisk.py模块更精确。根据对所有类别的测试集应用结果分析,为了使得用户对评估应用的风险值进一步理解其危险性,本文将应用的风险性分为三个等级。对风险值为[0,30)之间的应用,认为该应用为低风险应用,用户可以安全的安装,对风险值为[30,70)之间的应用,则认为该应用为中风险应用,用户对其权限授予需要谨慎,对风险值为[70,100)之间的应用,则认为该应用为高风险应用,用户需要谨慎下载安装该类应用。
本文对Android应用的权限特征进行提取研究,提出了一种基于权限特征的应用风险评估策略,其中对Android恶意应用及其家族常用权限组研究,提出了具有极度危险的恶意权限组合,并且对自定义权限所带来的风险进行良好评估。该方法对Android应用风险评估相比Androguard工具检测精确值更高,对于众多的Android应用风险评估检测提供了一种行之有效的方法,本文的不足之处对于恶意权限组合还需要进一步分析提取,使得风险评估更精确。