CN112699377B - 基于切片属性图表示学习的函数级代码漏洞检测方法 - Google Patents
基于切片属性图表示学习的函数级代码漏洞检测方法 Download PDFInfo
- Publication number
- CN112699377B CN112699377B CN202011613496.1A CN202011613496A CN112699377B CN 112699377 B CN112699377 B CN 112699377B CN 202011613496 A CN202011613496 A CN 202011613496A CN 112699377 B CN112699377 B CN 112699377B
- Authority
- CN
- China
- Prior art keywords
- graph
- slice
- node
- vulnerability
- attribute
- 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
- 230000006870 function Effects 0.000 title claims abstract description 99
- 238000001514 detection method Methods 0.000 title claims abstract description 46
- 238000000034 method Methods 0.000 claims abstract description 37
- 238000013528 artificial neural network Methods 0.000 claims abstract description 18
- 230000007246 mechanism Effects 0.000 claims abstract description 18
- 239000013598 vector Substances 0.000 claims description 76
- 238000010586 diagram Methods 0.000 claims description 14
- 238000004364 calculation method Methods 0.000 claims description 13
- 230000014509 gene expression Effects 0.000 claims description 7
- 238000012549 training Methods 0.000 claims description 7
- 238000004458 analytical method Methods 0.000 claims description 6
- 238000013527 convolutional neural network Methods 0.000 claims description 6
- 239000011159 matrix material Substances 0.000 claims description 5
- 230000004807 localization Effects 0.000 claims description 4
- 230000003068 static effect Effects 0.000 claims description 4
- 238000012935 Averaging Methods 0.000 claims description 2
- 230000004913 activation Effects 0.000 claims description 2
- 230000002457 bidirectional effect Effects 0.000 claims description 2
- 230000001419 dependent effect Effects 0.000 claims description 2
- 238000010606 normalization Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 claims description 2
- 238000012545 processing Methods 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 abstract description 4
- 230000009977 dual effect Effects 0.000 abstract description 3
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000011160 research Methods 0.000 description 4
- 101100346656 Drosophila melanogaster strat gene Proteins 0.000 description 3
- 239000002131 composite material Substances 0.000 description 3
- 238000013135 deep learning Methods 0.000 description 3
- 238000010801 machine learning Methods 0.000 description 3
- 238000005096 rolling process Methods 0.000 description 3
- 238000013136 deep learning model Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000010949 in-process test method Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 108090000623 proteins and genes Proteins 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
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
技术领域
本发明涉及一种漏洞检测方法,具体涉及一种基于切片属性图表示学习的函数级代码漏洞检测方法。
背景技术
软件漏洞检测是信息安全中重要且具有挑战性的问题。传统的检测方法和检测工具在很大程度上取决于审查人员对安全问题的理解与长期经验的积累,并且依赖于已知的漏洞模式,很难检测以前未发现的漏洞。除了经典方法外,应用机器学习作为补充进行漏洞检测的方法也取得了长足进展,虽然基于机器学习的漏洞检测方法避免了常用的检测工具依赖专家人工编写检测规则的问题,但仍需人工提取漏洞特征。
近年来,利用深度学习技术来自动提取漏洞特征和生成漏洞模式的漏洞检测方法,因其能够降低对专家经验和手工特征工程的依赖,而引起了研究人员们的关注。现有的一类方法是将其当作自然语言文本,采用语言模型将源代码转化为一个平铺的一维向量序列,然后将其送入自然语言处理领域常用的LSTM或GRU网络来自动学习代码的漏洞特征,并将其用于训练一个机器学习分类器以实现漏洞检测。另一类方法是直接建立深度学习模型进行漏洞检测,其中较有代表性的方法就是由Li等人提出的SySeVR(Li Z,Zou D,Xu S,etal.Sysevr:A framework for using deep learning to detect softwarevulnerabilities[J].arXiv preprint arXiv:1807.06756,2018.),该方法设计了四种漏洞候选关键点作为切片准则,基于该准则生成代码的程序切片,用切片代码训练BiLSTM网络,然后使用该网络进行漏洞检测。尽管该方法利用程序切片技术,相比于其他方法生成了更为精确的漏洞特征,但是相对于自然语言文本而言,代码更具有结构化的特点,而这些方法并不是直接学习漏洞代码的结构信息,而是将其转换为有限长度的序列再送入适合序列化文本信息的深度学习模型来学习漏洞代码的表征,因将代码的抽象语法树(AbstractSyntax Tree,AST)或程序依赖图(Program Dependency Graph,PDG)等结构信息转化为序列信息后,不能充分利用和学习代码的结构信息,而且将长函数转化为有限长度的序列还会造成信息的损失,此外根据已有的四种类型的漏洞候选关键点生成的程序切片也存在覆盖不到某些漏洞语句的情况,所以这些方法在漏洞检测时往往存在较高的误报率和漏报率。
相比于将代码的结构信息转化为有限长度的序列作为输入来对代码进行表示学习的传统深度神经网络(如LSTM和GRU)而言,能够直接对图数据进行表示学习的图神经网络有着明显的优势。首先,图神经网络以图数据作为输入,对节点与边的数量没有限制,也更适合对漏洞代码的复杂结构语义进行有效编码。其次,图神经网络可以充分利用图数据内含有的结构信息、节点属性信息和上下文信息,能够捕获更广泛的漏洞特征,提高漏洞检测能力。但是目前利用图神经网络进行漏洞检测的研究较少,目前仅有两篇利用图神经网络进行漏洞检测的研究。一篇是岳佳提出的将从代码的抽象语法树中提取的特征作为文本信息(岳佳.基于漏洞基因的软件漏洞检测研究[D].中原工学院,2019.),来构造一个大的文本图,利用图卷积网络(Graph Convolutional Network,GCN)对提取的特征进行分类进而实现漏洞检测。该方法仍将代码视作为文本来处理,未充分提取和利用代码的复杂结构语义信息。另一篇是Zhou等人首次提出的基于门控图神经网络(Gated graph neuralnetwork,GGNN)的漏洞检测方法(ZhouY,Liu S,Siow J,et al.Devign:Effectivevulnerability identification by learning comprehensive program semantics viagraph neural networks[C]//Advances in Neural Information ProcessingSystems.2019:10197-10207.),该方法借鉴Yamaguchi等人提出的代码属性图的概念(Yamaguchi F,Golde N,Arp D,et al.Modeling and discovering vulnerabilitieswith code property graphs[C]//2014IEEE Symposium on Security andPrivacy.IEEE,2014:590-604.),建立以AST为主干的代码复合图(composite graphs),显式编码程序的控制流和数据流等信息,利用门控图神经网络在代码复合图上学习漏洞模式。虽然以AST为主干建立的代码复合图适合编码复杂的程序结构语义,但在函数规模较大时的图结构过于复杂和庞大,影响模型的学习效率,并且图中存在大量与漏洞无关的节点和边会对模型学习漏洞模式产生干扰,从而导致模型的误报率较高。此外,该方法使用的程序分析仅限于过程内,未进行过程间分析,因此对于跨文件或跨函数调用的漏洞有可能产生漏报。
发明内容
为了提高函数级代码漏洞检测的准确率,降低漏洞检测的误报和漏报,本发明提供了一种基于切片属性图表示学习的函数级代码漏洞检测方法。该方法能覆盖更多的漏洞候选关键点,准确提取和学习漏洞相关的结构、属性和上下文信息,降低漏洞检测的误报和漏报。
本发明的目的是通过以下技术方案实现的:
一种基于切片属性图表示学习的函数级代码漏洞检测方法,首先引入新的切片准则,并提出切片属性图(SPG,Slice Property Graph)的概念,基于切片准则和程序切片技术生成代码的切片属性图,以覆盖更多的漏洞候选关键点,更精准地提取与漏洞候选关键点有依赖关系的图结构信息、节点属性信息和代码上下文信息;然后,利用关系图卷积神经网络(R-GCN)并结合基于节点和子图的双重注意力机制,对切片属性图进行表示学习,以学习更全面、更准确的漏洞模式;最后对各个切片属性图的漏洞识别结果进行融合实现函数级别的漏洞检测,并确定漏洞候选语句的集合以及与漏洞相关联的语法要素。具体包括如下步骤:
步骤1:利用静态分析工具解析源代码,生成以抽象语法树、控制流图和程序依赖图联合表示代码结构信息、以代码语句内容、节点类型和节点度数表示节点属性信息的代码属性图;
步骤2:根据代码属性图中边的类型提取语句节点之间的数据依赖关系和控制依赖关系,生成程序依赖图;
步骤3:利用代码属性图提取源代码的6种漏洞候选关键节点:API/库函数调用(API/Library Function Call,FC)相关漏洞的关键节点、指针使用(Array Usage,AU)相关漏洞的关键节点、数组使用(Pointer Usage,PU)相关漏洞的关键节点、算术表达式(Arithmetic Expression,AE)相关漏洞的关键节点、函数参数(Function Parameter,FP)相关漏洞的候选关键节点、函数返回值(Function Return statement,FR)相关漏洞的候选关键节点,其中API/库函数调用(API/Library Function Call,FC)相关漏洞的关键节点、指针使用(Array Usage,AU)相关漏洞的关键节点、数组使用(PointerUsage,PU)相关漏洞的关键节点、算术表达式(Arithmetic Expression,AE)相关漏洞的关键节点是Li等人的研究工作,本发明在此基础上提出了另外两种与函数间数据传递相关的漏洞候选关键节点,以提高漏洞语句的覆盖率;
步骤4:以步骤3得到的6种漏洞候选关键节点作为切片准则,前向和后向遍历在步骤2中得到的程序依赖图,获取双向切片语句集合,从代码属性图和程序依赖图中获取这些语句节点之间的数据依赖、控制依赖和函数调用依赖关系,进一步生成切片属性图,并根据其是否包含漏洞语句节点给切片属性图标记类别标签,同时记录其使用的切片准则类型;
步骤5:将切片属性图中节点的属性信息转化为初始向量表示,使用关系图卷积网络对切片属性图进行表示学习,得到图中每个节点更为准确的向量表示;
步骤6:根据程序依赖关系类型,将切片属性图划分为三种不同关系的切片属性子图;基于节点自注意力机制,计算节点注意力值,对节点的向量表示加权求和得到切片属性图(全图)及其每个切片属性图子图的向量表示;基于子图注意力机制,计算每个切片属性图子图的注意力值,对每个切片属性图子图的向量表示加权求和得到子图总的向量表示;
步骤7:将得到的切片属性图全图的向量表示和子图总的向量表示拼接后送入全连接层和softmax层得到前向计算结果,利用切片的类别标签信息计算交叉熵损失函数,根据误差反向传播调整网络参数;
步骤8:对于给定的待识别函数,按照6种切片准则,生成其所有可能的切片属性图,用训练好的关系图卷积神经网络模型对所有切片属性图进行漏洞检测,通过漏洞识别策略和漏洞定位策略分析切片属性图漏洞检测结果,从而实现函数的漏洞识别与漏洞定位。
相比于现有技术,本发明具有如下优点:
1、本发明提出了两类新的与函数间数据传递相关的切片准则,相比于原有的四类切片准则,引入新的切片准则和过程间分析,能够产生更为丰富的漏洞候选关键点,进一步提高了代码切片对代码漏洞语句的覆盖率,同时有助于降低检测模型对跨函数漏洞的漏报。
2、本发明提出切片属性图的概念及其生成方法,即基于已有的四类切片准则和本发明新提出的两类切片准则,仅从代码属性图中提取与漏洞候选关键节点有数据依赖、控制依赖、函数调用依赖关系的节点以及节点的各种属性信息,以生成切片属性图。和普通的切片相比,切片属性图中包含了更为丰富的结构信息和语义信息,而且相比于用代码属性图或代码复合图训练漏洞检测模型,通过切片属性图训练漏洞检测模型,能够避免代码属性图中大量漏洞无关语句节点对模型训练的不利影响,有助于提高漏洞检测模型的准确率,同时还降低了待学习的图结构的复杂度,有助于提高模型训练的效率。
3、本发明利用关系图卷积网络并结合基于节点和子图的双重注意力机制,对切片属性图进行表示学习,利用与漏洞候选关键节点相关的各种依赖信息学习切片属性图的结构信息和节点属性信息,相比于传统的深度神经网络,利用关系图卷积网络可以直接对图结构信息进行端到端的学习,无需将图结构信息转化为固定长度的序列,不受程序切片长度的限制,不会损失图结构信息,更适合对切片属性图的复杂结构语义进行有效编码;相对于一般的图卷积网络,关系图卷积网络更适合对切片属性图这样的包含多种关系类型的异构图进行表示学习;相对于不带注意力机制的关系图卷积网络,带有节点和子图双重注意力机制的关系图卷积网络,能够融合局部和全局的结构信息,有效学习不同节点和不同依赖关系对漏洞的重要程度,更准确地学习切片属性图的向量表示,有助于提高漏洞检测模型的准确率。
4、本发明能够通过融合切片属性图的漏洞识别结果获得函数级的代码漏洞识别结果,并且通过集合运算计算得到候选漏洞语句集合,从而将漏洞定位到比函数级粒度更细的候选漏洞语句集合,有助于辅助开发者理解和快速修复漏洞。
附图说明
图1是本发明的漏洞检测方法的整体流程示意图。
图2是切片属性图的提取流程图。
图3是利用带有节点和子图双重注意力机制的关系图卷积神经网络(R-GCN)对切片属性图进行表示学习的模型示意图。
图4是基于切片漏洞识别结果信息融合的函数级代码漏洞检测模型示意图;
图5是实施例1漏洞代码。
图6是实施例1漏洞代码的部分代码属性图。
图7是实施例1漏洞代码的程序依赖图。
图8是实施例1函数调用切片属性图,(a)以不安全函数strcat()为漏洞候选关键节点得到的程序切片,(b)由(a)中的程序切片对应的切片属性图。
图9是实施例2的漏洞代码。
图10是实施例2函数传参切片属性图。
具体实施方式
下面结合附图对本发明的技术方案作进一步的说明,但并不局限于此,凡是对本发明技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的保护范围中。
本发明提供了一种基于切片属性图表示学习的函数级代码漏洞检测方法,首先,利用静态分析工具生成代码属性图,然后根据代码属性图中边的类型提取控制依赖、数据依赖相关的图结构,生成程序依赖图。使用程序切片技术,根据6种切片准则获取与漏洞候选关键节点相关的双向程序切片。使用程序切片和程序依赖图,再分析代码属性图添加函数调用依赖关系,从而生成切片属性图,并标记漏洞标签和切片准则类型。然后使用关系图卷积神经网络,学习切片属性图中每个节点的向量表示,再基于双重注意力机制得到每个切片属性图的向量表示,进行图级分类,最后融合每个切片属性图的漏洞识别结果,以确定函数是否包含漏洞。如图1和图2所示,所述方法具体步骤如下:
步骤1:利用静态分析工具解析源代码,生成以抽象语法树、控制流图和程序依赖图联合表示代码结构信息、以代码语句内容、节点类型和节点度数表示节点属性信息的代码属性图。
步骤2:根据代码属性图提取语句节点之间的数据依赖关系、控制依赖关系和函数依赖关系,生成程序依赖图。
步骤3:利用代码属性图提取源代码的6种漏洞候选关键节点,具体步骤如下:
步骤31:基于Li等人的工作(Li Z,Zou D,Xu S,et al.Sysevr:A framework forusing deep learning to detect software vulnerabilities[J].arXiv preprintarXiv:1807.06756,2018.),提取API/库函数调用(API/LibraryFunction Call,FC)相关漏洞的关键节点、指针使用(Array Usage,AU)相关漏洞的关键节点、数组使用(PointerUsage,PU)相关漏洞的关键节点、算术表达式(Arithmetic Expression,AE)相关漏洞的关键节点。
步骤32:确定函数参数(Function Parameter,FP)相关漏洞的候选关键节点。遍历步骤1中生成的代码属性图,查找类型为“Function”的节点,继续遍历以该节点为起点的边并获得该边的终止节点。这些终止节点中类型为“Parameter”的节点即为函数传参相关漏洞的候选关键节点。
步骤33:确定函数返回值(Function Return statement,FR)相关漏洞的候选关键节点。遍历步骤1中生成的代码属性图,查找类型为“returnstatement”的节点,该节点即为函数返回值相关漏洞的候选关键节点。
步骤4:以步骤3得到的漏洞候选关键节点作为切片准则,生成源代码的切片属性图,具体步骤如下:
步骤41:在步骤2得到的程序依赖图中,找到步骤3中生成的漏洞候选关键节点。
步骤42:以每个漏洞候选关键节点为起点,按照依赖关系前向遍历程序依赖图,获得前向切片语句节点集合。通过切片中的函数调用语句获取其调用的函数,以该函数中类型为“Parameter”的节点为起点前向遍历程序依赖图,获得过程间前向切片语句节点集合。将二者合并,得到完整的前向切片语句节点集合。
步骤43:以漏洞候选关键节点为起点,依照依赖关系后向遍历程序依赖图,获得后向切片语句节点集合。通过切片中的函数调用语句获取其调用的函数,以该函数中类型为“returnstatement”的节点为起点后向遍历程序依赖图,获得过程间后向切片语句节点集合。将二者合并,得到完整的后向切片语句节点集合。
步骤44:将步骤42和步骤43得到的前向切片语句节点和后向切片语句节点集合合并,生成切片属性图节点集合。
步骤45:根据程序依赖图,在切片属性图的各个节点之间添加数据依赖边和控制依赖边。按照程序切片内语句顺序遍历所有切片语句节点,若两节点在程序切片内相邻且不属于同一函数,则在顶点之间添加函数依赖边,最后得到完整的切片属性图。
步骤46:为了后续训练图神经网络的需要,对切片属性图进行精细化标记:若切片属性图的语句节点中包含漏洞语句节点,则将该切片属性图标记为1(表示有漏洞),否则标记为0(表示无漏洞),同时记录其使用的切片准则类型。
步骤5:将切片属性图中节点的属性信息转化为初始向量表示,使用关系图卷积网络学习切片属性图中每个节点的向量表示,具体步骤如下:
步骤51:将切片属性图中节点属性信息中的代码语句拆分成token,使用预训练好的word2vec模型得到每个token的向量表示后加和取平均得到语句的向量表示,作为节点语句特征。
步骤52:将切片属性图中节点属性信息中的节点类型进行one-hot编码,得到节点类型向量表示,作为节点类型特征。
步骤53:统计切片属性图中每个节点的出度和入度,作为节点度数特征。
步骤54:将节点语句特征向量、节点类型特征向量和节点度数特征向量拼接后,通过一个线性层计算得到节点的初始向量表示。
步骤55:使用关系图卷积网络对切片属性图进行表示学习,得到图中每个节点更为准确的向量表示。
步骤6:基于双重注意力机制,利用节点的向量表示计算切片属性图(全图)及其每个切片属性子图的向量表示,具体步骤如下:
步骤61:根据依赖关系可以从切片属性图中划分出控制依赖图(ControlDependence Graphs,CDG),数据依赖图(Data Dependence Graphs,DDG)和函数调用依赖图(Function Call Dependence Graphs,FCDG)。
步骤62:建立节点级注意力机制。
(1)针对切片属性图及其子图,利用SAGPool(SelfAttention Graph Pool)的注意力分数计算方法 计算节点的自注意力分数,其中,ZG为得到的注意力分数向量,G为图的类型标签,可指代切片属性图SPG及其三种子图CDG、DDG和FCDG。σ表示激活函数,表示增加了自连接的邻接矩阵,表示度矩阵,表示图G经过l层关系图卷积神经网络后的节点隐藏特征,ΘG是可学习的权重参数。
(3)根据节点注意力值使用公式对节点的向量表示进行加权求和,得到切片属性图及其子图的向量表示,如图3所示。其中,VG表示图G的节点集合,i和j为相应的索引,为图G中索引i对应的节点,为节点对应的注意力分数。表示经过l层图卷积神经网络后节点的特征向量表示,为节点最终的注意力值,exp()为以e为底的指数函数,hG为得到的图向量表示。
步骤63:建立子图级注意力机制。
针对每一个切片属性图子图,通过学习其相对于全图的重要性,再经过softmax归一化得到子图的注意力值,最后利用每个子图的注意力值对子图的向量表示进行加权求和hS=∑sub∈[CDG,DDG,FCDG]βsub*hsub,得到子图总的向量表示,如图3所示。其中,sub和k均为子图的类型标签,可指代三种子图CDG、DDG和FCDG,SPG为切片属性图全图的标签。Ssub和Sk分别表示子图sub和子图k相对于全图的重要性分数,hsub为子图sub的向量表示,Ws是可学习的权重矩阵,hSPG表示全图的向量表示。βsub表示子图sub最终的注意力值,hS为得到的子图总的向量表示。
步骤7:将得到的子图和全图的向量表示进行拼接后送入全连接层和softmax层,利用公式p(y|g)=softmax(Wd(hSPG||hs)+bd)得到前向计算结果。其中,y∈{0,1}为类别标签,1为有漏洞样本,0为非漏洞样本,g为切片属性图样本,Wd为全连接网络可学习的权重参数,bd为偏置项,p(y|g)为网络的前向计算结果。利用样本的类别标签信息计算交叉熵损失函数其中,T为训练集,是期望的输出,即若g实际包含漏洞,则为1,否则为0。根据误差反向传播调整网络参数,重复此步骤直至损失函数不再下降,本发明以100轮epoch为限设置early stopping。
步骤8:对于给定的待识别函数,按照6种切片准则,生成其所有可能的切片属性图,用训练好的关系图卷积神经网络模型对所有切片属性图进行漏洞检测。通过漏洞识别策略和漏洞定位策略分析切片属性图漏洞检测结果,从而实现函数的漏洞识别与漏洞定位,如图4所示,具体策略如下:
步骤8.1:漏洞识别策略为:分析函数所有切片属性图的检测结果,只要有一个切片属性图被识别为有漏洞,则该函数被识别有漏洞,同时根据被识别为有漏洞的切片属性图的切片准则类型识别该漏洞与什么语法要素相关。
步骤8.2:漏洞定位策略为:提取所有被识别为有漏洞的切片属性图的语句节点,构成漏洞语句集合。提取所有被识别为无漏洞的切片属性图的语句节点,构成非漏洞语句集合。用漏洞语句集合减去非漏洞语句集合,即为最终识别的漏洞候选语句集合。
实施例1:
以图5所示的漏洞代码为例,说明切片属性图的生成以及漏洞识别结果。
该源文件为SARD中test ID为2081的测试代码,漏洞语句在13行用矩形框框出的位置,是由strcat函数导致的缓冲区溢出漏洞。使用静态分析工具joern解析源文件并生成代码属性图,如图6所示。代码属性图中包含162个节点及290条边。从代码属性图中提取数据依赖和控制依赖关系,生成每个函数的程序依赖图,如图7所示。
以漏洞候选关键节点为切片准则,根据程序依赖图生成程序切片。利用程序切片,从程序依赖图进一步生成切片属性图,并通过过程间分析添加函数依赖关系,最后得到切片属性图。例如,图8(a)是以strcat()不安全函数调用语句为切片准则时生成的程序切片,图8(b)是其切片属性图。
将上述切片属性图送入带有双重注意力机制的关系图卷积神经网络中,得到全图与子图拼接的向量表示,再将其传入分类器中得到输出为[0.3163,0.6837],其最大值对应的类别为1,表示被识别为有漏洞。通过漏洞识别策略和漏洞定位策略分析所有切片属性图的漏洞检测结果,最终可判断源代码存在漏洞,且漏洞候选语句集合为{[strcat(buf,str2);]},从而实现漏洞定位。
实施例2:
以图9所示的漏洞代码为例,说明本发明新增的漏洞候选关键点的作用以及相应的漏洞识别结果。
该源文件为真实项目FFmpeg中matroska_parse_laces函数的部分代码,漏洞语句在源文件的第1804行,为图中矩阵框出的位置。原有的四种切片准则生成的切片属性图无法覆盖该漏洞语句,而本发明新增的切片准则可以对其进行覆盖,生成的切片属性图如图10所示。
同样,将此切片属性图送入带有双重注意力机制的关系图卷积神经网络中,得到全图与子图拼接的向量表示,再将其传入分类器中得到输出为[0.2836,0.7164],其最大值对应的类别为1,表示被识别为有漏洞。通过漏洞识别策略和漏洞定位策略分析所有切片属性图的漏洞检测结果,最终可判断源代码存在漏洞,且漏洞候选语句集合为{[*laces=1;],[if(size!=(size/*laces)*size)],[res=AVERROR_INVALIDDATA;],[for(n=0;n<*laces;n++)]},从而得到比函数级更细的漏洞定位结果。
Claims (9)
1.一种基于切片属性图表示学习的函数级代码漏洞检测方法,其特征在于所述方法包括如下步骤:
步骤1:利用静态分析工具解析源代码,生成以抽象语法树、控制流图和程序依赖图联合表示代码结构信息、以代码语句内容、节点类型和节点度数表示节点属性信息的代码属性图;
步骤2:根据代码属性图中边的类型提取语句节点之间的数据依赖关系和控制依赖关系,生成程序依赖图;
步骤3:利用代码属性图提取源代码的6种漏洞候选关键节点:API/库函数调用相关漏洞的关键节点、指针使用相关漏洞的关键节点、数组使用相关漏洞的关键节点、算术表达式相关漏洞的关键节点、函数参数相关漏洞的候选关键节点、函数返回值相关漏洞的候选关键节点;
步骤4:以步骤3得到的6种漏洞候选关键节点作为切片准则,前向和后向遍历在步骤2中得到的程序依赖图,获取双向切片语句集合,从代码属性图和程序依赖图中获取这些语句节点之间的数据依赖、控制依赖和函数调用依赖关系,进一步生成切片属性图,并根据其是否包含漏洞语句节点给切片属性图标记类别标签,同时记录其使用的切片准则类型;
步骤5:将切片属性图中节点的属性信息转化为初始向量表示,使用关系图卷积网络对切片属性图进行表示学习,得到图中每个节点更为准确的向量表示;
步骤6:根据程序依赖关系类型,将切片属性图划分为三种不同关系的切片属性子图;基于节点自注意力机制,计算节点注意力值,对节点的向量表示加权求和得到切片属性图及其每个切片属性图子图的向量表示;基于子图注意力机制,计算每个切片属性图子图的注意力值,对每个切片属性图子图的向量表示加权求和得到子图总的向量表示,具体步骤如下:
步骤61:根据依赖关系从切片属性图中划分出控制依赖图、数据依赖图和函数调用依赖图;
步骤62:建立节点级注意力机制,针对切片属性图及其子图,利用SAGPool的注意力分数计算方法计算节点的自注意力分数,再对获得的节点分数进行softmax归一化处理,得到节点最终的注意力值,根据节点注意力值对节点的向量表示进行加权求和,得到切片属性图全图及子图的向量表示;
步骤63:建立子图级注意力机制,针对每一个切片属性图子图,学习其相对于全图的重要性,再经过softmax归一化得到子图的注意力值,最后利用每个子图的注意力值对子图的向量表示进行加权求和,得到子图总的向量表示;
步骤7:将得到的切片属性图全图的向量表示和子图总的向量表示拼接后送入全连接层和softmax层得到前向计算结果,利用切片的类别标签信息计算交叉熵损失函数,根据误差反向传播调整网络参数;
步骤8:对于给定的待识别函数,按照6种切片准则,生成其所有可能的切片属性图,用训练好的关系图卷积神经网络模型对所有切片属性图进行漏洞检测,通过漏洞识别策略和漏洞定位策略分析切片属性图漏洞检测结果,从而实现函数的漏洞识别与漏洞定位。
2.根据权利要求1所述的基于切片属性图表示学习的函数级代码漏洞检测方法,其特征在于所述步骤3中,确定函数参数相关漏洞的候选关键节点的方法如下:遍历步骤1中生成的代码属性图,查找类型为“Function”的节点,继续遍历以该节点为起点的边并获得该边的终止节点,这些终止节点中类型为“Parameter”的节点即为函数传参相关漏洞的候选关键节点。
3.根据权利要求1所述的基于切片属性图表示学习的函数级代码漏洞检测方法,其特征在于所述步骤3中,确定函数返回值相关漏洞的候选关键节点的方法如下:遍历步骤1中生成的代码属性图,查找类型为“returnstatement”的节点,该节点即为函数返回值相关漏洞的候选关键节点。
4.根据权利要求1所述的基于切片属性图表示学习的函数级代码漏洞检测方法,其特征在于所述步骤4的具体步骤如下:
步骤41:在步骤2得到的程序依赖图中,找到步骤3中生成的漏洞候选关键节点;
步骤42:以每个漏洞候选关键节点为起点,按照依赖关系前向遍历程序依赖图,获得前向切片语句节点集合;通过切片中的函数调用语句获取其调用的函数,以该函数中类型为“Parameter”的节点为起点前向遍历程序依赖图,获得过程间前向切片语句节点集合;将二者合并,得到完整的前向切片语句节点集合;
步骤43:以漏洞候选关键节点为起点,依照依赖关系后向遍历程序依赖图,获得后向切片语句节点集合;通过切片中的函数调用语句获取其调用的函数,以该函数中类型为“returnstatement”的节点为起点后向遍历程序依赖图,获得过程间后向切片语句节点集合;将二者合并,得到完整的后向切片语句节点集合;
步骤44:将步骤42和步骤43得到的前向切片语句节点和后向切片语句节点集合合并,生成切片属性图节点集合;
步骤45:根据程序依赖图,在切片属性图的各个节点之间添加数据依赖边和控制依赖边;按照程序切片内语句顺序遍历所有切片语句节点,若两节点在程序切片内相邻且不属于同一函数,则在顶点之间添加函数依赖边,最后得到完整的切片属性图;
步骤46:对切片属性图进行精细化标记:若切片属性图的语句节点中包含漏洞语句节点,则将该切片属性图标记为1,表示有漏洞,否则标记为0,表示无漏洞,同时记录其使用的切片准则类型。
5.根据权利要求1所述的基于切片属性图表示学习的函数级代码漏洞检测方法,其特征在于所述步骤5的具体步骤如下:
步骤51:将切片属性图中节点属性信息中的代码语句拆分成token,使用预训练好的word2vec模型得到每个token的向量表示后加和取平均得到语句的向量表示,作为节点语句特征;
步骤52:将切片属性图中节点属性信息中的节点类型进行one-hot编码,得到节点类型向量表示,作为节点类型特征;
步骤53:统计切片属性图中每个节点的出度和入度,作为节点度数特征;
步骤54:将节点语句特征向量、节点类型特征向量和节点度数特征向量拼接后,通过一个线性层计算得到节点的初始向量表示;
步骤55:使用关系图卷积网络对切片属性图进行表示学习,得到图中每个节点更为准确的向量表示。
6.根据权利要求1所述的基于切片属性图表示学习的函数级代码漏洞检测方法,其特征在于所述步骤62中,切片属性图全图的向量表示的具体计算公式如下:
9.根据权利要求1所述的基于切片属性图表示学习的函数级代码漏洞检测方法,其特征在于所述步骤8中,漏洞识别策略为:分析函数所有切片属性图的检测结果,只要有一个切片属性图被识别为有漏洞,则该函数被识别有漏洞,同时根据被识别为有漏洞的切片属性图的切片准则类型识别该漏洞与什么语法要素相关;漏洞定位策略为:提取所有被识别为有漏洞的切片属性图的语句节点,构成漏洞语句集合;提取所有被识别为无漏洞的切片属性图的语句节点,构成非漏洞语句集合;用漏洞语句集合减去非漏洞语句集合,即为最终识别的漏洞候选语句集合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011613496.1A CN112699377B (zh) | 2020-12-30 | 2020-12-30 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011613496.1A CN112699377B (zh) | 2020-12-30 | 2020-12-30 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112699377A CN112699377A (zh) | 2021-04-23 |
CN112699377B true CN112699377B (zh) | 2023-04-28 |
Family
ID=75512693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011613496.1A Active CN112699377B (zh) | 2020-12-30 | 2020-12-30 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112699377B (zh) |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3971720A1 (en) | 2020-09-22 | 2022-03-23 | Tata Consultancy Services Limited | Method and system for identification of redundant function-level slicing calls |
US11550569B2 (en) | 2021-05-14 | 2023-01-10 | Cyberark Software Ltd. | Discovering and remediating hidden secrets in code files |
CN113221120A (zh) * | 2021-05-19 | 2021-08-06 | 西北工业大学太仓长三角研究院 | 一种面向物联网应用规则的漏洞检测方法及系统 |
CN113326187B (zh) * | 2021-05-25 | 2023-11-24 | 扬州大学 | 数据驱动的内存泄漏智能化检测方法及系统 |
CN113626823B (zh) * | 2021-06-29 | 2023-06-27 | 中国科学院信息工程研究所 | 一种基于可达性分析的组件间交互威胁检测方法及装置 |
CN113434418A (zh) * | 2021-06-29 | 2021-09-24 | 扬州大学 | 知识驱动的软件缺陷检测与分析方法及系统 |
CN113259399B (zh) * | 2021-07-08 | 2021-10-15 | 中国人民解放军国防科技大学 | 基于异构信息网络的域名服务器安全威胁分析方法及装置 |
CN113609488B (zh) * | 2021-07-19 | 2022-07-08 | 华东师范大学 | 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统 |
CN113591093B (zh) * | 2021-07-22 | 2023-05-16 | 燕山大学 | 基于自注意力机制的工业软件漏洞检测方法 |
CN113297584A (zh) * | 2021-07-28 | 2021-08-24 | 四川大学 | 漏洞检测方法、装置、设备及存储介质 |
CN113468534B (zh) * | 2021-09-01 | 2022-02-11 | 北京邮电大学 | 针对安卓应用程序的漏洞检测方法及相关装置 |
CN113868650B (zh) * | 2021-09-13 | 2023-04-25 | 四川大学 | 基于代码异质中间图表示的漏洞检测方法与装置 |
CN113918171A (zh) * | 2021-10-19 | 2022-01-11 | 哈尔滨理工大学 | 一种新的使用扩展控制流图的反汇编方法 |
CN114090835B (zh) * | 2021-11-24 | 2024-07-23 | 山东大学 | 一种基于属性图信息的社团检测方法 |
CN114168972B (zh) * | 2021-12-15 | 2024-05-03 | 东北大学 | 一种npm生态系统安全漏洞阻塞点的检测与修复方法 |
CN113987522B (zh) * | 2021-12-30 | 2022-05-03 | 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) | 一种用于源代码漏洞检测的代码属性图压缩方法及装置 |
CN114579977A (zh) * | 2022-02-25 | 2022-06-03 | 无锡物联网创新中心有限公司 | 一种用于嵌入式操作系统的代码漏洞检测方法 |
CN114816517B (zh) * | 2022-05-06 | 2024-07-16 | 哈尔滨工业大学 | 一种层次语义感知的代码表示学习方法 |
CN114861194B (zh) * | 2022-05-13 | 2024-03-08 | 兰州交通大学 | 一种基于bgru与cnn融合模型的多类型漏洞检测方法 |
CN114969763B (zh) * | 2022-06-20 | 2024-07-16 | 哈尔滨工业大学 | 基于seq2seq代码表示学习的细粒度漏洞检测方法 |
CN115080985B (zh) * | 2022-07-27 | 2022-11-11 | 北京北大软件工程股份有限公司 | 基于分块的大规模代码静态分析方法和系统 |
CN115357904B (zh) * | 2022-07-29 | 2024-04-02 | 南京航空航天大学 | 一种基于程序切片和图神经网络的多类漏洞检测方法 |
CN115357909B (zh) * | 2022-10-19 | 2023-05-16 | 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) | 一种用于代码漏洞检测的全局信息感知图神经网络系统 |
CN115455438B (zh) * | 2022-11-09 | 2023-02-07 | 南昌航空大学 | 一种程序切片漏洞检测方法、系统、计算机及存储介质 |
CN115586920B (zh) * | 2022-12-13 | 2023-03-14 | 北京安普诺信息技术有限公司 | 脆弱代码片段克隆检测方法、装置、电子设备及存储介质 |
CN116781327B (zh) * | 2023-05-24 | 2024-01-16 | 中国科学院信息工程研究所 | 自动化密码应用安全漏洞挖掘方法、装置、介质及设备 |
CN116702160B (zh) * | 2023-08-07 | 2023-11-10 | 四川大学 | 一种基于数据依赖增强程序切片的源代码漏洞检测方法 |
CN117171029B (zh) * | 2023-09-04 | 2024-09-17 | 四川大学 | 一种基于上下文边关系的改进源码切片方法 |
CN116974619B (zh) * | 2023-09-22 | 2024-01-12 | 国网电商科技有限公司 | 一种软件物料清单库的构建方法、装置、设备及可读介质 |
CN117195238B (zh) * | 2023-10-08 | 2024-06-21 | 北京远禾科技有限公司 | 一种异构图神经网络代码漏洞检测方法 |
CN117216771B (zh) * | 2023-11-09 | 2024-01-30 | 中机寰宇认证检验股份有限公司 | 一种二进制程序漏洞智能挖掘方法及系统 |
CN117235741B (zh) * | 2023-11-13 | 2024-02-23 | 仟言科技(佛山)有限公司 | 一种基于人工智能的低代码安全系统 |
CN117592061B (zh) * | 2024-01-19 | 2024-04-12 | 北京中科卓信软件测评技术中心 | 融合代码漏洞特征及属性图的源代码安全检测方法与装置 |
CN118484814A (zh) * | 2024-07-16 | 2024-08-13 | 西安电子科技大学 | 一种切片级特征驱动的软件漏洞精准检测方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107885999A (zh) * | 2017-11-08 | 2018-04-06 | 华中科技大学 | 一种基于深度学习的漏洞检测方法及系统 |
CN111460450A (zh) * | 2020-03-11 | 2020-07-28 | 西北大学 | 一种基于图卷积网络的源代码漏洞检测方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11463472B2 (en) * | 2018-10-24 | 2022-10-04 | Nec Corporation | Unknown malicious program behavior detection using a graph neural network |
CN111611586B (zh) * | 2019-02-25 | 2023-03-31 | 上海信息安全工程技术研究中心 | 基于图卷积网络的软件漏洞检测方法及装置 |
US11531780B2 (en) * | 2019-05-15 | 2022-12-20 | International Business Machines Corporation | Deep learning-based identity fraud detection |
CN110245496B (zh) * | 2019-05-27 | 2021-04-20 | 华中科技大学 | 一种源代码漏洞检测方法及检测器和其训练方法及系统 |
CN111783100B (zh) * | 2020-06-22 | 2022-05-17 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN111753303B (zh) * | 2020-07-29 | 2023-02-07 | 哈尔滨工业大学 | 一种基于深度学习和强化学习的多粒度代码漏洞检测方法 |
-
2020
- 2020-12-30 CN CN202011613496.1A patent/CN112699377B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107885999A (zh) * | 2017-11-08 | 2018-04-06 | 华中科技大学 | 一种基于深度学习的漏洞检测方法及系统 |
CN111460450A (zh) * | 2020-03-11 | 2020-07-28 | 西北大学 | 一种基于图卷积网络的源代码漏洞检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112699377A (zh) | 2021-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112699377B (zh) | 基于切片属性图表示学习的函数级代码漏洞检测方法 | |
CN111783100B (zh) | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 | |
CN110245496B (zh) | 一种源代码漏洞检测方法及检测器和其训练方法及系统 | |
Hoang et al. | Deepjit: an end-to-end deep learning framework for just-in-time defect prediction | |
CN113641586B (zh) | 软件源代码缺陷检测方法、系统、电子设备及储存介质 | |
CN110134757B (zh) | 一种基于多头注意力机制的事件论元角色抽取方法 | |
CN112182219A (zh) | 一种基于日志语义分析的在线服务异常检测方法 | |
CN110413319A (zh) | 一种基于深度语义的代码函数味道检测方法 | |
CN112328797A (zh) | 一种基于神经网络和注意力机制的情感分类方法及系统 | |
CN116661805B (zh) | 代码表示的生成方法和装置、存储介质及电子设备 | |
CN112036169B (zh) | 事件识别模型优化方法、装置、设备及可读存储介质 | |
CN113420117B (zh) | 一种基于多元特征融合的突发事件分类方法 | |
CN112906391B (zh) | 元事件抽取方法、装置、电子设备和存储介质 | |
CN116702160B (zh) | 一种基于数据依赖增强程序切片的源代码漏洞检测方法 | |
CN117009223A (zh) | 基于抽象语法的软件测试方法、系统、存储介质及终端 | |
CN116467437A (zh) | 面向复杂场景描述的自动流程建模方法 | |
CN115859307A (zh) | 基于树型注意力和加权图匹配的相似漏洞检测方法 | |
CN114386412B (zh) | 一种基于不确定性感知的多模态命名实体识别方法 | |
CN115422945A (zh) | 一种融合情感挖掘的谣言检测方法及系统 | |
CN115048929A (zh) | 敏感文本监测方法及装置 | |
CN115081445A (zh) | 一种基于多任务学习的短文本实体消歧方法 | |
CN114708114A (zh) | 一种基于特征评价及改进算法的社交机器人账号检测方法 | |
CN114519092A (zh) | 一种面向中文领域大规模复杂关系数据集构建框架 | |
CN112200268A (zh) | 一种基于编码器-解码器框架的图像描述方法 | |
CN114842246B (zh) | 一种社交媒体压力类别检测方法及装置 |
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 |