Android恶意应用的静态检测方法综述
2023-08-15潘建文崔展齐林高毅郑丽伟
潘建文 崔展齐 林高毅 陈 翔 郑丽伟
1 (北京信息科技大学计算机学院 北京 100101)
2 (南通大学信息科学技术学院 江苏南通 226019)(panjianwen@bistu.edu.cn)
近年来,随着移动互联网的发展,社交通信、金融证券、游戏娱乐和电子商务等应用全面地从PC转向移动互联网,移动互联网用户和设备数量呈指数级增长.据2021年中国互联网网络安全报告[1]显示,截至2021年12月,我国手机用户规模达10.32亿,我国使用手机上网的用户比例达99.7%.根据国际数据公司(IDC)调查报告[2]显示,2021年Android手机的市场份额占84%,并不断增长.开源的Android系统和多样的应用分发平台在带来巨大的市场份额的同时,也使其成为了恶意应用滋生的温床和传播的主要平台.国家互联网应急中心捕获和通过厂商交换获得的移动恶意应用也主要集中在Android平台,仅在2020年就多达303万个[3].部分Android恶意应用的广泛传播造成了严重后果.例如,2019年出现的零日漏洞Bad Binder被Android恶意应用利用以控制用户设备[4],影响到Android 9及之前的版本,给大量用户带来了巨大经济损失.
因此,如何有效检测Android恶意应用受到了研究人员的广泛关注.根据其是否运行应用程序,将现有的检测技术分为动态检测和静态检测2类,其中,动态检测[5-6]是在真实设备或者模拟器中运行应用,使用测试脚本模拟用户操作,记录应用的运行情况,通过分析应用行为特征,如应用程序编程接口(application programming interface,API)调用、网络流量等特征来检测恶意应用.动态检测的优点是可以克服代码加密、混淆和动态代码加载的障碍,其缺点是在真实设备或模拟器中运行测试脚本时间开销大、难以覆盖应用全部功能,且耗时较长.静态检测则是通过反编译应用提取权限、API和操作码等特征,采用机器学习算法构造分类器以检测Android恶意应用.静态检测不依赖运行环境、代码覆盖率较高,检测效率高于动态检测方法,例如,Drebin[7]检测工具在学术界和工业届受到了广泛应用和高度重视.本文重点对Android恶意应用静态检测方法的已有研究成果进行综述.
本文搜集了2013年至今发表过的关于Android恶意应用静态检测相关论文并进行了梳理.首先,使用“Android(安卓)”组合“malware/malicious(恶意应用)”、“detection(检测)”和“classification(分类)”等关键字,在国内外重要的论文数据库(例如IEEE,ACM,Springer,Elsevier,CNKI)中检索相关论文.由于中国计算机学会(CCF)推荐的期刊和会议影响力较大,具有一定的权威性,我们通过人工筛选的方式,检索出发表在CCF评级为A,B类的国际会议或国际期刊,以及《软件学报》《计算机学报》《计算机研究与发展》等权威中文期刊上的论文.然后,分析论文的标题和摘要,去除与本综述关注问题无关的论文.最终,选择出与本研究问题直接相关的高质量论文89篇,包括国际期刊77篇、中文期刊12篇.其中,TIFS8篇、TDSC6篇、CCS2篇、Computers & Security25篇、《软件学报》3篇、《计算机学报》1篇、《计算机研究与发展》3篇.检索到的论文在不同年份的数量分布如图1所示,可以看出相关论文发表数量持续增长,这表明Android恶意应用检测是近年来的热点研究问题.发表于CCF的A,B类国际期刊和国际会议的论文在不同领域的分布情况如图2所示,本研究问题的论文大多数分布在网络与信息安全领域(46篇).
Fig.2 Field distribution of papers published in international journals and conferences ranked as CCF A and B图2 发表于CCF A,B类国际期刊和会议的论文领域分布
目前,在Android恶意应用静态检测的综述中,已有的工作包括:Samra等人[8]在2019年对Android恶意应用静态检测进行综述,但是仅介绍了基于权限和基于签名的检测方法,对于其他静态特征方法内容略为缺失;Bayazit等人[9]在2020年对传统的机器学习检测Android恶意应用进行了综述,他们考虑的是恶意应用分类,并对动态和静态检测方法进行了介绍;在此之后,有41篇重要论文发表,尤其是基于深度学习的Android恶意应用检测技术取得进一步的发展.
本文主要关注Android恶意应用静态检测方法,首先,介绍了Android应用的静态特征;然后,分别对基于权限、API、基于操作码和其他静态特征的检测方法进行分析和总结,并论述数据集和评价指标;最后,对现有的研究工作总结,并对未来的研究方向进行了展望.
1 Android应用静态特征
APK(Android application package)是一种Android操作系统使用的应用程序包文件格式,用于应用分发和系统安装.Android静态特征提取是根据对Android隐私安全和开发过程的了解,在不运行应用程序情况下分析APK中的文件内容,从中收集和提取各类特征.基于所提取到的静态特征,可采用不同的算法应用于Android恶意应用检测.
常见的提取特征方法包括:采用Androguard[10]等逆向工具直接提取权限、API等部分特征;使用Apktool[11]等工具进行反编译分析,这种提取特征方法所提取到的特征更为全面.如图3所示,Apktool反编译后的文件结构包括Android系统可执行(Dalvik executable,DEX)文件、AndroidManifest.xml文件、res文件夹、META-INF文件夹和lib文件夹.DEX文件是Dalvik[12]和ART虚拟机可执行的字节码文件,可被反编译为Smali或Java文件集合.Smali文件中包含应用程序的全部操作指令以及运行时数据,每个Smali文件包含类,类中包含多个方法,可在其中提取API调用以及由操作码(opcode)和操作数所组成的指令.AndroidManifest.xml是清单配置文件,其包含了Android系统为运行应用程序所需要的参数,如权限、软件包名称、应用组件、应用所需要的硬件和软件功能等信息.res文件夹用于存放资源文件,包括应用执行所需的布局、图像、动画、颜色和界面字符串等.META-INF目录下存放的是签名信息,用来保证APK包的完整性和系统的安全,Android系统要求所有APK必须先使用证书进行数字签名,然后才能安装、更新和分发.lib目录存放应用程序依赖库的so文件.so文件是在Android系统上直接运行的二进制代码,可在应用运行时访问设备实体组件,例如传感器和触摸输入等,是Android的动态链接库.
Fig.3 Decompiling structure of APK图3 APK反编译结构
APK文件中的内容可被提取作为静态特征.根据所使用静态特征类型的不同,衍生出不同的检测方法,本文中将其分为基于权限特征、基于API特征、基于操作码特征和基于其他特征4类Android恶意应用检测方法.本文将在第2~5节中分别对这4类静态检测方法进行详细介绍.
2 基于权限的Android恶意应用检测方法
2.1 简 述
权限机制用于限制Android应用程序访问文件、数据和资源等安全敏感项.为保护用户隐私数据,Google为Android 10版本设置了155个权限,开发人员可根据应用功能的需要向用户申请权限.然而,调查数据表明,大多数用户不够了解应用所需的权限,导致过度授权的情况频发[13].一旦恶意应用申请的敏感权限获得通过,将可能导致用户遭受隐私泄露、恶意扣费和资费消耗等严重后果,侵害用户利益.良性应用和恶意应用所申请的权限在数量、类别和关系上存在一定的差异,这使得基于权限分析检测Android恶意应用具有可行性.基于权限的Android恶意应用检测方法通过清单配置文件AndroidMenifest.xml提取权限特征,然后分析其使用情况或挖掘权限间相关性,以检测恶意应用.由于权限特征数量较少且提取便捷,使得此类方法出现较早,根据使用权限特征的方式不同,本节将其分为基于权限使用情况和基于权限相关性挖掘的Android恶意应用检测方法.
2.2 已有工作分析
2.2.1 基于权限使用情况分析的方法
基于权限使用情况分析的方法先提取权限特征,然后将机器学习方法用于检测Android恶意应用.例如,Sanz等人[14]提出基于权限的方法来检测Android恶意应用,Ilham等人[15]在此基础上采用信息增益、信息增益率和皮尔逊相关系数等方法选择出权限的特征子集,然后分别构建随机森林(random forest)、支持向量机(support vector machine, SVM)和决策树(decision tree)模型检测Android恶意应用.
Intent[16]是包含目标组件地址和数据的消息对象,主要用于Android应用程序内和应用程序间通信,可通过发送Intent消息对象请求应用内的组件或其他应用执行特定操作,还可在操作结束后接收返回的数据.Intent与权限相比语义信息更丰富,因此除单独分析权限使用情况外,研究人员还对权限结合Intent检测Android恶意应用的方法进行了研究.其中,杨宏宇等人[17]采用加权投票方法改进随机森林算法,使用权限和Intent作为特征值检测Android恶意应用.AndroDialysis[18]首先采用Intent作为特征,取得较好的检测效果,然后将权限与Intent特征结合,并使用贝叶斯网络来检测Android恶意应用,进一步提升了检测性能.Idrees等人[19]提出结合权限和Intent的集成学习方法PIndroid,构造了决策表、多层感知机(multilayer perceptron,MLP)和决策树等6种基分类器,并用Boosting,Bagging,Stacking集成学习方法检测Android恶意应用,取得99.8%的准确率.Zhang等人[20]提出基于N-Gram分析和在线增量分类器结合的方法,提取权限、Intent等多种特征用于N-Gram分析,采用被动攻击(passive-aggressive)算法进行增量学习,该框架不仅可以检测恶意应用,还可对恶意应用所属家族进行分类.
2.2.2 基于权限相关性挖掘的方法
Android有多个权限组,每个权限组中含有若干个权限.Android恶意应用进行恶意行为时,通常需要多个权限的协作和配合,因此可挖掘权限组间和权限组内的权限相关性,并将其用来检测恶意应用.例如,为修改接收到的短信,恶意应用需要使用权限组合:接收短信(RECEIVE_SMS)、读取短信(READ_SMS)和写入短信(WRITE_SMS).2014年,Wang等人[21]通过挖掘单个权限或一组协作权限风险的方式来检测恶意应用.该方法首先采用互信息、皮尔逊相关系数和T检验3种特征排序算法对权限进行风险排序;然后使用序列前向选择(sequential forward selection)方法和主成分分析(principal component analysis)方法选择权限子集,挖掘出多个权限间协作的风险;最后构造支持向量机、决策树以及随机森林模型检测恶意应用.
以往大多数研究工作主要关注权限使用情况,而忽视了挖掘权限之间的关系,杨欢等人[22]提出了基于频繁模式挖掘算法PApriori,挖掘恶意应用家族中权限使用的相互依赖关系,通过匹配待检测应用的权限特征来检测Android恶意应用.相似地,Arora等人[23]提出了基于权限对的Android恶意应用检测方法PermPair,首先分别提取恶意应用集和良性应用集的权限对,构建恶意应用权限对图(Malicious-Graph)和良性应用权限对图(Normal-Graph),并根据权限对在不同应用集中出现的频率,对图中每条边分配权重,然后通过比较待检测应用权限对在Malicious-Graph和Normal-Graph中的权重和,确定其是否为恶意应用.该方法在权重计算过程中采用了图边缘优化算法,删除不重要的权限对,有效减少了检测恶意应用的时间消耗.
2.3 已有工作对比和点评
表1对基于权限的方法进行了对比.其中,数据集来源和数量列采用来源(数量)的形式给出了论文使用的良性和恶意应用来源和数量,例如,良性:Google Play(674)表示使用了Google Play数据集中的674个良性应用.从表1可以看出,基于权限相关性挖掘的Android恶意应用检测方法的准确率整体低于基于权限使用情况分析的方法,这主要是由于Android应用中过度和随意申请敏感权限现象极为常见,使得噪声更多,增加了挖掘权限相关性的难度.
Table 1 Comparison of Android Malware Detection Methods Based on Permission表1 基于权限的Android恶意应用检测方法对比
基于权限的Android恶意应用检测方法的优点是权限特征提取方式简单快捷、特征数量较少、检测效率较高,其缺点是恶意应用容易申请和良性应用相同的权限,以伪装成良性应用,导致检测准确率较低、误报率较高.常见的改进方法是将权限特征和其他静态特征结合,以提高Android恶意应用检测的精度.
3 基于API的Android恶意应用检测方法
3.1 简 述
Android API[24]是Android系统提供的函数接口,恶意应用在获得敏感权限后,可能通过API调用访问和获取手机中的短信、通讯录、定位、相机和相册等敏感数据,也可能通过恶意操作执行系统破坏、远程控制和诱骗欺诈等恶意行为,导致用户的隐私和经济安全受到侵害.良性应用和恶意应用在API使用和调用模式上存在差异,因此可通过分析API特征的方式来检测恶意应用.权限特征设置粒度较粗,导致基于权限的Android恶意应用检测方法存在较大的不确定性,而分析API调用情况能更全面细致地理解应用特征.因此,相较于基于权限的方法,基于API的Android恶意应用检测方法取得了更高的准确性和鲁棒性,是目前使用最广泛的一类方法.此类方法通过分析反编译后的Smali文件,提取API调用序列或API调用图,以检测恶意应用.根据所使用API信息和方式的不同,本节将其分为基于API使用情况、基于API调用依赖图和基于API与其他特征结合3类Android恶意应用检测方法.
3.2 已有工作分析
3.2.1 基于API使用情况的方法
API使用情况能在一定程度反映应用的特点.基于API使用情况的方法通过提取和分析应用的API调用序列和关系,并使用各类机器学习算法检测恶意应用,这类方法取得了较好效果.例如,Scalas等人[25]针对勒索应用对Android用户的威胁,提出基于API检测策略的方法R-PackDroid,该方法可用于检测具有勒索行为的恶意应用和其他类别的恶意应用.由于勒索应用攻击严重依赖特定的API来执行其操作,可通过包、类和函数3类粒度的API特征信息进行检测,实验结果表明,基于函数粒度特征的检测方法相比其他2种有更高的准确率.
隐私窃取是恶意应用的典型行为之一,常使用数据流分析和污点分析来检测这类恶意行为.其中,数据流分析方法记录和跟踪敏感数据流路径,包括源点、数据传播路径和交汇点,并分析API在数据流路径上的调用序列,以检测隐私数据是否被泄露.Wu等人[26]提取与数据流相关的API,并根据每个API在恶意应用中的使用情况计算其恶意权重值,在计算出恶意权重值的基础上,使用改进的马氏距离(Mahalanobis distance)方法计算K最邻近(K-nearest neighbor, KNN)分类算法中相邻节点的距离,以提高敏感数据分析的效率和模型的检测精度.随着恶意应用的不断演化,其收集敏感数据的行为更加复杂,仅由源点和交汇点构成的简单信息流难以捕获此类行为.为此,Shen等人[27]通过提取由简单信息流集合所组成的复杂信息流路径上的API序列,使用N-Gram模型生成不同长度的API特征向量,然后使用SVM算法构造模型以检测恶意应用.此外,Dexteroid[28]从Android生命周期函数调用中提取组件的行为特征、事件调用和状态转换,以检测存在信息泄露和发送恶意短信隐患的恶意应用.
污点分析方法能够追踪应用程序中的隐私数据从获取到泄露的整个传播过程.Feng等人[29]提出基于API语义的方法Apposcopy,该方法将静态污点分析和组件间调用图相结合,以检测具有控制流和数据流属性的恶意应用.为提高污点分析效率,张捷等人[30]提出基于污染变量关系图的污点分析方法FastDroid.除了关注污点分析效率外,大量恶意应用采用代码保护技术,导致污点分析技术存在误报率较高的问题.为此,缪小川等人[31]使用敏感路径识别方法分析Android应用的安全性,该方法首先提取组件间函数调用关系图,在图中寻找由敏感行为以及触发该行为的API组成的敏感路径,然后对敏感路径进行特征抽象化,以使用决策树模型检测恶意应用.王蕾等人[32]提出面向Android应用隐私泄露检测的多源污点分析技术可有效区分出分支互斥路径,提升了检测效率,并且降低了多源污点问题计算开销.
也有研究工作关注到用户输入和行为等敏感操作与API调用序列之间存在一定关联关系.2015年,Elish等人[33]使用TriggerMetric元组来表示用户输入和行为触发的敏感API调用特征,TriggerMetric元组包括用户操作、触发器、依赖路径和API调用,可根据应用操作行为的不同区分良性应用和恶意应用.Alam等人[34]提出了基于优势树(dominance tree)的API调用序列挖掘方法DroidDomTree,改进TF-IDF方法为优势树中的节点分配权重,根据权重选择重要的API特征,从而提高了检测效率.
3.2.2 基于API调用依赖图的方法
随着Android版本的升级,以及恶意应用的演化,常使用升级后的API实现相似的恶意功能,导致恶意应用检测模型逐渐老化.面对新出现的恶意应用时检测准确率不断下降,需要定期重新收集数据集再次训练,构建API调用关系图是减缓模型老化的有效方法.为此,Mariconti等人[35]提出了基于行为模型马尔可夫链(Markov chain)的恶意应用检测方法MaMa-Droid,将API调用图抽象成包和类序列以构建马尔可夫链形式的行为模型,以从中提取特征检测恶意应用.实验结果表明,将使用旧数据集训练的模型用于检测1年和2年后出现的新恶意应用时,F1值分别达到了86%和75%.为进一步缓解模型老化问题,Zhang等人[36]提出了APIGraph框架,通过构建API关系图分析API升级前后的语义相似性,以减缓模型老化.首先,采用NLP语义解析不同版本的Android API文档,从中提取API、权限等实体并构建API关系图;然后使用图嵌入方法将图中的实体编码为向量,通过向量之间的差异表示实体间的语义相似性,以将语义相似的实体聚类到不同簇中;最后使用实体簇训练模型以缓解Drebin和MaMaDroid等Android恶意应用检测工具老化速度.相似地,Xu等人[37]提出了SDAC方法,根据现有API的贡献来评估新增API对恶意应用检测模型的贡献,具体为根据API的语义距离对所有API进行聚类,在训练阶段创建一个可扩展的特征集,以通过添加检测阶段新增API特征的方式来适应Android版本差异所带来的API变化,实验结果表明,SDAC的性能相较MaMaDroid取得了明显提升.
为提升检测效率,相关研究使用社交网络分析技术检测Android恶意应用.例如,Wu等人[38]提出了基于图的轻量级检测方法MalScan,将函数调用图视为社交网络,采用社交网络中心性分析获取图的语义特征,相比Drebin和MaMaDroid大幅度提升了检测速度.但是当恶意应用行为与良性应用行为相似时,MalScan会出现漏报,为此Zou等人[39]提出了IntDroid,在社交网络中心性分析的基础上,通过计算社交网络中敏感API和中心节点的平均亲密度来表示图的语义特征,以适当降低扩展性为代价取得了比MalScan更高的准确率.Wu等人[40]将函数调用图中的恶意部分节点仅占一小部分的恶意应用称为隐蔽恶意应用.隐蔽恶意应用的函数调用图中良性部分和恶意部分具有强相关性且所占比例较小,导致IntDroid面对隐蔽恶意应用时检测性能下降.为此,他们提出了基于社交网络同质性分析的方法HomDroid检测隐蔽Android恶意应用,实验结果表明HomDroid检测隐蔽恶意应用性能优于Drebin,MaMaDroid,IntDroid等方法.随着对Android应用研究的深入,恶意应用检测方法取得较大进展,基于API调用依赖图的方法取得了较好的检测性能.然而,研究发现通过扰乱特征向量等方法可生成成功绕过检测的恶意应用.例如,Zhao等人[41]提出了Android恶意应用对抗性攻击的方法,使用强化学习修改对函数调用依赖图,通过插入节点、删除节点、添加边和重写的方式适应程序的操作(插入方法、删除方法、添加调用关系和重写),提高对抗性攻击的有效性.针对精心设计的对抗性攻击可能会绕过恶意应用检测模型的问题,Demontis等人[42]提出了对抗规避攻击的恶意应用检测方法,通过对不同特征分配不同权重的方式来提高模型的鲁棒性.
随着深度学习技术在各个领域取得良好成绩,研究人员也开始尝试使用深度学习检测Android恶意应用[43-44].卷积神经网络(convolutional neural network,CNN)仅能处理欧氏空间数据如图像、文本等,不支持非欧空间数据,如图数据[45].而图数据能够更准确地表达Android应用和API之间调用关系,Gao等人[46]提出使用图卷积神经网络(graph convolutional network,GCN)检测Android恶意应用的方法GDroid,将应用和API映射为异构图,恶意应用检测任务转换为节点分类任务,该方法以应用(APP)、API间的调用关系和API的使用模式构建APP-API和API-API为边的异构图,并将异构图输入图卷积网络模型以检测恶意应用.相似地,Li等人[47]也提出使用图卷积网络检测恶意应用的方法,该方法首先提取API调用序列生成有向循环图,然后使用马尔可夫链和主成分分析法提取图的特征,并基于图卷积网络检测恶意应用.除此之外,AMalNet[48]还采用GCN结合独立循环网络(independently recurrent neural network,IndRNN)的方式检测Android恶意应用.
为了减少对图的分析,提升检测效率,研究人员将API调用图化分为多个子图集合.S3Feature[49]在函数调用图中标记敏感节点形成敏感函数调用图,然后从中挖掘出敏感子图(SSG)及其相邻子图(NSG),最后将SSG和NSG去重后编码为特征向量用于恶意应用检测.Fan等人[50]提出了基于频繁子图的Android恶意应用检测方法FalDroid,通过构建同一家族代表性应用的频繁子图的方式,将敏感API调用关系图划分为子图集合,以减少图分析复杂度,提升检测恶意应用效率.类似地,Lu等人[51]在提取函数调用图后,从图中删除敏感API节点距离大于3的节点以简化函数调用图,构建去噪图卷积神经网络(denoising graph convolutional neural network),提升了恶意应用检测性能.
除了文献[49-51]构建API调用关系图的方法外,研究人员[52]还使用API调用上下文信息来提高检测精度.Allen等人[53]对API调用上下文信息的有效性进行了全面研究,发现API调用的入口点对分类正确性影响较大,并提出了轻量级上下文感知系统PIKADROID,以用于检测恶意应用.Zhang等人[54]提出基于API语义依赖图的方法来检测Android恶意应用,并实现了原型系统DroidSIFT,该方法首先提取上下文加权API依赖图作为程序语义来构造特征集合,然后根据图相似性来检测恶意应用.另外,MKLDroid[55]从应用程序的依赖图中捕获结构和上下文信息,以在依赖图中定位细粒度的恶意代码.
同一家族应用程序具有类似的功能,可通过分析它们共同特征的相似性检测恶意应用.受推荐系统的启发,Frenklach等人[56]提出了利用应用程序相似性图来检测Android恶意应用的方法,在该方法中,应用程序对应被推荐的项目,功能对应用户.该方法首先提取并处理API调用图,从应用程序和功能的二分网络中生成应用相似性图(APP similarity graph,ASG);然后采用Node2Vec图嵌入方法将ASG转为特征向量,以使用随机森林模型检测恶意应用.具有共同特征的恶意应用可能属于同一个恶意应用家族,Karbab等人[57]据此在Cypider[58]的基础上提出基于应用程序相似性网络的检测方法,该方法首先构建应用程序的相似性网络,从相似性网络中提取具有高连通性的子图作为社区,然后为每个社区生成单个社区指纹,最后使用SVM对社区指纹进行分类,以将恶意应用归类为不同家族.
3.2.3 基于API与其他特征相结合的方法
研究人员还采用API与其他特征相结合的方式,进一步提升检测Android恶意应用的性能.典型工作如Arp等人[7]提出的Drebin在API的基础上,结合了权限、Intent、各类组件、硬件组件和网络地址等特征以检测恶意应用,该项工作还共享了恶意应用数据集,Drebin方法成为了后续工作的常用比较对象.2019年,Badhani等人[59]提出CENDroid方法,该方法首先提取API和权限特征;然后分别创建API、权限及API和权限的3组特征集;其次采用决策树、极限学习机(extreme learning machine,ELM)、逻辑回归(logistic regression,LR)、RIPPER和SVM这5种分类器分别使用3组特征集进行恶意应用检测,实验结果表明API与权限组合的特征有更高的检测性能;最后,通过集成学习将5种分类器结合,其各项评估指标均优于单个的分类器,提高了检测Android恶意应用的性能.HybriDroid[60]同样使用多数投票等集成学习方法结合径向基函数(radical basis function network,RBF)网络、人工神经网络(artificial neural network, ANN)和逻辑回归等多个分类器,并结合API、权限和元数据等特征,使得检测Android恶意应用准确率达到了98.8%.针对如何学习有效的特征表示,Zhu等人[61]通过无监督特征学习算法从数据集中学习有效的特征,以降低对Android先验知识和人工选择特征的依赖.
由于API和其他特征结合后会导致特征数量增多,样本在特征空间分布更加稀疏,容易造成过拟合等问题,影响模型的检测时间和精度,因此,研究人员尝试通过特征选择方法优化模型性能.Cen等人[62]将API与权限相结合作为特征,采用信息增益(information gain,IG)和卡方检验(chi-square test,CHI)进行特征选择,采用基于正则化Logistic回归的概率判别模型来检测Android恶意应用.Peynirci等人[63]提出基于IDF值的特征选择算法以检测恶意应用,该方法首先提取权限、API和字符串3种特征,根据恶意应用出现最多和良性应用出现最少的特征,计算特征IDF差值并选择前5%或10%的特征,然后使用KNN、SVM、Native Bayes、J48、随机森林等模型检测Android恶意应用.Kong等人[64]将孪生卷积神经网络(siamese convolutional neural network,SCNN)用于检测恶意应用,该方法首先使用特征分组(feature grouping)策略对API和权限进行特征选择,然后构建和训练SCNN模型,通过相似度距离方法计算出良性应用和恶意应用的均值并将其作为中心点,最后计算待检测应用与2个中心点的距离以确定应用类别.注意到现有部分工作忽视了特征间的重要性差异,Cai等人[65]提出了基于特征加权联合优化的Android恶意应用检测方法JOWMDroid,该方法提取系统资源、权限、组件、Intent、受限API、敏感API、权限调用API和敏感Shell命令8类特征,然后使用IG对其进行特征选择,并使用5种权重映射函数计算特征权重,最后通过集成学习结合SVM,LR,MLP这3类模型提升恶意应用检测精度.文献[62-65]采用了特征选择的方法,避免了特征“维度爆炸”,在减少模型训练时间和检测时间的同时,提高了模型准确率.
除此之外,Feng等人[66]提出了MobiTive检测系统,该方法结合了API、权限、Intent和硬件特征,并比较了CNN、长短期记忆(long short-term memory,LSTM)和门控循环单元(gated recurrent unit,GRU)这3种模型的准确率,其中GRU模型取得了最好效果,MobiTive还可对Android恶意应用家族进行归类.类似地,Garcia等人[67]提出了RevealDroid方法,该方法提取API、反射特征和Native代码作为特征,不仅提升了检测Android恶意应用的准确性和效率,还可适用于经过代码混淆处理的应用.另外,Hei等人[68]提出了快速检测新应用的框架HAWK,将实体(包含API、权限、类、接口和so文件等)和行为关系建模为异构信息网络,并结合改进的图注意力网络模型检测新应用.
3.3 已有工作的对比和点评
表2对部分具有代表性的基于API的恶意应用检测方法进行了对比.从表2的分析可以看出,基于API使用情况的方法假设各特征间相互独立,或仅考虑数据流在API之间的传播路径,不考虑API间复杂的相关性,虽然具有方便快捷的优点,但是大量冗余的API特征会增加算法时间消耗.
Table 2 Comparison of Android Malware Detection Methods Based on API表2 基于API的Android恶意应用检测方法对比
通过API调用依赖图来抽象API之间的调用关系,可利用图结构进行分析以识别恶意应用,但构建API调用图存在较大挑战.首先,API调用基于事件监听与回调,可能无法正确表示调用方法的顺序;然后,应用的不同部分通过组件间通信来进行交互,这部分行为在代码层面没有直接调用关系,因此构建的应用API调用依赖图可能不够完整;最后,API调用依赖关系的复杂性导致所生成的图较为复杂,使得基于图分类的方法时间消耗较多.
API与其他特征结合的方法通过结合多种特征提升了恶意应用检测精度,但通常需要使用有效的特征选择算法以选取更有代表性的特征子集.
4 基于操作码的Android恶意应用检测方法
4.1 简 述
研究发现,部分恶意应用采用代码混淆技术以规避检测,降低了基于权限和API检测Android恶意应用方法的有效性[69].代码混淆技术在一定程度上改变了应用的程序结构,会引起程序的信息流等变化,但应用的核心操作逻辑通常不会发生较大变化.作为程序执行过程中的指令,操作码可表征应用的行为特征,针对方法名、变量名、字符串和权限的混淆技术对操作码特性影响较小.因此,可将操作码信息作为特征来检测恶意应用.基于操作码的Android恶意应用检测方法首先通过反编译提取Smali文件中的操作码序列,然后对操作码序列进行分析处理,以检测恶意应用.根据所使用操作码信息的方式不同,本节将介绍基于操作码使用情况、基于操作码序列转化图像、基于操作码和其他特征的3类Android恶意应用检测方法.
4.2 已有工作分析
4.2.1 基于操作码使用情况的方法
操作码可用于表征应用程序的行为模式,很多研究工作在提取操作码序列后,使用统计模型或机器学习方法来检测Android恶意应用.例如,陈铁明等人[70]提出了基于N-Gram模型的Android恶意应用静态检测方法Maldetect,该方法首先使用逆向工程提取操作码指令并将其抽象为指令符号,然后使用NGram模型将指令符号序列编码为特征,最后构造随机森林、SVM、KNN、Naive Bayes模型来检测恶意应用.基于N-Gram模型的方法对操作码数量较为敏感,如果N-Gram模型中操作码较少,无法涵盖足够信息来检测恶意应用;而如果N-Gram模型中操作码较多,特征维度过大,则会引入过多噪声,导致更高的训练时间成本.与统计模型相比,深度学习方法可自动提取特征并组织特征之间的关系.例如,McLaughlin等人[71]提取由218个操作码组成的多个序列作为文本集,采用自然语言处理的方法,构建卷积神经网络模型检测恶意应用,并和基于N-Gram模型的方法进行比较,实验结果表明,卷积神经网络模型在效率和性能均优于基于N-Gram的检测方法.
李挺等人[72]提出了基于Dalvik指令的Android恶意代码检测方法,该方法首先对恶意应用中操作码指令集进行精简以保留反映程序语义的指令,并对其进行形式化描述以建立恶意特征库,然后使用软件相似度度量算法(MOSS)和闵可夫斯基距离算法(Minkowski distance)计算待检测应用恶意应用特征库的相似度结果来判定其是否为恶意应用.
机器学习方法通常需要类别较为平衡的训练样本集才能生成性能较好的检测模型.然而在真实场景下样本类别存在严重不平衡,导致模型检测性能较低.为此,Mercaldo等人[73]采用进程代数模型表示Android应用,将字节码转换为进程,并通过等价性检验(equivalence checking)来分析所生成进程代数模型之间的关系,该方法不需要样本标签,即可检测恶意应用及其所属家族,从而解决样本类别不平衡的问题.
鉴于Windows平台上的应用同样由操作码序列组成,有研究人员将Windows平台基于操作码序列检测恶意应用的方法移植到Android平台上.例如,Canfora等人[74]评估了使用基于操作码特征的隐马尔可夫模型(hidden Markov model,HMM)和结构熵2种方法检测Android恶意应用的性能.该研究表明基于HMM的方法可有效检测Android恶意应用,而基于结构熵的方法更适合对Android恶意应用家族分类.
4.2.2 基于操作码序列转化图像的方法
大多数恶意应用的变种往往通过自动化技术重用携带恶意代码模块的方法生成,因此它们之间的操作码序列具有一定的相似性.部分研究人员将操作码序列转化为图像使其可视化,然后采用图像识别的方法以识别原始样本的变体来检测Android恶意应用.典型工作为Xiao等人[75]将Dalvik操作码和操作数组成的字节码文件转换为RGB图像,该方法首先以十六进制格式读取字节码,然后将3个连续的十六进制数分别转换为RGB通道的3个值,将字节码序列转换为颜色矩阵,形成图像文件,最后将图像输入CNN模型进行分析,检测是否为恶意应用.在此工作基础上,Yadav等人[76]对多种CNN模型进行测试,结果表明采用EfficientNetB4结构的CNN模型优于MobileNetV2和ResNet50等结构的模型.
代码混淆技术会绕过部分Android恶意应用检测系统,降低现有方法的有效性.为此,Tang等人[69]提出了基于多粒度操作码特征的Android恶意应用检测方法MGOPDroid,首先针对不同的混淆技术提取不同粒度的操作码特征,通过TF-IDF方法和混淆前后操作码特征的差异计算特征权重,以选择有效的抗混淆操作码特征,然后将操作码序列特征转为灰度图像,作为ResNet模型的输入,最后把训练好的模型,通过TensorFlow Lite部署在移动设备,实现本地检测.
注意到已有基于深度学习的恶意应用检测方法缺乏可解释性,Iadarola等人[77]对检测恶意应用的CNN模型进行了可解释性分析.首先,应用反编译,并将DEX字节码转换为灰度图,以训练CNN模型;然后,使用Grad-CAM生成热图,对CNN模型的输出进行解释,并按恶意应用家族分类热图,以生成代表家族特性的累积热图.
部分研究工作借鉴了检测Windows平台恶意应用的方法来检测Android应用,并取得了良好的效果.例如,Yuan等人[78]提出了基于马尔可夫图像(Markov image)和深度学习的方法MDMC,将提取的字节码经概率转移矩阵转换成Markov图像,通过深度卷积神经网络的方法对图像进行恶意应用检测.该方法不仅适用于检测Android恶意应用,也适用于检测Windows平台恶意应用.
4.2.3 基于操作码和其他特征相结合的方法
为进一步提升Android恶意应用检测性能,研究人员还结合了操作码、权限和API等多种特征来检测恶意应用.张炳等人[79]提出了面向概念漂移的可解释性Android恶意应用检测方法InterDroid,首先根据Android恶意应用报告分析和提取了API、权限、Intent和字节码,然后使用自动化机器学习算法TPOT(tree-based tipeline optimization tool)筛选最佳分类模型集合,并使用集合中的模型和特征构建特征解释器,最后基于联合分布适配算法提高检测准确率.Qiu等人[80]提出的多视图特征智能检测框架MFI,从已知恶意应用家族中学习功能表示,以识别具有相同功能的新恶意应用.具体而言,提取权限、API调用图和操作码等异构特征,通过特征分析、选择、聚合和编码等过程,构建深度神经网络(deep neural network,DNN)检测模型检测恶意应用.实验结果表明,MFI优于Drebin和MaMaDroid等方法.陈波等人[81]提出基于多层SimHash的相似度检测方法,首先从APK文件中提取的AndroidManifest.xml、Smali代码集、操作码指令集、Java代码集、Java指令集5类特征表征应用,然后采用SimHash算法进行相似度分析,并分别用于构建一层数据模型,在检测过程中使用投票感知器(voted perceptron)算法,为每层分别赋予信任权重值,最后将每层结果结合权重进行投票,根据投票结果判断是否为恶意应用.实验结果表明该方法有较好的检测效果.Kim等人[82]提出多模态深度学习方法检测恶意应用,通过提取操作码、API、权限、组件、字符串、共享库函数和环境7类特征,以构建深度神经网络DNN模型检测恶意应用.
Lu等人[83]设计了DLAMD框架,使用预检测和深度检测2个阶段检测Android恶意应用,预检测阶段提取权限特征并使用BP神经网络模型初步筛选具有明显特征的恶意应用,以降低检测时间和计算成本,提高整个框架的检测效率.深度检测阶段提取应用的操作码结合CNN和LSTM模型,以进一步检测疑似恶意应用,提升检测准确性.
4.3 已有工作对比和点评
表3将部分基于操作码的代表性方法进行了对比.其中,基于操作码使用情况方法的优点是可以有效避免因代码混淆而提取不到重要特征的问题,也无需人工选择具体特征.基于操作码转化图像的方法将Android恶意应用检测的问题转为图像分类问题,可利用已有的图像分类算法,由于其缺点是可解释性较差,且对计算机硬件和算力要求较高;基于操作码和其他特征结合的方法结合多种特征,提升了恶意应用检测精度,其缺点是模型设计较为复杂且检测时间较长.
Table 3 Comparison of Android Malware Detection Methods Based on Opcode表3 基于操作码的Android恶意应用检测方法对比
5 基于其他特征的Android恶意应用检测方法
5.1 简 述
除了上述权限、API和操作码等常用的静态特征方法外,为应对代码混淆、恶意代码注入所带来的挑战,有研究通过结合动静态特征和相似代码片段等方法来检测Android恶意应用.
5.2 已有工作分析
5.2.1 基于动静态特征结合的方法
Android恶意应用动态检测指分析Android应用是在严格控制的环境(真实设备或模拟器)中利用自动化脚本模拟用户操作,执行如API调用、网络通信、资源访问、进程控制等操作,并通过对应用行为分析来判断其是否存在隐私窃取、恶意扣费、远程控制等恶意行为.由于Android应用是通过事件交互驱动的,恶意应用行为往往与交互方式相关,在动态检测中如果没有发现恶意行为,并不能确保之后不会发生,而静态分析可以分析更多的可执行路径,但难以应对代码混淆加密的问题.因此,有研究工作通过将动态特征与静态特征相结合的方式来解决上述问题.
杨欢等人[84]提出了静动态结合的方法Androdect,其使用的静态特征包括权限、各类组件、API信息和Native代码,在模拟器中使用Monkey[85]模拟用户行为,以收集动态特征,并设计了3层混合系综算法(triple hybrid ensemble algorithm,THEA),使用决策树、朴素贝叶斯和KNN等多种机器学习模型的最优分类器来检测恶意应用.
Alzaylaee等人[86]提出了基于深度学习的恶意应用检测方法DL-Droid,可适用于真实设备.DL-Droid使用权限、API和Intent等静态特征和运行日志等动态特征来训练检测恶意应用的深度学习模型,并与SVM,SVM RBF,NB,LR,PART,RF,J48等主流算法进行比较,实验结果表明DL-Droid具有更好的性能.
网络流量特征可用于检测具有恶意代码更新功能和泄露隐私的应用,可与静态特征相结合检测恶意应用.Arora等人[87]提出了基于权限特征和网络流量特征的Android恶意应用检测方法,该方法将KNN算法和K-Medoids算法相结合,实验结果表明,该方法优于仅使用动态流量特征或静态权限特征的检测方法.大多数恶意应用窃取隐私数据后将其发送到服务端,Tong等人[88]先通过动态运行应用提取文件调用和网络访问相关的特征,分别构建良性应用和恶意应用模式集,以基于模式匹配检测恶意应用.Wang等人[89]通过挖掘应用访问的URL以检测恶意应用,首先将收集到的应用在模拟器中运行,并收集应用的网络访问数据,然后提取其中的URL信息并将其向量化,以训练用于检测恶意应用的神经网络模型.
此外,权限、组件和API调用等静态特征也可以和动态行为特征组合以检测恶意应用[90-92].例如,李鹏伟等人[93]对APK进行脱壳重打包后提取动静态特征,其中静态特征包括应用的结构信息、权限信息、加固情况、反射、Native代码、权限和类信息,动态特征为通过插装获取的行为序列.Costa等人[94]提出了污点分析和动态特征结合的检测方法,主要对敏感API调用特征进行分析.另外,Yuan等人[95]提出了深度学习检测的方法Droid-Sec,该方法提取静动态特征采用深度置信网络检测恶意应用.在动态运行过程中,Android应用在调用分配内存、访问文件等API函数时,会转换为相应的系统调用,Amer等人[96]通过结合API调用、系统调用和权限序列特征,构建LSTM模型,捕获应用运行时API调用和系统调用间的依赖关系,以检测恶意应用.
5.2.2 基于相似代码片段的方法
为规避检测,Android恶意应用开发人员可对良性应用反编译,注入恶意组件(例如存在恶意代码的第三方库),修改控制流以确保其正常运行后,再重新打包上架至第三方应用市场.通过这种方式构造的恶意应用与其对应的良性应用行为相似,难以检测.由于这些恶意应用中注入的恶意代码存在相似性,有研究通过基于相似代码片段的方法检测Android恶意应用.
重打包检测方法主要通过各种相似度度量指标找到高度相似的应用.例如,为消除第三方库带来的影响,Zhang等人[97]在特征提取阶段根据应用白名单移除通用第三方库后,采用Jaccard指数分析应用剩余部分的代码相似度,然后根据代码相似度、应用程序的元数据和商业防病毒软件提供的标签3类异构信息构建网络表示学习以对弱标签恶意应用聚类划分为已知和未知的家族,最后构建3层DNN来进一步分类已知家族的应用.Tian等人[98]提出了代码重打包检测方法DR-Droid,该方法将应用代码的结构根据其行为依赖关系划分为多个代码子集,在不同的代码子集中提取了粗粒度的类级依赖图和细粒度的方法调用图来生成应用的特征向量.除常见的Java库隐藏恶意代码外,部分恶意应用将恶意行为隐藏在Native代码中,因此,Alam等人[99]提出了DroidNative以检测字节码或Native代码中的恶意行为.Zhan等人[100]对Android第三方库的检测工具进行了实证研究,从恶意应用的检测性能、检测效率、代码混淆恢复能力和易用性4方面分析和评估了现有的检测工具.结果表明,LibScout[101]有更好的检测性能,LibRadar[102]时间消耗少且更易用,Libeccio[103]抗代码混淆效果最好.
He等人[104]提出了基于恶意代码片段识别的检测方法MsDroid,使用GNN检测Android恶意应用.MsDroid使用调用图、操作码和权限信息,把Android应用中的敏感行为建模为行为子图集(behavior subgraph set),通过查找相似恶意应用代码片段检测恶意应用.Chen等人[105]使用克隆代码检测Android恶意应用,该方法分为签名生成和签名匹配2个阶段.签名生成阶段使用代码检测工具NiCad[106]查找恶意应用集中的克隆类,通过基于相似子集的方法将不同的恶意应用聚类成不同的集合,并取每个克隆类的代表性示例作为这个类的签名,构成签名集合.签名匹配阶段以增量模式使用NiCad在签名集合中匹配良性应用和恶意应用克隆示例.Meng等人[107]提出了基于确定性符号自动机的检测模型,通过总结恶意应用家族的代表性行为特征来检测恶意应用的变种.
5.2.3 其他静态检测方法
此外,还有一些利用签名、Intent、APK文件等其他静态特征的Android恶意应用检测方法.
应用签名相当于程序的唯一标识,用于应用编译打包后的身份验证,刘新宇等人[108]提出了基于APK签名信息反馈的检测方法,根据对APK签名的验证和筛选来检测恶意应用.现有部分方法捕获应用程序和Android系统的交互,而Xu等人[109]关注应用程序内部或应用程序间的通信,提出Intent组件检测方法ICCDetector.
研究人员除了将操作码序列转图像外,还可将Android可执行文件APK转为图像进行检测,Pinhero等人[110]提出了基于恶意应用可视化和深度学习的恶意应用检测方法,将APK转为灰度、RGB和Markov Image,然后使用Gabor滤波器进行纹理分析,最后将图像作为输入提供给12个不同的神经网络进行检测.
5.3 已有工作对比和点评
表4对部分具有代表性的基于其他特征的Android恶意应用检测方法进行了对比.由于部分论文未提供数据集来源,在数据集来源和数量列仅给出了应用数量.动静态结合方法的优点是可检测代码混淆加密等代码保护技术和代码热更新技术的恶意应用,提升了检测性能;缺点是由于应用在模拟器或真实设备中运行以收集动态特征,导致时间消耗增大且鲁棒性较差.基于相似代码片段检测的方法可用于识别重复和相似的代码,优点是可识别具有相似恶意代码模块的应用,可有效对恶意应用所属家族进行归类,缺点是检测未知类型的恶意应用误报率较高.
Table 4 Comparison of Android Malware Detection Methods Based on Other Features表4 基于其他特征的Android恶意应用检测方法对比
6 数据集与评价指标
在评估Android恶意应用检测方法的有效性时,需要采用合理评价指标,并使用有代表性的Android应用数据集.本节从2方面出发,总结常用的Android应用数据集和评价指标.
6.1 数据集
Android恶意应用检测研究离不开有效的数据集支撑.在表1~4给出了此前研究中常用的良性应用和恶意应用数据集.其中,大多数研究人员使用的良性应用数据集来自Google Play应用商店.Google Play中的应用在上架发布前会经过Google Play Protect的安全检测,虽然可能仍会含有恶意应用,但是数量极少,通常可认为是良性应用.由于Google Play应用商店的应用无法直接下载,爬取也较为困难,Androzoo[111]平台收集了大量的应用,包括Google Play应用商店的应用,可作为良性应用数据集备选方案.
早期对Android恶意应用的研究主要通过研究人员自行收集数据集,以对所提出方法的有效性进行评估.Genome,Drebin,AMD是Android恶意应用检测问题研究中使用最多的恶意数据集.Zhou等人[112]最早共享出Genome数据集,Genome里面包含49个家族,共1 260个恶意应用,应用分布年份在2010—2011年间.Arp等人[7]收集了Drebin数据集,该数据集包含179个家族,共5 560个恶意应用.Wei等人[113]共享了AMD (Android malware dataset)数据集,AMD数据集包含24 650个恶意应用.Kadir等人[114]针对Android僵尸网络的研究工作收集了数据集Botnet,其共包括1 929个僵尸网络恶意应用.Wang等人[115]根据McAfee,FireEye,Kaspersky等10家安全公司发布的移动安全报告,收集创建了包含148个恶意应用家族,共4 534个恶意应用的数据集MalRadar,并从分发渠道、安装方法、激活方法、恶意行为和反分析技术等方面进行了描述.关注到近年来COVID-19相关的恶意应用较为泛滥的问题,Wang等人[116]系统地对COVID-19相关的应用进行分析,构建了含有4 322个应用的COVID-19相关应用数据集,其中611个为恶意应用.这些恶意应用数据集有力推动了Android恶意应用检测技术的发展.
随后出现的恶意应用共享平台,收集了用户提交的大量恶意应用,可供研究人员下载使用.例如OmniDroid[117],Koodous,Contagio,Pwnzen,VirusShare等.表5给出了常用的恶意应用数据集和恶意应用共享平台,其中,应用分布年份代表该数据集所收集应用的年份.从表5中可以看出Koodous,MalRadar,Androzoo提供了一些近年来出现的恶意应用.
Table 5 Datasets of Malware Application表5 恶意应用数据集
6.2 评价指标
在Android恶意应用检测过程中,研究人员最常使用的评估分类模型指标有准确率(Accuracy)、误报率(ErrorRate) 、精确率(Precision)、召回率(Recall)、F1值、ROC曲线和AUC值等.在表1~4展示了各参考文献中采用的评价指标及最优性能.除ROC曲线外,其余评价指标都需要通过混淆矩阵计算,Android恶意应用检测的混淆矩阵如表6所示.
Table 6 Confusion Matrix表6 混淆矩阵
Accuracy是系统对整个样本的检测能力,即将恶意应用检测为恶意应用,将良性应用检测为良性应用的能力,计算为
ErrorRate与Accuracy相反,表示预测错误的样本(FP和FN)在所有样本中占的比例,计算为
Precision是实际为恶意应用的个数占检测为恶意应用的个数之比,计算为
Recall是被正确识别出来的恶意应用个数与测试集中所有恶意应用个数的比值,计算为
F1值(F1-Measure)是Precision和Recall的调和平均值,计算为
受试者工作特征曲线(receiver operating characteristic, ROC),ROC曲线横坐标为假正率(false positive rate, FPR),纵坐标为真正率(true positive rate, TPR).根据ROC曲线面积(area under the curve, AUC)值判断分类器的优劣,AUC取值范围是0~1,越靠近1,性能越好.
7 结束语
本文对Android恶意应用静态检测方法的最新研究技术成果进行了回顾和总结.首先,对Android应用静态特征进行了分析;然后,将现有恶意Android检测静态方法分为基于权限的方法、基于API的方法、基于操作码的方法、基于其他静态特征的方法4类,分别对各类方法进行了归纳总结,并比较了不同方法的优缺点;最后,介绍了在Android恶意应用检测研究中常用的数据集和评价指标,以方便对后续提出的检测方法进行全面地评估.虽然研究人员针对Android恶意应用静态检测方法取得了大量研究成果,但是还存在缺少统一的Android实验数据集,难以提取经加壳、混淆等处理后应用的静态特征,未能充分利用多类特征的互补性提升检测精度和检测新类型的恶意应用能力较弱等局限性.基于上述分析,本文提出Android恶意应用静态检测4个值得进一步研究的方向:
1)构建持续更新的Android应用开放数据集.Android应用数据集对实验结果有着至关重要的影响,尽管研究人员已共享了大量Android恶意应用数据集,其中一些恶意应用数据集[7,112-113]被使用的次数也较多,但是其中存在部分发布时间较久的恶意应用,可能影响方法评估的有效性,且缺少代表性强、认可度高的开放数据集.另外,Android恶意应用的更新换代较为频繁,需要提供开放接口以面向用户收集最新出现的恶意应用.构建持续更新的Android应用开放数据集有助于将研究人员更公平和全面地评估所提出的恶意应用检测方法.
2)提升自动化提取特殊Android应用静态特征能力.Android恶意应用静态检测方法中使用了权限、API和操作码等多种特征,快速准确地提取特征是决定恶意应用检测性能的关键环节.研究人员在实验中所使用的Android恶意应用数据集通常经过筛选和预处理,确保能够从中提取静态特征.然而,在真实场景下,Android恶意应用常会使用代码混淆、加密、加壳和反编译对抗等代码保护技术,以及代码热更新的方法,导致直接提取静态特征失败,而人工脱壳反汇编提取特征则效率较低.为提升自动化提取特殊Android应用静态特征能力,需研制更为成熟有效的Android应用反编译脱壳等工具.
3)融合多类特征综合提升Android恶意应用检测性能.权限、API和操作码等不同类型的信息可从不同角度表征Android应用的行为,可通过融合多类特征以提升Android恶意应用检测的性能.例如,可针对每种静态特征类型分别搭建恶意应用检测模型,再通过集成学习结合多类模型,以提高检测准确率.除静态特征外,还可尝试加入资源申请、交互行为等动态特征以进一步提升Android恶意应用检测性能.
4)提供有效的自适应方法检测新增Android恶意应用.随着移动互联网技术的发展,Android系统版本不断升级,恶意应用出现的场景也在不断变化,例如,在人们焦虑COVID-19的时候,部分恶意应用伪造COVID-19疫苗预约和注册的功能来进行网络钓鱼和诈骗[116].由于静态特征和新业务场景变化,导致基于已有恶意应用构建的模型在检测新出现的恶意应用时面临着检测模型退化、检测准确率下降等问题[36],这通常需要收集新数据集再次进行模型训练,并且增加了时间和经济成本.未来可使用增量学习方法构建可持续更新的Android恶意应用检测模型,有效学习新增Android应用样本特征,避免重新训练模型带来的开销,并保持相对较高的准确率,以更好地适用于移动应用市场等需要处理大量新增待检测应用的场景.
作者贡献声明:潘建文负责文献资料的整理和分析、论文主体撰写及修订等工作;崔展齐指导论文选题、论文整体思路框架设计并修改论文;林高毅整理资料并修改论文;陈翔和郑丽伟提出指导意见并修改论文.