Android恶意软件检测方法综述

2021-09-15 11:20王思远张仰森曾健荣黄改娟
计算机应用与软件 2021年9期
关键词:应用程序特征检测

王思远 张仰森,2 曾健荣 黄改娟

1(北京信息科技大学智能信息处理研究所 北京 100101)

2(国家经济安全预警工程北京实验室 北京 100044)

0 引 言

Android系统是Google公司于2007年发布的基于Linux内核的操作系统。经过11年的优化和升级,截至2018年8月,Google Play的应用程序总数已超过280万[1],是全球最受欢迎及市场占有率最高的移动端操作系统。但与此同时,由于其系统的开源性、自由性等特征,也使得大量的恶意应用乘虚而入。根据相关报告[2],Android系统的恶意应用程序数量于2015年达到峰值,在随后的几年内,恶意应用程序数量虽然有所下降,但总体态势不容乐观。此外关于恶意应用的检测形式依然严峻,因为随着Android版本更新和漏洞的修补,恶意应用的攻击方法也在不断地更新和变化。

当前,应用安全检测已经成为了一个非常热门的研究领域,而且市场上各大安全厂商也推出了各自的安全检测软件,如AVG Antivirus、Lookout Security&Antivirus、Norton Mobile Security和Trend Micro Mobile Security等,但检测结果表明,市场上现有的安全检测软件在恶意应用程序的检测方面效果不佳[3]。同时恶意应用程序的攻击手段也在不断更新,这对恶意应用检测技术提出了更高要求。

在市场发展与学术界的共同推动下,恶意应用检测的研究目前已形成一套较为成熟的理论成果,但学界在这一领域缺乏系统回溯与总结。本文从Android系统安全机制、恶意应用程序、恶意应用程序检测方法等方面对恶意应用程序检测进行分析,列举总结了当前主流厂商的安全软件技术,并在此基础上提出当前研究的不足和今后发展方向。

1 Android系统的安全机制

Android系统是基于Linux内核实现的,同时在Linux原有的安全机制基础上结合移动端的特性,设计了应用程序签名机制、权限机制、进程沙箱隔离机制等安全机制,保证了应用程序在发布、安装和运行过程中的安全[4]。

1.1 应用程序签名机制

Android应用程序签名机制是指在应用程序发布时,开发者对应用进行签名和在安装应用程序时系统通过签名对应用进行验证的机制。签名机制有如下作用:(1) 应用程序在未安装时,通过数字签名实现对程序的版本控制;(2) 应用程序开发者使用私钥对应用程序进行签名,Android系统使用公钥对应用程序进行验证溯源,与程序开发者建立信任关系;(3) 数字签名还可以对应用程序安装包的完整性进行验证,保证其安全。

应用程序签名机制有两个版本的可选择方案,如图1所示。当对应用程序进行签名时,V1版本对安装包压缩文件的非目录和非过滤文件进行签名,而V2版本则在V1版本基础上对应用程序安装包文件整体进行签名。当对应用程序进行验证时,V1版本需要解压安装包,然后对每个文件进行验证,而V2版本直接对安装包压缩文件整体进行验证,这种验证方式防止了安装包文件被篡改,同时加快了签名验证速度。应用程序签名机制,实现了对应用重打包、应用篡改等恶意行为的检测和恶意应用的过滤。

图1 Android签名机制

1.2 权限机制

权限机制是指应用程序向系统申请该应用所需服务的权限,并根据获取的权限运行服务的机制。权限即定义一个对象是否具有使用系统某个服务的能力,权限的定义信息包括包名、标签、描述和保护级别。在Android特有的进程沙箱隔离机制下,应用程序只可访问当前UID下的系统资源和全局可访问资源,当需要使用其他系统资源时,需要根据资源的安全级别说明(如表1所示),进行相应的申请操作。

表1 Android权限级别

在Android 6.0之前的版本,系统对应用程序的权限授权结果只有两种为永久授权和不授权,这种权限机制称为粗粒度的权限管理,这就使得一些恶意应用程序有了可乘之机。在Android 6.0版本之后,系统对安全级别为dangerous的服务进行授权时,应用程序必须在运行状态并且需要用户授权同意,才可以获得授权,这种方式做到了细粒度的权限管理,加强了用户对应用权限的可控性,提高了系统的安全系数。

