Page 95 - 《软件学报》2020年第11期
P. 95
段旭 等:基于代码属性图及注意力双向 LSTM 的漏洞挖掘方法 3411
定义 2(关系特征张量). 设 G=(V,E,λ,μ)为代码属性图,它有 n 个节点 V={v 1 ,v 2 ,…,v n },T(G)=(t ijk )为 G 的特征
张量,则定义向量 K ij =(t ij1 ,t ij2 ,…,t ij144 )为 v i 和 v j 的关系特征向量.
本文将关系特征向量 K ij 拆分为 5 个字段,分别为 TYPE var (i),TYPE var (j),OP(i,j),TYPE ast (i)和 TYPE cfg (i),每个
字段都对不同特征进行编码.据此,可以得到关系特征向量 K ij 的另一种表达形式:
K ij ={TYPE var (i),TYPE var (j),OP(i,j),TYPE ast (i),TYPE cfg (i)} (2)
其中,{⋅}代表向量拼接.K ij 的每个字段是一个长度为|S|的向量,其中,S 是该字段编码的目标特征的集合.由于不
同字段对不同特征进行编码,因此不同字段的目标特征的集合 S 不同.
(1) TYPE var (i)和 TYPE var (j)
TYPE var (i)和 TYPE var (j)分别对 v i 和 v j 的数据类型进行编码,其均为长度为 19 的向量,并且目标特征集为 S=
{short,int,long,char,float,double,bool,const,static,*,void,unsigned,signed,struct,union,enum,function,constant,else}.
在 TYPE var (i)字段中的 t ijk 可表示成如下形式.
⎧ 1, v 所述变量的数据类型包含 f ( ) k
t = ⎨ i (3)
ijk
⎩ 0, v 所述变量的数据类型不包含 f ( ) k
i
其中,0≤k≤18,f(k)为 K ij 中索引为 k 所对应的特征,f(k)∈S.
同理,可将在 TYPE var (j)字段中的 t ijk 表示成如下形式.
⎧ ⎪ 1, v 所述变量的数据类型包含 f ( ) k
j
t = ⎨ (4)
ijk
⎪ ⎩ 0, v 所述变量的数据类型不包含 f ( ) k
j
其中,19≤k≤37,f(k)为 K ij 中索引为 k 所对应的特征,f(k)∈S.
(2) OP(i,j)
OP(i,j)对 v i 和 v j 之间的运算符进行编码,其是长度为 29 的向量,并且目标特征集为 S={+,−,*,/,%,^,=,|,&,||,
&&,<,>,<=,>=,==,!=,+=,−=,=,/=,%=,^=,|=,&=,<<,>>,<<=,>>=}.在 OP(i,j)字段中的 t ijk 可以表示成如下形式.
v
⎧ ⎪ 1, v 和 所述表达式之间的运算符为 f ( )k
j
i
t = ⎨ (5)
ijk
v
⎪ ⎩ 0, v 和 所述表达式之间的运算符不为 f ( )k
j
i
其中,38≤k≤66,f(k)为 K ij 中索引为 k 所对应的特征,f(k)∈S.
(3) TYPE ast (i)
TYPE ast (i)对 v i 的父 AST 节点的所述表达式类型进行编码,其是长度为 57 的向量,其目标特征集 S 对应 CPG
中的 57 种 AST 节点的 type 属性值,例如 CallExpression 和 ConditionExpression.在 TYPE ast (i)字段中的 t ijk 可以
表示成如下形式.
v
⎧ ⎪ 1, v 是 v的父 AST节点且 的 type属性为 f ( )k
i
j
j
t = ⎨ (6)
ijk
v
⎪ ⎩ 0, v 不是 v的父 AST节点且 的 type属性不为 f ( ) k
j
i
j
其中,67≤k≤123,f(k)为 K ij 中索引为 k 所对应的特征,f(k)∈S.
(4) TYPE cfg (i)
TYPE cfg (i)对 v i 所在语句的 CFG 节点的所述语句类型进行编码,其是长度为 20 的向量,其目标特征集 S 对
应 CPG 中的 20 种 CFG 节点的 type 属性值,例如 ReturnStatement.需要注意的是,在 CPG 中,CFG 节点是 AST
节点的子集,因此,此处 CFG 节点的 20 种 type 属性值同样是 AST 节点 57 种 type 属性值的子集.在 TYPE cfg (i)
字段中的 t ijk 可以表示成如下形式.
v
v
⎧ ⎪ 1, v 是 所在语句的 CFG节点且 的 type属性为 f ( )k
t = ⎨ j i j (7)
ijk
v
v
⎪ ⎩ 0, v 不是 所在语句的 CFG节点且 的 type属性不为 f ( )k
j
j
i
其中,124≤k≤144,f(k)为 K ij 中索引为 k 所对应的特征,f(k)∈S.
图 4 为图 3 所示代码属性图切片后的特征张量.