关键词:
Android
函数调用图
API调用序列
恶意应用检测
恶意应用家族
摘要:
Android恶意应用程序的爆炸式增长,严重威胁了用户的隐私数据与财产安全,因此通过Android应用程序的代码审计,识别Android恶意应用程序至关重要。同时,对检测出的恶意应用程序进行家族分类,便于研究恶意家族的版本迭代与变种规律,从而制定相应的防御性保护措施。鉴于Android恶意应用在实施危险操作时,往往请求特定的API函数来访问系统,且通过静态或动态分析,即可获取应用程序的API调用信息,因此许多研究方法提取应用程序的API调用特征,进行Android恶意应用的检测。常见的API调用特征包括API函数调用图或基于API调用序列特征。然而函数调用图属于非欧几里徳结构数据,不能用传统的机器学习算法进行处理,而常见的谱图卷积网络GCN只能处理无向函数调用图,这将导致函数之间有向调用关系的丢失,降低识别准确率。对于API调用序列特征,现有方法多考虑API序列的单向语义相关性,未充分挖掘API的双向语义信息,且恶意API序列段只占整体序列的一小部分,序列中冗余API较多,给特征提取带来困难。此外对于恶意应用家族的分类,现有分类方法多提取家族中所有样本的共同行为特征,但随着恶意家族的不断发展,属于同一家族的Android恶意应用可能以不同的实现方式完成相同的恶意活动,因此该类恶意应用可以轻松避开分类方法。现有基于深度学习的分类模型,多依赖大量已标记样本进行训练,当家族样本较为稀缺时,模型容易出现过度拟合的情况。本文针对现有基于Android应用程序API调用实现恶意程序检测及恶意家族检测所面临的技术难题,将基于函数调用图的静态检测方法与基于API调用序列的动态检测方法相结合,识别恶意应用程序并进行家族分类。主要工作与创新点如下:(1)为解决静态分析中谱图卷积网络无法处理有向函数调用图的问题,提出一种有向图卷积网络以提取函数调用图的API节点聚合特征。针对函数调用图规模较大,冗余信息较多的问题,通过提取危险权限相关的API集合,重构有向函数调用图。为有效处理有向函数调用图,对传统的谱图卷积网络进行改进,将非对称的有向图邻接矩阵转换为三个不同层次的对称图矩阵,在有效提取有向函数调用图的API节点聚合特征的同时,又可以扩展卷积网络的感受野,避免堆叠卷积网络导致训练参数过多的问题。实验表明该方法具有较好的分类效果,准确率可达0.9504,F1值可达0.9499,与传统基于谱图卷积网络的分类算法相比,具有较好的性能。(2)为解决动态分析中冗余API较多,提取恶意序列段较难,以及未充分挖掘API调用序列上下文语义信息的问题,提出了一种结合Bi-LSTM和自注意力机制的时序分析方法。针对冗余API节点较多的问题,在序列预处理阶段,利用N-gram对动态分析提取的API时间序列进行划分,并通过TF-IDF算法进行敏感API短序列集合的提取,从而删减冗余API信息。同时利用Word2vec得到每个短序列的稠密向量,避免API序列向量过于稀疏。在特征提取阶段,将应用程序的API序列向量输入Bi-LSTM学习双向语义信息,并将输出的隐状态通过自注意力机制,分配不同的权重,以有效提取应用程序的API序列特征,实现恶意应用检测。实验结果表明,该方法的准确率和F1值分别达到0.9293和0.9288,若将静态分析与动态分析相结合,检测方法的准确率和F1值可达0.9711和0.9698。(3)为解决现有家族分类方法仅提取家族单个行为原型作为特征,以及无法有效处理小样本恶意家族和识别未知新家族的问题,提出了一种利用元学习的小样本家族分类方法。为构建家族多原型以提高分类效果,基于上述Bi-LSTM模型提取的序列特征,通过原型网络创建恶意家族初始单原型,在此基础上进行迭代学习,为多行为模式的恶意家族,创建多个原型特征以进行分类。在恶意应用家族分类阶段,基于N-way K-shot任务,利用元学习不断训练分类器,使其获得先验知识以克服小样本过度拟合的情况,通过度量恶意应用与各家族原型的距离实现恶意应用的家族分类。对部分未成功匹配的恶意应用,认定其为未知新家族,提取其家族原型特征加入模型,而不用重新训练分类器。实验结果表明,该分类的准确率达0.9756,F1值达0.9731。与其他分类器相比有较大提升。同时在小样本家族分类上,平均准确率可达0.9311。