GraphSPD: Graph

目录三、模型总体架构 四、构造补丁的代码属性图 2. 合并为. 根据代码更改计算切片 五、安全补丁检测的图学习
一、模型概要
:安全补丁检测的图神经网络
使用具有丰富语义信息的:合并了变更前后两个版本(pre-patch和post-patch)代码的代码属性图,只保留了上下文、添加、删除的三种组件 。端到端的深度神经网络模型:根据图结构判断补丁是否为安全补丁 。
①新的嵌入过程:将转换成数字格式
②新的多属性图卷积机制:适用中的不同关系 二、预备知识 1. 安全补丁
在这篇论文中:
补丁:中的一个(修复安全漏洞、解决功能缺陷,增加新功能)
安全补丁:补丁中修复了一个属于CWE类型的漏洞
2. 代码属性图(CodeGraph,CPG)
将抽象语法树 (AST)、控制流图 (CFG) 和程序依赖图 (PDG))合并为联合数据结构CPG
三、模型总体架构1. 把补丁映射为2. 通过检测安全补丁四、构造补丁的代码属性图
1. 生成 Pre-Patch 和 Post-Patch CPGs

GraphSPD: Graph

文章插图
由于补丁包含 Pre-Patch 和 Post-Patch 代码,所以可以分别生成 Pre-Patch 和 Post-Patch CPGs 。
(1)检索 Pre-Patch 和 Post-Patch 源代码(2)识别补丁相关功能(3)构建 Pre-Patch 和 Post-Patch CPGs
构建 Pre-Patch 和 Post-Patch CPG 。考虑到 Pre-Patch 和 Post-Patch 版本中与补丁相关的函数,我们应用 Joern 解析器生成两个 CPG(即G p r e G_pre Gp?re 和G p o s tGp?ost) 。给定一个 CPG,用两个集合来描述该图: ( V , E ) (V, E) (V,E) 。V V V 是用 2 元组 ( i d,c o d e ) (id,code) (id,code)表示的节点集合,其中i d id id 是标识节点的数字,c o d e code code 是该节点描述的源代码组件,即 AST 中的代码 token 或 CDG/DDG 中的语句 。E E E 是一组用三元组( i d 1 , i d 2 , t y p e ) (id1,id2,type) (id1,id2,type) 表示的有向边,其中i d 1 id_1 id1? 和i d 2 id_2 id2? 表示起始节点和结束节点的ID 。t y p e ∈ A S T , C D G , D D G type ∈ {AST, CDG, DDG} type∈AST,CDG,DDG 是边类型,指示边是否属于 AST 或表示控制/数据依赖性 。
请注意,Joern 还提供了 CFG,但我们不包含它,因为 CFG 的信息已被 CDG 包含 。
2. 合并为3. 根据代码更改计算切片
五、安全补丁检测的图学习 1. 嵌入方法
将嵌入到数值向量中,图属性包含两个部分 。
(1)边嵌入:边属性表示图中节点之间的关系,包括版本信息和边的类型两种关系 。
(2)节点嵌入:节点属性表示每个节点中的代码片段(code )(CDG/DDG中的语句或者AST中的token)
(3) 能够从语法级和语义级表示中学习漏洞模式
语法级表示是通过代码片段的节点嵌入来实现的
语义表示是通过具有不同边关系的结构来实现的
① 代码片段元数据(2):字符数、版本信息(上下文、删除、增加)
② 标识符和字面值特征(7):函数调用、变量、数字、字符串、指针、数组和空标识符的数量
③ 控制流特征(3):指示节点是否是条件语句、循环语句或跳转语句的布尔特征 。
④ 操作符特征(4):算术运算符、关系运算符、逻辑运算符和位运算符的数量 。
⑤ API(4):布尔型特征,指示代码片段是否包含内存操作、字符串操作、锁定操作和系统操作的API
元数据特征是直接派生的
标识符和字面值特征则基于 clang token化和识别的token类型
控制流特征和操作符特征由token关键字的精确匹配决定,如下表所示
由于 API 名称是由开发人员定义的,因此论文提供了一组子token(如下表的最后四行所示) 。如果函数名称包含这些子token之一,则启用相应的 API 功能 。