当前位置: 首页 > article >正文

[论文翻译]基于多模态特征融合的Android恶意软件检测方法

A Multi-modality Feature Fusion Method for Android MalwareDetection

摘要:

安卓系统的高市场占有率和开源特性导致恶意安卓应用程序的数量大幅增加。它给用户带来了许多威胁,如经济损失、隐私泄露和远程控制。构建精确的模型来检测安卓恶意软件更为有效。我们提出了一种新型安卓恶意软件检测框架 MGIDroid。它同时考虑了两种模式特征表示:Android 应用程序的函数调用图(FCG)和 Dex 字节码图像特征。首先,我们构建了描述 Android 应用程序函数调用之间关系的 FCG。我们使用 GraphSAGE 和 SAGPool 模型来提取 FCG 特征。然后,我们将 Android 应用程序的 Dalvik 可执行文件转换为 Dex 字节码图像,并采用带有卷积块注意力模块(CBAM)的 Resnet 模型来提取代表 Android 应用程序数据部分的图像特征。然后,我们使用软注意力来融合两种模态特征,从而完成分类。最后,我们进行了大量实验来评估我们方法的有效性。结果表明,我们提出的方法优于其他方法,并取得了 98.60% 的高 f1 分数。

安卓恶意软件、恶意软件检测、深度学习、多模态学习

1.引言

安卓系统以其开源性、丰富的硬件多样性和平等的应用机会,迅速成为全球最广泛采用的智能手机操作系统。因此,安卓系统已成为众多攻击者的主要目标。根据卡巴斯基安全实验室 2021 年 3 月的一份报告,仅在 2020 年就检测到超过 560 万个恶意软件安装包[1]。安卓恶意软件数量的激增给广大安卓用户群带来了巨大威胁,包括经济损失、隐私泄露和远程控制。

近年来,安卓恶意软件研究已成为信息安全领域的热门话题。研究人员提出了多种方法,包括静态和动态分析方法。静态检测主要依赖数字签名、API 调用、权限请求、组件关系和元数据等静态特征。它具有分析速度快、代码覆盖全面、不受执行环境影响等优点,因此在恶意应用程序检测领域得到广泛应用。动态检测,顾名思义,就是捕捉软件运行时的动态特征,如内存使用、网络请求、权限提升和系统调用等。然而,动态分析需要大量资源和时间。为了实现大规模的高效检测,我们的系统实施基于静态分析。

随着深度学习算法在各种任务中的出色表现,研究人员越来越多地将其引入恶意软件检测领域。Daoudi N. [2] 将安卓软件 DEX 文件的字节码转换为 RGB 图像,然后使用一维卷积神经网络模型提取特征。Vinayaka K V.[3]基于函数调用图,利用图卷积网络(GCN)提出了一种安卓恶意软件检测模型,并取得了良好的准确率和 F1 分数,显示了 GCN 在检测安卓恶意软件方面的潜力。

以往的研究工作只考虑了安卓应用程序的单一特征,没有充分利用其他有价值的特征,因此容易被攻击者有针对性地规避。相比之下,在这项工作中,我们有效地整合了安卓应用程序的两个基本特征:函数调用图和 Dex 字节码图像,使检测系统更加强大,并增加了攻击者逃避检测的成本。

本文的主要贡献如下:

我们为安卓恶意软件检测提出了一种新颖的基于静态分析的多模态特征提取架构。我们首先构建函数调用图和 Dex 字节码图像,然后通过深度学习方法分别提取特征。我们融合不同模态的特征,完成安卓恶意软件的检测。大量实验验证了我们方法的有效性。

为了从函数调用图中提取特征,我们详细分析了每个函数的特点,并为函数调用图分配了独特的节点属性。图神经网络模型中的分层池结构可用于全面的特征提取。

为了最大限度地从 Dex 字节代码图像中获取信息,我们将 Android 应用程序 Dex 文件的数据部分转换为 RGB 图像。我们采用具有空间注意力和通道注意力的 ResNet18 模型来提取特征。

2 相关著作

2.1 基于静态的安卓恶意软件检测和分类方法

