APP下载

Android恶意应用智能化分析方法研究综述

2023-10-31汤俊伟何儒汉

软件导刊 2023年10期
关键词:应用程序机器深度

张 驰,汤俊伟,何儒汉,徐 微,黄 晋

(1.纺织服装智能化湖北省工程研究中心;2.湖北省服装信息化工程技术研究中心;3.武汉纺织大学 计算机与人工智能学院,湖北 武汉 430200)

0 引言

智能手机在日常生活的参与度越来越高,使用率迅速增加,大多数用户使用社交、游戏、银行、教育等手机应用程序,包含许多敏感、有价值的数据,例如联系人信息、照片、银行信息、密码等。根据Statcounter 全球统计数据显示,2022 年10 月全球移动操作系统市场份额Android 占有率为71.6%。目前,Android 成为了受恶意软件影响最大的移动平台,托管第三方应用程序的开放架构和应用程序编程接口(API)[1],更是导致各种Android 恶意软件产品的爆炸性增长[2]。这些恶意软件执行恶意活动,给用户带来了包括资费消耗、隐私窃取、远程控制等巨大危害。

为此,本文将工作分为以下5 点:①总结Android 恶意应用检测使用静态、动态分析方法提取的恶意应用特征类型;②基于机器学习技术分析Android 恶意应用研究;③分析、概述Android 恶意应用分析模型的攻击方法,从对抗攻击、防护层面归纳与Android 恶意应用检测攻防相关的工作;④在共同数据集上,比较分析Android 恶意应用的传统机器学习和深度学习方法,并归纳对抗分析的研究现状;⑤讨论Android 恶意应用智能化分析方法领域的发展趋势,从特征、数据集、分析模型方面对未来研究方向和挑战进行总结。

1 Android恶意应用分析方法特征类型

1.1 静态分析特征

静态分析不涉及代码执行,是对应用程序包进行分析的过程,如图1所示。

Fig.1 Process of static analysis图1 静态分析过程

静态分析过程主要关注Android 应用程序包(APK)中的清单文件和源代码文件(class.dex)。清单文件包含有关权限、硬件组件的信息及有关包的其他详细信息。源代码文件包含所有编程代码,例如API 信息、Intent、系统事件等,还可从应用商店中提取元数据信息进行静态分析,以下示例为静态分析特征及相关描述。

1.1.1 权限

应用程序需请求各自的特定权限来执行代码,使得应用程序在未经用户同意和批准情况下,将无法执行或运行任何后台活动[3-5]。

1.1.2 Intents

该数据用于组件活动、services 等之间进行通信的消息对象,执行需要系统干预或在其他操作开始时使用,通常用于分析应用程序的恶意行为[3]。

1.1.3 硬件组件

例如,GPS、麦克风、等可能会被恶意软件应用程序使用,研究和分析这些活动有助于识别恶意软件应用程序[3,6]。

1.1.4 API calls

将apk 文件中dex 文件转换成Java 文件,从中提取API调用数据进行静态分析[3,5-8]。

1.1.5 数据流与函数调用图

从classes.dex 文件中提取源代码,创建语句依赖关系图,假设语句为节点,控制流为节点路径,将一种恶意代码模式转换为图。创建数据流图和与函数调用相关的图来设计恶意应用检测方法[9-10]。

1.1.6 污点分析

污点分析是检测来自源和接收器中敏感数据流的方法[11-12]。

1.1.7 操作码(opcode)/URL

使用通过反汇编得到的dalvik 字节码中的操作码进行分析,例如使用Java 代码中的特定字符串测试、分析网络流量[13-14]。

1.1.8 Java字节码/APK-API图像

将Java 字节码转换为图像用于检测,将源代码中的对象和类,根据清单文件的有关权限进行分析或将APK 文件的字节码转换为图像[15],使用机器学习对图像进行分类[16]。

1.1.9 系统事件

从API 获取系统服务(使应用程序与系统交互)事件,作为分析特征[17-18]。

