1、Android 恶意应用的静态检测方法综述潘建文1崔展齐1林高毅1陈翔2郑丽伟11(北京信息科技大学计算机学院北京100101)2(南通大学信息科学技术学院江苏南通226019)()A Review of Static Detection Methods for Android Malicious ApplicationPanJianwen1,CuiZhanqi1,LinGaoyi1,ChenXiang2,andZhengLiwei11(Computer School,Beijing Information Science and Technology University,Beijing 1
2、00101)2(School of Information Science and Technology,Nantong University,Nantong,Jiangsu 226019)AbstractDuetotheopennessoftheAndroidsystemandthediversityofthethird-partyapplicationmarkets,Androidsystemhasachievedahighmarketsharewhilebroughthugerisks.Asaresult,Androidmalwareemergeendlesslyandspreadwid
3、ely,whichseriouslythreatenusersprivacyandeconomicsecurity.HowtoeffectivelydetectAndroidmalwarehasbeenwidelyconcernedbyresearchers.Accordingtowhethertheapplicationisexecutedornot,theexistingmalwaredetectionmethodsaredividedintostaticdetectionanddynamicdetection.Betweenthetwo,thestaticdetectionmethods
4、outperformthedynamicdetectionmethodsintermsofefficiencyandcodecoverage,Drebinandotherstaticdetectiontoolshavebeenwidelyused.WesystematicallyreviewtheresearchprogressinthefieldofstaticAndroidmalwaredetection.First,thestaticfeaturesofAndroidapplicationsareintroduced.Then,accordingtodifferent static fe
5、atures used for detecting Android malware,the static Android malware detection methods areclassified into three categories:permissions,application programming interface(API),and opcode basedapproaches,and the Android application data sets and indicators commonly used to evaluate the detectionperform
6、anceofAndroidmalwarearesummarized.Finally,potentialresearchdirectionsofstaticAndroidmalwaredetectiontechniquesinthefuturearediscussed,whichprovidesreferencesforresearchersinrelateddirections.Key wordsAndroidmalware;staticdetection;permission;applicationprogramminginterface(API);opcode摘要Android 系统的开放
7、性和第三方应用市场的多样性,使其在取得高市场占有率的同时也带来了巨大的风险,导致 Android 恶意应用层出不穷并广泛传播,严重威胁了用户的隐私和经济安全.如何有效检测 Android 恶意应用受到了研究人员的广泛关注.根据是否运行应用程序,将现有的恶意应用检测方法分为静态检测和动态检测.其中,静态检测的效率和代码覆盖率均优于动态检测,Drebin 等静态检测工具取得了广泛应用.为此,系统调研了 Android 恶意应用静态检测领域的研究进展,并进行了分析和总结.首先,介绍了 Android 应用静态特征;然后,根据静态特征的不同,分别对基于权限、应用程序编程接口(applicationpr
8、ogramminginterface,API)和操作码等不同静态特征的 Android 恶意应用检测方法进行了分收稿日期:2022-04-12;修回日期:2022-10-10基金项目:江苏省前沿引领技术基础研究专项(BK202002001);国家自然科学基金项目(61702041);北京信息科技大学“勤信人才”培育计划项目(QXTCPC201906)ThisworkwassupportedbytheJiangsuProvincialFrontierLeadingTechnologyFundamentalResearchProject(BK20202001),theNationalNatural
9、ScienceFoundationofChina(61702041),andtheBeijingInformationScienceandTechnologyUniversityQin-XinTalentCultivationPlanProject(QXTCPC201906).通信作者:崔展齐()计 算 机 研 究 与 发 展DOI:10.7544/issn1000-1239.202220297JournalofComputerResearchandDevelopment60(8):18751894,2023析,并总结了常用的 Android 应用数据集和评价 Android 恶意应用检测性能
10、的常用指标;最后,对 Android恶意应用静态检测技术的发展进行了总结和展望,以期为该领域的研究人员提供参考.关键词Android 恶意应用;静态检测;权限;应用编程接口;操作码中图法分类号TP311.5近年来,随着移动互联网的发展,社交通信、金融证券、游戏娱乐和电子商务等应用全面地从 PC 转向移动互联网,移动互联网用户和设备数量呈指数级增长.据 2021 年中国互联网网络安全报告1显示,截至 2021 年 12 月,我国手机用户规模达 10.32 亿,我国使用手机上网的用户比例达 99.7%.根据国际数据公司(IDC)调查报告2显示,2021 年 Android 手机的市场份额占 84%
11、,并不断增长.开源的 Android 系统和多样的应用分发平台在带来巨大的市场份额的同时,也使其成为了恶意应用滋生的温床和传播的主要平台.国家互联网应急中心捕获和通过厂商交换获得的移动恶意应用也主要集中在 Android 平台,仅在 2020 年就多达 303 万个3.部分 Android 恶意应用的广泛传播造成了严重后果.例如,2019 年出现的零日漏洞 BadBinder 被 Android 恶意应用利用以控制用户设备4,影响到 Android9 及之前的版本,给大量用户带来了巨大经济损失.因此,如何有效检测 Android 恶意应用受到了研究人员的广泛关注.根据其是否运行应用程序,将现有
12、的检测技术分为动态检测和静态检测 2 类,其中,动态检测5-6是在真实设备或者模拟器中运行应用,使用测试脚本模拟用户操作,记录应用的运行情况,通过分析应用行为特征,如应用程序编程接口(app-licationprogramminginterface,API)调用、网络流量等特征来检测恶意应用.动态检测的优点是可以克服代码加密、混淆和动态代码加载的障碍,其缺点是在真实设备或模拟器中运行测试脚本时间开销大、难以覆盖应用全部功能,且耗时较长.静态检测则是通过反编译应用提取权限、API 和操作码等特征,采用机器学习算法构造分类器以检测 Android 恶意应用.静态检测不依赖运行环境、代码覆盖率较高,
13、检测效率高于动态检测方法,例如,Drebin7检测工具在学术界和工业届受到了广泛应用和高度重视.本文重点对 Android 恶意应用静态检测方法的已有研究成果进行综述.本文搜集了 2013 年至今发表过的关于 Android恶意应用静态检测相关论文并进行了梳理.首先,使用“Android(安卓)”组合“malware/malicious(恶意应用)”、“detection(检测)”和“classification(分类)”等关键字,在国内外重要的论文数据库(例如 IEEE,ACM,Springer,Elsevier,CNKI)中检索相关论文.由于中国计算机学会(CCF)推荐的期刊和会议影响力较
14、大,具有一定的权威性,我们通过人工筛选的方式,检索出发表在 CCF 评级为 A,B 类的国际会议或国际期刊,以及软件学报计算机学报计算机研究与发展等权威中文期刊上的论文.然后,分析论文的标题和摘要,去除与本综述关注问题无关的论文.最终,选择出与本研究问题直接相关的高质量论文89 篇,包括国际期刊 77 篇、中文期刊 12 篇.其中,TIFS8 篇、TDSC6 篇、CCS2 篇、Computers&Security25 篇、软件学报3 篇、计算机学报1 篇、计算机研究与发展3 篇.检索到的论文在不同年份的数量分布如图 1 所示,可以看出相关论文发表数量持续增长,这表明 Android 恶意应用检
15、测是近年来的热点研究问题.发表于 CCF 的 A,B 类国际期刊和国际会议的论文在不同领域的分布情况如图 2 所示,本研究问题1647109111720405101520252013 2014 2015 2016 2017 2018 2019 2020 2021 2022论文数量年份Fig.1Distributionofthenumberofresearchpaperspublishedindifferentyears图1在不同年份发表的研究论文数量分布60%17%9%5%2%3%3%1%网络与信息安全软件工程/系统软件/程序设计语言计算机网络计算机体系结构/并行与分布计算/存储系统数据库/数
16、据挖掘/内容检索人工智能交叉/综合/新兴计算机科学理论Fig.2Field distribution of papers published in internationaljournalsandconferencesrankedasCCFAandB图2发表于 CCFA,B 类国际期刊和会议的论文领域分布1876计算机研究与发展2023,60(8)的论文大多数分布在网络与信息安全领域(46 篇).目前,在 Android 恶意应用静态检测的综述中,已有的工作包括:Samra 等人8在 2019 年对 Android恶意应用静态检测进行综述,但是仅介绍了基于权限和基于签名的检测方法,对于其他静态
17、特征方法内容略为缺失;Bayazit 等人9在 2020 年对传统的机器学习检测 Android 恶意应用进行了综述,他们考虑的是恶意应用分类,并对动态和静态检测方法进行了介绍;在此之后,有 41 篇重要论文发表,尤其是基于深度学习的 Android 恶意应用检测技术取得进一步的发展.本文主要关注 Android 恶意应用静态检测方法,首先,介绍了 Android 应用的静态特征;然后,分别对基于权限、API、基于操作码和其他静态特征的检测方法进行分析和总结,并论述数据集和评价指标;最后,对现有的研究工作总结,并对未来的研究方向进行了展望.1Android 应用静态特征APK(Androida
18、pplicationpackage)是一种 Android操作系统使用的应用程序包文件格式,用于应用分发 和 系 统 安 装.Android 静 态 特 征 提 取 是 根 据 对Android 隐私安全和开发过程的了解,在不运行应用程序情况下分析 APK 中的文件内容,从中收集和提取各类特征.基于所提取到的静态特征,可采用不同的算法应用于 Android 恶意应用检测.常见的提取特征方法包括:采用 Androguard10等逆向工具直接提取权限、API 等部分特征;使用Apktool11等工具进行反编译分析,这种提取特征方法所提取到的特征更为全面.如图 3 所示,Apktool 反编译后的文
19、件结构包括 Android 系统可执行(Dalvikexecutable,DEX)文件、AndroidManifest.xml 文件、res文件夹、META-INF 文件夹和 lib 文件夹.DEX 文件是 Dalvik12和 ART 虚拟机可执行的字节码文件,可被反编译为 Smali 或 Java 文件集合.Smali 文件中包含应用程序的全部操作指令以及运行时数据,每个Smali 文件包含类,类中包含多个方法,可在其中提取 API 调用以及由操作码(opcode)和操作数所组成的指令.AndroidManifest.xml 是清单配置文件,其包含了 Android 系统为运行应用程序所需要
20、的参数,如权限、软件包名称、应用组件、应用所需要的硬件和软件功能等信息.res 文件夹用于存放资源文件,包括应用执行所需的布局、图像、动画、颜色和界面字符串等.META-INF 目录下存放的是签名信息,用来保证 APK 包的完整性和系统的安全,Android 系统要求所有 APK 必须先使用证书进行数字签名,然后才能安装、更新和分发.lib 目录存放应用程序依赖库的so 文件.so 文件是在 Android 系统上直接运行的二进制代码,可在应用运行时访问设备实体组件,例如传感器和触摸输入等,是 Android 的动态链接库.APKresAndroidManifest.xmlDEXMETA-IN
21、FlibSmaliJavaFig.3DecompilingstructureofAPK图3APK 反编译结构APK 文件中的内容可被提取作为静态特征.根据所使用静态特征类型的不同,衍生出不同的检测方法,本文中将其分为基于权限特征、基于 API 特征、基于操作码特征和基于其他特征 4 类 Android 恶意应用检测方法.本文将在第 25 节中分别对这 4 类静态检测方法进行详细介绍.2基于权限的 Android 恶意应用检测方法 2.1简述权限机制用于限制 Android 应用程序访问文件、数据和资源等安全敏感项.为保护用户隐私数据,Google为 Android10 版本设置了 155 个权
22、限,开发人员可根据应用功能的需要向用户申请权限.然而,调查数据表明,大多数用户不够了解应用所需的权限,导致过度授权的情况频发13.一旦恶意应用申请的敏感权限获得通过,将可能导致用户遭受隐私泄露、恶意扣费和资费消耗等严重后果,侵害用户利益.良性应用和恶意应用所申请的权限在数量、类别和关系上存在一定的差异,这使得基于权限分析检测 Android 恶意应用具有可行性.基于权限的 Android 恶意应用检测方法通过清单配置文件 AndroidMenifest.xml 提取权限特征,然后分析其使用情况或挖掘权限间相关性,以检测恶意应用.由于权限特征数量较少且提取便捷,使得此类方法出现较早,根据使用权限
23、特征的方式不同,本节将其分为基于权限使用情况和基于权限相关性挖掘的 Android 恶意应用检测方法.2.2已有工作分析2.2.1基于权限使用情况分析的方法基于权限使用情况分析的方法先提取权限特征,然后将机器学习方法用于检测 Android 恶意应用.例潘建文等:Android 恶意应用的静态检测方法综述1877如,Sanz 等人14提出基于权限的方法来检测 Android恶意应用,Ilham 等人15在此基础上采用信息增益、信息增益率和皮尔逊相关系数等方法选择出权限的特征子集,然后分别构建随机森林(randomforest)、支持向量机(supportvectormachine,SVM)和决
24、策树(decisiontree)模型检测 Android 恶意应用.Intent16是包含目标组件地址和数据的消息对象,主要用于 Android 应用程序内和应用程序间通信,可通过发送 Intent 消息对象请求应用内的组件或其他应用执行特定操作,还可在操作结束后接收返回的数据.Intent 与权限相比语义信息更丰富,因此除单独分析权限使用情况外,研究人员还对权限结合 Intent检测 Android 恶意应用的方法进行了研究.其中,杨宏宇等人17采用加权投票方法改进随机森林算法,使用权限和 Intent 作为特征值检测 Android 恶意应用.AndroDialysis18首先采用 Int
25、ent 作为特征,取得较好的检测效果,然后将权限与 Intent 特征结合,并使用贝叶斯网络来检测 Android 恶意应用,进一步提升了检测性能.Idrees 等人19提出结合权限和 Intent 的集成学习方法 PIndroid,构造了决策表、多层感知机(multilayerperceptron,MLP)和决策树等 6 种基分类器,并用 Boosting,Bagging,Stacking 集成学习方法检测 Android 恶意应用,取得 99.8%的准确率.Zhang 等人20提出基于 N-Gram 分析和在线增量分类器结合的方法,提取权限、Intent 等多种特征用于 N-Gram 分析
26、,采用被动攻击(passive-aggressive)算法进行增量学习,该框架不仅可以检测恶意应用,还可对恶意应用所属家族进行分类.2.2.2基于权限相关性挖掘的方法Android 有多个权限组,每个权限组中含有若干个权限.Android 恶意应用进行恶意行为时,通常需要多个权限的协作和配合,因此可挖掘权限组间和权限组内的权限相关性,并将其用来检测恶意应用.例如,为修改接收到的短信,恶意应用需要使用权限组合:接收短信(RECEIVE_SMS)、读取短信(READ_SMS)和写入短信(WRITE_SMS).2014 年,Wang 等人21通过挖掘单个权限或一组协作权限风险的方式来检测恶意应用.该
27、方法首先采用互信息、皮尔逊相关系数和 T 检验 3 种特征排序算法对权限进行风险排序;然后使用序列前向选择(sequentialforwardselection)方法和主成分分析(principalcomponentanalysis)方法选择权限子集,挖掘出多个权限间协作的风险;最后构造支持向量机、决策树以及随机森林模型检测恶意应用.以往大多数研究工作主要关注权限使用情况,而忽视了挖掘权限之间的关系,杨欢等人22提出了基于频繁模式挖掘算法 PApriori,挖掘恶意应用家族中权限使用的相互依赖关系,通过匹配待检测应用的权限特征来检测 Android 恶意应用.相似地,Arora等人23提出了基
28、于权限对的 Android 恶意应用检测方法 PermPair,首先分别提取恶意应用集和良性应用集的权限对,构建恶意应用权限对图(Malicious-Graph)和良性应用权限对图(Normal-Graph),并根据权限对在不同应用集中出现的频率,对图中每条边分配权重,然后通过比较待检测应用权限对在 Malicious-Graph和 Normal-Graph 中的权重和,确定其是否为恶意应用.该方法在权重计算过程中采用了图边缘优化算法,删除不重要的权限对,有效减少了检测恶意应用的时间消耗.2.3已有工作对比和点评表 1 对基于权限的方法进行了对比.其中,数据集来源和数量列采用来源(数量)的形式
29、给出了论文使用的良性和恶意应用来源和数量,例如,良性:GooglePlay(674)表示使用了 GooglePlay 数据集中的674 个良性应用.从表 1 可以看出,基于权限相关性挖掘的 Android 恶意应用检测方法的准确率整体低于基于权限使用情况分析的方法,这主要是由于Android 应用中过度和随意申请敏感权限现象极为常见,使得噪声更多,增加了挖掘权限相关性的难度.基于权限的 Android 恶意应用检测方法的优点是权限特征提取方式简单快捷、特征数量较少、检测效率较高,其缺点是恶意应用容易申请和良性应用相同的权限,以伪装成良性应用,导致检测准确率较低、误报率较高.常见的改进方法是将权
30、限特征和其他静态特征结合,以提高 Android 恶意应用检测的精度.3基于 API 的 Android 恶意应用检测方法 3.1简述AndroidAPI24是 Android 系统提供的函数接口,恶意应用在获得敏感权限后,可能通过 API 调用访问和获取手机中的短信、通讯录、定位、相机和相册等敏感数据,也可能通过恶意操作执行系统破坏、远程控制和诱骗欺诈等恶意行为,导致用户的隐私和经济安全受到侵害.良性应用和恶意应用在 API 使用1878计算机研究与发展2023,60(8)和调用模式上存在差异,因此可通过分析 API 特征的方式来检测恶意应用.权限特征设置粒度较粗,导致基于权限的 Andro
31、id 恶意应用检测方法存在较大的不确定性,而分析 API 调用情况能更全面细致地理解应用特征.因此,相较于基于权限的方法,基于API 的 Android 恶意应用检测方法取得了更高的准确性和鲁棒性,是目前使用最广泛的一类方法.此类方法通过分析反编译后的 Smali 文件,提取 API 调用序列或 API 调用图,以检测恶意应用.根据所使用 API信息和方式的不同,本节将其分为基于 API 使用情况、基于 API 调用依赖图和基于 API 与其他特征结合 3 类 Android 恶意应用检测方法.3.2已有工作分析3.2.1基于 API 使用情况的方法API 使用情况能在一定程度反映应用的特点.
32、基于 API 使用情况的方法通过提取和分析应用的 API调用序列和关系,并使用各类机器学习算法检测恶意应用,这类方法取得了较好效果.例如,Scalas 等人25针对勒索应用对 Android 用户的威胁,提出基于 API检测策略的方法 R-PackDroid,该方法可用于检测具有勒索行为的恶意应用和其他类别的恶意应用.由于勒索应用攻击严重依赖特定的 API 来执行其操作,可通过包、类和函数 3 类粒度的 API 特征信息进行检测,实验结果表明,基于函数粒度特征的检测方法相比其他 2 种有更高的准确率.隐私窃取是恶意应用的典型行为之一,常使用数据流分析和污点分析来检测这类恶意行为.其中,数据流分
33、析方法记录和跟踪敏感数据流路径,包括源点、数据传播路径和交汇点,并分析 API 在数据流路径上的调用序列,以检测隐私数据是否被泄露.Wu等人26提取与数据流相关的 API,并根据每个 API 在恶意应用中的使用情况计算其恶意权重值,在计算出恶意权重值的基础上,使用改进的马氏距离(Mahalanobisdistance)方法计算 K 最邻近(K-nearestneighbor,KNN)分类算法中相邻节点的距离,以提高敏感数据分析的效率和模型的检测精度.随着恶意应用的不断演化,其收集敏感数据的行为更加复杂,仅由源点和交汇点构成的简单信息流难以捕获此类行为.为此,Shen等人27通过提取由简单信息流
34、集合所组成的复杂信息流路径上的 API 序列,使用 N-Gram 模型生成不同长度的 API 特征向量,然后使用 SVM 算法构造模型以检测恶意应用.此外,Dexteroid28从 Android 生命周期函数调用中提取组件的行为特征、事件调用和状态转换,以检测存在信息泄露和发送恶意短信隐患的恶意应用.污点分析方法能够追踪应用程序中的隐私数据从获取到泄露的整个传播过程.Feng 等人29提出基于 API 语义的方法 Apposcopy,该方法将静态污点分析Table 1Comparison of Android Malware Detection Methods Based on Permis
35、sion表 1 基于权限的 Android 恶意应用检测方法对比检测方法相关文献发表年份方法/使用算法使用特征数据集来源(数量)优劣势分析基于权限使用情况分析文献 172017IRFCM权限、Intent良性:GooglePlay(674)恶意:Genome(1260)使用加权投票方法改进随机森林算法,但未与其他方法进行实验对比.文献 182017AndroDialysis权限、Intent良性:GooglePlay(1846)恶意:Drebin(5560)结合 Intent 和权限特征,考虑了样本类别不平衡问题,但较难抵抗对抗性攻击.文献 192017PIndroid权限、Intent良性:
36、GooglePlay(445)恶意:Genome(1000),Drebin(100)结合权限和 Intent 特征,采用集成学习方法优化检测结果,但样本数量较少.文献 152018SVM、随机森林、J48权限良性:GooglePlay(58)恶意:AMD(673)使用特征选择和多种分类器,但特征类型单一且样本数量较少.文献 202019Passive-Aggressive权限、Intent、DEX、APK良性:GooglePlay(37224)恶意:Genome(928),Drebin(5560),其他(33259)使用 N-Gram 结合在线增量学习检测恶意应用和恶意家族分类,但抗代码混淆能
37、力有待增强.基于权限相关性挖掘文献 222013PApriori权限良性:GooglePlay(2000)恶意:Genome(1260)挖掘恶意应用家族的频繁权限模式,但检测准确率较低.文献 212014SVM、决策树、随机森林权限良性:GooglePlay(310926)恶意:Genome(1260),VirusShare(3207)分析单个权限和协作权限组的风险,采用多种特征选择算法和多种分类器,但恶意应用和良性应用申请相同权限时,会降低该方法准确率.文献 232019PermPair权限良性:GooglePlay(5993)恶意:Genome(1264),Drebin(1744),Koo
38、dus(2975),Contagio(250),PwnZen(300)通过构建权限对图检测恶意应用,但检测申请权限较少的恶意应用时准确率较低.潘建文等:Android 恶意应用的静态检测方法综述1879和组件间调用图相结合,以检测具有控制流和数据流属性的恶意应用.为提高污点分析效率,张捷等人30提出基于污染变量关系图的污点分析方法 FastDroid.除了关注污点分析效率外,大量恶意应用采用代码保护技术,导致污点分析技术存在误报率较高的问题.为此,缪小川等人31使用敏感路径识别方法分析 Android应用的安全性,该方法首先提取组件间函数调用关系图,在图中寻找由敏感行为以及触发该行为的 API
39、组成的敏感路径,然后对敏感路径进行特征抽象化,以使用决策树模型检测恶意应用.王蕾等人32提出面向 Android 应用隐私泄露检测的多源污点分析技术可有效区分出分支互斥路径,提升了检测效率,并且降低了多源污点问题计算开销.也有研究工作关注到用户输入和行为等敏感操作与 API 调用序列之间存在一定关联关系.2015 年,Elish等人33使用 TriggerMetric 元组来表示用户输入和行为触发的敏感 API 调用特征,TriggerMetric 元组包括用户操作、触发器、依赖路径和 API 调用,可根据应用操作行为的不同区分良性应用和恶意应用.Alam 等人34提出了基于优势树(domin
40、ancetree)的 API 调用序列挖掘方法 DroidDomTree,改进 TF-IDF 方法为优势树中的节点分配权重,根据权重选择重要的 API 特征,从而提高了检测效率.3.2.2基于 API 调用依赖图的方法F1随着 Android 版本的升级,以及恶意应用的演化,常使用升级后的 API 实现相似的恶意功能,导致恶意应用检测模型逐渐老化.面对新出现的恶意应用时检测准确率不断下降,需要定期重新收集数据集再次训练,构建 API 调用关系图是减缓模型老化的有效方法.为此,Mariconti 等人35提出了基于行为模型马尔可夫链(Markovchain)的恶意应用检测方法 MaMa-Droi
41、d,将 API 调用图抽象成包和类序列以构建马尔可夫链形式的行为模型,以从中提取特征检测恶意应用.实验结果表明,将使用旧数据集训练的模型用于检测 1 年和 2 年后出现的新恶意应用时,值分别达到了 86%和 75%.为进一步缓解模型老化问题,Zhang等人36提出了 APIGraph 框架,通过构建 API 关系图分析 API 升级前后的语义相似性,以减缓模型老化.首先,采用 NLP 语义解析不同版本的 AndroidAPI 文档,从中提取 API、权限等实体并构建 API 关系图;然后使用图嵌入方法将图中的实体编码为向量,通过向量之间的差异表示实体间的语义相似性,以将语义相似的实体聚类到不同
42、簇中;最后使用实体簇训练模型以缓解 Drebin 和 MaMaDroid 等 Android 恶意应用检测工具老化速度.相似地,Xu 等人37提出了 SDAC 方法,根据现有 API 的贡献来评估新增 API对恶意应用检测模型的贡献,具体为根据 API 的语义距离对所有 API 进行聚类,在训练阶段创建一个可扩展的特征集,以通过添加检测阶段新增 API 特征的方式来适应 Android 版本差异所带来的 API 变化,实验结果表明,SDAC 的性能相较 MaMaDroid 取得了明显提升.为提升检测效率,相关研究使用社交网络分析技术检测 Android 恶意应用.例如,Wu 等人38提出了基于
43、图的轻量级检测方法 MalScan,将函数调用图视为社交网络,采用社交网络中心性分析获取图的语义特征,相比 Drebin 和 MaMaDroid 大幅度提升了检测速度.但是当恶意应用行为与良性应用行为相似时,MalScan 会出现漏报,为此 Zou 等人39提出了 IntDroid,在社交网络中心性分析的基础上,通过计算社交网络中敏感 API 和中心节点的平均亲密度来表示图的语义特征,以适当降低扩展性为代价取得了比 MalScan更高的准确率.Wu 等人40将函数调用图中的恶意部分节点仅占一小部分的恶意应用称为隐蔽恶意应用.隐蔽恶意应用的函数调用图中良性部分和恶意部分具有强相关性且所占比例较小
44、,导致 IntDroid 面对隐蔽恶意应用时检测性能下降.为此,他们提出了基于社 交 网 络 同 质 性 分 析 的 方法 HomDroid 检 测 隐 蔽Android 恶意应用,实验结果表明 HomDroid 检测隐蔽恶意应用性能优于 Drebin,MaMaDroid,IntDroid 等方法.随着对 Android 应用研究的深入,恶意应用检测方法取得较大进展,基于 API 调用依赖图的方法取得了较好的检测性能.然而,研究发现通过扰乱特征向量等方法可生成成功绕过检测的恶意应用.例如,Zhao 等人41提出了 Android 恶意应用对抗性攻击的方法,使用强化学习修改对函数调用依赖图,通过
45、插入节点、删除节点、添加边和重写的方式适应程序的操作(插入方法、删除方法、添加调用关系和重写),提高对抗性攻击的有效性.针对精心设计的对抗性攻击可能会绕过恶意应用检测模型的问题,Demontis 等人42提出了对抗规避攻击的恶意应用检测方法,通过对不同特征分配不同权重的方式来提高模型的鲁棒性.随着深度学习技术在各个领域取得良好成绩,研究人员也开始尝试使用深度学习检测 Android 恶意应用43-44.卷积神经网络(convolutionalneuralnetwork,CNN)仅能处理欧氏空间数据如图像、文本等,不支持非欧空间数据,如图数据45.而图数据能够更准确1880计算机研究与发展202
46、3,60(8)地表达 Android 应用和 API 之间调用关系,Gao 等人46提出使用图卷积神经网络(graphconvolutionalnetwork,GCN)检测 Android 恶意应用的方法 GDroid,将应用和 API 映射为异构图,恶意应用检测任务转换为节点分类任务,该方法以应用(APP)、API 间的调用关系和 API 的使用模式构建 APP-API 和 API-API 为边的异构图,并将异构图输入图卷积网络模型以检测恶意应用.相似地,Li 等人47也提出使用图卷积网络检测恶意应用的方法,该方法首先提取 API 调用序列生成有向循环图,然后使用马尔可夫链和主成分分析法提取
47、图的特征,并基于图卷积网络检测恶意应用.除此之外,AMalNet48还采用 GCN 结合独立循环网络(independentlyrecurrentneuralnetwork,IndRNN)的方式检测 Android 恶意应用.S3为了减少对图的分析,提升检测效率,研究人员将 API 调用图化分为多个子图集合.Feature49在函数调用图中标记敏感节点形成敏感函数调用图,然后从中挖掘出敏感子图(SSG)及其相邻子图(NSG),最后将 SSG 和 NSG 去重后编码为特征向量用于恶意应用检测.Fan 等人50提出了基于频繁子图的Android恶意应用检测方法 FalDroid,通过构建同一家族代
48、表性应用的频繁子图的方式,将敏感 API 调用关系图划分为子图集合,以减少图分析复杂度,提升检测恶意应用效率.类似地,Lu 等人51在提取函数调用图后,从图中删除敏感 API 节点距离大于的节点以简化函数调用图,构建去噪图卷积神经网络(denoisinggraphconvolutionalneuralnetwork),提升了恶意应用检测性能.除了文献 4951 构建 API 调用关系图的方法外,研究人员52还使用 API 调用上下文信息来提高检测精度.Allen 等人53对 API 调用上下文信息的有效性进行了全面研究,发现 API 调用的入口点对分类正确性影响较大,并提出了轻量级上下文感知系
49、统PIKADROID,以用于检测恶意应用.Zhang 等人54提出基于 API 语义依赖图的方法来检测 Android 恶意应用,并实现了原型系统 DroidSIFT,该方法首先提取上下文加权 API 依赖图作为程序语义来构造特征集合,然后根据图相似性来检测恶意应用.另外,MKLDroid55从应用程序的依赖图中捕获结构和上下文信息,以在依赖图中定位细粒度的恶意代码.同一家族应用程序具有类似的功能,可通过分析它们共同特征的相似性检测恶意应用.受推荐系统的启发,Frenklach 等人56提出了利用应用程序相似性图来检测 Android 恶意应用的方法,在该方法中,应用程序对应被推荐的项目,功能
50、对应用户.该方法首先提取并处理 API 调用图,从应用程序和功能的二分网络中生成应用相似性图(APPsimilaritygraph,ASG);然后采用 Node2Vec 图嵌入方法将 ASG 转为特征向量,以使用随机森林模型检测恶意应用.具有共同特征的恶意应用可能属于同一个恶意应用家族,Karbab 等人57据此在 Cypider58的基础上提出基于应用程序相似性网络的检测方法,该方法首先构建应用程序的相似性网络,从相似性网络中提取具有高连通性的子图作为社区,然后为每个社区生成单个社区指纹,最后使用 SVM 对社区指纹进行分类,以将恶意应用归类为不同家族.3.2.3基于 API 与其他特征相结