这种方法通过逆向工程对安卓恶意软件进行检测和分类,依赖于 API 调用和字节码等静态特征,而无需实际执行应用程序。它具有速度快、准确性高、误报率低等优点。Daoudi N 等人[2] 将安卓软件 DEX 文件的字节码转换为 RGB 图像,然后使用一维卷积神经网络模型提取特征。Vinayaka K V 等人[3]利用基于函数调用图的图卷积神经网络(GCN)提出了一种安卓恶意软件检测模型,并取得了良好的准确率和 F1 分数,显示了 GCN 在检测安卓恶意软件方面的潜力。Kim 等人[4]采用多种函数从多个角度反映了 Android 应用程序的特征,从而形成了一种有效的特征表示方法来检测恶意软件。

2.2 基于动态的安卓恶意软件检测和分类方法

这种方法强调在 Android 软件实际执行过程中观察到的特征,如网络流量、CPU 使用率和电池消耗。Amos 等人[5] 提取了动态特征,包括硬件使用数据,作为应用程序运行时生成的指纹。然而,这些方法严重依赖硬件规格和性能,导致对不同硬件配置的适应性较差。Xiao 等人[6]使用频率向量和共生矩阵从软件运行时生成的系统调用序列中提取特征,并使用机器学习算法对其进行处理。

2.3 混合型安卓恶意软件检测和分类方法

在混合方法中,通过对给定恶意软件样本进行静态和动态分析,分别获得静态和动态特征。Kabakus 等人[7]从 AndroidManifest.xml 中提取权限,从 classes.dex 中提取 API 调用作为静态特征,同时使用日志捕获网络流量相关特征作为动态特征。这些特征被组合在一起,形成最终的流量特征集。Feng 等人[8]提出了一种双层模型,其中第一层采用神经网络处理基于权限、意图和组件信息的静态特征,用于恶意软件检测。

3 准备过程

预处理模块从原始 APK 软件包中提取后续模块所需的模态数据。我们将其分为两部分:函数调用图处理模块和 Dex 字节码图像处理模块。

3.1 函数调用图处理模块

函数调用图(FCG)是一种控制流图,用于描述 APK 中函数之间的调用关系。它可用于从程序中提取结构信息,并确定应用程序的安全性。图 1 展示了从 APK 获取 FCG 的过程。

使用 Androguard 工具 [9] 反编译 APK 后,我们从 smali 代码中提取函数及其调用关系,并构建 FCG。在这一阶段,FCG 没有任何节点特征。为了更好地利用 FCG 完成我们的任务,有必要为每个节点分配适当的属性特征。我们将本地方法和外部方法区分开来。

对于内部方法,我们首先根据 Gabor Paller [10] 提供的操作码列表,提取每种方法使用的 Dalvik 操作码。为了更好地组织和分析这些操作码,我们按照 [3] 中描述的方法将其分为 21 组。我们计算每组操作码在每种内部方法中的使用频率,得出一个 21 维向量。第 i 维的值代表使用第 i 组操作码的频率。对于外部方法,该属性用零向量表示。

对于外部方法,我们只考虑安卓提供的官方安卓应用程序接口。我们利用文献[11]中描述的方法来构建 Android 官方 API 的关系图,捕捉所有 Android API 的语义和相似性。为了将每个实体嵌入到密集向量表示中,我们采用了实体嵌入算法 TransE,该算法将每个实体映射到 32 维密集向量中。对于方法类型的实体,FCG 中相应的节点属性由这些向量表示。对于内部类,该属性由零向量表示。

由于 APK 文件的大小不一,提取的 FCG 通常包含大量节点和边,这会严重影响后续的图神经网络学习。为了避免在简化 FCG 的过程中损害重要数据,我们根据之前的研究 [12]、[13]、[14] 编制了一份敏感 API 列表。如果 FCG 中的某个节点被列入敏感 API 列表,当前节点及其第二跳邻域内的所有节点和边都会被保留。

3.2 Dex 字节码图像处理模块

APK 中的 class.dex 文件是 Android 应用程序的编译字节码文件。它包含应用程序的可执行代码和类定义,是 Android 应用程序的重要组成部分。图 2 展示了从 APK 获取 dex 字节码映像的过程。