1.1.10 元数据信息

Android 应用在应用商店的信息,例如APK 名称、开发者信息、评分、评论等,可能有助于分类应用[3,6]。

1.2 动态分析特征

动态分析涉及代码执行与观察,需要一个隔离环境来运行应用程序并实时观察信息[3,19],相较于静态分析更复杂,需要一些资源和技术组合来观察并得出结论[20],主要将应用程序安装到沙箱或虚拟机中模拟用户触发行为,运行应用程序,并记录监控模拟运行期间行为。以下为用于动态分析的主要特征及相关描述,图2为动态分析过程。

Fig.2 Process of dynamic analysis图2 动态分析过程

1.2.1 系统调用

通过收集系统调用日志,使用系统调用分析检测恶意活动。

1.2.2 信息流

在污点分析情况下观察源和目的地。在网络流量分析中,分析数据包大小、类型、进出的频率等参数[12]。

1.2.3 函数调用

使用API 框架动态监测函数调用情况,跟踪使用参数,重建函数调用序列用于分析[3]。

1.2.4 依赖图

为特定的敏感代码片断创建控制流图,使用该图对应用程序进行分析分类[21]。

1.2.5 硬件组件

分析运行的硬件组件、系统参数,例如电池数据[3]、内存的利用率、应用程序内存等。

1.2.6 API和权限

应用程序执行时使用的权限和调用的API[22-23]。

1.2.7 通信

短信、电话、URLs、WiFi、GPS 和蓝牙能连接系统与外部实体,可作为单一或多个因素的组合进行观察,以达到检测目的[23-24]。

1.2.8 代码注入

在源代码中注入特殊代码,运行时执行该代码跟踪目标API,并为分析过程创建日志以检测恶意行为[25]。

2 基于机器学习的Android恶意应用检测

2.1 传统机器学习

动态分析的低代码覆盖率和低效率,限制了基于动态特征的恶意应用检测方法的大规模部署[26]。因此,研究者开始利用静态分析和机器学习提出大量的检测方法[27-29]。机器学习是在恶意应用检测过程中应用程序分类技术,包括训练和测试[30]两个主要模块。其中,在训练模块从特征集中学习良性和恶意应用程序的行为;在测试模块中对新的应用程序进行相应分类[31],测试算法准确性。

现有方法已探索了丰富的静态特征[21,32-33],根据这些特征可构建基于各种机器学习算法的检测模型,如表1所示。

Table 1 Investigation results of traditional machine learning for Android malicious application detection表1 传统机器学习进行Android恶意应用检测的调查结果

Rana 等[28]比较各种机器学习算法在恶意应用检测领域情况下的性能发现,支持向量机(Support Vector Machine,SVM)、随机森林(Random Forest,RF)和K 最邻近(K-NearestNeighbo,KNN)相较于其他算法表现良好,准确率超过90%。Kumar 等[34]使用机器学习比较各种算法的提取结果,发现SVM 表现更好,准确率超过95%。

针对特征间的相关性及特征权重的计算,Cai 等[4]采用静态分析方法,从APK 文件中提取8 个类别的原始特征,使用信息增益(Information Gain,IG)选择一定数量的最重要特征,通过机器学习模型计算每个选定特征的初始权重并使用权重映射函数将初始权重映射到最终权重,最后使用差分进化(Different Evolution,DE)算法联合优化权重,映射函数和分类器的参数,在Drebin[28]、AMD[35]上均取得96%以上的精确率。

此外,Chawla 等[36]提出一种基于信号处理和机器学习的方法,利用嵌入式设备的电磁发射来远程检测设备上运行的恶意应用程序,开发了基于快速傅里叶变换的特征提取方法,使用SVM、RF 模型检测恶意应用。Taheri 等[37]使用汉明距离寻找恶意样本间的相似性,提出第一最近邻、所有最近邻、加权所有最近邻和基于K-medoid 的最近邻4种恶意应用检测方法,在Drebin 等3 个数据集上选取API、Intent 和Permission 特征进行实验,结果表明算法的准确率均超过90%。

