【技术实现步骤摘要】
一种基于上下文边关系的改进源码切片方法
[0001]本专利技术涉及源代码漏洞检测技术等领域,具体的说,是一种基于上下文边关系的改进源码切片方法
。
技术介绍
[0002]伴随着计算机技术的发展,众多应用程序在生活的各个领域得到广泛的部署和应用
。
但大多软件均是在已有的框架
、
模块上二次开发,开发过程中存在着开发流程不规范,开发周期短等问题,导致相似的漏洞广泛存在于不同的软件中
。
近年来,公开的漏洞呈逐年激增的趋势,大量软件安全事故的发生给用户和系统带来了无法弥补的损失
。
[0003]针对漏洞泛滥的问题,有研究者提出使用深度学习建立漏洞源代码漏洞检测模型,在开发周期中部署检测模型,在代码开发中着重考虑安全问题,实现“安全左移”,减小后续修复漏洞的成本
。
[0004]目前在源代码漏洞检测的研究领域中,常将源码转换成图表示,使得源码的某些特征显式地展现在图中
。
最常用的图表示是程序依赖图
(Program Dependency Graph, PDG)。
[0005]在具体实现中,生成
PDG
的主流方式是从
Joern
工具生成的代码属性图
(Code Property Graph)
中提取
REACHES(
数据依赖
)
和
CONTROLS(
控制依赖
)
两种边构建
P ...
【技术保护点】
【技术特征摘要】
1.
一种基于上下文边关系的改进源码切片方法,其特征在于:包括下述步骤:1)源码的初步解析:使用
joern
工具的
joern
‑
parse
模块初步解析源码文件,得到对应的
CPG
;2)生成
PDG
:从
CPG
中提取所有代码行的结点,再提取包含这些结点且类型为“REACHES”与“CONTROLS”的边,构成
PDG
;3)提取切点:根据切点类型,从
PDG
中选择对应切点类型的代码行作为切点;4)切片:对于每个切点,提取与漏洞高度相关的代码行,形成最终切片;5)追加变量声明语句:追加相关的变量声明语句到最终切片中;6)匿名化用户变量:以一般的形式替换源码中用户定义的变量和函数名;7)打标签:根据每个切片是否含有漏洞行,将每个切片标记为1或者为0;8)持久化保存:以
json
形式保存到本地,作为模型训练的数据集
。2.
根据权利要求1所述的一种基于上下文边关系的改进源码切片方法,其特征在于:所述步骤1)具体为:对于每一个源码文件,都会生成对应的
CPG
,
joern
工具使用
csv
文件格式表示
CPG
的图结构,每个
CPG
分别用
nodes.csv
表示图结构中存在的结点和
edges.csv
描述不同结点之间存在的关系
。3.
根据权利要求2所述的一种基于上下文边关系的改进源码切片方法,其特征在于:所述步骤2)具体为:
2.1
)对于每组
nodes.csv
与
edges.csv
,提取
nodes.csv
中表示代码行的结点;
2.2
)记提取出的表示代码行的结点的集合为
nodes_list
;其中,所述表示代码行的结点的
location
字段会有内容指明所属代码行,而非表示代码行的结点的
location
字段为空;
2.3
)再从
edges.csv
选择
start
和
key
中均出现在
nodes_list
中,且
type
为
REACHES
和
CONTROLS
的边,记提取出的边的集合为
edges_list
;
2.4
)而后由
nodes_list
和
edges_list
共同构成
PDG
;其中,结点是源码中的每一行代码,而边是不同代码行之间的数据依赖和控制依赖关系
。4.
根据权利要求2所述的一种基于上下文边关系的改进源码切片方法,其特征在于:所述切点类型包括
SensiCall
类型,
operator
类型,
...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。