FEDroid

FEdroid:基于轻量级且可解释的基于机器学习的Android恶意软件检测系统

摘要

安卓操作系统以其开源特性和灵活性而闻名,占据了全球最大的市场份额,但同时也面临着严重的安全挑战,尤其是来自恶意软件威胁的挑战。现有的研究往往依赖于复杂的特征工程来进行恶意软件检测,这导致方法繁琐,容易受到噪声干扰,并且缺乏有效的特征选择机制。一些深度学习方法也存在效率低下的问题。 本文介绍了一个名为“FEdroid”的轻量级且可解释的安卓恶意软件检测系统。该系统专注于使用敏感 API 的代码段,简化了分析过程并提取关键信息,采用 XGBoost 进行跨特征选择,以集中于一个最小但至关重要的特征集。这种方法提高了检测准确率,同时减少了设备资源使用。 实验结果表明,该系统在 18,653 个 APK 样本上实现了 98.26%的准确率和仅 1.86%的假阴性率,显著提高了检测效率和准确性,同时最大限度地减少了部署资源依赖。此外,将夏普利值应用于解释性分析极大地提高了分类器模型的透明度和可理解性,从而提升了整个系统的可解释性。

1 引言

安卓是一款基于修改版 Linux 内核以及其他开源软件的移动操作系统,主要面向诸如智能手机和平板电脑等触摸屏移动设备[1]。由于其开源特性以及丰富的移动应用程序种类,安卓为用户提供了在在线交易、购物、社交网络和游戏方面的卓越体验。安卓系统不仅支持庞大的应用生态系统,还为开发者提供了一个灵活的开发平台,使应用功能能够持续创新和提升。截至 2024 年,安卓在全球市场的占有率为 70.93%[2],在移动操作系统市场中占据主导地位。这种广泛的普及程度使得安卓成为开发者和用户都青睐的平台。

尽管在移动操作系统市场中是一个广受欢迎且占据主导地位的平台,但安卓系统为用户提供了诸多便利和创新之处;其开放性和灵活性也带来了安全风险和挑战。安卓系统的特性使得攻击者更容易创建和传播恶意软件。恶意软件是指任何对用户、其数据或设备构成风险的代码,包括潜在有害的应用程序(PHAs)、修改后的二进制文件和框架等。这类恶意软件包括木马、网络钓鱼攻击和间谍软件等。根据卡巴斯基安全网络的数据,在 2024 年第一季度,检测到超过 389,000 个恶意安装包[3],这一惊人的数字凸显了安全风险的严重性。

安卓恶意软件可通过多种渠道传播,包括非官方应用商店、钓鱼网站以及受感染的附件。谷歌应用商店(Google Play)作为应用数量和下载量最多的应用商店([4]),拥有超过 300 万的应用程序。用户通常认为从谷歌应用商店安装应用是安全的。然而,根据卡巴斯基的报告,2023 年谷歌应用商店的恶意下载量超过了 600 万次,其中包括各种类型的恶意软件,如 iRecorder、木马、间谍软件、广告软件和诈骗应用程序[5]。这些威胁对个人隐私和设备安全构成了严重威胁。此类恶意软件不仅会窃取用户的敏感信息,还会在用户不知情的情况下滥用权限,从而干扰设备的正常运行,甚至成为大规模网络攻击的入口。在当前的移动生态系统中,安卓恶意软件带来的威胁已经达到了不容忽视的程度,需要开发创新的解决方案来应对这一挑战。

恶意软件检测方法可分为三种类型:静态分析、动态分析以及混合分析[6]。静态分析无需执行应用程序,而是通过分析诸如资源文件和二进制代码等特征来识别可疑的行为模式,包括敏感的 API 调用、异常的字符串以及可疑的结构特征。动态分析则是在受控的沙盒环境中执行恶意软件,以监测其在系统内的行为特征,包括系统调用和网络活动,从而识别出具有恶意软件特征的模式。静态分析与动态分析的结合被称为混合分析。

每种方法都有其优点和缺点。静态分析可能无法全面捕捉软件的所有意图和行为特征。而动态分析能更准确地反映恶意软件的真实行为,但它速度较慢,并且有些恶意软件能够检测沙盒环境以掩盖其真实意图。混合分析则利用了静态和动态方法的优势。与动态和混合分析相比,静态分析较为轻便,因为它不需要监控应用程序的执行。相比之下,执行应用程序则需要各种监控方法来追踪受污染的流程并监控系统资源,这会消耗大量的计算资源和时间[7]。

现有的静态分析研究主要对整个软件中的所有信息进行分析,包括所有的代码和资源[8-13]。然而,安卓恶意软件的恶意行为通常只存在于一小部分代码中。虽然这种全面的方法看似详尽无遗,但确实存在一些显著的缺陷。首先,处理大量无关信息会导致冗余,并增加数据处理的负担。其次,分析整个软件的复杂性显著增加,需要更多的计算资源和时间,从而导致检测效率和及时性的降低。因此,开发更高效的分析方法,重点关注关键代码段至关重要,这有助于提高恶意软件检测的准确性和及时性。

在安卓恶意软件检测中,特征冗余是一个相当重要的问题,因为许多研究并未采用特征选择方法[14-17]。然而,特征选择在恶意软件检测中具有诸多优势[18]。通过减少特征的数量,它能够显著降低模型所需的计算资源,从而提高效率。选择最相关和最具代表性的特征能够有效地减少无关特征带来的噪声干扰,进而提高模型的泛化能力——即面对未知数据时的表现。精心挑选的特征对于模型的可解释性至关重要,因为它们简化了模型的复杂性,使决策过程更加透明,有助于更好地理解软件的恶意行为。

