论文分享—PROGRAPHER:An Anomaly Detection System based on Provenance Graph Embedding

文章来源:USENIX Security 2023


)


前言

  本篇文章描述了一个基于溯源图的APT检测系统—PROGRAPHER,其中使用到了NLP的graph2vec等方法,按照不同的时间戳(timestamp)进行处理,是一种与深度学习相结合的检测模型。


提示:以下是本篇文章正文内容

一、PROGRAPHER模型

0. 模型总览

在这里插入图片描述

   该检测系统共分为4个部分:
   1.从系统审计日志中按照时间戳提取节点和边的信息,在提取到一定节点数量后生成当前时间戳的snapshot(快照),其中包含提取到的节点和边的信息。
   2.编码器依据snapshot生成embedding,提取对应的图特征。
   3.异常检测模型将预测的snapshot的embedding和真实embedding进行对比,检测出异常的snapshot。
   4.关键指标生成器对异常snapshot包含的节点进行排序,将最有攻击嫌疑的节点汇报。


1. snapshot生成

在这里插入图片描述

  snapshot生成参考上述算法,其中每个snapshot包含n个节点:
  首先考虑考虑当前snapshot是否是序列中第一个snapshot,如果是的话那么进入line 9的if语句,当G变量中有n个节点是,则将第一个snapshot按照图G的内容生成。
  在生成第一个snapshot后,变量G依旧会因为line 5的for循环从审计日志中添加新的节点,一直到G中包含节点数量大于n×(1+fr)时,进入line 14的if语句。其中fr表示遗忘率,代表有多少节点在过去的snapshot中会被遗忘。当满足line 14的条件后,变量G中所有的节点会按照时间戳顺序进行排序,根据顺序获得前n×fr个节点,在变量G中被移除(也就是被遗忘),此时新的snapshot会依据变量G中包含的节点内容进行生成。后依次进行line 5的for循环,直到结束。
  上述算法保证了每个snapshot都会包含n个节点,且包含上一个snapshot的n×(1-fr)个节点,具体也可以看下图。
在这里插入图片描述


2. 编码器

  编码器的思想基于graph2vec[1],希望用一个embedding可以表示一个snapshot。

2.1 RSG生成

  为了契合这种方法,作者首先针对当前snapshot中各个节点构建RSG集(rooted subgraphs),具体的构造方法如下面公式所示。
在这里插入图片描述
  对于当前某一节点,我们考虑他深度为d的RSG集合(也就是跳数为d),如果d为0的话,那么RSG只包含其本身,lambda_v表示节点本身的种类。如果d>0,则通过line 5和line 6,收集当前节点的所有邻居节点的RSG集合,此时邻居节点的RSG集合跳数为d-1,通过这种迭代的方式获得当前节点的RSG,并且RSG中重复的边、子集等都会只保留一个。具体可以通过下面的例子观察:
在这里插入图片描述
  对于图中的process2节点,图中展示了d=0,1,2时生成的RSG。在d=0时,RSG只包含当前节点的信息;在d=1时,根据算法其会包含邻居节点d=0时的RSG,也会包含当前节点所有的边的信息,去除重复后生成RSG;d=2时的RSG比较复杂,根据算法与示例,其会包含当前节点(也即中心节点)与其邻居节点的d=1时的RSG,比如上图右侧d=2时,集合中第一个元素是d=1时当前节点的RSG,第二个元素是以principal为中心节点且d=1时的RSG,第三个元素的中心节点是file,第四个元素的中心节点是process1,其中包含4种不同的边类型,从图示中也能看出。最后就是将当前节点的所有边去除重复以后添加到d=2的RSG中。

2.2 snapshot embedding生成

  在有了当前处理的snapshot包含各个节点的RSG集合之后,考虑使用skipgram模型对snapshot提取embedding,也可以通过skipgram介绍链接来详细了解模型的意义。下面也截取链接中的部分内容进行本文目标函数的理解。
  首先,本文的目标函数如下图所示,其中Erj表示在当前snapshot的总RSG Ri(每个节点对应一个RSG集合,共有n个节点,是个并集)中的一个RSG的embedding,Esi表示当前snapshot的embedding。下面目标函数的意义就是当前snapshot与给定中心点和深度d后对应rj的一同出现概率最大,也即共现可能性最大,与当前情况下RSG集合中其他的RSG的共现概率最小。
在这里插入图片描述
  那么目标函数中,Erj与Esi是怎么生成,怎么训练的呢,参考skipgram模型,该标准模型预测的是给定中心词后,其周围的词是什么,也即预测他的上下文。下图显示的是窗口为5的skipgram模型,给定中心词(第三个词后),预测上下文的词汇。其中,v代表中心词的词汇矩阵,u代表上下文词的词汇矩阵。
在这里插入图片描述
  其实,在训练过程中,矩阵u和v我们都是事先不知道的,就像上文J(E)公式所表述的那样,Es和Er矩阵我们都是不知道的。下面我来描述skipgram的训练过程,其中也是参考了上文的skipgram链接所介绍内容。
