原文标题:MDADroid: A novel malware detection method by constructing functionality-API mapping

原文作者:Jiyun Yang, Hanwei Li, Lijun He, Tao Xiang, Yujie Jin

原文链接:https://doi.org/10.1016/j.cose.2024.104061

发表会议:Computers & Security

笔记作者:张琦驹@安全学术圈

主编:黄诚@安全学术圈

编辑:张贝宁@安全学术圈

1、引言

Android 操作系统作为全球市场份额最高的移动操作系统(截至 2023 年 9 月达 68.74%),在为用户带来便利的同时,也面临着日益严峻的恶意软件威胁,2022 年全球报告的恶意应用已达约 166 万款。为应对这一挑战,研究人员提出了多种基于机器学习的恶意软件检测方法,这些方法多以 API 作为描述应用行为的关键特征。然而,现有方法存在明显不足:部分方法依赖过时的敏感 API 列表,难以应对 Android API 的持续迭代,导致模型出现老化问题;另一些具有抗老化能力的方法则存在资源消耗过高的问题。因此,研发一种既能有效检测恶意软件,又能适应 API 更新且资源消耗低的方法成为当前研究的重要课题。为此,本文提出一种名为 MDADroid 的新型恶意软件检测方法,该方法通过构建功能 - API 映射,将应用的 API 级特征转换为功能级特征,以应对 API 变化带来的影响,并设计了低资源消耗的映射更新策略,旨在为 Android 恶意软件检测提供一种高效且稳健的解决方案。

2、MDADroid 预处理机制

MDADroid 的预处理阶段是构建功能 - API 映射的基础,核心任务是获取并优化权限相关 API 集,同时为异构图构建准备必要数据,其中 ASCM(API 相似度计算方法)是应对 API 版本迭代、保障 API 集完整性的关键创新。该机制围绕权限相关 API 的获取、更新与筛选展开,具体包括以下内容:

权限相关 API 的初始获取。通过多源开源知识构建初始的权限相关 API 集,获取流程如下图所示:

  • 解析 Android API 文档,提取那些在描述中明确指定调用所需权限的 API(如 “getDeviceId” 需要 “READ_PRIVILEGED_PHONE_STATE” 权限)。

  • 整合前人研究成果,聚合 PScout、Axplorer、NatiDroid 等工作中已识别的权限相关 API,形成初始集合。

  • 利用 Google 提供的 Android Support Library 与 AndroidX 官方映射关系,将已知权限相关 API 迁移至 AndroidX 对应版本,补充 API 集。

ASCM(API 相似度计算方法)的核心设计。 为发现更多遗漏的权限相关 API(尤其是 AndroidX 中未被官方映射覆盖的),ASCM 通过结构与语义双重维度计算 API 相似度,ASCM流程如下图所示:

  • 结构相似度计算:比较两个 API 名称的包名、类名、方法名结构,提取共享子串并计算其长度占比(如 “android.app.AlarmManager.setAlarmClock”与 “androidx.core.app.AlarmManagerCompat.setAlarmClock” 的共享子串),公式为两者共享子串长度分别与两个 API 名称总长度比值的平均值。

  • 语义相似度计算:当结构相似度超过阈值时,将 API 名称按标点和大小写分割为语义单元,通过 BERT 模型生成句子嵌入,计算嵌入向量的余弦相似度,捕捉功能语义关联。

  • 综合相似度与筛选:将结构相似度与语义相似度按权重加权求和,当综合相似度超过 95% 时,判定为相似 API,将新发现的 AndroidX API 补充至权限相关 API 集,并建立 “android” 与 “androidx” 类的映射关系。

权限相关 API 的过滤。 为精准获取应用实际调用的权限相关 API,需对应用解析结果进行过滤:

  • 解析应用的 “AndroidManifest.xml” 文件,提取其中声明的 “Activity” 组件及对应的类文件。

  • 从类文件中提取所有被调用的 API,与预处理得到的权限相关 API 集比对,过滤掉不相关的 API,仅保留权限相关的部分,为后续异构图构建提供精准节点数据。