1.3 进程沙箱隔离机制

进程沙箱隔离机制则是应用程序运行在系统为其开辟的独立Dalvik虚拟机中,拥有独立的运行空间和系统资源空间,保证应用程序间独立和系统安全的机制。Android系统将Linux系统的用户隔离机制转化为应用程序的隔离机制,并在此基础上提出了进程沙箱隔离机制,其结构如图2所示。应用程序在安装时,被系统赋予了唯一的用户标识码UID,在程序存续期间保持不变。程序在Dalvik虚拟机上运行期间,系统对同一UID下的资源进行唯一标识,使得应用程序各自的资源互不干扰,进而使得各个应用程序的资源都得到安全隔离和保护。在多个应用程序间需要共享资源时,Android系统提供了以下几种资源共享方式:① 完全暴露(资源对系统所有应用程序完全共享);② 权限提示暴露(当其他应用需要请求资源文件时,通过向用户请求,实现资源的共享);③ 私有暴露(通过设置不同应用的共享UID,实现共享UID下应用程序资源的共享如图3所示)。

图2 Android应用程序沙箱机制

图3 Android应用程序共享UID

这种安全机制既能保证应用运行空间的独立性,又能满足资源共享的需求。在发现恶意软件之后,可以通过隔离其所在的虚拟机,以保证系统其他应用程序的安全。

2 Android恶意应用检测

2.1 Android恶意应用程序

Android恶意应用程序种类变换多样,有很多分类方法。一种是按照传统进行分类,卿斯汉[7]认为可以分为木马类、病毒类、后门类、僵尸类、间谍软件类、恐吓软件类、勒索软件类、广告软件类和跟踪软件类等。另一种是按照恶意软件特征进行分类,Zhou等[5]认为可以分为恶意软件安装、恶意软件运行、恶意负载、权限使用等;同样地按照恶意软件特征进行分类,Li等[9]认为可以分为恶意扣费类、资源消耗类、诈骗误导类和系统破坏类等。而一种新颖的分类方法是从恶意应用包含的恶意内容和恶意行为两个角度进行分类[5-8]。该方法中包含恶意内容的应用程序是应用程序自身对移动终端设备无任何安全隐患,其带来的危害主要是由应用程序传播的内容或后台人员行为导致的,如通过伪造正规网站对用户实施诈骗的应用程序、传播淫秽色情视频的应用程序等;而包含恶意行为的应用程序主要指应用程序通过恶意代码或者恶意行为对用户或移动设备产生危害的应用程序。

通过对恶意应用的攻击方法进行分析总结,典型的恶意应用攻击方法包括重打包攻击、提权攻击、其他攻击、新型攻击。

2.1.1重打包攻击

重打包攻击指的是反编译第三方应用程序,它将恶意代码植入应用程序,伪造第三方应用的签名,重新打包伪装成第三方应用进行发布。病毒、木马、广告等恶意软件可通过该技术进行传播,对用户造成危害,针对这种攻击方式Android官方通过更新V2版本的签名机制,结合签名密钥轮换机制,防止了恶意应用程序对第三方安装包文件的篡改。

重打包攻击进一步发展后,还出现了更新包攻击,这是将恶意代码的植入方式从静态apk包植入转到应用程序运行时动态植入,绕过了静态检测的安全检查,这对恶意应用检测提出了更高的要求。

2.1.2提权攻击

提权攻击是指恶意应用将普通应用程序的系统服务权限提升,获取到恶意应用需要的权限。攻击手段包括恶意利用Android系统漏洞,通过第三方代理软件获取授权等。由于Android版本碎片化严重,恶意应用程序对不同Android版本采用了不同的攻击手段,而恶意应用安全检测无法及时更新全版本的Android检测方法,所以如果当恶意应用获取到系统最高权限,就可以执行任意权限的操作,这对系统安全构成了极大的威胁。

2.1.3其他攻击

除此之外,恶意应用攻击方法还有资费消耗和隐私泄露等。资费消耗包括话费吸取、流量消耗等恶意消耗用户资费的行为。话费吸取的方式如强行定制特定SP(service provider)服务等,流量消耗则表现为后台静态访问导流网站、广告等恶意行为。

