“基于 API 调用图嵌入与深度学习的 Android 恶意软件检测”阅读

这一周开完会后,老师给我找了两篇论文参考,爽歪歪,终于能找到合适的论文了,就是不知道自己能不能看懂,呜呜┭┮﹏┭┮。
第一篇是:基于 API 调用图嵌入与深度学习的 Android 恶意软件检测。老师给的链接:https://cuiyn.github.io/2020/08/31/Deep-learning-for-effective-Android-malware-detection-using-API-call-graph-embeddings/#%E6%96%B9%E6%B3%95%E6%A6%82%E8%BF%B0
呜呜,老师直接给的论文总结,太贴心了。

一.论文总结

论文给出的总结是:提出一种新颖的伪动态分析方法,首先通过静态分析,生成 API 调用图,再使用 API 调用图表示恶意软件在运行期间所有可执行、可跟踪的路径,进行特征提取并使用深度神经网络进行分类。

1.伪动态分析方法是什么

动态分析就是在程序动态执行过程中根据动态的调试信息来得出程序的行为和特性,那么伪动态分析是什么呢?
伪动态分析方法是通过API调用序列分析所有执行路径的分析方法。

2.API调用图是什么

API调用序列是一系列按照时间顺序排列的API调用,它反映了程序在运行过程中对操作系统功能的调用情况

a.API调用图的生成方法

一种方法是使用静态分析工具来分析代码,并推断出可能的API调用序列。这种方法通常需要对编程语言和操作系统有深入的了解,并且可能会产生误报或漏报的情况。

另一种方法是使用动态分析工具来监测程序的运行过程,并记录下所有的API调用序列。这种方法可以提供更准确的结果,但需要对目标程序进行实际运行,并且可能会受到安全软件的限制。

b.文中API序列的调用方法(FlowDroid)

使用 FlowDroid 框架作为调用图建立工具,FlowDroid能够很好地进行Java文件的静态污点分析任务。

(APP的伪代码:)
在这里插入图片描述
(对应的调用图:)
在这里插入图片描述

二. 所提出的方法

1.api调用生成图

在 Android 平台中,Java 类的每个方法都可以表示为一个 CFG。总的来说,整个应用程序可以通过其方法的 CFG 的组合来呈现。
G=(E,N),其中 N 是一组有限的节点,表示 Android 记录的 API 调用,E 表示一组有限的边,用于在连续指令之间创建链接。

2. 定义图嵌入方法

a. 什么是图嵌入方法

图嵌入是将图数据映射为低维向量的过程。 嵌入 (Embedding)的思想是:把图中的节点或者边嵌入到一个低维的向量空间中,且节点或边在该低维空间的关系能比较完整地保留原图的结构信息。

b.如何对图进行图嵌入操作

图嵌入操作可以分解为三个粒度级别:节点级别、边级别和图级别。

在节点级别,每个顶点(或称节点)用其自身的向量表示进行编码,这种嵌入一般用于在顶点层次上执行可视化或预测,比如在2D平面上显示顶点,或者基于顶点相似性预测新的连接。这种方法中,常见的算法包括DeepWalk、Node2Vec等。

在边级别,边的嵌入方法是将每条边映射到一个低维空间中的向量。这种方法常用于预测两个节点之间是否存在某种关系,或者预测关系的强度。常见的算法有LINE、SDNE等。

在图级别,整个图被表示为一个单一的向量,这种嵌入方法通常用于在图的层次上做出预测,或者想要比较或可视化整个图。常见的算法包括Graph2Vec、GraphSAGE等。

c.相关定义