此外,大多数安卓恶意软件检测系统都采用了深度学习技术,但在实际应用中部署时会遇到一些难题。这主要是因为深度学习模型通常需要大量的训练数据和计算资源才能保持其准确性和可靠性。此外,深度学习的黑箱特性意味着模型的决策过程难以解释,这进一步增加了其在实际环境中的应用难度。因此,开发更具可解释性且资源需求更低的检测方法至关重要。
基于上述讨论的问题,本文提出了一种端到端、轻量级且可解释的 Android 恶意软件检测系统,名为“FEdroid”,该系统利用机器学习方法。我们的研究重点在于开发一种机器学习解决方案,通过提取最少数量的关键特征来最小化资源依赖。这种策略在保持高恶意软件检测准确性和泛化能力的同时,减少了设备资源消耗。

本研究的主要贡献如下:

  1. 关键特征提取与选择:我们专注于那些使用敏感 API 的代码段,以提取最有可能与恶意行为相关的特征,从而减少处理的数据量并简化分析过程。此外,我们提出了一种利用 XGBoost 的跨特征选择方法,它仅从大量特征集中筛选出最重要的特征。这种方法确保了恶意软件检测的准确性,同时显著缩短了检测时间。
  2. 轻量级:我们基于机器学习开发了一套针对安卓设备的高精度恶意软件检测系统,该系统无需运行已安装的应用程序即可分析其提取的静态特征。通过使用高效的机器学习算法,这种方法提高了检测效率,同时显著减少了系统资源消耗,使检测过程更加高效和安全。
  3. 模型可解释性:通过运用 Shapley 值进行解释性分析,我们提升了分类器模型的透明度和可理解性。这种方法显著提高了系统的整体可解释性,使用户和开发人员能够更好地理解模型的决策过程,从而增强对检测结果的信任。

本文其余部分的组织结构如下:第 2 节讨论了针对安卓恶意软件检测的先前研究解决方案。第 3 节介绍了我们提出的特征提取和特征缩减算法,以及整个系统架构。第 4 节介绍了所使用的数据集和实验设置。第 5 节展示了本研究的实验结果。第 6 节应用 SHAP 进行模型解释。第 7 节比较并讨论了我们的方法与其他先进方法相比的优缺点。最后,第 8 节总结了研究结论,并提出了未来研究的方向。

2 Related work

本节将回顾有关安卓恶意软件检测的先前研究。

2.1 静态分析

静态分析方法在应用程序执行之前就能检测出恶意软件,从而避免系统感染的风险。这种方法通过从软件中提取多种特征来识别恶意软件,例如操作码、权限、API 调用、程序组件和资源文件等。在静态分析中,提取的特征通常被分为三类:基于 APK 的特征、基于图像的特征和基于图的特征。

2.1.1 基于 APK 的功能特性

基于 APK 的特征是直接从应用程序本身提取出来的。例如,Ariffin 等人[19]利用基于权限的静态分析方法来检测安卓恶意软件。研究人员使用了萨欣等人[20]研究中的一个包含 399 个样本的数据集,其中包括 200 个良性应用程序和 199 个恶意应用程序。每个应用程序由 330 个权限特征来描述,如果权限存在于应用程序中则赋值为 1,否则赋值为 0。为了提高分类准确率,该研究提出了一个权限加权方法,为每个权限分配不同的分数。随后应用了 K 近邻(KNN)和朴素贝叶斯(NB)算法进行分类,并与先前的研究结果进行了比较。实验结果表明,支持向量机(SVM)模型的平均准确率为 95%,KNN 达到 94%,NB 达到 90%。
RealMalSol [21] 是一个利用静态分析来检测 Android 恶意软件的系统,其重点在于应用程序的权限和意图特性。研究人员使用了 CICInvesAndMal2019 数据集,该数据集包含 954 个训练样本和 630 个测试样本,总共包含 8111 个特征。为了提高模型的准确性和确保其与 Android 设备的计算能力相兼容,他们实施了特征缩减技术,将特征数量从 8111 个减少到 1024 个,然后使用 TensorFlow Lite 进行模型量化,进一步优化了模型。在实验中,RealMalSol 在完整数据集上的准确率达到了 95.2%,经过特征缩减后准确率提高到了 96.4%。
此外,针对利用操作码序列进行恶意软件检测的研究数量不断增加。分析程序的操作码序列能够为它们的行为和功能提供关键的见解,从而为恶意软件检测工作提供支持。Balikcioglu 等人[22]提出了一种基于长短期记忆(LSTM)网络的安卓恶意软件检测方法,他们采用自然语言处理(NLP)技术来解决该问题。他们利用了三个反编译工具——JEB、IDA Pro 和 Apktool,从安卓应用程序中提取汇编代码特征。研究人员构建了两个数据集,其中包括来自 AndMal2017 和 AndMal2020 的样本,以及从 VirusShare 网站收集的恶意应用程序。他们从这些样本中提取了与指令、基本块、方法和类相关的特征序列,并使用 LSTM 网络对这些序列进行建模。实验结果表明,使用 Apktool 提取的数据集在类作为序列模型(CSM)上表现出了最佳的模型性能,准确率达到 88.7%。
LTAChecker [23] 是一个基于注意力时序网络的轻量级安卓恶意软件检测框架。研究人员通过分析安卓应用程序的 Dalvik 操作码序列,采用静态分析方法,并利用 N-gram 算法对序列进行分段提取上下文特征。他们还应用遗传算法(GA)进行特征选择,以筛选出不那么重要的特征。在建模方面,该研究引入了一种新颖的轻量级时序注意力(LTA)模型,该模型将 LSTM 网络与时间卷积网络(TCN)相结合,融入多头注意力机制和强化学习以增强模型检测恶意行为线索的能力。所使用的数据集包括 CIC-InvesAndMal2019 和 RmvDroid,其中包含 1400 个良性样本和 1266 个恶意样本。实验结果表明,LTAChecker 框架实现了平均检测准确率为 98.69%。