隐私泄露指隐私窃取模块搜集移动端用户通信录、短信、定位数据,同时收集用户访问第三方应用的数据等隐私信息,将用户隐私数据传输到服务器后在黑市进行交易。隐私泄露带来多维的用户危害,如通过对用户多维数据分析进行精确画像实施电子诈骗,通过用户位置、社交、通信等信息对用户精确定位跟踪等行为,对用户安全构成严重危害。

2.1.4新型攻击

随着Android系统的更新和攻击方式变化,市场上也出现了新的恶意攻击方式,包括:利用调试接口传播(当Android系统的ADB调试端口开启时,可用于恶意应用程序的传播,如挖矿蠕虫ADB.Miner恶意应用软件的传播);利用Kotlin编程语言开发恶意应用软件,如远程控制,隐私窃取等恶意软件;通过篡改剪切板内容,达到特定目的,如利用篡改支付宝吱口令赚取赏金,篡改比特币账户地址盗取比特币等新型恶意攻击方法。

2.2 静态的恶意应用检测方法

静态检测方法是指在应用程序不运行的情况下,基于应用程序特征进行系统检测分析[10-11]。静态检测的关键技术点在于如何选择特征和如何分析特征,其中常用的特征包括应用权限、Java代码、意图过滤器、网络地址、字符串和硬件组件等,而分析特征的方法包括差异分析、特征匹配、权限检测、函数检查、类别检测等。静态检测的优点是检测速度快、可以上传安装包文件到服务器端检测等,缺点是无法有效识别利用Android系统漏洞和静态检测对抗技术的恶意应用程序,其中常见的对抗技术有代码混淆、多态变换等。几种常用的静态检测方法包括基于应用程序安装包文件特征的检测、基于应用程序代码分析的检测,以及基于应用程序其他特征分析的检测等。

2.2.1基于应用程序安装包文件特征的恶意应用检测

Android应用程序安装包文件解压缩后如表2所示,对其中非资源文件和非签名文件进行静态检测。

表2 Android安装包文件资源

针对应用程序安装包文件的静态检测,首先对包含其中的签名文件、资源文件、代码文件、清单文件等文件进行特征表征,然后进行相似性比较,判断是否为恶意应用程序。DroidMOSS[12]将应用程序代码片段进行哈希计算得到哈希值,以此作为应用程序特征;通过计算编辑距离进行相似性比较,以此判断是否为恶意应用程序。当应用程序使用无用方法注入、代码混淆等对抗攻击方法时,该检测方法失效。如何实现对使用对抗攻击技术的恶意应用的检测成了最大的问题,为此Zheng等[13]提出了基于应用程序方法/类和API调用序列生成应用程序的三级签名方法,通过应用签名进行相似性比较,该方法虽然可以检测到使用代码混淆等攻击方法的恶意应用,但是检测耗时较长,效率低下。为了在保证检测效果的基础上缩短检测时间,秦中元等[14]提出一种基于多层次签名(API签名、Method签名、Class签名、APK签名等)的检测方法,与恶意应用样本库进行比对,匹配恶意应用程序,虽然该方法检测过程较繁琐,但在保证检测效果的基础上,有效加快了检测速度,缩短了检测时间。

2.2.2基于应用程序代码分析的恶意应用检测

基于应用程序代码分析的检测是将应用程序代码抽象为控制流图、数据流图和程序依赖图,提取特征后通过计算相似性,进而确定是否为恶意应用程序。代码是应用程序的基础,而程序控制流图又是对代码的抽象概括,文献[16-17]提出了一种基于程序三维控制流图实现的检测方法,该方法首先根据控制流图的重心坐标构造恶意应用特征库,然后通过相似性判断,确定是否为恶意应用程序。该方法虽然有较高的检测精确度,但是在特征表示阶段,抽象应用程序的控制流图工作量较大,导致检测效率较低。而且重心坐标计算的精确性会直接影响检测精度,所以当恶意应用使用代码混淆技术时会导致检测失效。为了解决代码混淆技术带来的影响,Tian等[18]提出了基于应用程序类依赖图和函数调用图的检测方法,该方法对应用程序的用户交互、API调用、权限请求等进行特征表征,然后使用分类器进行分类,实现对恶意应用的检测,降低了对程序代码的依赖。由于该方法对应用程序进行了全面的特征表征,故导致检测效率较低。同样地,Fan等[19]提出了基于敏感API函数子图的检测方法,该方法对敏感API函数子图进行特征表征,然后使用随机森林、决策树等方法进行分类完成检测。该方法降低了对代码特征的依赖,可以抵御典型的混淆攻击技术,但无法检测使用加密攻击方法的恶意应用。由于提取代码深层语义信息,可以有效降低代码形式变化带来的影响,汪润等[15]提出了一种基于程序依赖图的语义信息的检测方法,通过计算应用程序间的Jaccard距离进行相似性比较,实现粗分类,然后基于程序依赖图的语义信息进行细粒度分类比较。该方法可以有效抵御常见的混淆攻击,但会存在一定的漏报和误报现象。

