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

3412                                Journal of Software  软件学报 Vol.31, No.11, November 2020






                                                                       z:特征



                                                                   y:节点
                                                   x:节点
                                           Fig.4    Feature tensor of code property graph
                                                图 4   代码属性图的特征张量
                 2.3.2    特征张量形状校正
                    由于静态神经网络要求输入为固定形状的张量,但是由于代码长短不一,代码属性图节点数量不定,进而导
                 致上述生成的特征张量形状不同.因此需要将特征张量进行处理,将其调整为统一的形状.由于特征张量中 z 轴
                 代表的关系特征向量的长度是固定的,因此只需要对 x 轴和 y 轴的进行调整即可.具体方式为:预先为 x 轴和 y
                 轴设定一个固定长度,记为 fixed_size,然后将 x 轴和 y 轴长度均调整到 fixed_size.
                    当 x 轴和 y 轴长度小于 fixed_size 时,处理方案较为简单,即直接在其后端扩充零元素,直到达到 fixed_size
                 即可.当 x 轴和 y 轴长度大于 fixed_size 时,处理方案略为复杂,因为随意对 x 轴和 y 轴信息进行裁切,可能会导致
                 重要信息的丢失.根据定义 1 可以发现,特征张量的 x 轴和 y 轴均对应 CPG 中的节点,因此,可以通过对 CPG 节
                 点进行有选择的删减,从而缩小 x 轴和 y 轴长度.具体方式为:在 CPG 中找到敏感语句所在的 CFG 节点,然后计
                 算其余节点到达该节点的最短路径长度,并删减与该节点最短路径长度较远的节点,直到 CPG 节点数量小于等
                 于 fixed_size.这样做的依据是:在一定程度上可以认为在代码属性图中,距离敏感语句较远的语句与漏洞的关联
                 和依赖较弱,其重要性较低,因此对其进行删减不会损失过多语义信息.
                    需要注意的是,在代码属性图上进行最短路径长度计算,时间开销较大,由于代码属性图节点和特征张量的
                 x 轴和 y 轴之间存在对应关系,因此可以近似地删减距离敏感语句索引较远的元素,这不失为一种可行的简化方
                 法,其可以直接在特征张量上进行操作,在一定程度上提高形状调整的效率.

                 2.4   神经网络训练与预测
                                                           本文采用深度学习的方法对神经网络模型进行训练,从
                                                        而自动对漏洞代码模式进行学习;并使用训练完毕的神经网
                                                        络模型对目标程序的特征张量进行分类,从而预测该程序是
                                                        否具有漏洞.如图 5 所示,本文的神经网络模型由 4 个模块组
                                                        成,分别为嵌入模块、双向 LSTM 模块、注意力模块和分类
                                                        模块.
                                                           (1)  嵌入模块

                                                           从公式(3)~公式(7)可以发现,v i 和 v j 的关系特征张量 K ij
                                                        在对 v i 和 v j 的关系进行编码的同时,会更加倾向于对节点 v i
                                                        中的特征信息进行体现.因此, K 在本质上可以看作是节点 v i
                                                                                 * i
                                                        的特征向量,其描述了 v i 节点本身的特征,同时包含了 v i 与其
                                                        他所有节点之间的关系.

                                                           如图 6 所示 , 在 嵌入模 块中 , 首先 将形 状为
                  Fig.5    Structure of the neural network model
                                                        (fixed_size,fixed_size,144)的输入中的 144 维向量通过线性变
                           图 5   神经网络模型结构
                                                        换映射到一个更低的维度,记为 1st_ebd_dim,此时,特征张量
                 形状为(fixed_size,fixed_size,1st_ebd_dim);然后,将其形状调整为(fixed_size,fixed_size×1st_ebd_dim),并再次通过
   91   92   93   94   95   96   97   98   99   100   101