在这里插入图片描述
1、首先,我们会用onehot向量表示中心词来作为输入,长度为V的一维向量。
2、接着我们会遇到一个大小为V × n的矩阵,也就是矩阵v(中心词矩阵)
3、将他们两相乘后我们可以得到一个n维的向量,这就是我们的隐藏层
4、接着我们会遇到一个大小为V × n的矩阵,但是这次是矩阵u(上下文矩阵)
5、将他们两相乘后我们可以得到一个V维向量,我们可以将这个向量看成V个数,对应词库中的V个词
6、对这V个数做softmax归一化处理,概率最大的那个词所对应的词即为模型所预测的词
7、若模型预测的词与上下文的词不符,我们会使用反向传播算法来修正权重向量W和W’。
  那么具体来说,本文模型是怎么训练的呢,根据上文公式1,中心词向量是Si(snapshot的embedding),背景词是rj(RSG的embedding),由于Si和rj的行数(也就是skipgram对应词汇表大小)不同,本文具体的训练迭代方法作者也没有详细说明,因此我也难以得知,或许有哪位大佬有想法可以在评论区交流。
  训练的详细流程我们虽然不得而知,但是作者给出了训练的简化流程,具体如下图算法3所示:
在这里插入图片描述
  可以看到,对于每个Si,其中的节点在不同跳数d的情况都会经过一次训练,每次会有新的RSG集合,训练过程中也通过负采样的形式加速训练。我们随机从所有的子图集中选择m个RSG,这个RSG:R‘vd集合与原先产生的RSG交集为空集,通过使用最大似然方法,即公式1训练Rvd,使用最小化似然方法,即最小化公式1训练R‘vd,使用这种方式同时训练,可以增加训练效率,并且使得产生的Si的embedding能够包含对应snapshot所包含节点的RSG的特征,并且去除不包含的RSG的特征。


3. 异常检测解码器

  在训练好各个snapshot的embedding之后,我们得知了各个snapshot的特征表示,本模块的思路就是用顺序的从1到k个snapshot embedding来表示新的第k+1个snapshot embedding,之后将第二部得到的第k+1个snapshot embedding和新产生的embedding进行比对,观察其距离从而判断是否有异常出现。
  本文所采用的方法是TextRCNN[2],其以双向RNN为底层架构,添加了NLP方面的一些新架构最终组成的网络。下面首先描述双向RNN结构。
在这里插入图片描述
  从上图可以观察到,对于不同的字符,多层双向RNN有两个不同的隐藏参数层,正向参数层对应f,逆向参数层对应b,对于每个方向的起始参数层,在输入方面都会接受上一时刻输入的数据经过该层后的输出结果和新的数据,在较深的参数层则会接受当前前一层的双向输出以及上一时刻当前层的输出作为新的输入,这样能够结合双向的数据,考虑前向或者后向的数据联系。
  那么在双向RNN的基础上,下图展示了TextRCNN,可以看正常的文本信息是‘stroll along the South Bank’,原文中经过word2vec的skipgram方法预训练得到的词向量代表下图的word embedding,左侧和右侧处理文本信息的结构为双向RNN,在经过上述结构的处理获得句子的向量表示y(3),最终可以经过output层获得相关任务的分类结果。
在这里插入图片描述
  那么,在本文来说,是如何使用上述结构获得第k+1个snapshot embedding的呢?具体如下面公式所示:

在这里插入图片描述
  TextRCNN使用的双向RNN深度是1,左侧或右侧的RNN的输出除了前一时刻的当前方向输出外,还有对应的snapshot embedding的输入,具体如公式(3)、(4)所示,每个snapshot embedding作为一个xi的表示目标,其会综合考虑前一位置和后一位置snapshot的信息,最终结合不同方向的RNN序列以及自己的embedding获得xi的表示,如上述第三个公式所示,使用拼接的方式表示xi。经过隐藏层以及tanh激活函数处理获得每个snapshot的yi表示。对于预测的第k+1个snapshot embedding以及损失函数公式如下图所示:
在这里插入图片描述
  如公式(5)所示,在获得了yi后,文中意思我推测应该是每个yi都通过最大池化获得一个向量(或数值)后,将k个结果拼起来,经过参数矩阵以及加上偏置bias后获得最终的Sk+1,也就是S[1:k]。在预测出第k+1个snapshot embedding后,将其与步骤2编码器获得的第k+1个snapshot embedding的ground truth进行距离计算,通过公式(6)获得最终的结果。 如果距离超过某一设定的阈值,则认为该snapshot为异常的。


4. 关键指标生成器

  本文由于使用了graph2vec的方法,因此有相对更细粒度的检测方式,可以检测在不同的snapshot中具体是哪些RSG存在异常情况,由于RSG中只包含边和节点信息,因此根据异常情况可以分析出哪些边或者节点存在异常。
在这里插入图片描述
  具体来说参考公式1,作者认为该公式计算的是一个snapshot和某个对应RSG的共现概率。由于之前在分辨snapshot是否异常时已有snapshot embedding的ground truth与预测值,将其分别作为公式1中的Esi与对应RSG进行运算,获得结果后比较结果的差异,对RSG进行异常排序,返回前K个异常结果。


二、总结

  本文作为APT检测模型,借鉴了graph2vec以及skipgram的方法,基本延续了TextRCNN,其中作者观察之前基于learning的方法,寻找不足,提出了snapshot等新的处理基本单元,获得了良好的效果。


三、参考文献

[1] Annamalai Narayanan, Mahinthan Chandramohan, Rajasekar Venkatesan, Lihui Chen, Yang Liu, and Shantanu Jaiswal. graph2vec: Learning distributed representations of graphs. CoRR, abs/1707.05005, 2017.
[2] Siwei Lai, Liheng Xu, Kang Liu, and Jun Zhao. Recurrent convolutional neural networks for text classification. In Blai Bonet and Sven Koenig, editors, Proceedings of the Twenty-Ninth AAAI Conference on Artificial Intelligence, January 25-30, 2015, Austin, Texas, USA, pages 2267–2273. AAAI Press, 2015.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值