CN111611586B - 基于图卷积网络的软件漏洞检测方法及装置 - Google Patents
基于图卷积网络的软件漏洞检测方法及装置 Download PDFInfo
- Publication number
- CN111611586B CN111611586B CN201910136182.8A CN201910136182A CN111611586B CN 111611586 B CN111611586 B CN 111611586B CN 201910136182 A CN201910136182 A CN 201910136182A CN 111611586 B CN111611586 B CN 111611586B
- Authority
- CN
- China
- Prior art keywords
- code
- graph
- convolution network
- codes
- variable
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明属于计算机安全技术领域,特别涉及一种基于图卷积网络的软件漏洞检测方法及装置,该方法包含:收集代码样本数据集;针对代码样本数据集,基于抽象语法树和控制流图提取以代码行为单位的代码特征语义表达形式;通过已训练学习后的图卷积网络对提取的代码特征语义表达形式进行分类检测,依据分类检测结果获取代码中软件漏洞。本发明通过提取代码的抽象语法树、控制流和数据流信息,形成以代码行为单位的代码特征语义表达方式,通过使用深度学习中图卷积网络和基于抽象语法树提取的数据流分析出来的特性做检测来分析代码中存在漏洞的可能性,有效提高漏洞检测效率和准确率,保证软件代码可靠性,提高软件质量,对软件安全应用具有重要的意义。
Description
技术领域
本发明属于计算机安全技术领域,特别涉及一种基于图卷积网络的软件漏洞检测方法及装置。
背景技术
现在软件技术深入到了生活中的各个方面,因此这些系统本身的安全性就越来越重要。但是软件中存在的各种漏洞严重威胁了系统的安全。在2015年-2017年间,总共有27583个漏洞被披露出来,平均每年发现9194个漏洞。相比2006年到2014年之间平均每年5400个漏洞被公开来说,发现漏洞的数量增加了70%多。其中有一小部分未纰漏的漏洞被称为0day漏洞深受攻击者青睐。2015年发现得0day漏洞数量剧增,平均大约每周一个。但是到目前为止,主要的关键漏洞还是通过安全专家手工分析发现的。漏洞发现是一项繁琐的工作,需要对系统、编程语言和各种各样的攻击场景有深入的了解。这个工作的困难程度导致了对新的漏洞分析挖掘方法的强烈需求。在这个领域的研究主要集中在开发自动化规范的方法流程来加速代码的分析过程,主要有模型检测以及符号执行,都是通过检代码的一些属性来推导存在漏洞的可能。这些方法在理论环境中效果很好,但是现实场景里因为软件系统庞大的代码量导致这些方法很难满足需求。
发明内容
为此,本发明提供一种基于图卷积网络的软件漏洞检测方法及装置,通过使用深度学习中图卷积网络和基于抽象语法树提取的数据流分析出来的特性做检测来分析代码中存在漏洞的可能性,提高漏洞检测效率和准确率,保证软件代码的可靠性。
按照本发明所提供的设计方案,一种基于图卷积网络的软件漏洞检测方法,包含:
A)收集用于检测的代码样本数据集;
B)针对代码样本数据集,基于抽象语法树和控制流图提取以代码行为单位的代码特征语义表达形式;
C)通过已训练学习后的图卷积网络对提取的代码特征语义表达形式进行分类检测,依据分类检测结果获取代码中软件漏洞。
上述的,A)中,将代码样本数据集划分为训练集、调优集和测试集,利用训练集和调优集依次对图卷积网络进行训练学习,利用测试集对训练学习后的图卷积网络进行测试。
上述的,B)中,提取代码特征语义表达形式过程中,首先,提取代码的抽象语法树;然后基于抽象语法树生成代码的控制流图;根据控制流图中控制流路径的程序执行过程,以代码行为单位获取变量有效定义集合;将代码行中变量使用函数、污点变量和脆弱性标记作为代码特征,形成特征矩阵。
优选的,B)中获取变量有效定义集合,根据控制流路径执行过程中,将对于执行过程中执行点的所有定义过且没有被重新复制的变量定义作为有效定义,依据该有效定义遍历控制流图中每行代码获取每行代码的有效定义集合。
优选的,有效定义集合依据变量使用和定义分为输入集合、输出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销毁集合;分析各行代码输入集合,构建每个定义变量的使用-定义链,将输入集合、输出集合、生成集合和销毁集合表示成位向量,代码中发生的每个赋值对应唯一标志位。
优选的,遍历每一行代码,首先对有效定义集合进行初始化,并将代码块改变状态设置为逻辑真值;然后执行循环过程,该循环过程内容如下:判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行的输入集合的值设置为上一行代码输出集合值,将当前代码行的输出集合复制给临时变量,将当前代码行的生成集合和输入集合值相加并减去销毁集合值,将运算结果重新复制给输出集合,判断该重新复制的输出集合值是否与临时变量相等,若不等,则设置代码块改变状态为逻辑真值,返回循环过程开始段,重新执行,若相等,则结束循环,输出有效定义集合。
优选的,依据有效定义集合,识别出代码行中的代码特征,形成特征矩阵,该代码特征包含:变量使用函数、污点变量和脆弱性标记作为,特征矩阵中,行表示代码样本,列表示代码特征。
上述的,C)图卷积网络中,将提取的代码特征语义表达形式作为文本信息,构造文本图,该文本图中包含代码的特征节点和代码所在行节点,代码文件特征节点和行节点之间建立行和特征之间的边,基于特征之间同时存在的模式建立代码特征之间的边;将文本图作为输入,送入图卷积网络进行分类检测。
优选的,利用词频逆向文件频率TF-IDF确定行和特征之间的边的权重,利用点互信息PMI确定代码特征之间的边的权重。
一种基于图卷积网络的软件漏洞检测装置,包含:收集模块、提取模块和检测模块,其中,
收集模块,用于收集用于检测的代码样本数据集;
提取模块,用于针对代码样本数据集,基于抽象语法树和控制流图提取以代码行为单位的代码特征语义表达形式;
检测模块,用于通过已训练学习后的图卷积网络对提取的代码特征语义表达形式进行分类检测,依据分类检测结果获取代码中软件漏洞。
本发明的有益效果:
本发明通过提取代码的抽象语法树、控制流和数据流信息,形成以代码行为单位的代码特征语义表达方式,每个样本中包含该行代码的变量、函数定义和使用信息,以及高危函数和污点传播信息;然后通过使用图卷积网络实现漏洞代码的检测分类;有效提高软件漏洞检测效率和软件质量,对网络软件安全应用具有重要的意义。
附图说明:
图1为实施例中检测方法流程图;
图2为实施例中检测装置示意图。
具体实施方式:
为使本发明的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本发明作进一步详细的说明。
随着互联网的高速发展,各种线上系统的规模也一直在快速增长。但是目前漏洞挖掘依然是主要通过手工分析,需要耗费大量的时间、人力以及对软件系统和技术的深入理解,因此需要有新的方法来辅助漏洞分析加快分析速度。为此,本发明实施例,参见图1所示,提供一种基于图卷积网络的软件漏洞检测方法,包含如下内容:
S101)收集用于检测的代码样本数据集;
S102)针对代码样本数据集,基于抽象语法树和控制流图提取以代码行为单位的代码特征语义表达形式;
S103)通过已训练学习后的图卷积网络对提取的代码特征语义表达形式进行分类检测,依据分类检测结果获取代码中软件漏洞。
本发明实施例中,可使用NVD提供的xml feeds方式获取web程序相关的漏洞信息,使用CWE代码从中挑选其中关于XSS和SQLi相关的漏洞信息,分别为CWE-79和CWE89。由于同时需要有漏洞的代码和没有漏洞的代码训练模型,通过从NVD中获取到的漏洞相关的git链接信息找到相应的有漏洞的代码和相应的补丁代码。对于在git链接中给出了具体提交ID的漏洞,通过使用git checkout和git diff工具获取有漏洞版本的代码并生成相应的补丁文件。最终数据集可如表1所示,本发明实施例中将代码样本数据集分成三部分分别用来做训练集、调优集和测试集,利用训练集和调优集依次对图卷积网络进行训练学习,利用测试集对训练学习后的图卷积网络进行测试。可同时构建一个漏洞所在文件名和漏洞所在行的列表文件,其中从NVD获取的漏洞文件的行号通过分析补丁文件删除的行的行号作为存在漏洞的行号。最后把样本代码和对应的漏洞行列表文件使用python的pickle模块打包成一个文件,方便后面特性提取时使用。
表1数据集数据量
通过机器学习的监督式学习来检测程序中的漏洞代码,以python等动态语言代码作为研究对象。通过使用深度学习中图卷积网络和基于抽象语法树提取的数据流分析出来的特性做检测。需要的数据集来自NVD和对应的代码仓库比如github等。本发明另一个实施例中,提取代码特征语义表达形式过程中,首先,提取代码的抽象语法树;然后基于抽象语法树生成代码的控制流图;根据控制流图中控制流路径的程序执行过程,以代码行为单位获取变量有效定义集合;将代码行中变量使用函数、污点变量和脆弱性标记作为代码特征,形成特征矩阵。
抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntaxtree),是源代码的抽象语法结构的树状表现形式,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。抽象语法树的结构不依赖于源语言的文法,也就是语法分析阶段所采用的上下文无关文法。抽象语法树(Abstract Syntax Tree,AST)作为程序的一种中间表示形式,在程序分析等诸多领域有广泛的应用。控制流图中每个在图形中的节点代表一个基本块,例如,没有任何跳跃或跳跃目标的直线代码块;跳跃目标以一个块开始,和以一个块结束。定向边缘被用于代表在控制流中的跳跃。在那里,在大部分介绍中,两个特定的设计块:项目块,通过它控制到流图的输入,和编辑块,通过它全面控制流输出。举例说明,控制流图CFG是一有向图G=(N,E,nentry,nexit),其中,N是节点集,程序中的每个语句都对应图中的一个节点;边集E={<n1,n2>|n1,n2∈N且n1执行后,可能立即执行n2};nentry和nexit分别为程序的入口和出口节点。它具有唯一的起始结点START和唯一的终止结点STOP。CFG中的每个结点至多只能有两个直接后继。对于有两个直接后继的结点v,其出边具有属性“T”或“F”,并且在CFG中的任意结点N,均存在一条从START经N到达STOP的路径。
特性的提取首先提取代码的抽象语法树AST,然后基于AST生成代码的控制流图CFG。控制流图表达了程序代码在执行过程中所有可能的执行路径,是一个由基本块作为节点、控制流传递关系作为边的有向图。在控制流图中,除了基本块节点,还有两个特殊的节点块:入口块和出口块。控制流从入口块进入控制流图,最后从出口块流出。因此控制流图可以清晰的表达程序内部各个单元之间处理信息的流程。随后要提取的数据流特征就是基于控制流图进行的。本发明另一个实施例中,获取变量有效定义集合,根据控制流路径执行过程中,将对于执行过程中执行点的所有定义过且没有被重新复制的变量定义作为有效定义,依据该有效定义遍历控制流图中每行代码获取每行代码的有效定义集合。优选的,有效定义集合依据变量使用和定义分为输入集合、输出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销毁集合;分析各行代码输入集合,构建每个定义变量的使用-定义链,将输入集合、输出集合、生成集合和销毁集合表示成位向量,代码中发生的每个赋值对应唯一标志位。遍历每一行代码,首先对有效定义集合进行初始化,并将代码块改变状态设置为逻辑真值;然后执行循环过程,该循环过程内容如下:判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行的输入集合的值设置为上一行代码输出集合值,将当前代码行的输出集合复制给临时变量,将当前代码行的生成集合和输入集合值相加并减去销毁集合值,将运算结果重新复制给输出集合,判断该重新复制的输出集合值是否与临时变量相等,若不等,则设置代码块改变状态为逻辑真值,返回循环过程开始段,重新执行,若相等,则结束循环,输出有效定义集合。
当程序根据控制流图中控制流的某一条路径执行到程序中的某个点时,对于这个点的所有定义过的且没有被重新赋值的变量定义作为有效定义。用通过表A的代码举例:
表A代码举例
表A中代码所有的定义都有效了第4行。第1行和第2行的定义是在循环体的第一轮循环中有效第4行的。只有第1行、第4行和第5行的定义有效了第5行,因为第4行的代码重写了第2行定义的变量的值。为了自动化的检查定义有效的情况,利用对于代码块为单位的检测变换为以代码行为单位的检测,具体过程可设计为如算法1所示:
算法1
输入:控制流图CFG
输出:每行代码的有效定义的输入集合、输出集合、生成集合与销毁集合
1.遍历代码中的每一行代码L;
2.进入L的定义集合设置为空集;
3.从L出去的定义集合设置为与L行代码新定义的变量集合同样的值;
4.设置代码块的改变状态为true;
5.判断代码块的改变状态是true就执行循环;
6.把改变状态设置成false;
7.遍历代码块中的每一行L;
8.把进入L的定义的集合的值设置为从上一行代码P出去的定义的集合;
9.把从L出去的定义的集合赋值给临时变量oldout;
10.把代码行L生成的定义和进入的定义减去L行重写的定义的集合作为从L出去的定义集合;
11.比较从L行出去的定义集合是否等于之前oldout存储的旧的从L行出去的定义集合;
12.如果不等于,设置代码块的改变状态为true,继续循环处理各个集合;
13.如果等于,得到各行代码的有效定义集合,算法结束。
算法为每一行代码设置4个集合,这一行代码定义的变量属于生成集合;这一行重写的来自于其他地方定义的变量属于销毁集合;通过控制流进来的变量定义未被该行代码重写或销毁的以及本行的变量定义属于输出集合;所有从进来的变量定义属于输入集合。算法反复执行到输出集合没有改变为止,表2所示为算法1对表A中代码分析后的结果。为了分析方便把四个集合表示成位向量,代码中发生的每个赋值对应一个唯一的标志位。根据控制流图可以确定每一行代码的前置行。
表2示例代码有效定义集合
在有效定义的各个集合构建后,通过分析各行代码的输入集合,可以构建每个定义变量的Use-Def链。UD链包含变量的使用以及这个变量所有的定义。基于此我们可以检测每一行代码哪个函数和某一个有效的变量定义有关。其中,SQLi和XSS这两种漏洞成立的条件是需要有一个高危函数和对这个高危函数相关参数变量的不完全的过滤,这种过滤方式通常也是以函数的形式实现的。因此,本发明实施例中,把代码行中变量使用的函数作为一个特征,如果这个函数出现了对应的特征值就为1,否则为0。出现这些高危函数的代码行对应的样本特性中vulnerable的值设置为1,其他情况为0。
污点数据是可以被潜在的恶意用户直接或者间接控制的数据,会导致程序中有脆弱点出现安全问题。污点数据能够通过不安全的渠道进入到程序中,并且通过赋值、拼接等类似的操作在程序中传播。通过一些合适的过滤,污点数据可以变成非污点数据。SQLi和XSS漏洞就是这样类型的漏洞。代码样本数据集中,变量可以是污点变量也可以是非污点变量。为了尽量以一种语言无关的方式去做分析,本发明实施例中并不使用存有大量敏感函数的数据库。因此,必须识别出所有代码行的污点变量,这些信息依然可以通过上述的代码变量有效定义集合分析得到。假设一个变量是非污点变量,当它的类型是float、int、double或者bool,对于其他类型转化到这些类型的变量也是一样的。凡是不能确定为非污点变量的都认为是污点变量。多个变量之间相互组合的变量除非组合前各个变量都是非污点变量才标记为非污点变量,其他情况都标记为污点变量。本发明另一个实施例中,依据有效定义集合,识别出代码行中的代码特征,形成特征矩阵,该代码特征包含:变量使用函数、污点变量和脆弱性标记作为,特征矩阵中,行表示代码样本,列表示代码特征。举例说明,特征矩阵中,每一行是一行代码样本,前面几列是是函数特征,都是1代表存在,0代表不存在,最后两列是污点标记以及是脆弱性标记。对于不同代码,特性的数目不是固定的,取决于代码包含的函数。这样的组织形式很适合机器学习分类使用,最后标明样本脆弱性的一列可以作为分类标签,其他列做为样本特性,具体形式参考表3所示。
表3特征提取格式举例
本发明实施例中,使用图卷积网络Graph Convolutional Networks(GCN)来对提取的特征做分类检测。GCN是一个多层神经网络直接操作在图结构数据上,基于邻居节点的属性引入节点的嵌入向量。图G=(V,E),其中V(|V|=n)是节点的集合,E是边的集合。每个节点都假设和自己本身相连。设定X∈Rnxm矩阵包含了所有的节点,m是特征向量的维度。每一行xv∈Rm是v的特征向量。本发明实施例中,引入图G的邻接矩阵A以及度矩阵D,Dij=ΣjAij。矩阵A的范围的邻居节点信息需要组合多个GCN层。对于单个GCN层来说,新的k维节点特征矩阵L(1)∈Rnxk使用以下公式计算:
J表示层数,L(0)=X。
本发明再一个实施例中,将提取的代码特征语义表达形式作为文本信息,构造文本图,该文本图中包含代码的特征节点和代码所在行节点,代码文件特征节点和行节点之间建立行和特征之间的边,基于特征之间同时存在的模式建立代码特征之间的边;将文本图作为输入,送入图卷积网络进行分类检测。这样代码中出现的各种函数特征以及污点状态特征的模式可以清晰的用图的边和节点来建模。节点总数是代码相关的行数加上每个代码文件的特征数。特征矩阵可简单设置为单位矩阵用来使每个特征和代码行表示为一个one-hot向量作为GCN的输入。对出现在某个代码文件的特征节点和行节点之间建立行和特征之间的边,另外基于特征之间同时存在的模式建立代码特征之间的边。行节点和代码特征节点之间的边的权重使用这个特征在代码文件中的TF-IDF(term frequency-inversedocument frequency)词频逆向文件频率来指定。使用PMI(point-wise mutualinformation)点互信息来计算代码特征之间边的权重。最终节点i和节点j之间的边的权重为如下情况:
PMI(i,j),当i和j都是代码特征节点;
TFIDFij,当i时代码所在行节点,j是代码特征节点;
1,节点对自身的连接的边,此时i=j;
0,出去以上3种情况的其他情况。
PMI主要使用如下公式计算:
其中,#W(i)是包含节点i的滑动窗口的数量,#W(i,j)是同时包含节点i和j的滑动窗口的数量,#W是总的滑动窗口的数量。一个正的PMI值表示特征库中特征的语义相关性较高,而PMI值为负表示特征库中特征的语义相关性很少或没有。因此,本发明实施例在PMI值为正的特征节点对之间添加边。在构建了特征文本图后,把图作为输入送入两层GCN层,最后输出给softmax分类器:
基于上述的检测方法,本发明实施例还提供一种基于图卷积网络的软件漏洞检测装置,参见图2所示,包含:收集模块101、提取模块102和检测模块103,其中,
收集模块101,用于收集用于检测的代码样本数据集;
提取模块102,用于针对代码样本数据集,基于抽象语法树和控制流图提取以代码行为单位的代码特征语义表达形式;
检测模块103,用于通过已训练学习后的图卷积网络对提取的代码特征语义表达形式进行分类检测,依据分类检测结果获取代码中软件漏洞。
为了验证本发明技术方案的有效性,下面通过实验数据做进一步解释说明,实验过程中利用如下两种检测模型与图卷积网络进行对比:
1)树扩张朴素贝叶斯分类模型(TAN)是朴素贝叶斯的一种变体,它放弃了属性独立性的假设。取而代之的是树形结构,其中每个属性只依赖于所属的类别和特征集的另一个属性。TAN模型不用设置超参数。
2)逻辑回归模型是用于二元分类的线性模型。在线性回归中,我们有一个线性和,其中输出可以是任何r,在逻辑回归中,这个线性和受逻辑函数的限制,也称为s函数。它是一个s形曲线,可以取任意实值,并将其映射到之间的值0和1,以此来得到二元分类的概率。超参设置方面,对应于SQLi漏洞和XSS漏洞的数据集,惩罚系数分别为L1和L2。
对于图卷积网络GCN模型,实验过程中设置的嵌入大小为首先将卷积层设置为200,并将窗口大小设置为20,设置学习率为0.02,dropout rate为0.5。
结果如表4所示,使用AUC-PR值来衡量分类模型的性能,值的大小一般在0.5到1之间,越接近1越好。GCN分类模型在测试中表现最好。考虑到XSS攻击的多样性(存储vs.反射)这种额外的复杂性影响了XSS分类器的性能。TAN分类器的性能比GCN分类模型稍微差一些。逻辑回归分类器的性能的分类器非常类似于GCN分类器。
表4漏洞检测准确率
本发明通过提取代码的抽象语法树、控制流和数据流信息进一步形成了以代码行为单位的代码特征语义表达方式。每个样本中包含了该行代码的变量、函数定义和使用信息,以及高危函数和污点传播信息。然后通过使用现在深度学习领域文本分类方面的技术,实现漏洞代码的检测分类;效率好,准确率高。最终试验数据进一步验证本发明技术方案的有效性。本发明实施例中不限于动态语言如Python、Ruby等或者静态语言如C++、Java。漏洞方面也不局限于XSS和SQLi,而是涵盖包含在污点类型中的漏洞类型。
基于上述的方法,本发明实施例还提供一种服务器,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述的方法。
基于上述的方法,本发明实施例还提供一种计算机可读介质,其上存储有计算机程序,其中,该程序被处理器执行时实现上述的方法。
本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在这里示出和描述的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制,因此,示例性实施例的其他示例可以具有不同的值。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (6)
1.一种基于图卷积网络的软件漏洞检测方法,其特征在于,包含:
A)收集用于检测的代码样本数据集;
B)针对代码样本数据集,基于抽象语法树和控制流图提取以代码行为单位的代码特征语义表达形式;
C)通过已训练学习后的图卷积网络对提取的代码特征语义表达形式进行分类检测,依据分类检测结果获取代码中软件漏洞;
B)中,提取代码特征语义表达形式过程中,首先,提取代码的抽象语法树;然后基于抽象语法树生成代码的控制流图;根据控制流图中控制流路径的程序执行过程,以代码行为单位获取变量有效定义集合;将代码行中变量使用函数、污点变量和脆弱性标记作为代码特征,形成特征矩阵;
B)中获取变量有效定义集合,根据控制流路径执行过程中,将对于执行过程中执行点的所有定义过且没有被重新复制的变量定义作为有效定义,依据该有效定义遍历控制流图中每行代码获取每行代码的有效定义集合;
有效定义集合依据变量使用和定义分为输入集合、输出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销毁集合;分析各行代码输入集合,构建每个定义变量的使用-定义链,将输入集合、输出集合、生成集合和销毁集合表示成位向量,代码中发生的每个赋值对应唯一标志位;
遍历每一行代码,首先对有效定义集合进行初始化,并将代码块改变状态设置为逻辑真值;然后执行循环过程,该循环过程内容如下:判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行的输入集合的值设置为上一行代码输出集合值,将当前代码行的输出集合复制给临时变量,将当前代码行的生成集合和输入集合值相加并减去销毁集合值,将运算结果重新复制给输出集合,判断该重新复制的输出集合值是否与临时变量相等,若不等,则设置代码块改变状态为逻辑真值,返回循环过程开始段,重新执行,若相等,则结束循环,输出有效定义集合。
2.根据权利要求1所述的基于图卷积网络的软件漏洞检测方法,其特征在于,A)中,将代码样本数据集划分为训练集、调优集和测试集,利用训练集和调优集依次对图卷积网络进行训练学习,利用测试集对训练学习后的图卷积网络进行测试。
3.根据权利要求1所述的基于图卷积网络的软件漏洞检测方法,其特征在于,依据有效定义集合,识别出代码行中的代码特征,形成特征矩阵,该代码特征包含:变量使用函数、污点变量和脆弱性标记作为,特征矩阵中,行表示代码样本,列表示代码特征。
4.根据权利要求1所述的基于图卷积网络的软件漏洞检测方法,其特征在于,C)图卷积网络中,将提取的代码特征语义表达形式作为文本信息,构造文本图,该文本图中包含代码的特征节点和代码所在行节点,代码文件特征节点和行节点之间建立行和特征之间的边,基于特征之间同时存在的模式建立代码特征之间的边;将文本图作为输入,送入图卷积网络进行分类检测。
5.根据权利要求4所述的基于图卷积网络的软件漏洞检测方法,其特征在于,利用词频逆向文件频率TF-IDF确定行和特征之间的边的权重,利用点互信息PMI确定代码特征之间的边的权重。
6.一种基于图卷积网络的软件漏洞检测装置,其特征在于,基于权利要求1所述的方法实现,包含:收集模块、提取模块和检测模块,其中,
收集模块,用于收集用于检测的代码样本数据集;
提取模块,用于针对代码样本数据集,基于抽象语法树和控制流图提取以代码行为单位的代码特征语义表达形式;
检测模块,用于通过已训练学习后的图卷积网络对提取的代码特征语义表达形式进行分类检测,依据分类检测结果获取代码中软件漏洞。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910136182.8A CN111611586B (zh) | 2019-02-25 | 2019-02-25 | 基于图卷积网络的软件漏洞检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910136182.8A CN111611586B (zh) | 2019-02-25 | 2019-02-25 | 基于图卷积网络的软件漏洞检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111611586A CN111611586A (zh) | 2020-09-01 |
CN111611586B true CN111611586B (zh) | 2023-03-31 |
Family
ID=72195765
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910136182.8A Active CN111611586B (zh) | 2019-02-25 | 2019-02-25 | 基于图卷积网络的软件漏洞检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111611586B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210012012A1 (en) * | 2019-07-12 | 2021-01-14 | Palo Alto Research Center Incorporated | System and method for constructing a graph-based model for optimizing the security posture of a composed internet of things system |
CN111966346B (zh) * | 2020-09-09 | 2022-05-10 | 支付宝(杭州)信息技术有限公司 | 应用系统的污点分析方法及装置 |
CN112685738B (zh) * | 2020-12-29 | 2022-10-14 | 武汉大学 | 一种基于多级投票机制的恶意混淆脚本静态检测方法 |
CN112699377B (zh) * | 2020-12-30 | 2023-04-28 | 哈尔滨工业大学 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
CN112989348B (zh) * | 2021-04-15 | 2021-08-17 | 中国电子信息产业集团有限公司第六研究所 | 攻击检测方法、模型训练方法、装置、服务器及存储介质 |
CN112989363B (zh) * | 2021-05-19 | 2021-09-28 | 北京邮电大学 | 漏洞定位方法、装置、电子设备和存储介质 |
US11930046B2 (en) | 2021-06-17 | 2024-03-12 | Xerox Corporation | System and method for determining vulnerability metrics for graph-based configuration security |
CN114490313A (zh) * | 2021-12-10 | 2022-05-13 | 中国科学院信息工程研究所 | 一种基于关键语义特征的安全检查缺陷检测方法 |
CN115130110B (zh) * | 2022-07-08 | 2024-03-19 | 国网浙江省电力有限公司电力科学研究院 | 基于并行集成学习的漏洞挖掘方法、装置、设备及介质 |
CN115544522B (zh) * | 2022-11-28 | 2023-04-07 | 北京邮电大学 | 源码漏洞检测方法、装置、电子设备及存储介质 |
CN116361815B (zh) * | 2023-06-01 | 2023-08-15 | 北京比瓴科技有限公司 | 基于机器学习的代码敏感信息及硬编码检测方法及装置 |
CN117473510B (zh) * | 2023-12-26 | 2024-03-26 | 南京邮电大学 | 一种基于图神经网络和漏洞补丁关系的自动化漏洞挖掘技术 |
CN117473511B (zh) * | 2023-12-27 | 2024-04-02 | 中国联合网络通信集团有限公司 | 边缘节点漏洞数据处理方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CH712099A2 (de) * | 2016-02-08 | 2017-08-15 | Filbrandt Jan | System zum Schutz vertraulicher Daten vor Hardware Trojaner Angriffen in informationstechnischen Systemen. |
WO2017181286A1 (en) * | 2016-04-22 | 2017-10-26 | Lin Tan | Method for determining defects and vulnerabilities in software code |
CN109214191A (zh) * | 2018-09-18 | 2019-01-15 | 北京理工大学 | 一种利用深度学习预测软件安全漏洞的方法 |
CN109284590A (zh) * | 2018-09-29 | 2019-01-29 | 武汉极意网络科技有限公司 | 访问行为安全防护的方法、设备、存储介质及装置 |
-
2019
- 2019-02-25 CN CN201910136182.8A patent/CN111611586B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CH712099A2 (de) * | 2016-02-08 | 2017-08-15 | Filbrandt Jan | System zum Schutz vertraulicher Daten vor Hardware Trojaner Angriffen in informationstechnischen Systemen. |
WO2017181286A1 (en) * | 2016-04-22 | 2017-10-26 | Lin Tan | Method for determining defects and vulnerabilities in software code |
CN109214191A (zh) * | 2018-09-18 | 2019-01-15 | 北京理工大学 | 一种利用深度学习预测软件安全漏洞的方法 |
CN109284590A (zh) * | 2018-09-29 | 2019-01-29 | 武汉极意网络科技有限公司 | 访问行为安全防护的方法、设备、存储介质及装置 |
Non-Patent Citations (1)
Title |
---|
开源软件漏洞检测的混合深度学习方法;李元诚等;《计算机工程与应用》(第11期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111611586A (zh) | 2020-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111611586B (zh) | 基于图卷积网络的软件漏洞检测方法及装置 | |
Bielik et al. | Adversarial robustness for code | |
CN109885479B (zh) | 基于路径记录截断的软件模糊测试方法及装置 | |
Medeiros et al. | DEKANT: a static analysis tool that learns to detect web application vulnerabilities | |
US20170308380A1 (en) | Apparatus and method for detecting code cloning of software | |
EP3695310A1 (en) | Blackbox matching engine | |
WO2017181286A1 (en) | Method for determining defects and vulnerabilities in software code | |
US20120072988A1 (en) | Detection of global metamorphic malware variants using control and data flow analysis | |
KR102058966B1 (ko) | 악성 어플리케이션 탐지 방법 및 그 장치 | |
CN112579469A (zh) | 一种源代码缺陷检测方法与装置 | |
CN113297580B (zh) | 基于代码语义分析的电力信息系统安全防护方法及装置 | |
Delahaye et al. | Infeasible path generalization in dynamic symbolic execution | |
Naeem et al. | Scalable mutation testing using predictive analysis of deep learning model | |
CN116305158A (zh) | 一种基于切片代码依赖图语义学习的漏洞识别方法 | |
CN115269427A (zh) | 针对web注入漏洞的中间语言表示方法及系统 | |
Chaumette et al. | Automated extraction of polymorphic virus signatures using abstract interpretation | |
CN117195220A (zh) | 基于Tree-LSTM和BiLSTM的智能合约漏洞检测方法及系统 | |
CN114817932A (zh) | 基于预训练模型的以太坊智能合约漏洞检测方法及系统 | |
Şahin et al. | Predicting vulnerability inducing function versions using node embeddings and graph neural networks | |
Tang et al. | Sevuldet: A semantics-enhanced learnable vulnerability detector | |
WO2010149986A2 (en) | A method, a computer program and apparatus for analysing symbols in a computer | |
KR102192196B1 (ko) | Ai 기반 머신러닝 교차 검증 기법을 활용한 악성코드 탐지 장치 및 방법 | |
CN115859307A (zh) | 基于树型注意力和加权图匹配的相似漏洞检测方法 | |
CN115758388A (zh) | 一种基于低维字节码特征的智能合约的漏洞检测方法 | |
Patil | Automated Vulnerability Detection in Java Source Code using J-CPG and Graph Neural Network |
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 |