2.2 基于深度学习

深度学习在图像分析、神经机器翻译及其他领域的突出贡献,为许多最先进、基于人工智能的应用奠定了基础[38]。目前,各种深度学习结构已应用于Android 恶意应用的检测或分类,并取得了良好的效果,恶意应用检测深度学习体系结构如图3所示。

Fig.3 Malicious application detection based on deep learning architecture图3 基于深度学习体系结构的恶意应用检测

由图3 可见,该方法相较于传统机器学习方法,在Android 恶意应用分析领域的应用中具有以下优点:①深度学习擅长学习应用程序中更复杂模式的高级抽象表示[38];②深度学习能自动学习潜在表示,具有更强的泛化能力,极大减轻了研究者描述Android 应用程序特征时繁琐、主观、易出错的特征工程任务[15,39-40];③深度学习提供了针对不同任务定制特定结构的灵活性。例如,可使用带有词嵌入包的长短期记忆(Long Short-Term Memory,LSTM)层,将Android 权限序列编码成特征,然后将提取的特征通过非线性激活函数送入激活层全连接层进行分类[17]。

Android 应用的原始特征可直接输入深度学习模型中,学习高级语义特征表示。一方面可通过反编译从Android 应用中提取操作码序列,采用深度学习序列数据分类技术处理原始操作码序列,从而实现深度神经网络自动学习高级语义特征表示[40];另一方面通过反编译应用程序提取其中的classes.dex 字节码,受自然语言处理(Natural Language Processing,NLP)或图像分类技术的启发,使用编码技术将classes.dex 字节码编码后的图像送入深度神经模型自动提取特征和学习[15]。

表2 为使用深度神经网络模型进行Android 恶意应用检测或分类的调查研究,展示了每项研究的关键点和差异。

Table 2 Investigation results of Android malicious application detection or classification based on deep neural network model表2 基于深度神经网络模型进行Android恶意应用检测或分类的调查结果

2.2.1 特征表示方法

向量化表示是Android 恶意应用检测或分类中最广泛使用的表示方法。对于提取的语义字符串特征,矢量化表示可使用one-hot 编码技术、词频—逆文档频率(TF-IDF)技术[41-42]或word2vec[17]等嵌入技术进行构造。

(1)基于图像特征的表示。Iadarola 等[15]通过图像表示移动应用程序,利用梯度加权类激活映射(Grad-CAM)算法,定位图像中对模型有用的显著部分,还引入累积热图(Cumulative Heatmap)为分类器决策提供可解释性支持。Vasan 等[16]将原始恶意软件二进制文件转换为彩色图像,结合数据增强方法微调卷积神经网络架构,检测和识别恶意软件家族,在不平衡IoT-android 移动应用数据集上的准确率超过97.35%。李默等[43]将DEX、XML 与JAR文件进行灰度图像化处理,使用Bilinear 插值算法放缩图片尺寸,将3 张灰度图合成一张三维RGB 图像,通过结合SplitAttention 的ResNeSt 的算法进行训练分类,在Drebin 数据集上的平均分类准确率达到98.97%。

(2)基于函数调用序列的表示。Imtiaz 等[8]提出使用深度人工神经网络(Artificial Neural Network,ANN)检测真实世界恶意应用的方法DeepAMD,并在CICAndMal2019 数据集的实验表明,该算法在静态特征集上恶意应用分类、恶意应用类别分类、恶意应用家族分类的最高准确率分别为93.4%、92.5%和90%。此外,为恶意应用程序分配家族标签,是将具有相同行为的恶意应用归为一类的常见做法。Mirzaei 等[44]提出从不同家族的聚合调用图中提取敏感的API,调用集合的Android 恶意应用家族表征系统,指出移动勒索软件和短信木马类型恶意应用的恶意操作不一定是同时使用多个敏感的API调用所执行。