a walk(一条路径):一个有向图或一个图中的 a walk,是一系列有序或者无序的一系列顶点。如(v1,v2,…,vk+1),其中vi到vi+1有边。一条路径(a walk)的长度的定义是路径中边的数量,这个例子中游走的长度是k。
random walk(随机路径):图G,则一个图中的顶点v的度数(deg(v))是包含v的边的数量。在一个图中,v的出度是以v开始指出去的边的数量,v的出度计为deg+(v)。vj是图中的一个顶点(vertex),在每轮迭代(iteration)中,一个随机的路径将以度数分之一的概率(对有向图是出度分之一)穿过vi,如果没有穿过,则穿过vi的概率为0。
mij是一个马尔可夫矩阵。
(vi与vj有边的概率m[i,j]:)
在这里插入图片描述
(补充知识:马尔可夫矩阵
Ⅰ. 什么是马尔可夫矩阵
马尔可夫矩阵是一种特殊的矩阵,它的每一行都是一个概率分布,每一列也都是一个概率分布。如果一个矩阵满足以下条件,则它被称为马尔可夫矩阵:
每个元素都是非负的;
每列元素相加等于1
Ⅱ. 如何构造马尔可夫矩阵
构造马尔可夫矩阵的一种方法是使用转移概率。例如,假设我们有一个系统,其中有三个状态:A、B和C。我们可以定义每个状态之间的转移概率。比如,从状态A到状态A的转移概率是0.6,从状态A到状态B的转移概率是0.3,从状态A到状态C的转移概率是0.1。同样地,我们可以定义从状态B到状态A、状态B和状态C的转移概率,以及从状态C到状态A、状态B和状态C的转移概率。最后,这些转移概率可以组成一个马尔可夫矩阵。
马尔科夫矩阵可以从流入流出的角度理解。比如有两个城市A和B,可以想象成两个水池,有一个抽水泵从A池子抽水到B池子,另一个抽水泵从B池子抽水到A池子。随着过程进行,A池子的水会越来越多,B池子的水位会越来越少,直到达到一种平衡:从A池子抽到B池子的水和从B池子抽到A池子的水量相同。
马尔科夫链蒙特卡罗方法也是一种常用的构造马尔科夫链的方式,通过使其平稳分布为目标分布p(x),然后从某个初始状态x_0出发,用构造的马尔科夫链随机游走,产生样本序列
总的来说,构造马尔可夫矩阵需要清楚系统的内部结构和状态间的转移规则,然后根据这些规则来设定矩阵中的每一个元素。)

skip_gram:Skip-gram是一种自然语言处理中的模型,用于生成词向量。具体来说,Skip-gram模型的步骤如下:
Ⅰ. 初始化一个随机向量作为起始点。
Ⅱ. 在固定窗口大小范围内进行随机游走,生成所有可能的序列。
Ⅲ. 对于每个序列,找到目标单词w的位置,并将其他单词标记为上下文单词c。
Ⅳ. 使用神经网络训练模型,学习如何将上下文单词映射到目标单词的向量表示。
Ⅴ. 重复步骤2-4,直到达到预定的迭代次数或收敛。
Skip-gram模型的主要优点是它可以捕捉到词汇之间的语义关系,从而生成更有意义的词向量。此外,由于使用了神经网络,Skip-gram模型可以自动学习到复杂的特征表示,而无需手动设计特征提取器。
然后,该方法最大化其邻居(或用 c 表示的上下文词)对用 w 表示的给定目标词的概率。
在这里插入图片描述
V是整个词汇表,Vc是上下文词汇表,V和Vc可以认为是相同的。Skip-gram 模型使用下面的公式计算上下文单词的似然估计(其中Φ(*)是将词将汇表映射到 一个d 维向量,在理解方法可以认为是词本身。):
在这里插入图片描述

d.实验使用的图嵌入方法