2.1.2 基于图像的特征

利用图像进行恶意软件检测是一种新颖的方法,其流程包括将恶意软件样本转换为图像,然后利用计算机视觉和图像处理技术对其进行分析和识别。纳塔拉杰等人[11]是提出基于图像处理的恶意软件检测方法的先驱。他们将恶意软件转换为灰度图像,并使用图像处理技术进行分类。

Kiraz 等人 [24] 通过可视化 Android 应用程序的静态特征来识别恶意软件。研究人员使用了 CICMalDroid 2020 数据集和 AndroPyTool 来提取静态特征,包括权限、意图、接收者和服务等。这些特征通过 BERT 模型转换为数值向量,随后以图像文件的形式保存下来。然后将这些单色图像拼接成一张图像,以便由 CNN 模型进行分类。实验结果表明,这种方法表现优异,准确率、F1 分数、召回率和精确率均达到了 91%以上。
此外,一些研究人员已经探索了将恶意软件转化为彩色图像的方法。这种方法不仅丰富了数据的表示形式,而且还有可能为分类和分析提供更多的信息。
朱等人[25]提出了一种创新的端到端安卓恶意软件检测框架,该框架将 Dalvik 执行文件(DEX)的关键组件转换为 RGB 图像。他们采用了 MADRF-CNN 模型,这是一种结合了最大池化和平均池化的卷积神经网络变体,用于捕捉图像不同部分之间的依赖关系。研究人员使用了一个包含过去两年收集的 2507 个恶意应用程序和 1417 个良性应用程序的数据集进行了实验。结果表明,MADRF-CNN 模型在多个评估指标上表现出了出色的性能,准确率为 96.9%。

2.1.3 基于图的特征

许多研究人员使用图结构来进行恶意软件检测。例如,Msdroid [26] 是一个基于图神经网络的安卓恶意软件检测系统,它通过提取以敏感 API 为中心的行为子图,并整合诸如 API 调用图、操作码和权限等特征来识别恶意行为。利用超过 81,000 个应用程序的数据集,MSDROID 展示出了 97.82% 的准确率,并在复杂场景中表现出卓越的鲁棒性,包括零日攻击、应用程序演变和代码混淆,与现有技术相比,F1 分数提高了高达 49.52%。此外,MSDROID 提供了一种解释机制,增强了模型的可解释性,帮助安全专家进行恶意软件分析。
Gu 等人[27]提出了一种名为 GSEDroid 的 Android 恶意软件检测框架,该框架基于图神经网络(GNN),并使用轻量级的语义嵌入模型来提取特征。分析方法结合了 CodeBERT 和 TextCNN,有效地表示 Dalvik 操作码序列,并构建了一个整合权限和操作码语义特征的 API 调用图。研究人员利用 Kronodroid 数据集,该数据集包含了从 2008 年到 2020 年收集的大量 Android 恶意软件样本。GSEDroid 框架将 Android 恶意软件检测转化为图分类任务,使用 GraphSage 和 SAGPooling 图神经网络算法实现。实验结果表明,该方法的准确率达到了 99.47%,F1 分数为 99.44%。

2.2 动态分析

动态分析方法是在受控环境中(如沙盒)执行应用程序,以观察其行为以及它们所引起的改变。这包括监测诸如内存使用、电池消耗、网络流量以及 API 调用序列等方面的情况。
Manzil 等人[28]提出了一种基于霍夫曼编码的特征向量生成技术,通过动态分析方法监测系统调用频率来提取 139 个系统调用特征。这些特征反映了应用程序的动态行为模式。该研究使用了 CICMalDroid 数据集,该数据集包含 11598 个 Android 应用程序样本,分为五个组:广告软件、银行恶意软件、短信恶意软件、风险软件和良性软件。实验结果表明,随机森林模型与基于霍夫曼编码的特征向量生成技术相结合,检测准确率达到了 98.70%。

DroidHook [29] 是一款针对安卓恶意软件的新型基于 API 挂钩的动态分析沙盒。与传统的动态沙盒不同,DroidHook 具有两项关键优势:首先,它允许轻松修改要监测的 API 集,从而能够适应各种场景,包括检测特定的恶意软件家族和未知的恶意软件;其次,它不依赖于特定版本的安卓操作系统,而是依赖于 Xposed 框架,使其能够在多个安卓版本上运行,并在模拟器和真实设备上有效运作。研究人员使用 CICMalDroid 2020 数据集进行了实验。DroidHook 的性能通过与 DroidBox 进行比较进行了评估,结果显示 DroidHook 在分析最新样本和提供更精确和准确的结果方面优于 DroidBox。此外,DroidHook 展示了在真实设备上执行大多数样本的能力,其检测结果比基于模拟器的工具更强大。

2.3 混合分析

