CN117195238A - 一种异构图神经网络代码漏洞检测方法 - Google Patents
一种异构图神经网络代码漏洞检测方法 Download PDFInfo
- Publication number
- CN117195238A CN117195238A CN202311291638.0A CN202311291638A CN117195238A CN 117195238 A CN117195238 A CN 117195238A CN 202311291638 A CN202311291638 A CN 202311291638A CN 117195238 A CN117195238 A CN 117195238A
- Authority
- CN
- China
- Prior art keywords
- graph
- node
- information
- code
- data set
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 55
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 26
- 238000012549 training Methods 0.000 claims abstract description 69
- 101001094079 Homo sapiens Sodium- and chloride-dependent GABA transporter 2 Proteins 0.000 claims abstract description 13
- 102100035242 Sodium- and chloride-dependent GABA transporter 2 Human genes 0.000 claims abstract description 13
- 238000004364 calculation method Methods 0.000 claims abstract description 8
- 230000009467 reduction Effects 0.000 claims abstract description 6
- 238000000034 method Methods 0.000 claims description 26
- 239000013598 vector Substances 0.000 claims description 20
- 230000006870 function Effects 0.000 claims description 15
- 230000008859 change Effects 0.000 claims description 12
- 230000007246 mechanism Effects 0.000 claims description 11
- 101000639970 Homo sapiens Sodium- and chloride-dependent GABA transporter 1 Proteins 0.000 claims description 8
- 102100033927 Sodium- and chloride-dependent GABA transporter 1 Human genes 0.000 claims description 8
- 238000010586 diagram Methods 0.000 claims description 7
- 239000011159 matrix material Substances 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 6
- 238000002372 labelling Methods 0.000 claims description 5
- 230000004913 activation Effects 0.000 claims description 4
- 238000011176 pooling Methods 0.000 claims description 4
- 230000004931 aggregating effect Effects 0.000 claims description 3
- 238000004140 cleaning Methods 0.000 claims description 3
- 239000012467 final product Substances 0.000 claims description 3
- 238000006317 isomerization reaction Methods 0.000 abstract 1
- 230000035945 sensitivity Effects 0.000 abstract 1
- 239000010410 layer Substances 0.000 description 15
- 238000005516 engineering process Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 238000007781 pre-processing Methods 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000013135 deep learning Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000002474 experimental method Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 239000000306 component Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013527 convolutional neural network Methods 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 239000002355 dual-layer Substances 0.000 description 1
- 230000001747 exhibiting effect Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 238000009486 pneumatic dry granulation Methods 0.000 description 1
- 238000001851 vibrational circular dichroism spectroscopy Methods 0.000 description 1
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请公开了一种异构图神经网络代码漏洞检测方法,其特征在于包括以下步骤:S1、将训练数据集进行图表示;S2、将训练数据集异构图表示输入图注意力网络GAT模型;S3、检测样本初始化;S4、使用分类器模块对GAT2模型对检测样本的图表示运算结果降维输出。本方案将训练数据集和检测样本进行了多种类型边的异构化,并改进了注意力网络模型使之可以处理异构图,随后设计了减少过拟合的新颖的分类器,使利用图神经网络对代码漏洞的检测有更好的灵敏度和贴合真实世界代码。
Description
技术领域
本申请涉及信息系统代码安全技术领域,具体涉及一种异构图神经网络代码漏洞检测方法。
背景技术
近年来,随着信息技术的快速发展,软件安全问题逐渐受到广泛关注。为了确保软件的安全性和可靠性,对软件进行源码级的漏洞检测成为研究者和工程师的关键任务,以在软件发布之前识别并消除其中的潜在风险。传统的漏洞检测技术通常需要依赖专家的经验,耗时并需要大量人工参与,效率低下。
随着技术的演进,有专利申请提出了利用人工智能技术,尤其是深度神经网络,进行源码级漏洞检测的方法。这种新的方法理论上可以大大提高漏洞检测的效率和准确性,减少对专家经验的依赖。
然而,实际应用中,基于深度神经网络的漏洞检测技术仍然存在许多问题和挑战。首先,尽管许多现有的方法尝试利用深度神经网络进行漏洞检测,但它们大多只考虑了源码的序列信息或部分语义信息,难以识别复杂的软件漏洞。其次,这些方法尚未充分利用深度神经网络处理复杂数据结构的能力,模型判别容易受到非关键信息的干扰;最后,使用深度学习方法进行漏洞检测时,由于序列模型不能较好的处理代码语义图这种非欧数据,使模型学习过程中样本漏洞信息丢失。
因此,如何设计一个既能充分利用源码结构和语义信息,又能有效避免误报的深度神经网络模型,成为了当前源码级漏洞检测研究的关键问题。
发明内容
(一)技术方案
本申请的一种异构图神经网络代码漏洞检测方法,包括以下步骤:
一、构建训练数据集
基于至少一个代码总量超过一百万行的开源项目源代码信息、源代码变更信息及源代码变更标注信息构建训练数据集。
可以基于至少一个以下开源项目的原代码构建训练数据集:Ffmpeg、QEMU、LinuxKernel、VLC Media Player。
可以使用Github API读取源代码、源代码变更信息和源代码变更标注中提示的漏洞信息。可以利用Snyk或CVE数据库来获取涉及所选的项目漏洞信息并将获得的漏洞信息与对应的代码关联。
二、将训练数据集进行图表示
1.生成训练数据集的图表示的节点信息
采用CoderSurfer工具生成训练数据集的节点信息,所述节点信息包括该节点代表的代码语句和该节点的类型;其中节点的类型由one-hot向量ci表示,节点代表的代码语句使用Word2vec模型得到其向量化表示的向量ti,得到节点的向量表示hi=[ti,ci],i∈N,N为节点的总数目;
2.生成训练数据集的图表示的边信息
(1)采用CoderSurfer工具生成训练数据集的节点间的抽象代码树边,得到第一类边信息;
(2)采用CoderSurfer工具生成训练数据集的节点间的控制流边,得到第二类边信息;
(3)采用CoderSurfer工具生成训练数据集的节点间的数据流边,得到第三类边信息;
(4)采用CoderSurfer工具生成训练数据集的节点间的调用边,得到第四类边信息;
3.生成图表示
将节点信息与节点间的四类边信息复合得到图表示,并计为G=(v,ε),其中v为图表示的节点的集合,ε为图中所有类型的边的总和,εj表示某一特定类型的边。
三、将异构图表示输入图注意力网络GAT模型
1.训练集图表示中加入节点级图注意力网络GAT模型
(1)将训练数据集中的节点信息与第一至四类边信息合并为同构子图输入图注意力网络GAT模型,将注意力系数归一化后再与其对应的特征进行线性组合,得到包括训练数据集节点信息的图注意力模型GAT1。
其中在εk边路径下节点j对节点i的重要性依如下公式计算,其中W为GAT模型训练中得到的权重矩阵:
(2)将注意力系数归一化后再与其对应的特征进行线性组合,得到节点特征为:
2.训练集图表示中加入路径级注意力网络GAT模型
根据边的类型将训练集图表示划分为不同的子图,并对各子图应用节点级注意力机制;针对在多个子图中重合的节点,综合其在各子图中学习到的特征;通过路径级注意力机制将各子图学习到的特征表示聚合,作为节点的终端表示形式,其中对于与漏洞检测高度相关的子图中学习到的节点特征,赋予更高的权重,得到在节点级注意力网络模型GAT1中加入路径级注意力网络模型GAT2。
具体计算方式如下:
其中:
其中:
其中,为加权后的节点特征表示,/>是第k条特定类型的边的特征表示,/>为第k条特定类型的边的注意力权重,K为此种特定类型的边的总数,q为查询向量,i为节点序数,b为偏置向量,/>为第i个节点对于边εk的嵌入。
四、检测样本初始化
检测源代码中的漏洞通常需要对代码进行一系列的预处理步骤。这些预处理步骤确保代码以合适的格式和结构被提供给后续的分析工具或模型。
1.数据清洗及切片
(1)准备待检测的源代码,去掉注释信息、标注信息和编译环境信息;
(2)删去源代码中的空白行,并统一缩进及换行风格;
(3)将源代码按功能模块或函数切片。
2.图初始化
(1)采用CoderSurfer工具生成检测样本的节点信息,所述节点信息包括该节点代表的代码语句和该节点的类型;
(2)生成训练数据集的图表示的边信息,采用CoderSurfer工具生成检测样本的节点间的抽象代码树边、控制流边、数据流边、调用边。
得到检测样本的图表示。
五、使用分类器模块对GAT2模型对检测样本的图表示运算结果降维输出
具体地,将GAT2模型中训练得到的训练集图表示节点信息hi与检测样本的图表示节点信息Hi连接并输入两个卷种层中进行卷积处理,每一个卷积层的后面都代入Relu激活函数并进行最大池化操作,获得与漏洞更相关的高级特征,然后再将该高级特征输入到MLP模型中进行二分类,得到漏洞检测结果。
具体计算公式为:
y1=MAXPOOL1(RELU(CONV1[hi,Hi]))
y2=MAXPOOL2(RELU(CONV2(Y1)))
最终得到的的概率值如果接近于1,就代表该函数含有漏洞;如果概率值靠近于0,则代表该函数不含有漏洞,即待测样本的标签为“良性”。
(二)有益效果
本申请注意到代码属性图中边的类型越丰富(异构程序越高)越能全面地用图表示代码与注意力网络GAT(图神经网络GNN的一个深化)无法处理异构图之间的矛盾,设计了一种新的利用GAT处理异构代码属性图的方法,同时设计了一个新颖的分类器模块。缓解由于网络层数太多导致的过拟合现象,增强分类器进一步提取代码高级特征的能力。最后本方案基于真实世界的代码及漏洞及标注信息进行训练,贴近实际,有较强的实用性。
附图说明
图1为根据本申请的漏洞检测方法流程图。
具体实施方式
下面结合实施例对本发明做进一步说明。
根据本申请的一种异构图神经网络代码漏洞检测方法,包括以下步骤:
一、构建训练数据集
在漏洞检测领域缺乏公开的标准数据集,现有技术中曾有申请人选择自己构建适合其模型的私有数据集,但这样的训练结果在真实世界中的适用程度并不客观。
为了提高本方案的实用性及其适用于真实世界的效力,基于实际的开源项目构建数据集。
采用大规模开源项目构建的优点主要有,(1)其贴近工业应用,并且有各类型的软件项目可用于漏洞检测的训练;(2)开源项目的代码构成方式,其每次版本更新有漏洞修补和提交,并且一些安全性敏感的项目如操作系统,网络工程等有人工标注的漏洞详情,保证了标签的准确性。
可以采用以下的项目构建训练数据集:
1.Ffmpeg.FFmpeg是一个开源工具集,专门用于处理音频和视频任务,如录制、转换和流式传输。作为一个长期发展并被广泛使用的项目,其代码规模相当大,涵盖了数百万行代码,展现出其深度和功能的广泛性
2.QEMU.QEMU是一个开源的处理器模拟器和虚拟机监视器,允许用户模拟各种硬件架构并运行多种操作系统。由于它的广泛硬件支持和功能丰富的特性,QEMU的代码库相当庞大,经过多年的开发,其代码规模已经达到了数百万行代码。
3.Linux Kernel。Linux Kernel是开源操作系统Linux的核心组件,负责硬件抽象、资源管理和多种基本的系统操作。截止到2021年,Linux内核的代码规模已经超过了2700万行代码,这体现了它的功能丰富性以及全球开发者社区多年来的持续贡献和开发工作。
4.VLC Media Player是一个开源的跨平台多媒体播放器,能播放大多数多媒体文件以及DVD、音频CD、VCD和各种流媒体协议。作为一个长期存在并广受欢迎的项目,VLC拥有大量的源代码,其中包括数百万行代码
基于上述项目源代码信息、源代码变更信息及源代码变更标注信息构建训练数据集。
可以使用Github API读取源代码、源代码变更信息和源代码变更标注中提示的漏洞信息。可以利用Snyk或CVE数据库来获取涉及所选的项目漏洞信息并将获得的漏洞信息与对应的代码关联。
二、配置模型训练环境
硬件采用AMD Ryzen Threadripper或Intel Core i9,16核以上CPU,4块及以上NVIDIA A100或者NVIDIA RTX 3090(24GB DDR6X显存),使用NVIDIA NVLink桥接,频率3200MHZ以上的内存256GB,及2T以上的NVMe SSD存储。
软件环境为python 3.7 pytorch版本为1.5.0
在漏洞检测领域,将纯文本的代码通过编程语言的语法定义、编译规则、控制流及数据流等表示为一个图有多种方式,其首先要将代码表示为不同的节点,然后基于节点间语法关系添加节点与节点之间的抽象代码树(AST)边,基于节点间的数据流向添加节点间的数据流(DFG)边、基于节点间的控制流向添加节点间的控制流(CFG)边、基于节点间的调用关系添加调用边。
可以采用下面的工具进行节点的生成和边的添加。
1.Joern:Joern是一个为C/C++代码生成和查询代码属性图(CPG)的开源工具。能够识别出复杂的代码模式,特别是在安全领域中的恶意模式。
2.CodeSurfer:由GrammaTech公司开发的商业工具,为C和C++代码生成PDG,并可扩展到生成CPG。
还可以采用其他工具如0cular/ShiftLeft,Plume,Pharos等。
三、将训练数据集进行图表示
1.生成训练数据集的图表示的节点信息
采用joern工具或者CoderSurfer工具生成训练数据集的节点信息,所述节点信息包括该节点代表的代码语句和该节点的类型;其中节点的类型由one-hot向量ci表示,节点代表的代码语句使用Word2vec模型得到其向量化表示的向量ti,得到节点的向量表示hi=[ti,ci],i∈N,N为节点的总数目;
2.生成训练数据集的图表示的边信息
(1)采用joern工具或CoderSurfer工具生成训练数据集的节点间的抽象代码树边,得到第一类边信息;
(2)采用joern工具或CoderSurfer工具生成训练数据集的节点间的控制流边,得到第二类边信息;
(3)采用joern工具或CoderSurfer工具生成训练数据集的节点间的数据流边,得到第三类边信息;
(4)采用joern工具或CoderSurfer工具生成训练数据集的节点间的调用边,得到第四类边信息;
3.生成图表示
将节点信息与节点间的四类边信息复合得到图表示,并计为G=(v,ε),其中v为图表示的节点的集合,ε为图中所有类型的边的总和,εj表示某一特定类型的边。
因为每种工具生成的节点的类型的总量是已知的,因此用one-hot向量来代表节点的类型,另一方面,对节点代表代码语句的向量初始化,有多种方式,有些将代码中的单词进行简并处理,忽略其中的字符串、常量等,把库函数名称进行映射,这种方案会导致训练集出现样本重复的问题;还有一种方式,把代码语句中出现的所有新的单词都作为字符数组,这种方式通过给数组元素编号避免了样本重复的问题,但因为数组名是自定义的而不易用Word2vec向量化处理,本方案采用直接将节点代表的原代码文本进行输入Word2vec学习的方式,使其向量化。
四、将异构图表示输入图注意力网络GAT模型
1.训练集图表示中加入节点级图注意力网络GAT模型
在代码图结构表示中,正常节点的数量普遍较多。由于图神经网络主要通过汇聚相邻节点的特征向量来更新当前节点的特征,存在以下问题:当某一具有漏洞的节点被大量正常节点所环绕时,在特征向量更新过程中,可能会因为累积过多正常节点的特征导致其自身特征表示被扭曲。这样,漏洞信息很容易被掩盖,从而降低检测的准确性。受到视觉识别领域中人类视觉注意力机制的启示,本技术提出使用节点级的注意力机制策略。该策略的核心是增加与漏洞相关的节点权重,以减少正常节点对漏洞节点特征表示的干扰,从而更准确地揭示代码中的潜在漏洞。
本申请用代码工具先生成了节点信息,然后在节点信息中添加了四类边信息构成了异构的图。所谓异构的图,区别于边类型和节点类型只有一种的同构图,其边的类型有多种。
描述代码属性间的信息,不同的类型的边信息可以解释代码间不同性质的关系,从越多的角度描述边关系,就能得到代码的越详细的抽象展示。但注意力网络难以处理异构图,因此本技术在使用图注意图网络模型GAT时先把边信息简并到节点信息中得到节点级注意图力网络模型GAT1,然后再把异构的训练集图表示分解为四类由边信息定义的同构的子图,再次输入GAT模型中得到路径级图注意力机制GAT2模型。
(1)将训练数据集中的节点信息与第一至四类边信息合并为同构子图输入图注意力网络GAT模型,将注意力系数归一化后再与其对应的特征进行线性组合,得到包括训练数据集节点信息的图注意力模型GAT1。
其中在εk边路径下节点j对节点i的重要性依如下公式计算,其中W为GAT模型训练中得到的权重矩阵:
(2)将注意力系数归一化后再与其对应的特征进行线性组合,得到节点特征为:
2.训练集图表示中加入路径级注意力网络GAT模型
在实际应用环境中,存在大量的复杂漏洞。对于这类漏洞,往往需要综合多种语义图信息来进行深入分析,才能有效地进行识别。然而,也存在一些相对简单的漏洞,它们仅依赖部分语义图信息即可完成识别。当过多地加入语义图信息时,某些冗余的语义图特征可能被视为正常代码特征,这可能对准确的漏洞检测产生不利影响。如果在一个主要包含简单漏洞的数据集中过度依赖综合图进行检测,将不可避免地引入多余的语义图信息,从而可能影响模型的检测性能。
根据边的类型将训练集图表示划分为不同的子图,并对各子图应用节点级注意力机制;针对在多个子图中重合的节点,综合其在各子图中学习到的特征;通过路径级注意力机制将各子图学习到的特征表示聚合,作为节点的终端表示形式,其中对于与漏洞检测高度相关的子图中学习到的节点特征,赋予更高的权重,得到在节点级注意力网络模型GAT1中加入路径级注意力网络模型GAT2。
具体计算方式如下:
其中:
其中:
其中,为加权后的节点特征表示,/>是第k条特定类型的边的特征表示,/>为第k条特定类型的边的注意力权重,K为此种特定类型的边的总数,q为查询向量,i为节点序数,b为偏置向量,/>为第i个节点对于边εk的嵌入。
相比于同样使用注意力网络模型的中国授权专利CNl11259394B,本申请弥补了现有的注意力网络GAT模型无法直接处理异构图和代码属性图中边有不同的表示(抽象代码树边、控制流边、数据流边、调用边)形成多种边的异构图的矛盾,使用异构图也可以使用注意力网络,同时设计了节点级和路径级的双怪注意力机制,使训练集的四种边信息得到充分全面的学习。
五、检测样本初始化
检测源代码中的漏洞通常需要对代码进行一系列的预处理步骤。这些预处理步骤确保代码以合适的格式和结构被提供给后续的分析工具或模型。
1.数据清洗及切片
(1)准备待检测的源代码,去掉注释信息、标注信息和编译环境信息;
(2)删去源代码中的空白行,并统一缩进及换行风格;
(3)将源代码按功能模块切片
2.图初始化
(1)采用joern工具或者CoderSurfer工具生成检测样本的节点信息,所述节点信息包括该节点代表的代码语句和该节点的类型;
(2)生成训练数据集的图表示的边信息,具体包括采用joern工具或CoderSurfer工具生成检测样本的节点间的抽象代码树边、控制流边、数据流边、调用边。
得到检测样本的图表示。
六、使用分类器模块对GAT2模型对检测样本的图表示运算结果降维输出
在过去的研究中,输出的检测结果是节点级的,目的是预测样本的图表示中某一节点的结果。本申请中图神经网络GAT2输入的样本是功能模块级乃至函数级的,该代码的每条内容都对应到图的每个节点上,整个代码样本需要用一张异构图才能表示出来,因此本文的研究本质上是一个图二分类工作。图分类要求图神经网络在训练阶段学习到每个节点的特征表示后,需要对图表示进行进一步的降维,这个功能也称为分类器模块。
在传统的图分类技术中,所述分类器组件采用一个多层感知机(MLP)层。该图分类方法的操作流程可被系统地概述为以下步骤:首先,获取图神经网络通过学习得到的节点嵌入表示和初始节点特征h,并将二者进行结合。接下来,将结合后的向量表示送入多层感知机(MLP)模块进行进一步的学习处理。此处理目的在于对特征实现更深度的降维,并最终完成图的标签预测。
本技术涉及的神经网络学习是一种端到端的流程。在所述网络中,各模块的结构对实验的输出结果有显著的影响。因此,针对本技术提出的特定模型,寻找一个更为适配的分类器模块成为一个技术难点。鉴于待检测的漏洞在代码中所占比例较小,本技术有意图在分类器模块中进一步提取源代码的高级特征,从而捕获更为丰富的与漏洞相关的特征信息。基于此,本技术并未直接采用传统的多层感知机(MLP)模块来对图形表示进行降维处理。
为了更有效地提取样本的复杂特征,本发明在多层感知机(MLP)模块前引入了卷积运算。在深度学习领域,模型结构的深度对于实验的输出效果具有关键的影响。通常,当网络的层数增加时,模型的抽象能力得以增强。然而,MLP作为一种全连接神经网络,在网络深度增加的同时,其参数数量也随之显著增加,这可能导致模型过度拟合现象。相对之下,卷积神经网络通过采用权值共享和局部感知等策略,能有效减少网络参数,从而实现在增加网络深度的同时提取样本的更高级特征。基于此,与传统分类器模块的设计不同,本发明首先将合并后的节点信息输入到两个连续的卷积层中。在每一个卷积层之后,均采用了ReLU激活函数和最大池化操作,以捕获与潜在漏洞更为相关的高级特征。之后,将这些高级特征输入到MLP模型中,实现对样本的二分类任务。
具体地,将GAT2模型中训练得到的训练集图表示节点信息hi与检测样本的图表示节点信息Hi连接并输入两个卷种层中进行卷积处理,每一个卷积层的后面都代入Relu激活函数并进行最大池化操作,获得与漏洞更相关的高级特征,然后再将该高级特征输入到MLP模型中进行二分类,得到漏洞检测结果。
具体计算公式为:
y1=MAXPOOL1(RELU(CONV1[hi,Hi]))
y2=MAXPOOL2(RELU(CONV2(Y1)))
最终得到的的概率值如果接近于1,就代表该函数含有漏洞;如果概率值靠近于0,则代表该函数不含有漏洞,即待测样本的标签为“良性”。
经过测试,在进一步的实施例中,双层注意图机制输入特征维度为169维,隐藏层维度为200层,输出特征维度为100维,注意力头数为4,掉出率(dropout)为0.75,学习率为0.0001。
以上对本发明的一个实施例进行了详细说明,但所述内容仅为本发明的较佳实施例,不能被认为用于限定本发明的实施范围。凡依本发明申请范围所作的均等变化与改进等,均应仍归属于本发明的专利涵盖范围之内。
Claims (8)
1.一种异构图神经网络代码漏洞检测方法,其特征在于包括以下步骤:
S1、将训练数据集进行图表示
S1-1.生成训练数据集的图表示的节点信息
S1-2.生成训练数据集的图表示的边信息
(1)采用CoderSurfer工具生成训练数据集的节点间的抽象代码树边,得到第一类边信息;
(2)采用CoderSurfer工具生成训练数据集的节点间的控制流边,得到第二类边信息;
(3)采用CoderSurfer工具生成训练数据集的节点间的数据流边,得到第三类边信息;
(4)采用CoderSurfer工具生成训练数据集的节点间的调用边,得到第四类边信息;
S1-3.生成训练数据集异构图表示
将节点信息与节点间的四类边信息复合得到图表示,并计为G=(ν,ε),其中ν为图表示的节点的集合,ε为图中所有类型的边的总和,εj表示某一特定类型的边;
S2、将训练数据集异构图表示输入图注意力网络GAT模型
S2-1.将训练数据集中的节点信息与第一至四类边信息合并为同构子图输入图注意力网络GAT模型,将注意力系数归一化后再与其对应的特征进行线性组合,得到包括训练数据集节点信息的图注意力模型GAT1;
S2-2.根据边的类型将训练集图表示划分为不同的子图,并对各子图应用节点级注意力机制;针对在多个子图中重合的节点,综合其在各子图中学习到的特征;通过路径级注意力机制将各子图学习到的特征表示聚合,作为节点的终端表示形式,其中对于与漏洞检测高度相关的子图中学习到的节点特征,赋予更高的权重,得到在节点级注意力网络模型GAT1中加入路径级注意力网络模型GAT2;
S3、检测样本初始化
S3-1.数据清洗及切片
S3-2.图初始化
(1)采用CoderSurfer工具生成检测样本的节点信息,所述节点信息包括该节点代表的代码语句和该节点的类型;
(2)生成训练数据集的图表示的边信息,采用CoderSurfer工具生成检测样本的节点间的抽象代码树边、控制流边、数据流边、调用边;
得到检测样本的图表示;
S4、使用分类器模块对GAT2模型对检测样本的图表示运算结果降维输出
将GAT2模型中训练得到的训练集图表示节点信息hi与检测样本的图表示节点信息Hi连接并输入两个卷种层中进行卷积处理,每一个卷积层的后面都代入Relu激活函数并进行最大池化操作,获得与漏洞更相关的高级特征,然后再将该高级特征输入到MLP模型中进行二分类,得到漏洞检测结果。
2.根据权利要求1所述的一种异构图神经网络代码漏洞检测方法,其特征在于:在S1步骤之前还包括:
步骤S0:构建训练数据集,基于至少一个代码总量超过一百万行的开源项目源代码信息、源代码变更信息及源代码变更标注信息构建训练数据集。
3.根据权利要求2所述的一种异构图神经网络代码漏洞检测方法,其特征在于:基于至少一个以下开源项目的原代码构建训练数据集:Ffmpeg、QEMU、Linux Kernel、VLC MediaPlayer;使用Github API读取源代码、源代码变更信息和源代码变更标注中提示的漏洞信息;利用Snyk或CVE数据库来获取涉及所选的项目漏洞信息并将获得的漏洞信息与对应的代码关联。
4.根据权利要求1所述的一种异构图神经网络代码漏洞检测方法,其特征在于:所述S1-1步骤具体包括:采用CoderSurfer工具生成训练数据集的节点信息,所述节点信息包括该节点代表的代码语句和该节点的类型;其中节点的类型由one-hot向量ci表示,节点代表的代码语句使用Word2vec模型得到其向量化表示的向量ti,得到节点的向量表示hi=[ti,ci],i∈N,N为节点的总数目。
5.根据权利要求4所述的一种异构图神经网络代码漏洞检测方法,其特征在于:图注意力模型GAT1中εk边路径下节点j对节点i的重要性依如下公式计算,其中W为GAT模型训练中得到的权重矩阵:
节点特征计算公式为:
6.根据权利要求5所述的一种异构图神经网络代码漏洞检测方法,其特征在于:图注意力模型GAT2中,加权后的节点特征计算公式为:
其中:
其中:
其中,为加权后的节点特征表示,/>是第k条特定类型的边的特征表示,/>为第k条特定类型的边的注意力权重,K为此种特定类型的边的总数,q为查询向量,i为节点序数,b为偏置向量,/>为第i个节点对于边εk的嵌入。
7.根据权利要求1所述的一种异构图神经网络代码漏洞检测方法,其特征在于:所述S3-1步骤具体包括:
(1)准备待检测的源代码,去掉注释信息、标注信息和编译环境信息;
(2)删去源代码中的空白行,并统一缩进及换行风格;
(3)将源代码按功能模块切片。
8.根据权利要求1所述的一种异构图神经网络代码漏洞检测方法,其特征在于:所述步骤S4中漏洞检测结果的计算公式为:
y1=MAXPOOL1(RELU(CONV1[hi,Hi]))
y2=MAXPOOL2(RELU(CONV2(Y1)))
最终得到的的概率值如果接近于1,就代表该函数含有漏洞;如果概率值靠近于0,则代表该函数不含有漏洞。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311291638.0A CN117195238B (zh) | 2023-10-08 | 2023-10-08 | 一种异构图神经网络代码漏洞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311291638.0A CN117195238B (zh) | 2023-10-08 | 2023-10-08 | 一种异构图神经网络代码漏洞检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117195238A true CN117195238A (zh) | 2023-12-08 |
CN117195238B CN117195238B (zh) | 2024-06-21 |
Family
ID=88994024
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311291638.0A Active CN117195238B (zh) | 2023-10-08 | 2023-10-08 | 一种异构图神经网络代码漏洞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117195238B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB201917161D0 (en) * | 2019-08-23 | 2020-01-08 | Praetorian | System and method for automatically detecting a security vulnerability in a source code using a machine learning model |
CN111259394A (zh) * | 2020-01-15 | 2020-06-09 | 中山大学 | 一种基于图神经网络的细粒度源代码漏洞检测方法 |
CN112699377A (zh) * | 2020-12-30 | 2021-04-23 | 哈尔滨工业大学 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
CN113868650A (zh) * | 2021-09-13 | 2021-12-31 | 四川大学 | 基于代码异质中间图表示的漏洞检测方法与装置 |
CN116010958A (zh) * | 2022-10-13 | 2023-04-25 | 中国南方电网有限责任公司超高压输电公司 | 一种漏洞分析方法、装置、介质及设备 |
CN116108452A (zh) * | 2023-02-28 | 2023-05-12 | 北京航空航天大学 | 一种代码漏洞的检测方法 |
CN116578985A (zh) * | 2023-05-15 | 2023-08-11 | 南京邮电大学 | 一种基于模型无关元学习的智能合约漏洞检测方法 |
-
2023
- 2023-10-08 CN CN202311291638.0A patent/CN117195238B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB201917161D0 (en) * | 2019-08-23 | 2020-01-08 | Praetorian | System and method for automatically detecting a security vulnerability in a source code using a machine learning model |
CN111259394A (zh) * | 2020-01-15 | 2020-06-09 | 中山大学 | 一种基于图神经网络的细粒度源代码漏洞检测方法 |
CN112699377A (zh) * | 2020-12-30 | 2021-04-23 | 哈尔滨工业大学 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
CN113868650A (zh) * | 2021-09-13 | 2021-12-31 | 四川大学 | 基于代码异质中间图表示的漏洞检测方法与装置 |
CN116010958A (zh) * | 2022-10-13 | 2023-04-25 | 中国南方电网有限责任公司超高压输电公司 | 一种漏洞分析方法、装置、介质及设备 |
CN116108452A (zh) * | 2023-02-28 | 2023-05-12 | 北京航空航天大学 | 一种代码漏洞的检测方法 |
CN116578985A (zh) * | 2023-05-15 | 2023-08-11 | 南京邮电大学 | 一种基于模型无关元学习的智能合约漏洞检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117195238B (zh) | 2024-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP4058916B1 (en) | Detecting unknown malicious content in computer systems | |
CN111783100B (zh) | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 | |
Kolosnjaji et al. | Empowering convolutional networks for malware classification and analysis | |
CN110135157B (zh) | 恶意软件同源性分析方法、系统、电子设备及存储介质 | |
CN108491228A (zh) | 一种二进制漏洞代码克隆检测方法及系统 | |
CN114239083B (zh) | 一种基于图神经网络的高效状态寄存器识别方法 | |
CN113868650B (zh) | 基于代码异质中间图表示的漏洞检测方法与装置 | |
CN113609488B (zh) | 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统 | |
CN112115326B (zh) | 一种以太坊智能合约的多标签分类和漏洞检测方法 | |
Xue et al. | Homology analysis of malware based on ensemble learning and multifeatures | |
Cao et al. | FTCLNet: Convolutional LSTM with Fourier transform for vulnerability detection | |
CN111400713B (zh) | 基于操作码邻接图特征的恶意软件族群分类方法 | |
Mao et al. | Explainable software vulnerability detection based on attention-based bidirectional recurrent neural networks | |
CN116361788A (zh) | 一种基于机器学习的二进制软件漏洞预测方法 | |
CN117633811A (zh) | 一种多视角特征融合的代码漏洞检测方法 | |
Lin et al. | Towards interpreting ML-based automated malware detection models: A survey | |
CN117454387A (zh) | 基于多维度的特征提取的漏洞代码检测方法 | |
Fonseca et al. | Model-agnostic approaches to handling noisy labels when training sound event classifiers | |
Chen et al. | Efficient Windows malware identification and classification scheme for plant protection information systems | |
CN117195238B (zh) | 一种异构图神经网络代码漏洞检测方法 | |
Zong et al. | Application of artificial fish swarm optimization semi-supervised kernel fuzzy clustering algorithm in network intrusion | |
Darem | A Novel Framework for Windows Malware Detection Using a Deep Learning Approach. | |
KR102405799B1 (ko) | 사이버 공간에서 실시간 공격 탐지를 위한 시간에 따른 지속적인 적응형 학습을 제공하는 방법 및 시스템 | |
Stokes et al. | Detection of prevalent malware families with deep learning | |
Pan et al. | Td-zero: Automatic golden-free hardware Trojan detection using zero-shot learning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |