张叶慧,彭新光,蔡志标
(太原理工大学 计算机科学与技术学院,山西 太原030024)
Android作为一款开放的手机操作系统,带给我们便利的同时其安全问题也渐渐凸显。用户可以在Google Play上浏览、下载以及购买各式各样的第三方应用程序,但是Google Play的检测机制并不完善,不能保证第三方应用程序的安全性。
通常,恶意软件会访问一些敏感的权限,一旦用户授权成功,它们就会滥用这些权限在后台进行一些恶意行为,比如发送用户的隐私信息,或者通过发送短信息等方式消耗用户的资费,给用户带来各种危害。针对这些问题,本文提出了一种基于类别以及权限的Android恶意程序检测方法,分析应用程序所要申请的权限来判断该程序是否是恶意的应用程序,从而保护手机用户隐私信息的安全。
Android安全机制包括传统的Linux安全机制,以及Google为Android设计的特有安全机制。Linux安全机制下,Linux内核保证每个应用程序在自己的进程和数据空间内运行,以达到隔离的目的。Android特有的安全机制主要包括:签名机制,组件封装以及基于权限的安全机制。
签名机制:在Android中所有的应用程序必须都是经过数字签名认证的。只有经过数字签名的应用程序才能进行安装,并且只有用同一个证书签名的应用程序才能安装升级的应用程序;
组件封装:Android主要通过组件间的封装来保护应用程序的运行[1]。
权限机制:权限是用来描述是否拥有做某事的权利。默认设置下,Android应用程序都没有干扰其它应用程序、系统或用户的权限,除非应用程序依据要实现的功能,提出申请,要求合理的权限。这样用户就可以通过分析应用程序申请的权限来简单判断该程序是否安全。权限机制会在安装包安装和升级的时候对应用包中的权限信息在基于签名的基础上进行抽取、初始化、检测并授权,建立相应的数据结构[2]。
Android权限大致可以分为3类:①Android手机所有者权限:用户具有的安装使用应用程序的权限。②Android root权限:Android系统的最高权限,可以对系统文件进行任意操作。③Android应用程序权限:应用程序对系统资源的访问权限。
Android应用程序获取权限分两个步骤,首先在AndroidManifest.xml文件中设置相应的标签和属性来申请自己想要的权限,然后在应用程序安装时,用户授予应用程序申请的权限。权限的授予只在应用程序安装时发生,而且是一次性授予,用户一旦授予成功,在应用程序的运行期间就不能更改,所有未经申请的权限系统都会拒绝。系统内置100多种可供应用程序申请的权限。
AndroidManifest.xml文件中与权限相关的标签有<uses-permission>、<permission>、<permission-group>等。其中,<permission>标签是用于声明自定义权限的,<uses-permission>标签则是用来声明应用程序申请的系统权限,这部分权限是本文中主要用到的权限。
近年来,Android恶意程序检测方法层出不穷,2010年,Enck利用跟踪的技术,将敏感数据标记出来,通过跟踪数据的流向,根据预先定义好的规则,来判断该程序是否是恶意程序,是否要给该程序使用这些数据,但是用户必须要修改系统才能应用这个机制[3]。2011年Shahzad通过分析应用程序在执行期间所占用的几个主要的系统资源来判断该软件是否为恶意软件,但是主要依据还是Linux的恶意程序资料库[4]。2011年Igor采用了一种分类学习的方法来检测恶意软件。文章使用一个已标记的恶意的或是正常的应用程序和未标记的程序集合来建立不同的机器学习分类器[5]。也有不少文章通过分析程序使用权限来判定程序的安全性。Barrera发表了一篇研究权限分布的文章,论文中展示了各种权限分布的不规则性,指出大多数的权限只会出现在特定的几个类别中[6]。Nauman提出了通过修改系统,安装应用程序时,用户可以动态选择是否要开放权限以降低恶意程序带来的危害[7]。Batyuk设计了一个网站,用户可以上传应用程序,通过反编译获得应用程序所使用的API调用以及权限列表,并将其反馈给用户,让用户判断是否安装该应用程序[8]。
以上方法虽然有的从不同方面对应用程序的权限进行了分析,但是并没有以类别和权限为依据进行研究。某一个特定类别的应用程序所实现的功能相似,因此要访问的权限类似,文章就利用这一点先将应用程序进行分类,再对该程序要访问的权限进行分析研究,根据该程序所属的类别给用户提供建议。
权限安全模型是Android设备最重要的安全防护措施之一,它可以限制访问特殊资源,也就是说,可以限制某些恶意行为。如果一个应用程序想要完成一些特定的功能,就必须访问相应的权限,所以一个应用程序的权限列表反映了程序的功能以及行为。Google Play把应用程序分为26个类别,同一个类别的应用程序它所实现的功能相近,因此认为所需要的权限也相似,依照这个结论,提出了一种基于类别以及权限的Android恶意应用程序检测方法,方法的流程如图1所示。
图1 检测流程
依据Google Play,将所有的应用程序分为26个类别,每个类别搜集足够多的应用程序,利用Android资源打包工具 (android asset packaging tool,aapt)提取搜 集程序AndroidManifest.xml文件中的权限列表。aapt.exe在SDK的platform-tools目录下,也可以用来查看、添加、删除压缩包里的内容。使用aapt dump permissions ABC.apk,作用是提取ABC.apk文件中的权限列表。再将所有应用程序的权限使用情况统计到一个excel文件中,其中每一行代表一个应用程序权限使用情况,格式如下:(p1,p2,p3,…,p126,S127,name),p1-p126是统计的 Android126个权限,该应用程序使用的记为1,未使用的记为0,S127记录该应用程序所使用的权限总数,name是应用程序的名称。所有这些记录就构成了该类别权限使用集。
选取Google Play中所有的类别作为依据来建立资料库,总共搜集了1027个不同的Android应用程序。为了给能给它们正确的分类,并没有改动应用程序原来的名称,通过获取应用程序的权限列表以及统计用到的权限总数,最终获得了应用程序的权限集合。要想每个类别程序的权限呈现一定的规律性,就必须选择足够数量的程序,一旦要搜集的应用程序的个数定了,就从对应类别中随机选择应用程序。每个类别所搜集的程序个数见表1。
表1 不同种类搜集应用程序数
这里统计了126个不同的权限。把每个程序看作一个向量,每个向量有126个选项来代表有无对应项的权限,然后生成一个.csv格式的文件。收集到的天气类以及保健与健身类的应用程序的权限分布情况如图2和图3所示。图中横轴代表对应的权限,顺序是权限按照字母的顺序排列,比如图2代表android.permission.ACCESS_COARSE_LOCATION,53则代表android.permission.INTERNET。
提取不同类别各个应用程序的使用权限,并统计权限在该类别的使用频率,根据使用频率给不同权限赋予不同的权值,这里认为使用频率越大,在该类别的应用程序中出现该权限越合理,设置权值越小。
图2 天气类权限分布
图3 保健与健身类权限分布
定义R(pi,c):权限pi在该类别c出现的频率;W(pi,c):权限pi在类别c中的权值;T(c):类别恶意阈值;T(a):应用程序恶意值。其中
权限的使用率越高,则该类别其它程序使用该权限就越安全,恶意影响就越小。由式 (1)也可以看出权限的使用频率越高,则其权值越小,反之越大。由式 (2)根据这些权限在该类别的权值计算该类别的恶意阈值,以便进行比较。由于不同类别的权限使用率不同,因此对应的权限权值也不同,计算出的恶意阈值也不相同。
用户安装应用程序时,必须选择该应用程序所属的类别,这里利用数据挖掘的方法,根据搜集到不同类别的权限使用情况,建立不同类别间的判断准则,从而帮助用户判断应用程序所属类别。使用支持向量机 (support vector machine,SVM)的一种序列最小优化算法进行判定。序列最小优化算法是一种用于解决支持向量机训练过程中所产生优化问题的算法。简单描述该算法要解决的问题就是用分类超平面将空间中的两类样本正确分离,并取得最大边缘。实验中给多于两个类进行分类时,依然是每两个类都会两两比较,并正确分离。假设有数据集为: (p1,C1),…,(pn,Cn),要将其分为两类,其中pi是代表应用程序的权限的情况 (例如p1= (1,0,1,0)代表app1使用了第1个以及第3个权限),Ci∈{-1,1}是类别标签,只允许取两个值。1代表一类,-1代表另一类。而且,两类之间的距离越大越好。距离越大,代表分类越明确,证明分类越成功。分类完成后天气、通讯、游戏以及健康与保健四类的分类结果的精确率,召回率,以及ROC(receiver operating characteristic)曲线下面积值 AUC (area under the ROC curve)见表2。
表2 分类结果
Borja发表了一篇基于权限的恶意软件检测的文章中,论文没有将应用程序进行分类,只是根据应用程序的权限使用情况判定程序是否是恶意程序[9]。论文中使用SMO算法分类器分类后的结果见表3。
表3 SMO算法恶意程序检测结果
应用程序分类完成后,利用aapt命令提取应用程序的访问权限,生成对应向量。利用式 (3)按照该类别对应权限的权值,计算该应用程序的恶意值。再将恶意值与该类别的恶意阈值做比较,若小于或等于恶意阈值,认为该应用程序是安全的,建议用户可以安装。否则,提醒用户该应用程序可能会有异常,通知用户,让用户来选择是否进行安装。
实验以类别和权限使用情况为依据对应用程序进行分析,所以验证包括两方面的内容。一是恶意应用程序的检测,二是正常的应用程序在不同类别中的验证结果。实验搜集了37个不同种类的Android恶意应用程序做测试,发现了34个可以检测被认为是恶意应用程序。表4所示为一个未被感染病毒的正常的onchat.apk应用程序,按照Google Play的分类,应该将其归为通讯类,但是如果将其看作是摄影类或是工具类或是游戏类的进行验证,计算其恶意值,就会发现该恶意值要大于该类的恶意阈值,从而被判定为恶意应用程序。所以该方法中应用程序所属的类别是判定该应用程序是否有恶意的一个重要依据。
表4 onchat.apk检测结果
本文通过对Android安全机制的研究,提出了一种新的基于类别以及权限使用情况的Android恶意程序检测方法。不同类别建立不同的数据集,在此基础上进行权限分析,大大提高了分析的准确度。本文在解决实用问题的同时也是对以类别和权限为依据进行恶意应用程序检测领域进行的尝试。下一步将继续搜集应用程序以扩大数据集,在数据集扩大的基础上再提出更加优化的检测方法,以提高检测的准确率。
[1]Enck W,OngTang M,McDaniel P.Understanding Android security [J].IEEE Security and Privacy,2009,7 (1):50-57.
[2]Felt A P,Greenwood K,Wagner D.The effectiveness of application permission [C]//Proceedings of the 2nd USENIX Conference on Web Application Development.USA:USENIX Association,2011:7-7.
[3]Enck W,Gilbert P,Chun B,et al.An information-flow tracking system for realtime privacy monitoring on smartphones[C]//Proceedings of the 9th USENIX Conference on Operating Systems Design and Implementation.USA:USENIX Association,2010:255-270.
[4]Shahzad F,Bhatti S,Shahzad M,et al.Inexecution malware detection using task structures of Linux processes [C]//USA:Proceedings of the IEEE International Conference on Communication,2011:1-6.
[5]Santos I,Laorden C,Bringas P G.Collective Classification for unknown malware detection [C]//USA:SECRYPT,2011:251-256.
[6]Barrera D,Kayacik H G,Van Oorschot P C,et al.A methodology for empirical analysis of permission-based security models and its application to android [C]//Proceedings of the 17th ACM Conference on Computer and Communications Security.USA:ACM,2010:73-84.
[7]Nauman M,Khan S,Zhang X.Extending android permission model and enforcement with user defined runtime constraints [C]//Proceedings of the 5th ACM Symposium on Information,Computer and Communications Security.USA:ACM,2010:328-332.
[8]Batyuk L,Herpich M,Camtepe S A,et al.Using static analysis for automatic assessment and mitigation of unwanted and malicious activities within Android applications [C]//Malicious and Unwanted Software (MALWARE),USA:IEEE,2011:66-72.
[9]Sanz B,Santos I,Laorden C,et al.Permission usage to detect Malware in android [C]//International Joint Conference CISIS’12-ICEUTE’12-SOCO’12Special Seesions,2013:289-298.