Ⅰ.DeepWalk:
DeepWalk学习参考资料
deepwalk第一步标记所有的顶点(给顶点标号),然后按照固定大小的长度从任意一个顶点出发随机识别一条路径(如从3出发,识别出路径3-2-4-5)。
在这里插入图片描述
要训练这个网络 我们需要设置目标:
目的是输入一个顶点后 在1*10000的输出结果中 那些与输入点关系密切的位置得分(数值)较高。(回到之前的graph, 比如输入为2, 与2关系密切的点都在之前random walk所制造的“句子”中 即为3 4 5,于是我们训练网络目的是让输出向量第3 4 5维度的得分较大)。我们通过deepwalk得到了许多的“句子” 即为我们的训练集。当网络训练成熟后,形象理解,我们已经将每个vertex的特征刻画在了neural network里的参数中。
而论文中,用最大化给定条件概率的目标函数来刻画利用这个得分:在这里插入图片描述
对这个公式的简单解释如下:
在这里插入图片描述
这里的Φ即是一个对2a大小窗口内,每一个词在设定概率的矩阵中句子可能性最大的概率矩阵。
Ⅱ. Node2vec
Node2vec参考学习资料
相较于Deepwalk,Node2Vec中节点的游走不再是无偏的随机游走,而是根据p和q的参数来影响节点的游走:
在这里插入图片描述
假设A是上一个节点,B是当前节点,那么B现在有四条路可以选择:A,H,C,J。
对于A:相当于是返回,我们设置其概率为1/p,受参数p的影响。
对于H:相当于是徘徊,因为A到B和A到H的距离都是相等的,设置概率为1。
对于C和J:相当于是远离,它们朝着离A更远的方向离去,设置概率为1/q,受参数q的影响。
当q值较小时,类似于深度优先搜索算法(DFS),用于探索相邻的节点。
当p值较小时,类似于广度优先搜索算法(BFS),用于探索结构功能相似的节点。
DeepWalk是Node2Vec在p=1, q=1的特例。
尽管如此,论文提出尽管 DeepWalk 和 Node2vec 是一种有效且高效的图形建模方法,它们的有效性受到基于随机游走的搜索的限制。随机游走只能利用图的局部结构,不能保证潜在信息和表示的转换。由于大型图需要更多的随机游走,它们也受到大规模图表示的影响。为了克服这些局限性,引入了基于深度学习和基于因式分解的方法。
Ⅲ. 结构深度网络嵌入 (SDNE)
结构深度网络嵌入 (SDNE) 是一种基于深度自动编码器的图嵌入,旨在通过使用高度非线性激活函数来保留一阶和二阶网络邻近性。SDNE 由两个模块组成:无监督模块和有监督模块。当相似节点在生成的嵌入空间中彼此相距很远时,监督模块会施加惩罚,而无监督模块是用于为顶点生成嵌入的自动编码器。
无监督模块是一个深度自编码器,用于学习网络的二阶相似度。这个模块的目的是捕获全局的网络结构信息。在无监督模块中,输入是节点的邻接矩阵,每个输入都包含了顶点的邻居结构信息。通过深层自编码器的多非线性层映射,相似的结构顶点可以学习到相似的嵌入向量,不断优化代价函数来捕捉全局结构特征,即二阶相似度。
有监督模块则是一个拉普拉斯特征映射,用于学习网络的一阶相似度,以保持网络的局部结构信息。对于图中的一小部分节点对,可以得到它们的成对相似性,即一阶相关性。基于此,监督学习部分利用一阶相似性作为监督信息来细化潜在空间中的表示。
总的来说,无监督模块和有监督模块的结合使得SDNE能够很好地保持高度非线性的局部-全局网络结构,对稀疏网络具有鲁棒性。
(补充知识:拉普拉斯特征映射(Laplacian Eigenmaps)是一种基于图的降维算法,主要用于将图中的节点映射到低维的向量空间。它的主要目标是保留数据局部特征和结构,但并不保证数据的完整性。在数学表达上,拉普拉斯特征映射就是寻找一个低维空间,使得在这个空间中,相近的节点在原始高维空间中也相近。
具体来说,拉普拉斯特征映射的过程涉及到图的拉普拉斯矩阵。图的拉普拉斯矩阵L是一个对称矩阵,其元素由图中顶点的度和邻接矩阵决定。对于无向图,L=D-A,其中D是度矩阵,A是邻接矩阵;对于有向图,L=D-A+A^T。通过求解矩阵的最大特征值所对应的特征向量,就能够得到拉普拉斯特征映射。
值得注意的是,虽然拉普拉斯特征映射能够有效地捕获和保持网络的结构信息,但其优化问题并非易解。因此,实际应用中常常需要借助一些数值优化方法来求解。)
在这里插入图片描述
Ⅳ. 高阶邻近保留嵌入 (HOPE)
高阶邻近保留嵌入 (HOPE) 是一种基于因式分解的算法(主要利用SVD),其中顶点的连接表示为矩阵,并将该矩阵分解以产生嵌入。用于对连接进行建模的表示矩阵可能因矩阵属性而异,例如节点相邻矩阵、Katz 相似性矩阵、拉普拉斯矩阵等。例如,梯度下降方法可用于为非结构化矩阵生成图形嵌入。HOPE旨在通过近似高阶邻近性来保持有向图的不对称传递性。非对称传递性呈现了二图有向边的相关性,并提取了图的固有结构。

