代码漏洞检测模型的训练方法、代码漏洞检测方法及装置与流程
- 国知局
- 2024-07-31 22:46:29
本技术涉及人工智能,具体涉及代码漏洞检测模型的训练方法、代码漏洞检测方法及装置。
背景技术:
1、代码漏洞在代码编写过程中产生,影响代码正常运行。在软件的开发过程以及维护过程中,需要检查代码包括的代码漏洞,及时对代码漏洞进行修改,减少代码漏洞对代码运行的影响。
2、目前的代码漏洞检测技术大多数依赖于人工设计出现代码漏洞的代码的特征,这种人工定义的特征会耗费大量的人力资源且不能很好的提取代码的语法和语义信息,导致基于代码漏洞检测技术开发的代码漏洞检测软件的检测准确率较低,难以满足代码漏洞检测的需要。
技术实现思路
1、有鉴于此,本技术提供代码漏洞检测模型的训练方法、代码漏洞检测方法及装置,能够利用代码漏洞检测模型较为准确地检测到代码漏洞并且精准定位代码漏洞在代码中的位置。
2、本技术提供的技术方案如下:
3、第一方面,本技术提供一种代码漏洞检测模型的训练方法,所述方法包括:
4、获取训练代码;
5、按照所述训练代码包括的各个函数,将所述训练代码划分为各个所述函数对应的第一代码段,将所述第一代码段转换为第一代码向量,各个所述第一代码向量的向量长度相同;
6、利用门控循环单元gru模型处理所述第一代码向量,得到第一代码特征向量;
7、构建所述训练代码的第一代码属性图,对所述第一代码属性图包括的节点进行向量化处理,得到第一节点向量,所述第一节点向量包括第一叶子节点向量和第一非叶子节点向量,所述第一叶子节点向量对应于代码元素,所述第一非叶子节点向量对应于函数级代码块;
8、利用图同构网络gin模型处理所述第一代码属性图,得到第一节点特征向量和第一全图特征向量;
9、将所述第一代码特征向量、所述第一节点特征向量和所述第一全图特征向量进行拼接,得到训练特征向量;
10、利用所述训练特征向量、第一标签和第二标签训练代码漏洞检测模型,直到满足训练条件时得到完成训练的代码漏洞检测模型,所述第一标签用于指示所述第一节点向量构成的语句向量所对应的语句是否包括代码漏洞,所述第二标签用于指示所述函数级代码块是否包括代码漏洞。
11、在一种可能的实现方式中,所述将所述第一代码段转换为第一代码向量,包括:
12、建立所述函数与所述第一代码段包括的变量之间的符号映射关系,所述符号映射关系采用符号表示描述;
13、利用词法分析器将所述第一代码段符号表示转换为词序列;
14、将所述第一代码段转换为第一代码向量。
15、在一种可能的实现方式中,所述方法还包括:
16、确定所述第一代码段对应函数的函数类型,所述函数类型为外部参数函数或者内部参数函数,所述外部参数函数的参数基于输入输出的交互结果确定,所述内部参数函数的参数与输入输出的交互结果无关;
17、所述函数类型为外部参数函数,如果所述第一代码向量的向量长度大于向量长度的固定值,丢弃所述第一代码向量的尾部数据,使得丢弃后得到的第一代码向量的向量长度为所述固定值;如果所述第一代码向量的向量长度小于向量长度的固定值,在所述第一代码向量的尾部填充0,使得填充后得到的第一代码向量的向量长度为所述固定值;
18、或者,
19、所述函数类型为内部参数函数,如果所述第一代码向量的向量长度大于向量长度的固定值,丢弃所述第一代码向量的头部数据,使得丢弃后得到的第一代码向量的向量长度为所述固定值;如果所述第一代码向量的向量长度小于向量长度的固定值,在所述第一代码向量的头部填充0,使得填充后得到的第一代码向量的向量长度为所述固定值。
20、在一种可能的实现方式中,所述对所述第一代码属性图包括的节点进行向量化处理,得到第一节点向量,包括:
21、确定所述第一代码属性图包括的各个叶子节点对应的代码元素,所述代码元素为构成所述训练代码的元素;
22、生成代码元素对应的词向量,所述词向量为所述代码元素对应的叶子节点的第一叶子节点向量;
23、将非叶子节点连接的各个叶子节点的第一叶子节点向量求和,得到所述非叶子节点的第一非叶子节点向量。
24、在一种可能的实现方式中,所述利用所述训练特征向量、第一标签和第二标签训练代码漏洞检测模型,包括:
25、利用代码漏洞检测模型处理所述训练特征向量,得到分类结果,所述分类结果包括函数级漏洞分类结果以及语句级漏洞分类结果;
26、利用所述函数级漏洞分类结果和所述第二标签确定第一损失;
27、利用所述语句级漏洞分类结果和所述第一标签确定第二损失;
28、根据所述第一损失和所述第二损失调整所述代码漏洞检测模型的模型参数。
29、第二方面,本技术提供一种代码漏洞检测方法,所述方法包括:
30、获取待检测代码;
31、按照所述待检测代码包括的各个函数,将所述待检测代码划分为各个所述函数对应的第二代码段,将所述第二代码段转换为第一代码向量,各个所述第二代码向量的向量长度相同;
32、利用门控循环单元gru模型处理所述第二代码向量,得到第二代码特征向量;
33、构建所述待检测代码的第二代码属性图,对所述第二代码属性图包括的节点进行向量化处理,得到第二节点向量,所述第二节点向量包括第二叶子节点向量和第二非叶子节点向量,所述第二叶子节点向量对应于代码元素,所述第二非叶子节点向量对应于函数级代码块;
34、利用图同构网络gin模型处理所述第二代码属性图,得到第二节点特征向量和第二全图特征向量;
35、将所述第二代码特征向量、所述第二节点特征向量和所述第二全图特征向量进行拼接,得到输入特征向量;
36、利用代码漏洞检测模型处理所述输入特征向量,得到分类结果,所述分类结果包括函数级漏洞分类结果和语句级漏洞分类结果,所述函数级漏洞分类结果用于指示所述待检测代码的函数是否包括代码漏洞,所述语句级漏洞分类结果用于指示所述待检测代码的函数的语句是否包括代码漏洞,所述代码漏洞检测模型是采用权利要求1-5任一项所述的代码漏洞检测模型的训练方法训练得到的。
37、第三方面,本技术提供一种代码漏洞检测模型的训练装置,所述装置包括:
38、第一获取单元,用于获取训练代码;
39、第一转换单元,用于按照所述训练代码包括的各个函数,将所述训练代码划分为各个所述函数对应的第一代码段,将所述第一代码段转换为第一代码向量,各个所述第一代码向量的向量长度相同;
40、第一处理单元,用于利用门控循环单元gru模型处理所述第一代码向量,得到第一代码特征向量;
41、第二转换单元,用于构建所述训练代码的第一代码属性图,对所述第一代码属性图包括的节点进行向量化处理,得到第一节点向量,所述第一节点向量包括第一叶子节点向量和第一非叶子节点向量,所述第一叶子节点向量对应于代码元素,所述第一非叶子节点向量对应于函数级代码块;
42、第二处理单元,用于利用图同构网络gin模型处理所述第一代码属性图,得到第一节点特征向量和第一全图特征向量;
43、第一拼接单元,用于将所述第一代码特征向量、所述第一节点特征向量和所述第一全图特征向量进行拼接,得到训练特征向量;
44、训练单元,用于利用所述训练特征向量、第一标签和第二标签训练代码漏洞检测模型,直到满足训练条件时得到完成训练的代码漏洞检测模型,所述第一标签用于指示所述第一节点向量构成的语句向量所对应的语句是否包括代码漏洞,所述第二标签用于指示所述函数级代码块是否包括代码漏洞。
45、在一种可能的实现方式中,所述第一转换单元,用于将所述第一代码段转换为第一代码向量,包括:
46、所述第一转换单元,用于建立所述函数与所述第一代码段包括的变量之间的符号映射关系,所述符号映射关系采用符号表示描述;利用词法分析器将所述第一代码段符号表示转换为词序列;将所述第一代码段转换为第一代码向量。
47、在一种可能的实现方式中,所述装置还包括:
48、类型确定单元,用于确定所述第一代码段对应函数的函数类型,所述函数类型为外部参数函数或者内部参数函数,所述外部参数函数的参数基于输入输出的交互结果确定,所述内部参数函数的参数与输入输出的交互结果无关;
49、向量处理单元,用于所述函数类型为外部参数函数,如果所述第一代码向量的向量长度大于向量长度的固定值,丢弃所述第一代码向量的尾部数据,使得丢弃后得到的第一代码向量的向量长度为所述固定值;如果所述第一代码向量的向量长度小于向量长度的固定值,在所述第一代码向量的尾部填充0,使得填充后得到的第一代码向量的向量长度为所述固定值;
50、或者,所述函数类型为内部参数函数,如果所述第一代码向量的向量长度大于向量长度的固定值,丢弃所述第一代码向量的头部数据,使得丢弃后得到的第一代码向量的向量长度为所述固定值;如果所述第一代码向量的向量长度小于向量长度的固定值,在所述第一代码向量的头部填充0,使得填充后得到的第一代码向量的向量长度为所述固定值。
51、在一种可能的实现方式中,所述第二转换单元,用于对所述第一代码属性图包括的节点进行向量化处理,得到第一节点向量,包括:
52、所述第二转换单元,用于确定所述第一代码属性图包括的各个叶子节点对应的代码元素,所述代码元素为构成所述训练代码的元素;生成代码元素对应的词向量,所述词向量为所述代码元素对应的叶子节点的第一叶子节点向量;将非叶子节点连接的各个叶子节点的第一叶子节点向量求和,得到所述非叶子节点的第一非叶子节点向量。
53、在一种可能的实现方式中,所述训练单元,用于利用所述训练特征向量、第一标签和第二标签训练代码漏洞检测模型,包括:
54、所述训练单元,用于利用代码漏洞检测模型处理所述训练特征向量,得到分类结果,所述分类结果包括函数级漏洞分类结果以及语句级漏洞分类结果;利用所述函数级漏洞分类结果和所述第二标签确定第一损失;利用所述语句级漏洞分类结果和所述第一标签确定第二损失;根据所述第一损失和所述第二损失调整所述代码漏洞检测模型的模型参数。
55、第四方面,本技术提供一种代码漏洞检测装置,其特征在于,所述装置包括:
56、第二获取单元,用于获取待检测代码;
57、第三转换单元,用于按照所述待检测代码包括的各个函数,将所述待检测代码划分为各个所述函数对应的第二代码段,将所述第二代码段转换为第一代码向量,各个所述第二代码向量的向量长度相同;
58、第三处理单元,用于利用门控循环单元gru模型处理所述第二代码向量,得到第二代码特征向量;
59、第四转换单元,用于构建所述待检测代码的第二代码属性图,对所述第二代码属性图包括的节点进行向量化处理,得到第二节点向量,所述第二节点向量包括第二叶子节点向量和第二非叶子节点向量,所述第二叶子节点向量对应于代码元素,所述第二非叶子节点向量对应于函数级代码块;
60、第四处理单元,用于利用图同构网络gin模型处理所述第二代码属性图,得到第二节点特征向量和第二全图特征向量;
61、第二拼接单元,用于将所述第二代码特征向量、所述第二节点特征向量和所述第二全图特征向量进行拼接,得到输入特征向量;
62、检测单元,用于利用代码漏洞检测模型处理所述输入特征向量,得到分类结果,所述分类结果包括函数级漏洞分类结果和语句级漏洞分类结果,所述函数级漏洞分类结果用于指示所述待检测代码的函数是否包括代码漏洞,所述语句级漏洞分类结果用于指示所述待检测代码的函数的语句是否包括代码漏洞,所述代码漏洞检测模型是采用第一方面所述的代码漏洞检测模型的训练方法训练得到的。
63、第五方面,本技术提供一种设备,包括:处理器、存储器、系统总线;
64、所述处理器以及所述存储器通过所述系统总线相连;
65、所述存储器用于存储一个或多个程序,所述一个或多个程序包括指令,所述指令当被所述处理器执行时使所述处理器执行第一方面所述的代码漏洞检测模型的训练方法,或者执行第二方面所述的代码漏洞检测方法。
66、第六方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行第一方面所述的代码漏洞检测模型的训练方法,或者执行第二方面所述的代码漏洞检测方法。
67、由此可见,本技术具有如下有益效果:
68、本技术提供代码漏洞检测模型的训练方法、代码漏洞检测方法及装置。在该训练方法中,利用gru模型提取代码的长时语义信息,能够挖掘多重特征间的复杂关联关系,在gin模型提取代码的语法信息以及代码结构特征的基础上,以通道级联的方式融合长时语义信息和语法信息,充分关注代码语法与语义信息间的关联性,补足在特征量方面的偏差。拼接得到的训练特征向量包括更为丰富的结构化和文本化特点,保留代码上下文信息。如此便于代码漏洞检测模型对多模态数据特征的相关性进行学习,降低检测误判率,提高了语句级的代码漏洞定位的准确率,实现代码漏洞的检测和精准定位。利用该训练方法训练得到的代码漏洞检测模型,处理待检测代码,能够得到较为准确的检测结果和精准的代码漏洞的定位,便于修复代码漏洞,满足代码漏洞的检测需求。
本文地址:https://www.jishuxx.com/zhuanli/20240730/194525.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。