Dex 文件可分为三部分:头、索引部分和数据部分。虽然文件头提供了一些基本信息,但并不能为虚拟机识别应用程序中的恶意行为提供重要帮助。索引部分并不直接表示实际数据,而是作为定位数据的参考。数据部分是 Dex 文件的核心部分,包括常量池、类定义、方法定义、字段定义等组件。根据前面的描述,我们从 APK 中提取 Dex 文件,只保留相关的数据部分。随后,我们使用以下转换规则将其转换为 RGB 图像。每个 8 位二进制值被转换成十进制值,并按顺序分配给图像的 R、G 和 B 通道。值得注意的是,不同长度的字节码可能会导致转换后的 RGB 图像大小不一。为确保最终图像尺寸统一,我们采用 Lanczos 重采样算法将图像尺寸固定为 224×224×3。

4 方法

本节将介绍拟议的架构设计(图 3)。该系统主要由三个模块组成:函数调用图特征模块、Dex 字节码图像特征模块和模态融合模块。

4.1 函数调用图功能模块

在图数据领域,消息传递图神经网络在各种图学习任务中表现出色。这些模型在节点之间传播信息,更新节点的特征表征,通过多次迭代捕捉不同领域节点之间的关系和上下文信息。要执行图分类任务,需要添加池化层和读出层。

函数调用图特征模块如图 3 所示。对于卷积层,我们采用了 GraphSAGE 算法[15],如式(1)-(3)所示,首先,该采样策略将 GCN 的全图采样优化为以节点为中心的部分采样。其次,它探索了多种聚合邻居的方法,以有效防止训练过程中的过拟合,增强泛化能力。对于池化层,我们采用了 SAGPool 算法[16],如式(4)所示,该算法同时考虑了节点特征和图的拓扑结构,以区分应删除的节点和应保留的节点。对于读出层,我们采用了全局均值池化。最后,将三个读出层的向量连接起来,就得到了最终的 FCG 表示向量。

4.2 Dex 字节码图像特征模块

卷积神经网络在图像特征提取方面具有巨大的计算成本。为了将有限的计算资源集中到重要区域,人们提出了注意力机制。注意力机制只关注重要的目标区域,忽略图像中的无效信息,提高了神经网络的结构性能,被广泛应用于深度学习任务中。

dex 字节码图像特征模块如图 3 所示。CBAM [17] 将通道注意力和空间注意力串联起来。CBAM 从通道和空间两个角度全面关注输入特征图的特征区域。本文将 CBAM 应用于 ResNet18 的第一层和每个残差块[18]。

4.3 模式融合模块

单纯的特征串联并不能深入了解各种模态的真正意义。受[19]研究的启发,我们采用了一种模态级融合方法,而不是简单地将不同模态的特征向量串联起来。在这种方法中,如公式 (5) 和 (6) 所示,函数调用图特征和字节码图像特征通过四层密集神经网络进行处理,得出每种模态的一维模态特征,然后应用 softmax 回归得出每种模态的权重系数。然后利用这些系数与原始特征进行元素乘法运算,并将运算结果合并以生成模态融合特征。这些融合特征随后被用于恶意软件检测的最终目的。

其中,Vfcg 是函数调用图的特征向量,Vimg 是 dex 字节码图像的特征向量,s 是代表两种模式权重的二维向量。

其中,sfcg 是函数调用图模式的权重,simg 是 dex 字节码图像模式的权重,r 是模式融合特征。

5 实验结果与分析

在实验过程中,我们采用了准确率、精确度、召回率和 F1 分数作为评价指标来评估模型的性能。如式(7)-(10)所示。该模型使用 PyTorch 1.11.0 开发。

TP 代表正确预测的恶意软件应用程序的数量,FP 代表错误预测的良性样本的数量,TN 代表正确预测的良性应用程序的数量,FN 代表错误预测的恶意样本的数量。

5.1 数据集收集

大多数公共数据集都已经过时,不能反映恶意软件不断发展的趋势。考虑到公共数据集的过时性,为了有效评估所提出的方法,我们使用了 CICMalDroid 2020 [20] 中的一个子集,其中包括 4037 个良性样本、3836 个风险软件样本、4817 个短信样本、2246 个银行样本和 1502 个广告软件样本,不包括无法反编译的 APK。此外,在 Androzoo [21] 的协助下,我们还额外收集了 6851 个良性 APK。我们将数据集分为两个集:训练集和测试集,比例分别为 70% 和 30%。

