202403.GAT_AMD:精读笔记
总结用了什么模块
- 数据预处理(apktool、JADX、LibRadar)
- 构建类集调用图(CSCG)
- 主题模型(TD-IDF、LSI):对调用图节点使用主题模型提取代码语义特征
- Max_GAT:
- 深度特征融合网络:融合两种特征并分类
对调用图的生成大小有一个自适应调节的机制存在,让调用图的的大小尽量控制在一个区间内,即避免图过大导致计算开销巨大,又避免图过小导致信息过少
- 本文是采用了很多模块组合构成的一个大的恶意软件检测系统
动机
安卓恶意软件检测中常见特征包括xml文件中的权限特征和dex文件中的语义和结构特征。恶意软件检测的关键就是如何从这些文件中提取出有效的多维度特征。
作者在2019年提出过一种主题模型(topic model),可以有效地提取代码的语义特征。这篇文章在这个模型上继续发展,19年的方法是从apk中提取全局的主题向量,但是恶意软件的恶意行为通常发生在特定的代码区域,全局特征不能准确的表示区域特征。
因此本文构建了一个调用图,图节点对于程序代码的特定单元,并提取节点的主题向量作为节点特征。然后使用GAT模型来提取显著区域特征作为整个图的特征,从而融合节点特征和结构信息
本文的调用图:
- 传统调用图每个节点代表一个函数,但是java的函数可能包含的单词太少从而无法提取到有效的主题特征。因此本文选择使用每个类作为一个节点,进一步将一些类节点合并为类集节点并构建类集调用图(CSCG)。这个方法增强了每个节点的语义信息,并减少调用图的规模
- 例如图中,代码包含17个java文件,进行处理后可以归档成一个8个节点的CSCG
CSCG图特征 和 权限特征 这两个特征的差异很大并且相关性也很低。本文使用深度特征融合网络(三层神经网络)来融合这两种特征并二分类
方法介绍
技术框架
数据预处理:
- 使用LibRadar检测apk包含的第三方库
- apktool对apk提取出xml、dex文件
- 使用JADX对dex反编译得到java源代码
- 根据文章:StursDroid 给出的59个高危权限从xml中提取权限特征
主题模型训练
- 源代码处理:从java源代码中删除检测到的第三方库代码,得到精简代码
- 构建训练数据集:使用java词法分析器对源代码进行分段,保留标识符、字符串和数字
- 训练TD-IDF模型:根据训练数据集训练得到TF-IDF特征向量
- 训练LSI(潜在语义索引)模型:训练模型并计算全局LSI特征向量
CSCG构建:
- 构建一个类调用图:对每个apk文件,使用Java源代码的公共类构建的类调用图
- 节点合并:根据Java包结构和第三方库检测结果对节点(类)进行合并,这里每个新节点代表一个类集
- 建立节点特征:计算每个类集的LSI向量以建立节点特征
图特征提取和多特征融合
- 图特征提取:使用带有最大池化层的GAT从CSCG中提取显著区域特征作为图特征,其中涉及语义模态和结构模态的特征融合
- 三层神经网络对所有特征进行二分类
GAT_AMD 方法再总结
- 使用apktool提取出dex和xml文件
- 从xml文件提取**权限特征
- jadx反编译dex文件获取java源码
- 使用LibRadar检测记录代码中的第三方库
- 删除第三方库用于主题向量构建
- 对剩余代码使用Java词法分析器进行词法分析
- 对源代码分段
- 记录所有单词出现的次数,构建单词字典
- 主题模型
- 根据字典用TF-IDF模型提取TF-IDF向量(重要词语向量)
- 潜在语义索引LSI对TF-IDF向量进一步提取主题向量(LSI特征向量)
- CSCG类集调用图(创新点)
- 根据java源码构建类调用图
- 图节点合并
- 计算节点主题向量作为图中的节点特征
- Max-GAT网络提取CSCG特征向量(创新点)
- 节点特征:节点LSI向量+主题模型LSI特征向量,
- 边特征:节点调用关系
- 三层BP神经网络做分类(创新点)
- 特征向量:权限特征向量、CSCG特征向量
CSCG构建
本节介绍:构建方法概述、节点合并方法、合并方法中的自适应节点大小计算。展示节点特征提取和边构建方法。最后举了一个例子
概述
每个类相当于是一个Java文件,被视为一个节点。为了增强节点中的语义信息并控制图的规模,在构造类集调用图的时候设置节点数量上限ts_max
和下限tx_min
第三方库可能会干扰主题向量的代表性,但是第三方库中也有很小的概率包含恶意行为,完全删除第三方库可能导致调用关系不完整,因此为减小第三方库节点的比例,在合并节点的时候会尝试将每个第三方库合并为一个类集节点,并将非第三方库分离成尽可能多的类集节点。
意思就是当第三方文件数量达到ts_min
时,将每个第三方库直接合并为一个类集节点,当第三方文件数量不足的时候,可以适当分离第三方库节点。
这么操作就减少了第三方库的节点比例,减少了第三方库的影响
根据ts_max
、tx_min
和第三方库检测结果计算每个apk文件的节点尺寸k
,确保所有非第三方类集节点包含大致等量的信息。由于apk文件规模差异很大,过大的apk可能会导致规模和结构的信息丢失,这里设计了一种自适应算法来自动计算特定apk的节点尺寸k
,算法对apk文件的类调用图按比例所见,从而有效保留结构和大小信息
获得合并的类集节点以后,计算节点特征的主题向量,然后将基本类调用图之间的调用关系作为边映射到CSCG
类集调用图建立的例子
类集调用图构建一共5个步骤:
- 计算Java文件之间的调用关系,得到基本类调用图
- 计算java文件之间的合并关系,根据自适应算法计算出
k值
[1],这里计算出的是2
,也就是普通节点中最多包含k
个文件。然后进行节点合并,得到7个类集节点(B-H)
,类集节点中,H
包含第三方库中的全部6个文件,其他节点最多包含k
个文件 - 根据合并后的类集节点计算调用关系
- 利用Java词法分析器[2]对17个类进行分词,得到每个节点对于的单词,然后计算7个节点的LSI向量
- 添加全局LSI特征作为根节点
A
,由于BCD
没有被调用,这里添加A
到BCD
的边,然后将调用图转换为无向图作为最终的CSCG
![](/img/user/czc知识库/杂七杂八/9-附件/附件/未命名 4_image.png)
图特征提取
本文提出最大池化层结合GAT模型的名为Max-GAT的网络。Max-GAT基于GAT获得的所有节点特征,通过最大池化从每个维度提取最大数量的特征,并将结果作为CSCG特征。
图中,每个CSCG表示为 n*n
邻接矩阵和 n*500
节点特征矩阵,其中500是特征维度,n是节点数量。
- 首先,根据调用关系,识别每个节点的一阶邻居,并使用GAT构建多头注意力机制,通过应用多个独立的注意力机制来增加模型的容量。在图5中,注意力头的数量用从一个相邻节点到每个中心节点的箭头数量表示,并作为一个重要参数进行调整。
- 对于每个注意力头,首先对所有节点特征进行变换,然后对于每个节点,使用相邻节点特征的加权平均来获得更新的特征。将多头图卷积得到的特征的平均值作为最终特征。然后得到
n*128
的特征矩阵,通过最大池化,选择最大特征向量(128
维)作为全图的特征向量。
![](/img/user/czc知识库/杂七杂八/9-附件/附件/未命名 4_image-1.png)
多模态特征融合and二分类
为了融合图模态和权限模态特征,本文设计了一个多层神经网络。
每层的大小(输出特征维度)在括号中表示。
对于APK文件,首先获取CSCG,然后计算初始128
维图模态特征向量(Max_GAT)。
选择59
维权限特征向量作为初始权限模态特征向量。两个模态特征之间的尺寸差异不利于特征融合。因此,为每个模态特征引入全连接层以减少这些差异。
然后,构建一个三层神经网络,每层作为融合点,并从 Fc3_Fus
获得 64
维融合特征。通过最终的全连接层 FC_out
得到最终的二分类结果。
![](/img/user/czc知识库/杂七杂八/9-附件/附件/202403.GAT_AMD:基于图注意力网络和多模态特征深度融合的Android恶意软件检测方法 Android malware detection method based on graph attention networks and deep fusion of multimodal features_image-5.png)
时间复杂度分析
这里又相当于是代码的介绍