2.2.3基于应用程序其他特征分析的恶意应用检测

基于应用程序其他特征分析的检测,首先是将应用程序的UI界面、多媒体文件、APP名称、图标等做特征表示,然后在进行相似度计算,进而确定是否为恶意应用程序。根据应用布局特征,Sun等[20]首先用程序的布局文件得到视图的层次结构,接着计算布局间的编辑距离和哈希值,通过和样本库对比,最终实现恶意应用的检测。同样地,Lyu等[21]基于应用布局文件,得到应用的全局层次结构,然后计算哈希值,进行相似性对比,最终实现恶意应用的检测。根据应用界面特征,Chen等[17]先定位应用Activity界面和Dialog界面,进而得到应用的界面跳转关系图,然后通过计算图重心坐标相似性实现恶意应用检测。该方法有较快的检测速度,可用于大规模的恶意应用检测。将界面特征和代码特征结合,可以兼顾检测速度和精度,所以汪润等[22]提出基于应用UI和程序依赖图的两级恶意应用检测方法,使用UI结构进行快速相似性检测,通过程序依赖图特征做相似性对比,该方法在检测速度和准确度上均有较好表现。

2.3 动态的恶意应用检测方法

动态检测方法是指在应用程序运行时,通过收集系统信息构建特征库,之后进行相似度比较,实现对恶意应用检测的方法。动态检测可以分为两大类,一类是基于应用行为分析进行检测,另一类是基于污点跟踪追踪进行检测。动态检测的难点在于选取特征和实现对应用功能的全面检测,其中特征的选取从系统调用、API调用、资源访问、网络特征等[23]方面进行,而如何提高应用程序功能检测的覆盖率(代码覆盖率)仍没有一个最好的解决方案。

2.3.1基于应用行为分析的恶意应用检测

动态检测只在应用运行时进行检测,无法做到对应用全部功能进行测试,Wong等[24]提出IntelliDroid应用输入生成器,可以自主配置,然后生成特定的应用功能触发行为,解决了动态检测只能检测应用程序动态运行时产生的恶意行为的问题,可以尽可能多地对应用程序功能进行检测。

对应用功能的检测,可以通过检测对系统服务的调用实现,CopperDroid[25]结合系统调用和Binder通信行为数据,可以重建出恶意应用的高级语义行为,它包括应用系统内核行为和Android应用的特定行为,可以用来准确地描述应用程序功能。该方法不需要修改Android操作系统即可实现以上功能,但只能对应用程序进行离线分析,而不能在终端实时分析[29]。

应用运行时,非系统调用信息同样可以对应用进行特征刻画,Gianazza等[26]提出PuppetDroid恶意应用检测系统,通过搜集用户与应用程序间的实时交互行为,刻画出了恶意应用程序特征,以此进行恶意应用的检测。同样地,Shabtai等[27]提出Andromaly检测系统,搜集应用运行信息作为应用程序的特征,如CPU、内存消耗、进程状态等,训练一个有监督的分类器实现对恶意应用的快速检测。Saracino等[28]提出MADAM检测系统,从内核层面、APP层面、用户层面和应用层面对应用程序进行特征表征,特征融合对应用程序关联分析,实现恶意应用的检测。

通过上述分析可以看出,现有的动态检测方法无法同时对操作系统与应用程序、应用程序内部进行表征[30],应用程序的输入生成也停留在UI触发层面,还不能全面地表征应用程序。