5.2 性能评估

在参数设置方面,我们选择了计算效率较高的 AdamW 优化器。损失函数选择了常用的交叉熵损失函数。学习率设定为 0.001,批量大小设定为 32,迭代次数设定为 50。函数调用图的特征向量维数设置为 128,dex bytecode 图像的特征向量维数设置为 128。模型训练和验证的准确率和损失如图 4 所示。

为了评估系统中模态融合的有效性,我们进行了四组实验。在第一组实验中,我们仅使用第一种模式执行了一项名为图分类的功能。在第二组实验中,我们仅使用模式二进行了 dex 图像分类。在第三组实验中,我们简单地将两种模式的特征向量连接起来,然后进行分类。在第四组中,我们采用了本文提出的模态级融合方法。实验结果如图 5 所示。可以看出,融合两种模态的效果通常优于单独使用一种模态的效果。然而,简单的连接操作所带来的改进是有限的。另一方面,采用本文提出的模态级融合方法可以显著提高性能。

5.3 与现有作品的比较

为了验证我们提出的方法的有效性,我们与该领域现有的方法进行了全面比较。我们仔细研究了相关研究,并选择了三种具有代表性的方法在我们收集的数据集上进行比较。其中,两种方法分别基于 Dex Bytecode Images [2] 和函数调用图 [3],我们利用它们的开源代码进行了评估。第三种方法基于各种特征[4],我们需要重新实现其特征提取和检测方法。实验结果如表 1 所示,与其他方法相比,我们的方法优势明显。

6 结论

本文提出了一种多模态安卓恶意软件检测框架 MGIDroid,它利用深度学习技术从函数调用图和 dex 字节码图像中提取丰富的特征。这些特征被有效地融合在一起。实验结果表明,我们的方法在检测性能方面优于基于单一特征的安卓恶意软件检测方法。未来的研究方向将包括探索更多的模态融合方法,以充分利用模态之间的个性和共性。此外,我们还将研究自监督学习方法的应用,以减轻对标记实验数据的依赖。


http://www.kler.cn/news/325005.html

相关文章:

  • 初识Linux以及Linux的基本命令
  • 栏目二:Echart绘制动态折线图+柱状图
  • HCIP——HCIA回顾
  • 华为OD机试 - 对称美学(Python/JS/C/C++ 2024 E卷 100分)
  • MySQL实现按分秒统计数据量
  • android 身份证取景框
  • Python Web 与区块链集成的最佳实践:智能合约、DApp与安全
  • 前端工程记录:Vue2 typescript项目升级Vue3
  • ppt压缩有什么简单方法?压缩PPT文件的几种方法
  • Qt_对话框QDialog的介绍
  • Docker搭建 RabbitMQ 最新版
  • 作业报告┭┮﹏┭┮(Android反调试)
  • Linux安装go-fastdfs
  • 编译安装的 Nginx 设置为服务启动
  • 基于mediapipe深度学习算法的手势数字0-9识别系统python源码+精美GUI界面
  • 9-pg内核之锁管理器(四)常规锁
  • [前端]DOM+CSS+HTML实现水波进度效果
  • SpringBoot 流式输出时,正常输出后为何突然报错?
  • 使用Prometheus进行系统监控,包括Mysql、Redis,并使用Grafana图形化表示
  • JVM和GC监控技术
  • 前端html+css+js 基础总结
  • Ubuntu24.04 yum安装
  • Android问题笔记五十:构建错误-AAPT2 aapt2-7.0.2-7396180-windows Daemon
  • “滑动窗口”思想在算法里面的应用
  • llama3.1 8b instruct的function calling的template解析
  • C++第五讲(1):STL--string--各个函数的使用方法
  • 在线支付系统
  • 无人机之模拟图传篇
  • 交互式低延迟音频解码器
  • QT开发:基于Qt实现的交通信号灯模拟器:实现一个带有倒计时功能的图形界面应用