(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202210741646.X
(22)申请日 2022.06.28
(71)申请人 湖南大学
地址 410083 湖南省长 沙市岳麓区麓山 南
路28号
(72)发明人 胡玉鹏 关翔予 温杰凌 辛钰雯
齐园
(74)专利代理 机构 长沙正奇专利事务所有限责
任公司 431 13
专利代理师 王娟 马强
(51)Int.Cl.
G06F 21/57(2013.01)
G06F 8/75(2018.01)
G06F 8/41(2018.01)
G06F 16/36(2019.01)G06N 3/04(2006.01)
(54)发明名称
程序漏洞检测方法、 终端设备及存 储介质
(57)摘要
本发明公开了一种程序漏洞检测方法、 终端
设备及存储介质, 将源程序转化为中间代码LLV M
IR, 具有细粒度、 容纳语义信息丰富、 易于扩展的
优势。 本发明通过添加控制信息弥补原有代码切
片算法的语义不足问题, 对中间代码进行切片。
使用基于IR的词嵌入方式, 依据不同指令之间的
依赖性与指令上下文的特征, 尽可能地保留指令
相关的信息, 丢弃非指令的信息, 解决了传统词
嵌入方式数据处理繁杂、 容易丢失语义的问题,
大大提高了漏洞检测率。
权利要求书2页 说明书9页 附图1页
CN 115146279 A
2022.10.04
CN 115146279 A
1.一种程序 漏洞检测方法, 其特 征在于, 包括以下步骤:
对源程序进行静态分析, 获取源程序的中间代码;
提取可能造成漏洞的关键点, 生成切片标准, 利用所述切片标准对所述中间代码进行
切片, 合并前向切片和后向切片, 得到程序的代码片段;
使用IR2vec, 对所述 程序的代码片段进行词嵌入, 得到编码后的向量;
利用所述编码后的向量训练神经网络, 得到漏洞检测模型。
2.根据权利要求1所述的程序漏洞检测方法, 其特征在于, 对源程序进行静态分析, 获
取源程序的中间代码的具体实现过程包括: 解析源代码, 使用Clang命令获取源代码对应的
中间代码表示形式, 即得到源程序的中间代码。
3.根据权利要求1所述的程序漏洞检测方法, 其特征在于, 提取可能造成漏洞的关键点
的具体实现过程包括:
初始化词法单 元集Y, 将源程序P分成多个函数, 多个函数集 合为F; Y初始化 为空;
对每个函数fi∈F, 建立抽象语法树Ai;
遍历每个词法单 元tj, tj∈Ai, 判断tj与Z中的四个特 征是否匹配;
若匹配, 则将Y∪{tj}并存入Y; Z={zapi,zarray,zpointer,zarithmetic}, 其中zapi,zarray,
zpointer,zarithmetic分别为库函数、 数组、 指针和表达式四种特殊标记; 输出Y, Y即可能造成漏
洞的关键点。
4.根据权利要求1所述的程序漏洞检测方法, 其特征在于, 程序的代码片段获取过程包
括:
在语句sw中给定一个特殊的词法单元
收集并定义语句sw的后置顶点集为Ss;
Y为可能造成漏洞的关键点;
对于任意语句ss∈Ss, 判断ss是否通过
对sw存在数据或者控制依赖, 若存在依赖, 则
提取出语句ss为前向切片;
收集并定义语句sw的前置顶点 集为Sp; 对于任意语句sp∈Sp, 判断
sp是否通过
对sw存在数据或者控制依赖, 若存在依赖则提取 出语句sp为后向切片;
合并前向切片和后向切片, 得到合并后的切片
将所述切片
作为程序的代码片
段。
5.根据权利要求1或4所述的程序漏洞检测方法, 其特征在于, 程序的代码片段获取过
程包括:
若在切片
中有一条语句在mq的闭区间上, 则将mq以及mq的限定范围插入到切片
中; 其中,
的初始状态为空,
的更新过程包括: 判断tj是否与zelseif,
zelse, zcase中的一个匹配, 若匹配, 绑定mcur和mpre, mpre初始为空; 若不匹配, 将
存
入
并将mcur赋值给mpre; tj∈Ai, tj为第j个词法单元, Ai为抽象语法树; 当tj与Z中的八个
控制语句匹配 时, 将tj作为Ai的根节点的子树, 赋给为aij; mcur中存入aij的最小行号和最大
行号; Z={zif,zelseif,zelse,zfor,zwhile,zdowhile,zswitch,zcase}, zif,zelseif,zelse,zfor,zwhile,
zdowhile,zswitch,zcase为控制语句;
为前向切片和后向切片合并后的切片; 对任一控制范权 利 要 求 书 1/2 页
2
CN 115146279 A
2围
mb∈Mst进行遍历, 初始时使ma[0]=mb[0], 取ma[1]和mb[1]中的最大值, 并将该
最大值赋值给ma[1], 得到更新后的
ma[0]是控制范围ma的下限值, ma[1]是控制范围ma
的上限值;
设
初始为空, 对于在
中的两个函数fυ,fω, 若fv调用fω, 则将
赋值给
即源代码程序最终的代码切片结果;
的更新过程包括: 设集合
初始为空, 对于出现在
中的两条语句sλ,sμ, 若sμ的继承节点是sλ或者sμ的行号小于sλ, 则将
后重
新再赋值给
根据源程序和中间代码之间的对应关系, 将源程序的程序切片
转化为中间代码的
程序切片 片段。
6.根据权利要求1所述的程序漏洞检测方法, 其特征在于, 使用IR2vec, 对所述程序的
代码片段进行词嵌入, 得到编码后的向量的具体实现过程包括:
读入待进行词嵌入的代码片段;
根据程序中各个函数的调用关系, 生成函数调用图, 并根据函数调用图, 获取被调用函
数名称;
根据种子嵌入词汇表和指令间的控制流的依赖关系, 指导生成指令词向量, 每个基本
块的词向量由每个指 令的词向量拼接而成, 函数的词向量由该函数的每个基本块的词向量
拼接而成, 生成函数的词向量;
拼接各个函数的词向量, 得到编码后的向量;
其中, 所述种子嵌入词汇表生成过程包括: 将程序指令映射到代码三元组<h,r,t>, h,
r,t分别表示当前指 令的类型、 当前指 令的操作符与下一个指 令的操作符之间的关系, 以及
当前指令的操作符与其操作数之间的关系; 通过知识图谱模 型将h、 r和t嵌入到相同的高维
空间中, 得到种子嵌入词汇 表。
7.根据权利要求1所述的程序漏洞检测方法, 其特征在于, 所述神经网络采用双向循环
神经网络模型; 将所述编码后的向量按照随机顺序输入至所述双向循环神经网络模型。
8.根据权利要求1所述的程序漏洞检测方法, 其特征在于, 还包括: 将待预测的源代码
输入所述漏洞检测模型, 提取出大于设定阈值的漏洞检测模型的输出结果, 则所述输出结
果即为可能的漏洞行号。
9.一种终端设备, 其特征在于, 包括处理器和存储器; 所述存储器存储有计算机程序/
指令; 所述处理器执行所述存储器存储的计算机程序/指令; 所述计算机程序/指令被配置
为实现权利要求1~8之一所述方法的步骤。
10.一种计算机存储介质, 其上存储有计算机程序/指令; 其特征在于, 所述计算机程
序/指令被处 理器执行时实现权利要求1~8之一所述方法的步骤。权 利 要 求 书 2/2 页
3
CN 115146279 A
3
专利 程序漏洞检测方法、终端设备及存储介质
文档预览
中文文档
13 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共13页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 11:00:56上传分享