2.3.2基于污点跟踪的恶意应用检测

对于应用数据的特征提取,无法做到对应用功能全流程的刻画,针对这一问题,Enck等[31]提出基于污点跟踪的TaintDroid恶意应用检测系统,通过修改Android操作系统,能够动态跟踪恶意应用的数据流和系统调用。TaintDroid实现四个层面的追踪:变量级,方法级,信息级和文件级,但是TaintDroid无法实现应用程序控制流的跟踪和信息流泄露的检测。在此基础上,Zhang等[32]开发了VetDroid检测系统,基于应用对敏感行为、权限和资源的调用,构造出了应用程序的隐私数据权限使用图,重建了细粒度的应用行为,用于恶意应用的检测。

将多种动态检测特征结合,Lindorfer等[33]提出的AppsPlayground检测系统,综合了污点分析、API监控、系统调用监控等多种动态分析方法,对应用程序进行检测分析,对隐私泄露和恶意应用行为的检测效果较好。可以看出,现有的污点分析技术只能针对数据流和系统调用的追踪,对于控制流和本地代码无法进行有效跟踪[34]。

2.4 基于网络流量的恶意应用检测方法

基于网络流量数据的检测是指,检测系统首先对网络数据进行特征提取,通过相似性计算,最终实现对恶意应用的检测。移动端的恶意应用程序,大都通过网络数据传输实现对恶意行为的控制,Zhou等[3]指出,90%以上的恶意软件通过僵尸网络的网络数据传输控制恶意行为,所以在网络流量数据中,可以通过特征表征实现恶意应用程序的检测。根据特征提取的途径不同,把基于网络流量的检测分为两大类,一类是基于网络流量数据统计特征进行检测,另一类是基于网络流量数据内容特征进行检测。

2.4.1基于网络流量数据统计特征的恶意应用检测

由于网络流量数据量巨大,无法对全部数据进行特征构建,Gu等[35]基于深度包解析(DPI)技术提出BotHunter检测系统,通过对恶意应用程序产生的网络数据包进行分析,得到恶意应用程序网络流量的特征字符串,通过对特征字符串的匹配实现恶意应用检测。基于网络异常数据,识别僵尸网络命令与控制通信的行为数据并进行特征表征,同时对网络数据包大小进行统计特征表征,通过聚类方法实现恶意应用的检测,提出BotMiner检测系统[36-37],该系统检测不受网络协议和僵尸网络结构影响,有较好的可扩展性,但是检测精度较低。

对网络数据传输时间特征进行分析,Zhao等[38]基于网络请求间隔时间构建特征集,然后结合机器学习算法实现对恶意应用的检测,但是网络请求时间间隔的影响因素较多,使得该系统的准确率较低,误判率较高。通过分析网络解析协议,Wang等[39]基于DNS解析,匹配恶意域名和IP地址,实现了对僵尸网络的解析。该系统对恶意应用的检测,基于已经构建好的恶意应用请求特征库,所以检测速度快,但无法检测新出现的恶意应用。同样地,Sharifnya等[40]基于DNS流量分析提出DFBotKiller僵尸网络检测系统,通过对可疑群体活动和可疑故障进行特征表征,实现对僵尸网络的识别。流量包数据对应用也有一定的区分度,Arora等[41]基于流量包统计信息,构建了恶意应用特征库,最终了对恶意应用的检测,检测速度较快,但是该系统基于已知恶意应用特征库,无法检测新出现的恶意应用。

加密流量的出现,使得传统网络数据统计方式失效,Taylor等[42]基于TCP和IP报文头部结构数据进行特征表征,提出APPScanner检测系统。系统共提取54种特征,然后通过随机森林算法实现对恶意应用程序的检测,该系统可以对加密流量进行检测。Conti等[43]基于加密流量进行特征统计,构建了应用的加密流量特征库,实现了对恶意应用的识别,该系统不涉及流量内容的识别,可以检测加密流量。对网络协议进行挖掘,Kwon等[44]基于DNS响应时间特征进行恶意应用的检测,实现了对加密流量的检测,同时由于影响DNS响应时间的因素较多,导致该方法会有较大的误报率。

2.4.2基于网络流量数据内容特征的恶意应用检测