(3)基于图结构特征的表示。目前,各种图结构已被提出描述Android 应用程序,例如API 调用图、控制流图(CFG)等,这些图可直接提供给深度学习模型,相较于某些Android 恶意应用中的规避技术具有更高的鲁棒性。

Huang 等[9]通过选择与恶意软件相关的API 特征,并结合API 间的结构关系,将它们映射到一个矩阵作为卷积神经网络分类器。具体为,基于API 的输入特征图选择API 特征选择,使用调和平均函数考虑恶意软件的出现频率及恶意与良性软件间的出现频率差异。Feng 等[45]通过轻量级静态分析提取近似调用图和函数内语义信息来表示Android 应用程序,并通过Word2Vec 进一步提取所需权限、安全级别和Smali 指令的语义信息等函数内属性,以形成图结构的节点属性,使用图神经网络生成应用程序的向量表示,然后在该表示空间上检测恶意软件。Pektaş 等[10]通过对Android 应用程序进行伪动态分析,为每个执行路径构建API 调用图,提取执行路径信息,并将图嵌入用于训练深度神经网络(Deep Neural Networks,DNN)的低维特征向量,利用卷积层从图嵌入矩阵中检测、提取隐藏的结构相似性,并依据组合卷积层发现的所有复杂局部特征来确定该应用的属性。Pei 等[5]提出一种基于联合特征向量的新型深度学习框架AMalNet,在提取的所有权限、组件和API 静态特征文本数据中,通过word2vec 嵌入技术将文本数据的词、字符和词汇特征作为图的节点,并映射到向量中,集成图卷积神经网络(Graph Convolutional Networks,GCNs)与独立循环神经网络(Independent Recurrent Neural Network,RNN,IndRNN)形成检测模型。

2.2.2 数据集处理

训练数据可能包含噪声标签,是基于机器学习的Android 恶意应用检测的一个常见问题。Xu 等[46]提出差分训练(Differential Training)作为通用框架,用于检测、减少训练数据中的标签噪声。差分训练在整个噪声检测训练过程中使用输入样本的中间状态,使用下采样集来最大化错误标记样本与正确标记样本间的差异,并且异常值检测算法不依赖一小组正确标记的训练样本。同时,使用SDAC[47]、Drebin 和DeepRefiner[39]这3 种不同的Android 恶意应用检测方法评估差异训练的有效性。在3 个不同的数据集的实验结果表明,差分训练可将错误标记的样本大小分别减少到原始大小的12.6%、17.4%和35.3%,在对噪声水平约为10%的训练数据集进行降噪后,差异训练显著提升了每种恶意应用检测方法的性能。

然而,缺乏恶意软件源代码是恶意应用安全研究的一大阻碍。Rokon 等[48]提出有效识别恶意软件源代码存储库的监督学习方法——SourceFinder,识别恶意软件存储库的准确率为89%,创建了拥有7 504 个存储库的非商业恶意软件源代码档案库,研究了恶意软件存储库及其作者的基本属性和趋势。

3 Android恶意应用检测对抗攻击与防护

3.1 对抗攻击

对抗样本攻击是指故意对输入样本添加一些人无法察觉的细微干扰,导致模型以高置信度给出一个错误输出。由于建立模型的内在假设是训练和测试数据来自相同的分布,然而恶意样本违反了这种假设,在特征向量中激活一定数量的特征,使其逃避基于人工智能的恶意应用检测而不影响其恶意功能,因此恶意应用检测的机器学习模型可能会受到精心设计的对抗样本攻击。

在白盒攻击中,假设对手拥有关于知识矩阵(知识矩阵由训练数据、特征集、ML/DL 算法的目标函数和模型结构等信息组成)的完整信息;而在黑盒攻击中,假设对手不知道知识矩阵。基于目标的攻击者可通过故意注入错误标记的样本来执行针对训练阶段的中毒攻击,从而降低模型的检测能力,还可执行规避攻击修改测试样本以强制检测模型错误分类。因此,在对抗攻击时若能在任何实际任务部署前进行验证,将提升检测模型的鲁棒性。