混合型恶意软件分析,通常被称为综合分析或整合分析,是一种将多种技术(包括静态分析、动态分析和行为分析)相结合的方法,以实现对恶意软件的全面理解。
Aurangzeb 等人[30]提出了一种深度学习驱动的方法,旨在通过一种集成投票分类机制来评估和分类采用混淆技术的安卓恶意软件。该研究将静态和动态分析技术相结合,用于特征提取,包括权限、意图、硬件和软件信息以及系统调用。本研究中使用的 Kronodroid 数据集包含了从 2008 年到 2020 年收集的多种恶意软件样本。对于模型构建,该研究使用了各种机器学习和深度学习分类器,包括梯度提升、K 近邻(KNN)、随机森林、XGBoost 和多层感知器(MLP)神经网络。实验结果表明,该方法在检测混淆型恶意软件方面非常有效,检测准确率高达 95.8%,并且成功识别出了攻击者通常会进行混淆处理的关键特征。
熊和张 [31] 提出了一种基于多模型融合方法的安卓恶意软件检测方法,该方法利用机器学习算法来提高检测精度。研究采用了三种机器学习模型:逻辑回归、决策树和 K 近邻(KNN),将它们的预测结果相结合以增强恶意软件识别能力。数据集包含 7845 个样本,每个样本由 14 个特征描述,包括诸如 TCP 和 UDP 数据包数量等指标。在预处理阶段,研究人员将数据集标签转换为数值格式,并将数据分为训练集(70%)和测试集(30%)。实验结果表明,融合方法在测试集上的准确率为 88%。

3 Preliminaries

本节将探讨从软件中提取关键特征的过程,并详细介绍我们所提出的特征选择方法。最后,将概述所设计检测系统的整体架构和工作流程。

3.1 基于函数调用图的特征提取方法

3.1.1 疑似子图集的提取

Android 包套件(APK)是一种用于发布和安装应用程序的关键文件格式,在 Android 系统中发挥着重要作用。一个 APK 包含安装应用程序所需的所有元素,包括源代码、图像资源、API 调用和应用程序权限。恶意代码通常隐藏在源代码中,而 APK 中的 DEX 文件则是该源代码的编译形式。因此,本文将专注于从应用程序的 DEX 文件中提取信息以识别潜在的恶意活动。
首先,参考 MsDroid [32] 的预处理方法(如图 1 所示),我们首先处理 APK,它本质上是一个压缩包。具体步骤如下:我们利用 Androguard [33] 对 APK 文件进行解包,并提取 DEX 文件。接下来,将 DEX 文件反编译为 Smali 文件。根据 Smali 文件中的指令,我们生成一个函数调用图——程序中函数之间关系的图形表示。
其次,函数节点利用 Android 提供的 API,并且某些与敏感 API 相关的操作表明存在高风险行为。因此,我们使用 API 权限映射工具(PSCout [34] 和 Axplorer [35])以及 ContentResolver 来识别与敏感权限相关的 API。
接下来,对于每个使用敏感 API 的函数节点,我们提取 k 跳邻域以生成一组可疑行为子图。这些子图包括敏感 API 及其周围调用关系。最后,我们将每个函数节点的 224 个操作码的规范化频率与 268 条权限的二进制向量(其中使用过的特征标记为 1,未使用的标记为 0)进行连接,以创建最终的特征向量。这个过程有助于全面捕捉潜在的恶意行为模式。

FEDroid_image.png

3.1.2 子图特征融合

如算法 1 所示,在获取子图集合 S 后,我们为每个子图 g 中的每个节点 v 提取特征向量,并在子图内对这些节点进行求和池化(第 3 至 7 行)。求和池化有效地整合了子图中所有节点的信息,并且对节点数量的变化具有鲁棒性,无论子图中存在多少个节点,都能生成固定维度的特征向量。这种方法不仅确保了特征向量的维度一致性,还捕捉并反映了每个子图的全局意图。由于节点特征包括操作码和权限,求和池化会聚合所有节点的特征,综合每个节点的局部信息,为子图的整体特征和行为提供全面的表示,从而更准确地反映每个子图的意图。
将每个子图视为原始图中的一个“超级节点”,我们再次对所有子图的特征向量进行求和池化(第 10 行)。这种方法使得池化操作能够生成整个调用图的特征表示,捕捉每个子图的全局意图,特别是与敏感 API 相关的总体行为模式和结构特征。此过程生成一个全局特征,用于描述整个 APK 的行为,从而便于后续的特征选择和模型训练(图 2)。

3.2 基于 XGBoost 的交叉特征选择

我们另一项研究的主要贡献之一是通过选择更少的特征来提高系统的效率和泛化能力,同时不降低恶意软件检测系统的准确性。接下来,我们将介绍基于 XGBoost 的交叉特征选择方法(图 3),如算法 2 所示。首先,我们将数据集划分为 10 个部分,每次迭代利用其中的 9 个部分来训练 XGBoost 模型(第 3 - 4 行),并根据 XGBoost 模型生成的特征重要性得分进行特征选择(第 5 - 10 行)。

FEDroid_image-1.png

FEDroid_image-3.png

XGBoost 通过构建一系列决策树来提升模型性能,其效果已被证明在分类和回归任务中尤为显著,尤其适用于大规模数据集。它引入了一个正则化项以防止模型过拟合,并提供了广泛的参数设置,以便调整模型的复杂性和性能。

在构建每一棵决策树时,模型会选择一个特征进行分裂,并记录该特征作为分裂点被选中的次数 N(t, f)。因此,在树集合 T 中,特征 f 的权重重要性 I(f) 定义为其作为分裂点被使用的总次数,可表示为:
FEDroid_image-4.png

对这些总计数进行归一化,得到归一化特征重要性 I'(f) 的表达式为:

FEDroid_image-5.png

其中 F 表示所有特征的集合。

通过将每个特征的重要性标准化到 0 到 1 的范围内,我们得出结论:重要性值为 0 表明该特征在模型训练期间未被任何决策树节点选作分裂点,这暗示它可能无法为预测提供有用的信息。因此,我们设定特征权重阈值为 0.001,保留所有高于此阈值的特征,同时剔除其他特征,从而提高模型的效率和准确性。