网络流量数据的内容和应用程序行为密切相关,Asdroid等[45]基于网络流量内容匹配进行恶意应用检测,通过将UI数据内容和应用程序实际调用操作进行对比,进行恶意应用特征表征,最终实现恶意应用检测。信息的交互是通过网络数据传输实现的,Ren等[46]对HTTP流量文本进行分析,通过对敏感信息、关键字匹配,判断应用是否存在用户隐私泄露等恶意应用行为,但是该方法不适用于检测加密流量。Nan等[47]通过对比应用申明行为和实际行为,构建恶意应用特征库,实现了对恶意应用程序的识别。因为对应用程序的网络行为进行了细粒度的重现,所以检测精度较高。

网络数据传输需要在网络协议下进行,而网络协议中肯定包含网络报文,Zaman等[48]通过对HTTP报文中的URL进行匹配,然后将URL与恶意域名库比对,实现对恶意应用程序的检测。同样地,Wang等[49]分别基于TCP和HTTP报文数据提出了TrafficAV检测系统,由于HTTP报文包含信息较多,使得系统具有较高的检测精度,但是不能检测加密流量,而TCP报文既能保证检测精度又不受加密流量的影响。

因为对流量数据内容的依赖,始终无法对加密流量有好的检测效果,Arora等[50]基于网络层信息特征,通过朴素贝叶斯算法实现恶意应用程序的检测。该方法中的特征选取算法,有效减少了对特征数的依赖,而是选取了报文接收时间间隔、网络传输字节数等信息作为网络层特征,解决了无法对加密流量数据进行检测的问题。

3 主流厂商的Android软件检测技术

当前提供Android软件检测服务的国内外厂商有腾讯、百度、360、Google、LookOut、ZimPerium等。其中腾讯和Google的Android软件检测技术在国内外厂商中又具有代表性,因此本文对这两家公司的Android软件检测技术进行分析和总结。

3.1 Google Play Protect移动端安全服务

Google Play Protect[51]是Google在2017年5月提出的,支持云端和离线两种方式扫描恶意应用的安全服务。Google实现该检测模型的过程如下:(1) 数据集的构建。Google对谷歌应用商店和网页上可以找到的所有应用,进行静态检测和动态检测分析,构建了应用特征数据集;同时收集谷歌应用商店中用户反馈信息、开发人员信息等对识别恶意应用有价值的数据,构建了应用商店数据集。(2) 检测算法的实现。使用了逻辑回归、深度神经网络等机器学习算法,构建了识别特定类别、特定家族等多级恶意应用检测模型,该模型实现了对恶意应用的检测和分类。

Google2018年度大会指出,移动设备从谷歌商店下载应用,导致感染一个或多个恶意应用的概率为0.08%;移动设备从外部来源下载应用,导致感染恶意应用的概率要比前者高出8倍为0.68%。由此可见,Google Play Protect在一定程度上保证了用户免于恶意应用的侵害。但赛门铁克公司研究发现,Google Play中存在之前已被发现的恶意应用,通过更改应用名称而重新发布在Google Play的现象,这表明Google Play Protect的检测仍然需要进一步完善。

3.2 腾讯手机管家移动端安全服务

腾讯手机管家[52]是腾讯公司研发的,支持传统方式和AI云端方式扫描恶意应用的手机安全软件。该软件核心包括两部分:(1) 鹰眼(TAV反病毒引擎),使用传统的静态检测、动态检测方法对应用进行分析检测,同时在云端结合大数据、机器学习和数据挖掘技术,对海量样本数据进行分析处理,使其检测方法具有自学习、抗变形、难对抗的特点。(2) 哈勃文件分析系统,在云端动态分析海量应用样本,找到恶意应用的特征,生成恶意样本库,提供给TAV引擎。

在2018年度AV-Comparatives评测中,腾讯手机管家以“100%检测率”和“零误报”的成绩名列前茅,获得了国内外安全厂商的认可,成为了国内市场占有率较高的手机安全软件。同时,由于国内用户不能访问谷歌应用商店,各大手机厂商如华为、小米、vivo等应用商店有各自不同的安全检测标准,使得恶意应用更容易流入市场,这就对安全软件的检测能力提出了更高的需求。

