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),并再次通过