在每次迭代中,由于保留的特征有所变化,我们会将这 10 次迭代中保留的特征进行合并,从而得到最终选定的特征集。这种方法能够评估不同数据子集中的特征重要性,使模型对关键特征的识别更加全面和可靠,从而提高最终模型的整体性能和准确性。

3.3 提出的系统概述

我们提出的系统如图 4 所示。在预处理阶段,我们首先解压 APK 文件并生成函数调用图,然后提取可疑子图集和特征融合。接下来,我们采用基于 XGBoost 的跨特征选择方法来筛选出对训练机器学习模型最相关的特征。

在模型训练阶段,选择最相关的特征后,从 APK 文件中提取的关键特征被输入到机器学习模型中以训练一个高效的分类系统。在测试阶段,训练好的模型对测试集进行分类,以确定软件是恶意的还是良性的。最后,SHAP 被用于解释选定的特征,从而确保系统的可信度和透明度。这一过程不仅提升了检测的准确性,还增强了模型的可解释性。

FEDroid_image-6.png

4 Experimetal settings

在本节中,我们将首先介绍研究中所使用的数据集,包括其来源和样本特征。接下来,我们将讨论用于评估分类性能的指标,例如准确率、精确率和召回率,以及所采用的分类算法。最后,我们将提供详细的实验环境描述,包括硬件配置和软件版本。

4.1 Dataset

为了测试和评估我们所提出的特征选择方法,我们采用了 Drebin-215 [36] 这一数据集,该数据集包含 15,036 个应用样本,其中包括 5,560 个恶意应用和 9,476 个良性应用,这些应用均来自 Google Play。该数据集包含了 215 个提取的静态特征,被分为四类:其中 53% 的特征为 Manifest 权限,33% 为 API 调用签名,14% 被归类为其他(包括命令签名和意图)。具体特征数量详见表 1。

FEDroid_image-7.png

为了验证我们所提出的 FEdroid 系统的合理性和可靠性,我们整合了三个常用的公开数据集:CICAndMal2017 [37]、CICMalDroid 2020 [38, 39] 和 Androzoo [40],以下统称为 CA。整合后的数据集涵盖了各种类型的恶意软件和良性应用程序,确保了研究的代表性和有效性。此外,这种整合在良性样本和恶意样本之间保持了良好的平衡,从而提高了模型训练的准确性以及我们所提出的 FEdroid 系统的可靠性和可比性。
首先,CICAndMal2017 数据集包含了从 2015 年到 2017 年收集的 10854 个样本,其中包括 4354 个恶意样本和 6500 个良性样本。然而,其官方网站提供的下载样本数量有限,具体为 104 个广告软件样本、1700 个良性应用程序样本、101 个勒索软件样本、112 个恐吓软件样本和 109 个短信恶意软件样本。
接下来,CICMalDroid 2020 收集了超过 17341 个 Android 样本,涵盖了广告软件、银行恶意软件、短信恶意软件、风险软件和良性软件。在本次实验中,我们选取了 1515 个广告软件样本、2100 个银行恶意软件样本、2000 个风险软件样本、4000 个短信恶意软件样本以及 4039 个良性样本进行分析。
最后,为了平衡良性样本和恶意样本的数据集,我们从 Androzoo 下载了 3500 个良性应用程序用于本次研究。
由于数据集包含需要预处理的原始 APK 文件,由于无法成功预处理某些 APK 文件,我们利用预处理后的数据进行训练和测试。数据的具体细节见表 2。

FEDroid_image-8.png

4.2 性能度量

在一个数据集的分类结果中,存在四种可能的结果:真阳性(TP)、假阴性(FN)、真阴性(TN)和假阳性(FP)。真阳性指的是实际上为正样本且被正确分类为正样本的样本。假阴性表示实际上为正样本但被错误地分类为负样本的样本。真阴性指的是实际上为负样本且被正确分类为负样本的样本。假阳性表示实际上为负样本但被错误地分类为正样本的样本。这些统计结果可以通过混淆矩阵来呈现,如表 3 所示。

FEDroid_image-9.png

精确度指的是在所有被分类为正样本的样本中,真阳性所占的比例,而召回率则表示实际为正样本中被正确识别的比例。精确度强调的是分类器在识别正样本方面的准确性,而召回率则侧重于分类器识别正样本的能力。计算公式如下:

Precision=TP(TP+FP)Recall=TPTP+FN

F1 分数是精确率和召回率的调和平均值,它综合考虑了分类器的准确性和识别能力。F1 分数的计算公式如下:

F1=2PrecisionRecall(Precision+Recall)

假阴性率(FNR)指的是实际为阳性的样本中被错误归类为阴性的比例。它反映了检测系统在检测过程中未能识别出现有阳性样本的情况。具体而言,在恶意软件检测中,FNR 表示有多少恶意软件样本被错误地归类为良性,从而导致它们未能被成功识别和拦截。该指标是评估检测系统有效性的重要参数之一;FNR 较低意味着能够识别恶意软件的能力较强,从而能为系统安全提供更好的保护。其计算公式如下:

FNR=FNFN+TP

训练时间指的是使用训练数据集训练分类器所耗费的时间。

测试时间则是指经过训练的分类器对输入样本进行预测所需的时间。

在训练过程中占用的内存是指系统用于存储和处理训练数据集、模型参数以及中间计算结果所使用的内存量。

在测试过程中占用的内存则表示经过训练的分类器对输入样本进行预测所需的内存量,其中包括输入数据和模型权重的存储所需内存。

4.3 所使用的分类算法