3、功能 - API 映射构建方法

功能 - API 映射是 MDADroid 的核心创新,通过构建功能、应用与 API 之间的关联,实现从 API 级特征到功能级特征的转换,具体流程包括异构图构建、基于元路径的随机游走及映射生成三个环节,操作如下:

3.1 功能 - 应用 - API 异构图构建

为捕捉功能、应用与 API 的复杂关系,首先构建异构图,包含三类节点和三类边,异构图结构示例如下图所示:

  • 节点类型:功能节点(从良性应用描述中提取的 234 个潜在主题,如 “社交互动”“位置服务”)、应用节点(从 Google Play 筛选的含详细功能描述的良性应用)、API 节点(预处理阶段得到的权限相关 API)。

  • 边的定义

    • 应用与功能的边:权重表示应用具备该功能的概率(基于主题模型计算)。

    • 应用与应用的边:权重反映两者描述的语义相似度(通过多语言模型计算)。

    • 应用与 API 的边:存在性表示应用是否调用该 API(调用则为 1,否则为 0)。

该图通过节点间的关联,为后续挖掘功能与 API 的隐藏关系提供基础。

3.2 基于元路径的随机游走

为发现功能与 API 的潜在关联,在异构图中执行基于元路径的随机游走,具体规则如下:

  • 基础元路径设计:定义两种核心路径,“I-A-F”(API→应用→功能)和 “F-A-I”(功能→应用→API),分别从 API 和功能出发,通过应用节点建立连接。

  • 元路径扩展:通过两条规则生成变体路径:

    • 规则 I:允许 “应用(A)” 节点重复,如 “I-A-A-F”“F-A-A-I”,以覆盖更多关联。

    • 规则 II:拼接不同元路径(如 “I-A-F-A-I”),捕捉更复杂的语义关系。 随机游走执行:按元路径在图中随机移动,生成节点序列(如 “API1→应用 A→应用 B→功能 X”),序列长度根据需求设定(示例中为 5)。

这些序列能反映功能与 API 的共现规律,为学习节点关联提供数据。

3.3 功能 - API 映射生成

利用随机游走生成的节点序列,通过嵌入学习建立功能与 API 的映射:

  • 节点嵌入学习:采用 skip-gram 模型(类似 word2vec),以节点序列为输入,学习功能、应用、API 的向量表示(嵌入),使语义相关的节点在向量空间中距离更近。

  • 映射构建:计算每个功能节点与所有 API 节点的余弦相似度,取相似度最高的前 k 个 API,形成 “功能→API” 的映射关系(如 “发送短信” 功能对应 “sendTextMessage” 等 API)。

  • 映射更新:当 API 版本迭代时,通过 ASCM 找到新 API 与已有 API 的相似性,将新 API 绑定到最相似 API 对应的功能,实现低成本更新。

通过该映射,应用的 API 调用特征可转换为功能特征,有效减少 API 版本迭代对检测模型的影响。

4、实验评估

MDADroid 在多个数据集上展现出优异的恶意软件检测性能,同时在抗老化能力、资源消耗及 ASCM 有效性方面表现突出,具体结果如下:

多数据集检测性能:在 AndroZoo、CICAndMal 2017、CICMalDroid 2020、Drebin 四个数据集上,MDADroid 的检测准确率普遍超过 95%,其中 XGBoost 分类器表现最优。

  • AndroZoo 数据集:XGBoost 的准确率达 95.22%,精确率 0.941,召回率 0.9422,F1 值 0.9416;随机森林的准确率 0.9518,F1 值 0.9404,均优于 MaMaDroid(准确率 93.07%)和 DroidDet(准确率 95.11%)。

  • CICAndMal 2017 数据集:XGBoost 准确率 96.23%,精确率 0.9224,召回率 0.8823,F1 值 0.9016,优于 Tarwireyi 等(2023)的 LGBM 方法(准确率 94.23%)。

  • CICMalDroid 2020 数据集:XGBoost 准确率 98.77%,精确率 0.992,召回率 0.9918,F1 值 0.9919,与 Xie 等(2023)的 Stacking 方法(准确率 98.56%)相当,但训练测试时间仅 1.34 秒(远低于 Stacking 的 27 秒)。

  • Drebin 数据集:XGBoost 准确率达 99.56%,精确率 0.9928,召回率 0.9979,F1 值 0.9954;随机森林准确率 99.48%,召回率接近 100%,展现出对旧数据集的强适应性。

