Page 127 - 《软件学报》2020年第11期
P. 127

汪洁  等:子图相似性的恶意程序检测方法                                                            3443


                    然而,算法 2 只是对目标子图上下文的一次更新.而神经网络需要对所有的子图进行反复学习,即:需要对子
                 图库中的子图每出现一次在训练集的数据流图时,就对该子图的上下文进行一次更新,通过不断地学习,会使得
                 语境相似(上下文)的子图其向量表示距离也相近.并且在算法具体实现过程中,我们从数据流图提取子图的同
                 时也保存了该子图的上下文信息,因而后续的过程只需要读取相关信息即可,这可以减小大量的时间开销.

                 4    恶意程序检测模型构建

                    在上一节介绍了子图间相似性的学习,这一节将详细介绍如何使用子图向量构建图相似性函数以及使用
                 图相似函数来进行分类和检测.
                 4.1   图相似函数
                    本文使用深度图内核来计算图间的相似度,深度图内核                    [22] 是一种非常流行并广泛应用于计算两个图间相
                 似度,通过将一对图递归分成子结构,并定义子结构相似度函数来计算图间相似度.其表示如下.
                                                             T
                                                  S(G,G′)=Φ(G) ⋅M⋅Φ(G′)                               (6)
                 其中,S(G,G′)是表示图 G 与 G′的相似度;Φ(G)表示数据流图 G 的图向量;M 是个|V×V|矩阵,本文中用来表示子图
                 间的相似性矩阵,|V|表示子图库中子图的数量.
                    图相似函数考虑了子图间的相关性,这可以有效缓解对角线优势问题,即给定的图形容易仅与自身相似.关
                 于公式(6)必须要说明的是,Φ(G)表示流图 G 的图向量,且图向量的维度与特征子图库的大小相同.那么如何将
                 一个图映射成一个向量?我们将子图库中的子图与图向量的维度一一对应,同时图向量中使用 1 和 0 来表示该
                 图是否包含这个维度对应的特征子图.假设特征子图库只有{a,b,c,d,e}这 5 个子图,若图 G 只包含子图 b 和 d,那
                 么其图向量为(0,1,0,1,0),同时,矩阵 M 设计成上述 5 个子图的相似矩阵.这里有一个难点,就是判断图 G 中包含
                 的特征子图.图与子图匹配过程是非常复杂并且耗时的,而我们采取的方法是非常迅速,从图中提取特征子图
                 时,采取逆拓扑标识的手段表示成字符串并保存到文件中,一个图对应一份文件,那么每份文件就存储了一个图
                 所有的子图信息.之后,只需要使用子图库中的子图字符串与文件进行字符串匹配,就可以判断该图所包含的特
                 征子图.
                    矩阵 M 表示子图库中子图间相似性矩阵,M ij 表示子图 sg i 与 sg j 的相似度.使用上述 5 个子图的示例,M 13 则
                 表示子图 b 和 d 的相似度.关于矩阵 M 的计算我们提供了两种计算方法.
                    (1)  在第 3 节中,我们将“上下文”相似的子图映射成的向量在其向量空间也相近.基于这一点,我们设计子
                        图相似性计算方法如下.
                                                               1
                                                   ,
                                                ( ssg sg  j ) =                                       (7)
                                                   i
                                                                     +
                                                         dv   ), (sg  )) 1
                                                          ((sg v
                                                              i    j
                        其中,s 表示子图的相似度,d(v(sg i ),v(sg j ))表示子图 sg i 与 sg j 的空间距离,且 v(sg i )表示子图 sg i 的向量.
                    (2)  深度图内核,即公式(8),可以用来计算 G 与 G′的相似度,同样可以用来计算子图 sg i 与 sg j 的相似度,因
                        为子图也是图.其表示如下.
                                                             T
                                                  s(sg i ,sg j )=v(sg i ) ⋅m⋅v(sg j )                 (8)
                    为了便于区分,使用了符号 m.这里,矩阵 m 仍是未知的.我们设计矩阵 m 是一个对角矩阵,其中,m ij 是通过计
                 算〈v(sg i ),v(sg j )〉且 m ij =0,i≠j.
                    上述两种方式均可以计算 M ij =(sg i ,sg j ),这样我们可以计算出子图库中任意子图间的相似性,即矩阵 M.
                 4.2   分类和检测

                    分类任务是将图分成两类或者多类.给定恶意程序和正常程序的图集{G 1 ,G 2 ,…,G n }以及类标签集合 Y={y 1 ,
                 y 2 ,…,y n },其中,标签使用 0 和 1 分别表示正常和恶意程序,图分类任务是希望找到一种模型,能够将图 G i 映射到
                 标签 y i .本文使用图相似函数构建核矩阵 K,K ij 表示图 G i 与 G j 的相似度,然后将核矩阵 K 放入核方法如 SVM 进
                 行分类训练:
   122   123   124   125   126   127   128   129   130   131   132