表3为Android 恶意应用检测对抗攻击调查研究结果,展示了每项研究的关键点及其差异。Hu 等[49]提出基于生成对抗网络(Generative Adversarial Network,GAN)的算法(MalGAN),生成对抗性的恶意软件实例能绕过基于黑盒的机器学习检测模型,通过替代检测器适应黑盒恶意软件检测系统,能将检测率降低到接近零,并使基于再训练的对抗性实例的防御方法难以发挥作用。Chen 等[50]直接在APK 的Dalvik 字节码上扰动制作对抗样本,以逃避从Dalvik 字节码中收集特征(句法或语义特征)来捕获恶意行为的检测器,该方法成功地欺骗了Drebin、MaMaDroid[51]等基于机器学习的检测方法。Grosse 等[18]扩展了Papernot等[52]提出的方法,既调整了处理二进制文件的功能,又保留了应用程序的恶意功能,在Drebin 数据集应用该攻击的误导比率高于63%。Demontis 等[53]针对关注0,1 型特征(1表示应用存在某个特征,0表示不存在)的Drebin 模型指出一些潜在的攻击场景,主要就混淆攻击进行研究,仅使用Android 应用代码混淆和加密工具DexGuard 对Drebin 产生一定干扰。

Table 3 Android malicious application counterattack investigation results表3 Android恶意应用对抗攻击调查结果

Chen 等[54]提出现实世界中的中毒攻击表现为弱、强和复杂3 种类型,采用基于Jocobian 矩阵的对抗制作算法[52],在语义上以对抗攻击的攻击性为特征,使用语法特征生成伪装样本可在很大程度上模拟现实世界的攻击,能误导Drebin 和MaMaDroid 使用基于机器学习方法的检测系统。Rathore 等[55]通过中毒/修改恶意样本让安卓恶意应用检测模型错误分类,使用经典机器学习、集成(bagging &boosting)算法和深度神经网络构建各种检测模型使用规避攻击策略,在12 种不同恶意应用检测模型的平均欺骗率均超过50%,基于决策树的检测模型欺骗率最高,达到68.54%。Severi 等[56]研究基于特征的机器学习恶意应用分类器分析后门样本中毒攻击的敏感性,为解决攻击者无法控制样本标记过程的干净标签攻击,提出与模型无关的基于特征使用可解释机器学习的恶意应用分类器来生成后门样本,在Drebin 数据集中将30个特征后门样本作为训练线性SVM 的原始545 K 维向量,在2%的中毒率下攻击将后门样本的模型准确度平均降低到42.9%。

3.2 检测防护

Sebastián 等[57]在AVclass 等[58]基础上建立AVclass 2,使其从专门针对恶意应用家族的恶意应用标记工具演变为恶意应用标签提取工具,自动从反病毒(Anti-Virus,AV)引擎的检测标签中提取标签,并根据恶意应用类别、系列、行为等分类恶意应用样本。

由于构建了不封闭标签集的开放分类法,因此既可处理AV 供应商随时间推移引入的新标签,还能通过概括反病毒标签中发现的关系扩展输入分类法、标记和扩展规则。Demontis 等[53]针对规避攻击提出对抗感知机器学习检测器,通过更均匀分布的特征权重提升线性分类系统的安全性,甚至能确保在基于DexGuard 的混淆下仍然具有较强的鲁棒性,所提出的安全学习范式减轻了规避攻击的影响,在没有攻击的情况下还略微降低了检测率。

Chen 等[54]提出两阶段迭代的基于对抗的检测模型(KUAFUDET),引入自动伪装检测器过滤可疑的假阴性,并将其反馈到训练阶段以解决对抗环境,增强了恶意软件检测系统的鲁棒性,实验表明该模型可显著减少假阴性并将检测准确率提升至少15%。Grosse 等[18]使用DNN 训练的恶意软件检测模型的潜在防御机制,防御蒸馏和对抗再训练,实验表明该方法降低了对抗样本的错误分类率,但观察到的改进通常可忽略不计。