(补充知识:
HOPE只能用于有向图吗?
高阶邻近保留嵌入(HOPE)算法最初是为了处理有向图中的非对称传递性而提出的。在有向图中,节点之间的传递性是非对称的,即如果存在从节点A到节点B的路径,并不意味着也存在从节点B到节点A的路径。为了保留这种非对称传递性,HOPE采用了一种保持高阶相似度的嵌入方法。
但是,这并不意味着HOPE只能处理有向图。实际上,HOPE的核心思想是通过重建节点间的高阶相似度来获取更好的嵌入效果。无论是有向图还是无向图,只要图中的节点之间存在高阶相似度,HOPE都可以为其生成有效的嵌入。
高阶邻近保留嵌入(HOPE)算法是什么?
在操作上,HOPE并没有直接重建邻接矩阵,而是选择了更为灵活的方式——模型可以对任意边特征进行重建。具体来说,HOPE通过使用广义奇异值分解 (SVD) 分解相似性矩阵而不是邻接矩阵来扩展LINE以试图保持高阶邻近性。这样的设计使得HOPE能够有效地捕捉到节点间更高阶的邻接关系。总的来说,HOPE算法的核心在于它的损失函数设计以及其对非对称传递性的处理方式,使其能够适应不同类型的图结构。
LINE是什么,如何利用邻接矩阵扩展LINE?
LINE是一种基于图分解的图形嵌入方法,它的核心思想是使用邻接矩阵的近似分解作为嵌入。具体来说,它通过保持一阶和二阶近似来扩展这种方法。在操作上,LINE算法利用邻接矩阵来生成节点的低维表示,也就是节点的嵌入向量。
对于如何利用邻接矩阵扩展LINE,我们可以从优化目标的角度来理解。首先,我们需要定义一个损失函数,这个损失函数通常是由两部分组成:一部分是二阶相似性损失,另一部分是一阶相似性损失。通过调整这两部分损失的权重,我们可以在保持一阶和二阶相似性的同时,完成对LINE模型的训练。总的来说,利用邻接矩阵扩展LINE的过程就是一个通过优化损失函数来学习节点嵌入向量的过程。
广义奇异值分解 (SVD)如何分解相似矩阵?
SVD学习参考资料
广义奇异值分解(SVD)是一种在线性代数中广泛应用的矩阵分解方法,它可以将任意较复杂的矩阵用三个更小、更简单的矩阵相乘来表示。这三个小矩阵分别描述了大矩阵的重要特性,例如主成分、奇异值和转置矩阵

3.调整DNN超参数

随着 CNN 和 RNN 架构的引入,神经网络的有用性和适用性得到了加强。 CNN 架构设计是为了处理和编码输入数据的某些隐藏信息。输入数据一般是一个多维数组。输入数组的维度可以调整,如文本序列为 1 维、灰度图像为 2 维、彩色图像或视频为 3 维。 CNN 由三种网络层组成,分别是卷积层、池化层和全连接层。卷积层使用卷积运算,即在给定的 filter 和输入数据的局部区域之间进行点乘运算,创建卷积特征。全连接层指神经网络层,它与池化层的所有单元连接。池化层对应的功能是逐步缩小卷积特征的空间大小,降低计算成本和待调参数的大小。
本文建立的神经网络结构如下图所示。深度网络的输入经过图嵌入方法预处理,其结构类似于一个单通道的灰色图像。卷积层检测并提取图嵌入矩阵中的隐藏结构信息。第 1 个卷积层检测嵌入矩阵中的原始特征,而第 2 个卷积层通过将原始特征组合成更复杂的特征来推导更深层次的特征。在这些卷积层之后,使用最大池化来降低数据的维度。扁平层将卷积层的输出转换为一个长的一维特征向量,因为 ANN 需要一维向量来执行分类任务。最后,密集层通过结合卷积层发现的所有复杂的局部特征,对给定的特征进行分类,判断样本是恶意还是良性的。
在这里插入图片描述

四.总结

该文通过对Android应用进行伪动态分析,并针对每个执行路径构建API调用图,提出了一种新的Android恶意软件检测方法
本研究的重点是提取有关恶意软件样本执行路径的信息(API调用),并将图形嵌入到用于训练 DNN 的低维特征向量中(DeepWalk等)。
引入 DNN 来检测和提取隐藏的结构相似性,通过其卷积层从图嵌入矩阵中提取。API 调用图和二进制代码相似性检测由网络中的密集层确保,结合卷积层发现的所有复杂局部特征来确定是恶意软件还是良性
#五.个人分析
总体来说,这篇论文还是一个二分类的判断软件是恶性还是良性的实验,时间也是20年比较老的这种了。但是整体读下来还是收获了不少东西。
比如“如何提取恶意软件样本的执行路径信息”(FlowDroid 等),比如“学习了图嵌入的常用方法”(DeepWalk等)。
至于我要找出“导致webshell成为webshell的AST的具体异常”这个目标,看完这篇论文,我没看懂如何去做。乱乱的。

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值