为了开发出高效且轻量级的解决方案,本研究对六种不同的机器学习分类算法进行了实验。这些算法包括随机森林(RF)、逻辑回归(LR)、高斯朴素贝叶斯(GNB)、支持向量机(SVM)、k 近邻(KNN)和 XGBoost。所有模型均使用 Python 的 scikit-learn 库实现,参数均设置为其默认值,未作任何调整。

4.4 实验环境

表 4 和表 5 分别列出了用于机器学习分类器的预处理、训练和测试所使用的计算机硬件和软件版本。

FEDroid_image-11.png

5 实验结果

在本节中,我们首先展示这六种算法在 Drebin-215 数据集上的表现,随后对经过特征选择后的算法表现进行分析,并将其与相关研究成果进行对比。
接下来,我们将展示在特征选择前后,机器学习算法在 CA 数据集上的性能差异。最后,我们将采用 10 折交叉验证来验证系统的泛化能力,确保评估过程不依赖于特定的数据划分。

5.1 在 Drebin-215 数据集上的初始训练结果

正如第 4.3 节所述,我们训练并测试了六个分类器。这些分类器是在随机选取的 80% 数据集上进行训练的,而剩余的 20% 则用于测试。该表格展示了在此过程中不同算法所获得的性能指标,包括准确率、精确率和召回率,以评估每个模型的有效性和适用性。
FEDroid_image-13.png
从表 6 可以看出,在 Drebin-215 数据集上,XGBoost 和 RF 模型的表现优于其他模型。具体而言,XGBoost 实现了最高的准确率(99.07%)、召回率(98.16%)和 F1 分数(98.70%),同时 FNR 最低(1.84%)。RF 模型的精确率最高(99.53%)。相比之下,GNB 在准确率和其他指标方面表现不佳,特别是在精确率和 F1 分数方面,与其他模型相比显著更低。尽管 SVM 和 KNN 模型总体表现良好,但仍略落后于 XGBoost。

5.2 在 Drebin-215 数据集上经过特征选择后的结果

应用算法 2 中所阐述的特征选择方法,图 5 显示,在数据集中的 215 个特征中,选择了 147 个特征。很明显,经过选择后的特征数量与之前相比显著减少。值得注意的是,Manifest 权限的减少幅度最大,因为这些权限涵盖了大量常见且在应用程序之间共享的请求。这导致恶意和良性应用程序中的权限存在显著重叠,从而降低了某些权限的区分能力。特征选择过程优先保留那些对恶意软件识别最具代表性的权限,同时消除那些不能有效区分恶意和良性行为的冗余特征。
FEDroid_image-14.png
经过特征选择后,算法的结果如表 7 所示,表明模型性能总体上得到了提升。值得注意的是,XGBoost 和 RF 模型均表现出显著的改进,其中 XGBoost 的准确率提高到了 99.20%。此外,其精确率和 F1 分数也有所上升,而 FNR 从 1.84 降至 1.75%,这表明特征选择是有效的。RF 的精确率从 99.53 提高到了 99.72%,保持了最高的准确率。相比之下,SVM 的性能变化较小但较为稳定,而 GNB 在准确率和精确率方面都表现出了显著的提升。总体而言,特征选择减少了冗余特征,提高了模型效率,并显著提升了大多数模型的分类性能。
FEDroid_image-15.png
接下来,我们将我们的研究成果与利用相同 Drebin 数据集进行研究的几项先进研究进行对比。从表 8 的结果来看,通过基于 XGBoost 的特征交叉选择,我们的模型仅使用 147 个特征就达到了 99.20%的准确率,显著超过了之前 98.96%的最高准确率。与使用特征选择的其他模型(如 DroidFusion 和 GDroid)相比,我们的方法不仅捕捉到了重要的特征,而且还能有效地保持高准确率,这充分展示了特征选择在提升模型性能和降低复杂性方面的优势。
FEDroid_image-16.png
总之,我们的特征选择方法有效地减少了特征的数量,同时避免了冗余和无关特征的干扰,显著提高了分类性能,并达到了最高的准确率。这表明特征交叉选择为恶意软件检测任务提供了强有力的支撑,极大地提高了检测的准确性和效率。

5.3 在 CA 数据集上的初始训练结果

在初始训练阶段之前,我们对 CA 数据集中的原生 APK 进行了预处理,提取出了一个包含总共 492 个特征(包括指令码和权限)的完整数据集。该数据集按照 80%:20% 的比例被划分为训练集和测试集。表 9 展示了在初始阶段不同算法的性能表现。
FEDroid_image-17.png
XGBoost 和随机森林(RF)在检测性能方面表现相似,两者均达到了约 98%的准确率,精确率和召回率分别超过 98%和 97%。它们的 F1 分数分别为 98.07 和 98.21%,表明整体表现极为出色。此外,这两款模型在所有模型中具有最低的假阴性率,分别为 1.91 和 2.42%。相比之下,支持向量机(SVM)的准确率略低,为 86.57%,但其召回率为 92.79%,表明其在捕获恶意样本方面是有效的。然而,其精确率仅为 83.3%,这可能导致更高的误报率。此外,SVM 需要更长的训练和测试时间,限制了其在实时场景中的适用性。

LR 和 GNB 在准确率和召回率方面表现不佳,分别实现了 80.81% 和 80.35% 的准确率,以及 66.25% 和 90.78% 的召回率。值得注意的是,LR 的假阴性率高达 33.75%,这可能会在实际应用中导致严重的漏检风险。相比之下,KNN 表现出更稳定的性能,其准确率和召回率均在 95% 左右。

5.4 在特征选择后的 CA 数据集上的结果

