Page 290 - 《软件学报》2025年第7期
P. 290
杨宏宇 等: 基于 API 聚类和调用图优化的安卓恶意软件检测 3211
(3) 提出一种安卓恶意软件检测方法, 通过将特征向量中的 API 抽象为 API 聚类中心, 使检测方法能适应安
卓框架和恶意软件中 API 的频繁变化. 与现有方法相比, 在不需要任何重训练的情况下, 检测方法的模型老化速度
更慢, 能有效检测进化后的恶意软件.
1 相关工作
本文的主要研究内容是进化后恶意软件的检测方法, 当前恶意软件检测领域应对模型老化的方法主要分为 4 类:
基于 API 聚类的检测方法、基于重训练的检测方法、基于软件关系图的检测方法和基于异常样本识别的检测方法.
1.1 基于 API 聚类的检测方法
API 聚类将功能相似的 API 归为一类, 能使检测方法适应软件中 API 的频繁变化. 本文认为 API 聚类是解决
模型老化问题的众多方法中最有效和最直接的.
Mariconti 等人 [13] 提出一种构建恶意行为马尔可夫链的安卓恶意软件检测方法 MaMaDroid, 使用包名对 API
进行聚类, 通过将调用图中的 API 调用对抽象为包调用对, MaMaDroid 能够识别现有包中出现的新 API, 但相同
包中的 API 不一定都具有相同的功能, MaMaDroid 也无法识别新添加包中的 API, 这导致 MaMaDroid 难以有效
检测进化后的恶意软件.
Lei 等人 [14] 提出一种事件敏感的安卓恶意软件检测方法 EveDroid, 将 API 拆分成单词, 包括包名, 类名, API
方法名, 返回值和参数; 然后使用 doc2vec [15] 进行编码, 生成 API 的嵌入向量; 最后使用 k-means 算法进行聚类. 该
方法使用自然语言处理工具对 API 的特征进行挖掘, 但在提取 API 语义信息时未考虑 API 的权限信息. 权限在安
卓生态系统中具有极其重要的作用 [16] , 因此 EveDroid 难以全面提取 API 的语义信息.
Zhang 等人 [7] 提出一种使用 API 聚类对现有安卓恶意软件分类器的增强方法 APIGraph, 首先从安卓官方文档
中提取 API 特征; 其次构建实体关系图; 然后通过 TransE 算法 [17] 生成 API 的嵌入向量; 最后使用 k-means 算法进
行 API 聚类. 在强化现有分类器时, APIGraph 将现有检测方法特征向量中的 API 替换为 API 聚类中心. 该论文认
为使用相似参数、相似权限、拥有相似返回值的 API 具有相似的功能, 但在 API 语义嵌入时未考虑 API 方法名
中蕴含的丰富语义信息, 导致难以全面提取 API 的语义信息.
Xu 等人 [18] 提出一种基于 API 聚类的安卓恶意软件检测方法 SDAC, 通过双层神经网络捕获 API 调用和其上
下文之间的映射关系, 将隐藏层作为反应 API 语义的嵌入向量用于聚类. 但该方法使用训练和测试软件样本同时
训练双层神经网络, 存在数据窥探 [19] 行为. 该方法在实际应用场景中无法识别软件中出现的新 API.
1.2 基于重训练的检测方法
重训练是使用观念迁移样本重新对分类器进行训练. 根据标签来源的不同, 可将重训练分为真实标签重训练
和伪标签重训练. 真实标签来源于恶意软件检测领域的专家进行的人工标注; 伪标签来源于分类器的检测结果, 这
些检测结果往往具有很高的置信度.
Narayanan 等人 [20] 提出一种自适应且可扩展的安卓恶意软件检测方法 DroidOL, 从函数调用图中提取软件的
敏感行为特征, 在检测过程中使用误分类样本和其真实标签更新分类器, 使分类器能够适应安卓软件的变化.
Xu 等人 [21] 提出一种基于在线学习的安卓恶意软件检测方法 DroidEvolver, 该论文认为使用不同优化器训练
的分类器具有不同的老化速度, 因此在训练阶段构建一个模型池, 模型池中的分类器使用不同的优化器进行训练.
在检测阶段通过置信度判断老化模型, 使用伪标签进行轻量级的在线学习, 更新老化模型.
基于重训练的检测方法总体存在以下不足: 真实标签重训练需要大量且优质的观念迁移样本, 这些样本往往
难以及时获得, 同时还需要花费大量的人力资源对观念迁移样本进行人工标注; 伪标签重训练不需要大量的人力
资源对样本进行人工标注, 但存在两个问题: 一是伪标签一旦出现错误, 会导致分类器的性能出现断崖式下滑; 二
是恶意攻击者会针对检测模型的伪标签重训练更新机制设计特定样本实施恶意攻击.
1.3 基于软件关系图的检测方法
软件关系图是指构建一个以软件为主要节点的实体关系图反映软件之间的相似性, 在检测过程中使用待检测