抗老化能力评估:在 AndroZoo 数据集的跨年度测试中(2015-2020 年对),MDADroid 的准确率维持在 85.81%-92.6%,多数年份优于 MaMaDroid 和 DroidDet。

  • 2015-2016 年对:MDADroid 准确率 85.81%,F1 值 0.7314,显著高于 MaMaDroid(F1 值 0.4791)和 DroidDet(F1 值 0.5731),即使面对良性与恶意样本比例 4:1 的不平衡数据,仍表现稳定。

  • 2016-2017 年对:准确率 92.39%,F1 值 0.9056,优于 MaMaDroid(F1 值 0.8732)和 DroidDet(F1 值 0.8403)。

  • 2019-2020 年对:准确率 90.47%,F1 值 0.8891,略高于 MaMaDroid(F1 值 0.8836),体现出对 API 迭代的强适应性。

ASCM 有效性验证:引入 ASCM 后,各分类器性能均有提升,尤其在补充 AndroidX 中遗漏的权限相关 API 方面效果显著。

  • XGBoost 分类器:加入 ASCM 后,准确率从 94.59% 提升至 95.22%,F1 值从 0.9341 提升至 0.9416。

  • 随机森林:准确率从 94.86% 提升至 95.18%,F1 值从 0.9368 提升至 0.9404,验证了 ASCM 在完善 API 集、增强映射准确性上的作用。

效率评估:MDADroid 在训练测试时间和特征提取时间上远低于基线方法。

  • 训练测试时间:在 AndroZoo 数据集上,XGBoost 仅需 2 秒,而 MaMaDroid 需 529.2 秒,DroidDet 需 158.4 秒;在 CICAndMal 2017 数据集上,XGBoost 仅需 0.6188 秒,远低于 Stacking 方法的 8.4992 秒。

  • 特征提取时间:MDADroid 的特征提取时间为 17395 秒,约为 MaMaDroid(48372 秒)的 1/2.8,DroidDet(292272 秒)的 1/17,体现出低资源消耗优势。

总体而言,MDADroid 在检测精度、抗老化能力和资源效率上均优于现有方法,ASCM 的引入进一步增强了其对 API 迭代的适应性,使其在实际 Android 恶意软件检测场景中具有高实用性。

5、总结

本文提出了一种名为 MDADroid 的新型恶意软件检测方法,通过构建功能 - API 映射实现对 Android 恶意软件的有效检测。该方法利用开源知识获取权限相关 API,结合 ASCM(API 相似度计算方法)更新 API 集以适应版本迭代,再通过构建功能 - 应用 - API 异构图,基于元路径随机游走生成节点序列,进而建立功能 - API 映射,将应用的 API 级特征转换为功能级特征用于检测。研究在 AndroZoo、CICAndMal 2017、CICMalDroid 2020 和 Drebin 四个数据集上进行实验评估,结果显示该方法检测准确率分别达到 95.22%、96.23%、98.77% 和 99.56%,且训练测试时间短,资源消耗低,同时在抗老化能力测试中表现优异,能有效应对 API 迭代带来的影响,适合实际 Android 恶意软件检测场景。

安全学术圈招募队友-ing

有兴趣加入学术圈的请联系 secdr#qq.com

声明:本文来自安全学术圈,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。