通过特征选择过程,我们从数据集中提取出了 248 个关键特征,如图 6 所示。这一结果与在 Drebin215 数据集上观察到的性能表现相似,尤其是在权限特征方面显著减少了特征数量。这表明某些权限对于软件分类缺乏足够的区分能力,进一步强调了提取操作码特征的重要性。
FEDroid_image-18.png
在经过特征选择后的数据集上,我们对这六个分类器进行了重新训练和测试,其具体表现见表 10。图 7 和图 8 分别展示了这六个分类算法的 ROC-AUC 曲线和精确率 - 召回率曲线。
FEDroid_image-21.png
FEDroid_image-19.png
经过特征选择后,数据维度的降低使得所有算法的训练和测试时间均有所缩短。XGBoost 和 RF 保持了较高的准确性和稳定性,这表明特征选择有助于保留最具信息量的特征,从而增强了模型的分类能力和泛化能力。具体而言,XGBoost 的准确率提高到了 98.26%,精确率和召回率分别为 98.4 和 98.25%,F1 分数为 98.32%。这种改进归因于有效减少了噪声和冗余,如图 9 中的混淆矩阵所示。RF 的准确率为 98.18%,F1 分数为 98.24%,也保持稳定。
FEDroid_image-20.png
相比之下,SVM 的准确率略微提升至 86.6%,但其精确率和召回率变化不大。LR 的准确率提高到了 81.29%。与此同时,KNN 的准确率和召回率保持稳定。

5.5 10 倍交叉验证结果

我们在 CA 数据集上采用了十折交叉验证,以严格评估基于机器学习的分类器的性能。具体而言,将数据集划分为十个相等的部分,其中九部分用于模型训练,剩下的一个部分用于每次迭代中的评估。这种方法确保了分类器的高准确性和可靠性。实验结果表明,该分类器在训练集之外的数据上表现良好,提高了结果的可信度。表 11 展示了在交叉验证期间所选的 XGBoost 分类器的性能,表明该分类器在所有十个折叠中都保持了高准确率,最终平均准确率为 98.62%,标准偏差仅为 0.35。这表明该模型具有良好的泛化能力,没有过拟合问题,进一步验证了其稳健性。
FEDroid_image-22.png

6 模型的可解释性

本研究旨在构建一个可解释的模型,以增强对所提出解决方案的信任。目标是通过透明且易于理解的因素来解释模型的准确性,而非依赖黑箱方法。为此,我们采用了 Lee 等人(2017 年)提出的 Shapley Additive Explanations(SHAP)框架。SHAP 是一种增强机器学习模型可解释性的方法,特别适用于那些通常被视为“黑箱”的高度复杂模型。它通过为每个输入特征分配一个 Shapley 值来量化每个特征对预测结果的贡献,从而提供特征重要性的度量。Shapley 值不仅提高了分类器的透明度,还帮助用户理解为什么某个应用程序会被归类为恶意软件,并解释特征的重要性。此外,它还可以识别影响分类结果的特定应用程序行为,从而提高威胁检测的有效性。通过这种方式,SHAP 框架显著提高了所提出模型的可解释性,并提高了用户的理解能力。
SHAP 提供了全局和局部两种解释方法:全局解释分析整个数据集中的特征重要性,有助于识别模型决策中哪些特征最为关键;局部解释则关注单个实例,揭示每个特征如何影响特定的预测结果。将这两种方法结合起来,可以全面理解模型的决策机制。我们将首先进行全局解释,然后通过随机选取一个良性样本和一个恶意样本来进行局部解释。

6.1 全局解释

为了更好地理解 SHAP 值,我们将使用图 10 进行深入分析作为示例。当模型预测为“恶意软件”时,我们将预测值设为 1;预测为“良性”时,设为 0。在图 10 中,垂直轴左侧的特征对预测有负面影响,使结果更接近“良性”分类,而右侧的特征则对结果有积极影响。红色圆点表示较高的特征值,蓝色圆点表示较低的值。在模型所使用的大多数二进制特征中,红色圆点通常代表特征值为 1,蓝色圆点则表示特征值为 0。这种可视化方式有助于直观地理解特征如何影响最终的模型预测结果。
如图 10 所示,“SEND_SMS”权限对预测结果的影响最大。使用此权限的软件往往表现出更高的恶意行为倾向,因为许多恶意软件应用程序会利用短信功能将感染传播到其他设备或订阅昂贵的增值服务,从而给用户带来巨大的经济损失。此外,涉及“READ_PHONE_STATE”权限的软件经常表现出恶意倾向。此权限允许应用程序访问手机状态信息,包括当前的蜂窝网络状态、通话状态以及已注册的通话账户列表。恶意软件可能会利用这些信息通过蜂窝数据估算用户的大概位置,严重侵犯用户隐私。这些行为不仅存在个人信息泄露的风险,还为进一步的恶意活动提供了便利。
FEDroid_image-23.png
诸如“iget-byte”、“check-cast”、“const/high16”和“sget-wide”这类操作码的使用通常表明软件的行为是良性的。这些操作码与正常应用程序的操作逻辑密切相关,它们的存在通常不会显著对分类结果产生负面影响。具体而言,“iget-byte”操作码用于从对象字段中获取字节值,“check-cast”用于类型检查,“const/high16”用于加载常量值,“sget-wide”用于从静态字段中检索宽值数据。这些操作在合法的应用程序中频繁出现,表明软件在这些方面的行为符合预期,从而对模型对良性应用程序的分类产生积极影响。
此外,诸如“RECEIVE_BOOT_COMPLETED”、“BLUETOOTH”以及“MANAGE_ACCOUNTS”这类权限与恶意软件并无显著关联。具体而言,“RECEIVE_BOOT_COMPLETED”权限允许应用程序在系统完成启动后接收广播,这通常被那些需要在启动时执行初始化任务的应用程序所使用,比如自动更新和后台服务管理——这些都是合法应用程序中常见的行为。而“BLUETOOTH”权限使应用程序能够连接并控制蓝牙设备,这一功能在许多合法应用程序中都很常见,比如健康追踪器和无线耳机控制设备。另外,“USE_FINGERPRINT”权限允许应用程序利用设备的指纹传感器进行身份验证,这对于金融应用程序和设备解锁功能来说是一项重要的功能。鉴于这些权限在合法应用程序中的广泛使用,它们的存在并不会显著增加软件被归类为恶意软件的可能性。