当前主流安全软件普遍采用动静结合的分析方法和离线加云端的部署方式对恶意应用进行检测,同时结合机器学习方法来应对海量的恶意应用,但仍然无法做到对恶意应用的完全检测。

4 当前研究中存在的问题

4.1 静态检测存在的问题

静态检测是通过构建恶意应用特征库实现检测的方法,特征包括应用程序安装包文件、通过程序代码构建的各类流图、应用图片、媒体文件、界面布局等。但当前特征提取局限于表层信息,欠缺对深层语义信息的提取,同时特征库的更新也不能做到及时全面,导致漏报和误报的现象。

静态检测目前主要有两种运行形式,一种在应用程序安装时运行,因兼顾用户体验,会简化检测流程,从而导致检测效果较差;另一种在云平台远程运行,当用户安装时安装包可能被篡改,导致不能完全保证应用安全。

此外,静态检测无法有效应对恶意应用采用对抗技术的场景,如会出现使用代码混淆、无用代码注入、加密技术、多态变化等攻击技术的恶意应用程序,导致检测效果较差或者失效。

4.2 动态检测存在的问题

(1) 由于动态检测必须在应用程序运行时检测,这样一方面会提高能耗缩短待机时间,另一方面也会占用系统资源导致运行卡顿,因此用户体验较差,难以在用户中大规模部署。

(2) 动态检测在执行有效的代码测试用例时才可以检测应用程序对应的功能项,只有覆盖率高的代码测试用例才能做到对应用的全面检测,但是高覆盖率的代码测试用例是当前需要解决和完善的问题。

(3) 动态检测在生成测试用例时,往往是从应用功能出发,制定相应的调用策略,没有结合应用场景中用户的实际使用经验,导致测试用例的真实性较低,实际检测效果较差。

4.3 基于网络流量检测存在的问题

(1) 基于网络流量检测,通过对恶意应用分析,构建恶意应用网络流量数据库,在应用运行期间进行实时数据采集,通过与特征库比对实现检测。存在特征库更新不及时、系统资源开销较大、无法大规模部署的问题。

(2) 基于网络流量检测,需要采集网络协议报文的特定数据做检测[51],对于加密网络数据,无法提取到相应信息,导致检测效果较差或失效。

5 结 语

Android恶意应用程序检测在经过十多年的技术积淀后,已经取得了非常丰硕的研究成果,但是目前仍然没有一种检测方法可以实现对恶意应用的完全检测,因此针对Android恶意应用程序的检测仍然值得广大学者继续研究。

(1) 加深对代码语义特征的提取。恶意应用检测使用的特征多种多样,但是应用程序代码是构成应用程序的基石,因此对于代码的特征提取仍然是最具价值的。同时,随着混淆技术、多态分布等对抗技术的出现,使得有效代码特征提取更为困难,基于此,在未来的研究中需要继续探索多文件联合提取及基于机器学习、深度学习进行语义信息表征等技术。

(2) 结合多种检测方式进行检测。恶意应用的检测,可以建立多级检测机制,包括静态检测快速初检、动态检测运行时监测、基于网络数据检测云端检测。同时,当前动静结合的检测方法也已经取得了一定成功,而且这种检测方式仍是未来公认的发展方向。

(3) 加大对网络数据特征的挖掘。基于网络数据的检测,一直被认为是静态检测或者动态检测的一个子项研究,本文单独列出进行分析是因为云端检测对于数据特征的提取更全面,云计算和大数据技术的发展使得检测精度更高,释放了用户系统资源,有良好的用户体验,这将会是未来的发展方向。

(4) 构建全面的恶意应用特征库。当前特征库的构建,局限于从应用本身提取,对于应用的衍生数据收集不足,如应用市场中的用户评价、应用程序功能描述等数据,上述数据都可以深入挖掘,对应用做很好的表征。特征库构建如果打破应用自身的局限,会有更好的发展。

猜你喜欢
应用程序特征检测
离散型随机变量的分布列与数字特征
删除Win10中自带的应用程序
抓特征解方程组
不忠诚的四个特征
谷歌禁止加密货币应用程序
必修二 Modules 1—6综合检测题
“整式的加减”检测题
“整式”检测题
三星电子将开设应用程序下载商店
微软软件商店开始接受应用程序