相比之下,在对抗训练期间引入扰动,仅使用对抗制作的恶意软件应用程序训练模型就能提升算法的鲁棒性。Rathore 等[55]针对对抗攻击使用对抗再训练作为防御机制,以构建稳健的恶意应用检测模型。防御机制在12 种不同的检测模型下将同一攻击的平均欺骗率降低到1/3。Han 等[22]开发了FARM 的检测器,提出基于标志点的特征变换、基于特征值聚类的特征变换和基于关联图的特征变换3 种特征变换技术,用于生成逆向工程难以得到的特征向量,面对伪造API 调用、权限请求和人为减少API 调用次数3种攻击均表现出良好的鲁棒性。

4 未来研究方向

4.1 更有效的特征组合方法

静态分析对高级别混淆后的应用局限性较高,难以保证动态分析代码覆盖率。然而,通过动态分析和静态分析集成的方法可能是增强准确性,减轻静态、动态恶意应用分析缺点的解决方案。因此,后续应研究与Android 恶意应用检测相关的各种因素,例如通过不同策略进行混合分析。

4.2 更完备数据集的生成方法

Android 恶意软件仍在不断演变,然而大多数研究并未公开研究数据集,缺乏基准Android 恶意软件数据集。如果能使用最新应用程序创建数据集并公开,将对研究者评估所提技术具有极大帮助。在数据集处理方面,检测并减少数据集中的标签噪声能有效提升恶意应用检测方法的性能。此外,最新提出的Android 恶意应用检测研究在实际应用具有重要意义,但当前针对此类的研究较少、难度更大,有待深入研究。

4.3 更鲁棒的深度学习分析模型

Android 恶意应用程序使用的规避技术,在恶意应用开发者和安全研究者间引发了军备竞赛。目前,大多数机器学习模型对对抗示例缺乏鲁棒性,在训练或测试阶段可能发生对抗攻击、中毒攻击、规避攻击、模拟攻击、反转攻击等,因此深度学习算法需提升鲁棒性和安全性以抵御上述攻击。

目前,大多数对抗样本只能欺骗依赖句法特征(请求的权限、API 调用等)的检测方法,并且只能简单地修改应用程序清单实现扰动。虽然部分对抗样本具有欺骗依赖语义特征(控制流图)的机器学习检测方法,但需要密切关注恶意应用程序使用的创新规避技术、新型威胁、新型攻击、防御对抗机器学习攻击、防御对抗攻击应用检测、抗混淆等方法,以便作好准备对其采取防御措施。

4.4 可解释深度学习的恶意应用检测

深度学习模型包含隐藏层,解释算法在决策时缺乏透明度。如何提升深度学习模型的可解释性(全局和局部可解释性)和透明度,使其真正在实际场景中应用,是未来的研究方向之一。此外,基于深度学习的算法需要持续再训练、细致调整超参数。同时,与Android 恶意应用分类相关的维度缩减、处理不平衡数据等问题尚未被深入研究。

5 结语

由于移动应用程序的指数级增长,移动恶意应用已被认为是对企业、政府和个人的主要网络威胁之一。本文归纳了Android 恶意应用检测中静态、动态分析常用的特征,分析了Android 恶意应用的不同检测技术,对使用人工智能技术检测Android 恶意应用进行了回顾,还讨论了Android 恶意应用阻碍分析、逃避检测的能力与防护方法。此外,本文总结归纳了现有研究的优势与不足之处,强调从研究中获得主要见解,并提出未来的研究方向。

猜你喜欢

应用程序机器深度
机器狗
机器狗
深度理解一元一次方程
删除Win10中自带的应用程序
深度观察
深度观察
未来机器城
深度观察
三星电子将开设应用程序下载商店
微软软件商店开始接受应用程序