6.2 地方口译服务

图 11 展示了随机选取的一个良性样本在决策过程中不同特征所产生的影响。尽管该样本使用了“READ_PHONE_STATE”权限,但它并未包含“SEND_SMS”权限,这显著降低了被归类为恶意程序的可能性。“READ_PHONE_STATE”权限允许应用程序访问设备的电话状态信息,包括当前通话状态和网络信息,这是许多合法应用程序(尤其是那些需要监控通话的应用程序)中常见的功能。此外,该样本中使用的指令,如“sget-wide”、“iget-byte”和“check-cast”,进一步表明其良性行为。
图 12 展示了另一个随机选取的恶意样本,该样本与良性样本类似,都使用了“READ_PHONE_STATE”权限,但未使用“SEND_SMS”权限。然而,其他特征显著增加了被归类为恶意的可能性。这表明我们的特征提取方法和模型考虑了各种特征,能够捕捉复杂的行为模式,使模型能够对潜在的恶意行为做出更准确的判断。
FEDroid_image-24.png

7 讨论

(注:原文中“Discussion”是讨论的意思
在本节中,我们将对比本文所提出的系统与其他先进方法。我们使用 GitHub 上提供的这些系统的开源代码对其进行了复现,并在我们的集成 CA 数据集上进行了训练和测试,相关结果列于表 12 中。此外,我们还纳入了与模型内存消耗相关的指标。
FEDroid_image-25.png
MaMaDroid [10] 是一个基于机器学习的安卓恶意软件检测系统,它将应用程序内的 API 调用抽象为类、包或家族,并基于这些抽象构建了一个马尔可夫链模型。该模型利用状态之间的转移概率作为特征,然后由机器学习分类器使用这些特征来区分恶意和良性应用程序。如表 12 所示,MaMaDroid 仅使用 121 个特征就达到了 97.56%的准确率,尽管其性能接近我们的系统,但仍存在明显的差距。此外,MaMaDroid 的训练和测试时间分别为 9.15 秒和 19.29 秒,而我们的系统分别只需要 7.52 秒和 4.53 秒,显示出更高的效率和及时性。由于 MaMaDroid 使用的特征数量极少,其内存消耗也是最低的。
除了 MaMaDroid 之外,我们还对两个基于深度学习的恶意软件检测系统进行了比较:MsDroid [32] 和 DexRay [13]。MsDroid 提取函数图以获取一系列可疑子图,并使用 GNN 对它们进行训练。另一方面,DexRay 将应用程序的 DEX 文件的字节码转换为灰度“向量”图像,并使用一维卷积神经网络(1D CNN)对其进行分析。尽管这两种方法都表现出了一定的有效性,但它们的性能不如我们所提出的方法。具体而言,MsDroid 实现了 95.31% 的准确率、96% 的精确率、95.47% 的召回率、95.73% 的 F1 分数和 4.53% 的 FNR。DexRay 的准确率为 96.18%,精确率为 96.54%,召回率为 96.32%,F1 分数为 96.43%,FNR 为 3.68%。此外,MsDroid 和 DexRay 在训练和测试时间以及资源消耗方面明显逊于我们所提出的系统。

8 结论与未来工作

在本研究中,我们提出了一种轻量级且易于解释的高精度安卓恶意软件检测系统,名为 FEdroid。FEdroid 通过从 APK 文件中提取关键特征来描述应用程序的行为,并使用特征缩减方法优化这些特征。然后,优化后的特征向量被传递给机器学习分类器进行训练和预测,以判断应用程序是恶意的还是良性的。实验结果表明,与现有的最先进的技术相比,FEdroid 显著提高了检测效率,同时确保了高检测准确率,表现出卓越的性能。此外,使用 SHAP 来解释模型特征有助于研究人员理解模型的决策过程。

然而,SHAP 的可解释性仍存在一定的局限性:首先,它依赖于模型的具体结构,这可能会妨碍对复杂模型决策过程的准确解释。其次,当特征之间存在高度相关性时,SHAP 值可能难以独立评估每个特征的贡献,从而导致解释的模糊性。第三,在处理大型数据集时,SHAP 值的计算可能会非常耗时,从而限制了其在实时应用中的可行性。最后,SHAP 提供的是局部解释,可能无法完全反映模型在全局范围内的行为,从而可能导致对模型的片面理解。
此外,我们将进一步优化特征提取算法,改进子图特征提取方法,并探索整合更多特征类型(例如行为特征和用户交互特征),以提高检测的准确性和鲁棒性。鉴于机器学习涉及众多参数,我们将引入优化算法来微调这些参数以实现最佳性能。

资金来源
该资金由四川省地方技术发展计划(项目编号:2024ZYD0266)、西藏科技计划(项目编号:XZ202401YD0023)以及四川理工学院研究生创新基金(项目编号:Y2024131)提供。

数据可用性
在本次研究中未生成或分析任何数据集。