CN113868650A - 基于代码异质中间图表示的漏洞检测方法与装置 - Google Patents
基于代码异质中间图表示的漏洞检测方法与装置 Download PDFInfo
- Publication number
- CN113868650A CN113868650A CN202111068306.7A CN202111068306A CN113868650A CN 113868650 A CN113868650 A CN 113868650A CN 202111068306 A CN202111068306 A CN 202111068306A CN 113868650 A CN113868650 A CN 113868650A
- Authority
- CN
- China
- Prior art keywords
- representation
- node
- code
- function
- graph
- 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 118
- 230000006870 function Effects 0.000 claims abstract description 106
- 238000013528 artificial neural network Methods 0.000 claims abstract description 19
- 238000000605 extraction Methods 0.000 claims abstract description 11
- 238000010586 diagram Methods 0.000 claims description 20
- 238000012545 processing Methods 0.000 claims description 19
- 230000007246 mechanism Effects 0.000 claims description 17
- 239000000284 extract Substances 0.000 claims description 13
- 239000013598 vector Substances 0.000 claims description 10
- 230000011218 segmentation Effects 0.000 claims description 8
- 238000013507 mapping Methods 0.000 claims description 6
- 108091026890 Coding region Proteins 0.000 claims description 4
- 230000009466 transformation Effects 0.000 claims description 4
- 230000004913 activation Effects 0.000 claims description 3
- 230000002452 interceptive effect Effects 0.000 claims description 3
- 230000002776 aggregation Effects 0.000 claims description 2
- 238000004220 aggregation Methods 0.000 claims description 2
- 230000004927 fusion Effects 0.000 claims description 2
- 238000000034 method Methods 0.000 abstract description 59
- 230000000694 effects Effects 0.000 abstract description 41
- 230000008569 process Effects 0.000 abstract description 12
- 238000011156 evaluation Methods 0.000 description 9
- 238000004458 analytical method Methods 0.000 description 7
- 238000012549 training Methods 0.000 description 7
- 238000012512 characterization method Methods 0.000 description 4
- 238000010801 machine learning Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 241000700159 Rattus Species 0.000 description 3
- 238000007781 pre-processing Methods 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 238000012935 Averaging Methods 0.000 description 2
- 238000002679 ablation Methods 0.000 description 2
- 238000013527 convolutional neural network Methods 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000002474 experimental method Methods 0.000 description 2
- 238000003062 neural network model Methods 0.000 description 2
- 230000004931 aggregating effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012733 comparative method Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000002790 cross-validation Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000001066 destructive effect Effects 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 239000002360 explosive Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 238000011895 specific detection Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000010200 validation analysis Methods 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/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
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/25—Fusion techniques
- G06F18/253—Fusion techniques of extracted features
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Virology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于代码异质中间图表示的漏洞检测方法与装置,装置包括代码中间表示抽取模块、节点特征初始化模块、节点表示学习模块、函数特征表示学习模块和函数漏洞检测模块;面向函数源代码基于代码结构化的中间图表示结构结合图神经网络来进行漏洞检测;本发明不仅能有效地避免依赖于专家经验知识抽取漏洞特征的繁琐任务,还能基于代码结构化的中间图表示结构细粒度地处理隐藏在代码中的信息,并基于代码中间表示图生成函数的特征表示用于漏洞检测;可以满足函数代码漏洞的检测需求,实现了面向函数源代码漏洞检测效果的提升。
Description
技术领域
本发明涉及软件分析领域代码漏洞检测方法,具体是一种基于代码异质中间图表示的漏洞检测方法与装置。
背景技术
开源项目的爆发式增长,使得其本身的代码安全问题面临研究的挑战。在2020年度Github新增项目数超过6千万个,超过91亿的贡献被提交,相应地针对开源项目的攻击也不断增加,特别地,在2020年针对开源项目的供应链攻击激增430%。漏洞经常充当“开门器”使攻击者可以进行横向移动和部署恶意软件,进而对目标造成更具有破坏性的攻击,高效地检测开源项目中的漏洞对于尽早定位软件安全问题,保证软件系统稳定运行,保护机密信息不被窃取具有重要意义。此外,代码漏洞检测也是软件开发中的关键一环,自动化的面向源代码进行漏洞检测可以极大地减轻软件发布前的审计成本。
在漏洞给检测领域存在静态分析、符号执行、模糊测试等方法。然而,目前的这些由于缺乏对源代码细微的语法语义信息的处理,其在实际检测中仍然效率低下。符号执行和模糊测试是两种动态漏洞检测方法,但是巨大的计算开销使得它们在实际使用中的检测性能较低。静态分析可以不依赖于程序执行,从原始代码中就检测代码是否存在漏洞,因此其也被工业界广泛使用。本发明也是面向源代码进行静态检测。
静态代码漏洞检测方法可以进一步细分为基于漏洞模式匹配的方法,基于代码相似性分析的方法,以及基于学习的漏洞检测方法。基于漏洞模式匹配的方法通过已知的漏洞模式来识别潜在的漏洞代码,这种方法因为检测速度相对较快被工业界广泛应用,但它强烈依赖于人工构建的漏洞模式库。漏洞模式库的构建不仅依赖于专家经验知识,而且耗时且易错,致使其无法应对大量新兴的开源代码。基于代码相似性分析的方法是利用代码的相似性来进行漏洞识别。这种方法通常不直接使用原始的代码进行相似性比较,而是抽取出代码的抽象表示或者抽取出相应的语义语法属性进行相似性分析。一个合适的代码抽象表示或代码度量是这种方法的关键,因此这种方法很容易受到混淆技术的影响,更无法应对潜在的未知漏洞。基于学习的漏洞检测方法提供了另外一种检测方式,其可以进一步细分为基于传统机器学习的漏洞检测方法和基于深度学习的漏洞检测方法。这种方法以漏洞相关的代码数据为驱动,从代码数据中学习漏洞相关的信息进行检测。
传统的基于机器学习的方法首先被应用到漏洞检测中,这种方法从代码中提取特征作为输入,然后结合传统的机器学习算法进行漏洞检测。通常这类方法从代码的不同长度序列中抽取特征进行预测,另一些方法则是从函数调用序列中抽取特征来进行检测。代码特征的抽取是这种方法的关键,但特征抽取过程往往依赖于丰富的专家经验知识,并且特征抽取的过程耗时且易错,使其检测效果并不好并且这种方法也容易被混淆技术欺骗。与传统的基于机器学习的方法相比,基于深度的方法具有更强的学习漏洞特征表示的能力,可以在无需人工干预的情况下自动从数据中提取特征表示。这种方法通常是将原始的代码转化为具有一定结构的数据进行处理。将代码视为扁平的序列进行处理首先被采用,通常用于处理的代码序列包括:按代码书写顺序排列的代码序列,代码中函数调用序列,以及基于代码中间表示的不同遍历序列。然后以获取的代码序列为输入,结合循环神经网络(Recurrent Neural Network,RNN)或者卷积神经网络(Convolutional Neural Network,CNN)进行漏洞检测。但是,代码本身具有复杂的结构特性,仅仅将代码视为序列并不能很好地表示其语法和语义信息,其可能会丢失对漏洞检测至关重要的代码结构属性。因此,为了更好地从代码的结构属性中捕获有价值的信息,直接在代码的结构化中间表示上进行处理的方法逐渐被应用到相关领域。这类方法是以代码的结构化中间表示为输入,结合图神经网络(Graph Neural Network,GNN)的结构化处理能力进行漏洞检测。目前基于图结构的代码中间表示的漏洞检测方法处理的语法和语义都较粗粒度,隐藏在代码中的漏洞信息不能被充分利用,从而导致漏洞检测效果仍然较差。
发明内容
本发明所有解决的技术问题是提供一种基于异构代码中间表示的源代码漏洞检测方法(A Code Vulnerability Detection Method Based on HeterogeneousIntermediate Representation Graph简称为HGVul),用于针对软件系统中函数粒度的代码进行漏洞检测,以更好地满足代码漏洞检测的准确性需求,提高代码漏洞检测效果,进而保障软件系统的安全性。本发明采用的技术方案是:
一种基于代码异质中间图表示的漏洞检测方法,包括以下步骤:
步骤1:将程序源代码按照函数进行拆分,对于每一个函数抽取其代码的中间表示;所述中间表示通过具有结构化的信息的图形表示,称为中间表示图,为将函数代码的代码属性图(CPG,Code Property Graph)和代码的编码顺序(NCS,Natural Code Sequence)融合形成一种组合图,也即CPG+图;
步骤2:计算中间表示图中每个节点的词嵌入作为中间表示图中节点的初始特征属性:首先将中间表示图中每一个节点包含的多个代码片段,也即代码基本单元,进行分词处理;然后对每一个分词使用预训练的模型计算其词嵌入;最后融合每个节点包含的各代码基本单元的词嵌入,作为节点的词嵌入;
步骤3:对具有节点初始特征的中间表示图基于图中的邻居信息学习节点的特征表示:首先按照中间表示图中不同的边类型从中抽取不同的子图,然后在子图上使用图神经网络算法更新节点的特征表示,操作时结合注意力机制来更新节点的特征表示,以获取不同的邻居信息;
步骤4:读取函数代码中间表示图中的节点特征来生成函数的特征表示:首先融合上一步中各子图上节点的特征表示,对每个子图更新后的对应节点表示的每一维度计算其平均值,并将其作为融合后的节点特征表示;然后将融合后的完整中间表示图读取形成函数的特征表示;
步骤5:将学习到的函数特征表示作为输入使用多层全连接网络进行漏洞检测:首先将上一步中获取的函数对应的特征表示作为检测器的输入,然后经过由多层全连接层构建的检测进行检测,最后输入函数是否存在漏洞的检测结果。
进一步的,所述步骤2具体包括:
步骤21:使用词法分析器获取节点代码中的代码基本单元token;
步骤22:将token中的函数和变量名称映射到符号名称,实现分词处理,以防止其干扰节点的初始特征;
步骤23:使用预先训练好的word2vec模型来获取每个节点的初始词嵌入;对于节点代码中存在多个token的情况,计算多个token向量各维度的平均值,形成一个新的向量作为节点初始词嵌入;
步骤24:将每种节点类型编码为一个整数并将节点类型的编码和获得的节点嵌入连接起来作为节点的初始特征表示;对于获取了节点初始特征表示的函数中间表示,将其定义为f=g(V,E,M);其中,g(·)表示函数代码的中间表示结构,V代表中间表示图中的节点集合,E代表中间表示图中的边的集合,M代表中间表示图中节点的初始特征表示的集合。
更进一步的,所述步骤3中节点特征表示学习包括:
步骤31:计算节点间相关性系数
将一个由多种边类型构建的代码中间表示图定义为g=∪r∈R gr,其中R表示边类型的集合,r表示具体的边类型;在子图上首先计算节点间的相关性系数:
其中,表示在子图gr上节点i和j的之间的相关系数;W是共享参数,用于增加特征表示维度;表示节点i在子图gr上t时刻的特征表示;表示节点j在子图gr上t时刻的特征表示;[·||·]操作表示连接操作,a(·)表示将计算的特征向量映射到具体的值,Ni,r表示节点i在子图gr上的邻居。
步骤32:计算节点间注意力系数
节点间的注意力系数使用softmax函数获取,并由以下公式计算:
步骤33:利用注意力系数与对应的邻居节点特征做线性变换后进行加权求和来更新学习节点特征,且引入多头注意力机制来学习节点特征表示
其中,表示节点i在子图gr上t+1时刻的特征表示,也即是相对于t时刻更新后的特征表示;K表示多头机制中多头的个数,k表示具体第几个头;表示在子图gr上节点i和节点j在第k头的注意力系数,Wk表示第k头使用的权重系数。
更进一步的,所述步骤4中函数特征表示生成策略包括:
步骤41:不同边类型子图对应节点特征表示融合
融合代码中间表示图多个子图对应节点的特征表示,由以下公式计算:
其中,hi ′是节点i在多个子图融合后的特征表示,|R|表示中间表示图中的边类型的数量,也即是子图类型的数量;hi,r表示经过步骤3更新后的节点i的特征表示;
步骤42:代码中间表示图中节点聚合生成函数特征表示
基于代码中间表示图产生对应函数的特征表示H,由以下公式计算:
式中,对应函数的特征由节点对应维度的平均值获得,H表示中间表示图对应函数的特征表示,|V|表示中间表示图中存在节点的个数。
更进一步的,所述步骤5基于函数特征表示使用多层全连接网络来检测是否存在漏洞,由以下公式计算:
一种基于代码异质中间图表示的漏洞检测装置,包括代码中间表示抽取模块、节点特征初始化模块、节点表示学习模块、函数特征表示学习模块和函数漏洞检测模块;
所述代码中间表示抽取模块将程序源代码按照函数进行拆分,对于每一个函数抽取其代码的中间表示;所述中间表示通过具有结构化的信息的图形表示,称为中间表示图,为将函数代码的代码属性图CPG和代码的编码顺序NCS融合形成一种组合图,也即CPG+图;
所述节点特征初始化模块计算中间表示图中每个节点的词嵌入作为中间表示图中节点的初始特征属性;
所述节点表示学习模块对具有节点初始特征的中间表示图基于图中的邻居信息学习节点的特征表示;
所述函数特征表示学习模块读取函数代码中间表图中的节点特征来生成函数的特征表示;
所述将学习到的函数特征表示作为输入使用多层全连接网络进行漏洞检测。
本发明的有益效果是:
1)本发明具备不依赖于专家经验知识从函数代码中获取抽象的漏洞相关信息的能力,与依赖于专家经验知识以及仅依赖于简单的代码结构的方法相比,本发明的检测性能更好。
2)抽取具有多种边类型的异质中间表示图并对其进行细粒度的处理,按照边类型划分不同子图进行处理,有助于区分不同类型的边所传递的代码不同语义,进而获得隐藏在代码中的细微语义信息。
3)引入注意力机制来更新节点特征表示,可以有效区分中间表示图中节点受其邻居的不同影响,有助于从代码中获取更有价值的信息,进而提升漏洞检测效果。
附图说明
图1为本发明方法HGVul的整体架构图。
图2为代码异质中间表示结构CPG+的示意图。
图3(a)为使用代码不同中间表示结构在Big-Vul-VP数据集上的检测效果。
图3(b)为使用代码不同中间表示结构在Big-Vul数据集上的检测效果。
图4(a)为基于不同的图神经网络在Big-Vul-VP数据集上的检测效果。
图4(b)为基于不同的图神经网络在Big-Vul数据集上的检测效果。
图5(a)为将代码中间表示进行异质处理在Big-Vul-VP数据集上的检测效果。
图5(b)为将代码中间表示进行异质处理在Big-Vul数据集上的检测效果。
图6(a)为在Big-Vul-VP数据集上HGVul与多种对比方法的检测效果。
图6(b)为在Big-Vul数据集上HGVul与多种对比方法的检测效果。
具体实施方式
下面结合附图和具体实施例对本发明做进一步详细说明。
本发明方法的整体架构如图1所示,方法主要由代码中间表示预处理模块、特征表示学习模块、漏洞检测模块三个主要部分组成。其中预处理模块包含代码中间表示抽取子模块和节点特征初始化子模块,特征表示学习模块包含节点表示学习模块和函数特征表示学习模块。
步骤1:代码中间表示抽取模块将程序源代码按照函数进行处理,如图1中预处理模块中的中间表示抽取子模块所示,HGVul对于每一个函数f抽取其代码的中间表示IR(Intermediate Representation)。
不同的中间表示具有不同的语义信息,本发明抽取函数的CPG+图作为每一个函数的中间表示,因为CPG+具有丰富的代码语法语义信息,且可以用其来充分获取隐藏在代码中的与漏洞相关有价值的信息。对于每一个函数代码的中间表示CPG+,其是一个图形结构,因此将每一个代码中间表示图整理成g(V,E),其中V表示中间表示图中节点的集合,E表示中间表示图中边的集合。抽取的CPG+如图2所示,CPG+是一个包含多种类型边的图形结构,其具有的关系包括抽象语法树(Abstract Syntax Tree,AST)、控制流图(Control FlowGraph,CFG)、程序依赖图种的控制依赖(Program Dependence Graph-ControlDependency,PDG-CD)、程序依赖图中的数据依赖(Program Dependence Graph-DataDependency,PDG-DD)、以及代码的编码顺序(Natural Code Sequence,NCS)。
步骤2:节点特征初始化子模块对抽取的代码中间表示计算每个节点的词嵌入Embedding作为中间表示图中节点的初始特征属性。首先,HGVul使用词法分析器获取节点代码中的基本单元token。然后,将token中的函数和变量名称映射到符号名称(例如,“FUN”、“VAR”)以防止其干扰节点的初始特征,因为用户定义的函数和变量名称包含具体程序的命名特性。接着,HGVul使用预先训练好的word2vec模型来获取每个节点的初始词嵌入。
对于节点代码中存在多个token的情况,计算多个token向量各维度的平均值,形成一个新的向量作为节点初始词嵌入。预训练好的词嵌入模型的语料库由所有训练样本的映射标记组成。最后,为了捕获节点的特征类型隐藏信息,本发明将每种节点类型编码为一个整数并将节点类型的编码和获得的节点嵌入连接起来作为节点的初始特征表示。
因此,对于获取了节点初始特征表示的函数中间表示,将其定义为f=g(V,E,M)。其中,g(·)表示函数代码的中间表示结构,V代表中间表示图中的节点集合,E代表中间表示图中的边的集合,M代表中间表示图中节点的初始特征表示的集合。
步骤3:节点特征表示学习子模块中,经过以上步骤预处理的代码中间表示中的节点图基于IR中的邻居信息来学习节点自身的特征表示。
如图1中学习节点表示过程,HGVul根据不同的边类型从中间表示图中抽取子图,然后分别对每个子图进行节点学习过程。因此,代码中间表示图定义为g=∪r∈R gr,其中R表示边类型的集合,r表示具体的边类型。节点vi的在子图gr的初始特征表示设为其t时刻的特征表示设为 则表示节点vi沿着子图gr上的邻居节点更新在t+1时刻的特征表示。在节点特征表示更新学习的过程中引入注意力机制来区分节点不同邻居对其特征表示的影响。
具体地,在子图上首先由以下公式计算节点间的相关性系数:
其中表示在子图gr上节点i和j的之间的相关系数,W是共享参数,其将初始特征向量提升到高维,用于增加特征表示维度。表示节点i在子图gr上t时刻的特征表示,表示节点j在子图gr上t时刻的特征表示,[·||·]操作表示连接操作,a(·)表示将计算出的高维特征向量映射到具体的值,Ni,r表示节点i在子图gr上的邻居。
计算完成节点间的相关性系数后,则需要根据相关性系数计算节点间的注意力系数。节点间的注意力系数使用softmax函数获取并由以下公式计算:
其中,表示子图gr上节点i和j的之间的注意力系数,σ表示激活函数。两个节点间的注意力系数如果较大,则说明节点受其对应邻居的影响越强。反之,若两个节点间的注意力系数较小,则说明节点受其对应邻居的影响较弱。
在获取到中间表示子图中节点间的注意力系数后,利用注意力系数与对应的邻居节点特征做线性变换后进行加权求和来更新学习节点特征。为了增强模型的表征学习能力,保证注意力机制的稳定性,本发明引入多头注意力机制来学习节点特征表示。
其中,采用多头机制来保障注意力机制的稳定性,表示节点i在子图gr上t+1时刻的特征表示,也即是相对于t时刻更新后的特征表示。K表示多头机制中多头的个数,k表示具体第几个头,表示在子图gr上节点i和节点j在第k头的注意力系数,Wk表示第k头使用的权重系数。
在训练阶段,使用训练数据基于以上公式训练更新节点特征表示的图神经网络模型。在实际的检测阶段,直接使用训练阶段训练好的图神经网络模型来计算节点的特征表示。
步骤4:函数特征表示学习模块通过聚合读取代码中间表示图中的节点特征来生成函数的特征表示。
由于节点表示是在不同的边类型子图上学习获得,所以首先融合上述步骤中各子图上节点的特征表示。HGVul对每个子图更新后的对应节点表示的每一维度计算其平均值,并将其作为融合后的节点特征表示。常见的合并操作包括求平均、求最大值、求最小值、求和、连接操作。本发明选择求平均来融合各子图的节点的表示,具体的由以下公式计算:
其中,hi ′是节点i在多个子图融合后的特征表示,|R|表示中间表示图中的边类型的数量,也即是子图类型的数量,hi,r表示经过步骤3更新后的节点i的特征表示。
然后,将融合后的完整中间表示图读取形成函数的特征表示,因为函数代码中间表示中的每一个节点代表一个具有语法语义信息的基本块。具体地,如图1所示HGVul将中间表示图中每个节点的特征表示对应维度的值求平均,并将其作为函数的特征表示。因此,基于代码中间表示图生成对应函数的特征表示H,并由以下公式计算:
式中,对应函数的特征由节点对应维度的平均值获得,H表示中间表示图对应函数的特征表示,|V|表示中间表示图中存在节点的个数。
步骤5:如图1中漏洞检测过程所示,函数漏洞检测模块将学习到了函数特征表示作为输入并使用多层全连接网络进行漏洞检测。首先将上述步骤中获取的函数特征表示作为检测器的输入,然后经过多层全连接网络进行线性变换来进一步抽取函数的抽象特征,最后输入函数是否存在漏洞的检测结果。HGVul使用多层全连接网络来判断是否存在漏洞,具体的检测结果由以下公式计算获得:
这一步骤中模型有两个阶段,在训练阶段,使用训练数据基于多层全连接网络训练漏洞检测模型。在实际的检测阶段,则直接使用训练好的检测模型来进行函数漏洞检测。
HGVul的检测效果评测在Big-Vul数据集以及基于其抽取的Big-Vul-VP数据集上进行。Big-Vul是一个从348个开源项目中抽取了176825个函数的数据集,其可用的存在漏洞的函数有10207个,可用的不存在漏洞的函数有166618个。因为Big-Vul数据集的正例和负例样本分布很不均衡,为了能够更好地验证本发明的效果,将基于Big-Vul抽取正例和负例均衡的数据集,并称为Big-Vul-VP。以Big-Vul中存在漏洞的函数为正例,并以其漏洞函数对应的补丁函数为负例,因此Big-Vul-VP中包含可用的存在漏洞的函数10207个,可用的负例函数9288个。对于样本均衡的Big-Vul-VP数据集,验证过程中采用5折交叉验证。对于样本不均衡且较大的数据,将数据集按照2:1:1的比例划分训练集、验证集和测试集来验证。此外,本发明选用Accuracy(Acc)、Precision(P)、Recall、F1-score(F1)、Falsepositive rate(FPR),False negative rate(FNR)这5项指标来进行评估。
图3(a)和图3(b)反映的是代码中间表示在Big-Vul-VP数据集和Big-Vul数据集对漏洞检测效果的影响。图中横坐标代表不同的中间表示,这里选取AST、AST+、CFG、PDG、CPG、以及CPG+这6种不同类型的中间表示,纵坐标表示检测结果的百分比值,图中不同的柱状条反映的是不同评测指标的具体百分比值。为了控制其他因素对效果的影响,测试中使用门控图神经网络Gated Graph Neural Network(GGNN),并控制器参数不变,只改变不同中间表示的类型来进行消融实验。如图3(a)和图3(b)所示,函数代码不同的中间表示在Big-Vul-VP和Big-Vul的检测效果由明显的差异。图3(a)所示,在Big-Vul-VP上基于CPG+进行检测时,其检测评估指标中的Accuracy、Precision、Recall和F1都高于92%,相对应的漏报率FNR和误报率FPR都相对较低。在Big-Vul-VP数据集上使用AST+的Recall和漏报率FNR可以达到最好。在样本极不均衡的数据集Big-Vul上,虽然由于样本偏差较大导致检测结果有所下降,但是以CPG+为代码中间表示的检测效果仍然相对最好,其F1值仍然高于80%,要明显优于其他中间表示的检测结果。在Big-Vul数据集上,当使用CPG作为中间表示时其Recall和漏报率FNR可以达到最好。因此从整体上可以看出检测性能会受代码代码不同中间表示的影响,因为CPG+图具有更丰富的语法语义信息,当使用CPG+作为输入时检测效果相对最好。
图4(a)和图4(b)展示了在Big-Vul-VP数据集和Big-Vul数据集上基于不同图神经网络对漏洞检测效果的影响,其是为了检测注意力机制对检测效果的影响。图中横坐标表示不同的评估指标这里仍然选取以上的6个检测指标,纵坐标表示检测结果的百分比值,图中不同的柱状条反映的是不同图神经网络在对应评估指标上的具体百分比值。为了控制其他因素对检测效果的影响,验证过程以CPG+为代码的中间表示输入,并只改变不同的图神经网络进行消融实验,这里选取图卷积网络Graph Convolutional Network(GCN)、门控图神经网络GGNN、图注意力网络Graph Attention Network(GAT)进行比较。如图4(a)和图4(b)所示,基于不同的图神经网络会有不同的漏洞检测效果,其中基于具有注意力机制的图神经网络在Big-Vul-VP和Big-Vul数据集上都表现出更好的效果。如图4(a)所示,在Big-Vul-VP数据集上,基于图注意力网络GAT的检测效果要优于使用图卷积网络GCN和门口图神经网络GGNN的方法。其F1值和Recall都高于93%,漏报率FNR和误报率FPR也都明显低于基于其他两种图神经网络的方法。如图4(b)所示,在样本不均衡的Big-Vul数据集上,基于图注意力网络GAT的检测效果仍然优于基于其他两种图神经网络的方法。基于GAT的方法的Accuracy和Precision都高于90%,相应的漏报率FNR和误报率FPR也都保持在较低的水平。综上可以知在学习节点特征表示过程中不同的图神经网络对检测效果的影响不同,在此过程中考虑节点不同邻居对其不同的影响,可以增强节点特征的漏洞相关的表征能力,进而可以提高漏洞检测的性能。
图5(a)和图5(b)反映的是在数据集Big-Vul-VP和数据集Big-Vul上将中间表示视为异质网络进行处理对检测效果的影响。图中横坐标表示不同的评估指标,纵坐标代表检测结果的百分比值,图中不同的柱状条反映的是基于不同代码中间结构和不同图神经网络在对应评估指标上的检测结果百分比值。同样地,为了控制其他因素的影响,这里选择AST+和CPG+两种中间表示,并结合图注意力网络或基于注意机制的异构处理中间表示图的网络来进行对比。如图5(a)和图5(b)所示,于仅结合注意力机制的方法相比,将代码中间表示图视为异质图进行处理在Big-Vul-VP和Big-Vul数据集上的检测效果更好。图5(a)显示在Big-Vul-VP数据集上,考虑中间表示的异质特性时,AST+和CPG+的都表现出更好检测效果,其Accuracy、Precision、Recall和F1值都优于不进行异质处理的方法,同时对应的漏报率FNR和误报率FPR都明显较低。基于代码中间表示CPG+并对其进行异构处理的方法的检测效果更好。如图5(b)所示,在Big-Vul数据集上,对中间表示AST+和CPG+进行异构处理的方法的检测效果仍然保持最好,将中间表示CPG+处理成异构图的方法可以获得更好的检测效果。因此基于以上分析,可以说明考虑代码中间表示图中不同类型的边传递的不同信息可以获得隐藏在代码中更细微的语义信息,从而可以增强获取的函数特征表示的表征能力,提升了漏洞检测的效果。
图6(a)和图6(b)展示的是HGVul与6种相关方法在Big-Vul-VP和Big-Vul数据集上漏洞检测效果。其中横坐标表示不同的方法,纵坐标表示检测结果的百分比值,图中不同的柱状条反映的是不同评测指标的具体百分比值。如图6(a)和图6(b)所示,在Big-Vul-VP和Big-Vul两个数据集上RATs和Flawfinder两种方法的性能都较差,其Recall和F1值明显很低。虽然这RATs和Flawfinder这两种方法的检测准确率Accuracy可以到达88%以上,但是他们的FNR和FPR都明显很高,在实际的检测过程中若FNR和FPR较高将会导致检测可行度较差,进而影响分析检测效果。其次,由于VUDDY是一种基于代码相似性来检测漏洞的方法,其构建的已知漏洞库可以检测出大量已经存在的漏洞,因此其FPR是7种方法种最低的,并且在Big-Vul-VP和Big-Vul两个数据集中都最低。但是正因为VUDDY固有的检测特性,使其识别漏洞的误报率在两个数据集中都最高。另外,与上述的2类方法对比,基于序列的方法由于结合了深度学习抽取复杂信息的能力而具有更好的检测性能,VulDeePecker和SVDLM的F1值在两个数据集上都有明显的提升,但是其FPR仍然较高,方法不能很好地平衡FNR和FPR。最后,基于代码中间表示图结构的检测方法Devign和HGVul的检测性能要明显优于其他方法,两种方法在两个数据集上的检测F1值都高于80%,HGVul的F1值在两个数据集上都是最好。并且,Devign和HGVul对FNR和FPR控制的更平衡,HGVul的漏报率FNR和误报率FPR在Big-Vul-VP数据集上都低于5%。以上可以看出由于HGVul可以从代码图形中间表示中捕获更细微的语法语义信息,因此HGVul相比于存在的方法具有更好的检测效果。
Claims (6)
1.一种基于代码异质中间图表示的漏洞检测方法,其特征在于,包括以下步骤:
步骤1:将程序源代码按照函数进行拆分,对于每一个函数抽取其代码的中间表示;所述中间表示通过具有结构化的信息的图形表示,称为中间表示图,为将函数代码的代码属性图和代码的编码顺序融合形成一种组合图,也即CPG+图;
步骤2:计算中间表示图中每个节点的词嵌入作为中间表示图中节点的初始特征属性:首先将中间表示图中每一个节点包含的多个代码片段,也即代码基本单元,进行分词处理;然后对每一个分词使用预训练的模型计算其词嵌入;最后融合每个节点包含的各代码基本单元的词嵌入,作为节点的词嵌入;
步骤3:对具有节点初始特征的中间表示图基于图中的邻居信息学习节点的特征表示:首先按照中间表示图中不同的边类型从中抽取不同的子图,然后在子图上使用图神经网络算法更新节点的特征表示,操作时结合注意力机制来更新节点的特征表示,以获取不同的邻居信息;
步骤4:读取函数代码中间表示图中的节点特征来生成函数的特征表示:首先融合上一步中各子图上节点的特征表示,对每个子图更新后的对应节点表示的每一维度计算其平均值,并将其作为融合后的节点特征表示;然后将融合后的完整中间表示图读取形成函数的特征表示;
步骤5:将学习到的函数特征表示作为输入使用多层全连接网络进行漏洞检测:首先将上一步中获取的函数对应的特征表示作为检测器的输入,然后经过由多层全连接层构建的检测进行检测,最后输入函数是否存在漏洞的检测结果。
2.根据权利要求1所述的基于代码异质中间图表示的漏洞检测方法,其特征在于,所述步骤2具体包括:
步骤21:使用词法分析器获取节点代码中的代码基本单元token;
步骤22:将token中的函数和变量名称映射到符号名称,实现分词处理,以防止其干扰节点的初始特征;
步骤23:使用预先训练好的word2vec模型来获取每个节点的初始词嵌入;对于节点代码中存在多个token的情况,计算多个token向量各维度的平均值,形成一个新的向量作为节点初始词嵌入;
步骤24:将每种节点类型编码为一个整数并将节点类型的编码和获得的节点嵌入连接起来作为节点的初始特征表示;对于获取了节点初始特征表示的函数中间表示,将其定义为f=g(y,E,M);其中,g(·)表示函数代码的中间表示结构,V代表中间表示图中的节点集合,E代表中间表示图中的边的集合,M代表中间表示图中节点的初始特征表示的集合。
3.根据权利要求1所述的基于代码异质中间图表示的漏洞检测方法,其特征在于,所述步骤3中节点特征表示学习包括:
步骤31:计算节点间相关性系数
将一个由多种边类型构建的代码中间表示图定义为g=∪r∈Rgr,其中R表示边类型的集合,r表示具体的边类型;在子图上首先计算节点间的相关性系数:
其中,表示在子图gr上节点i和j的之间的相关系数;W是共享参数,用于增加特征表示维度;表示节点i在子图gr上t时刻的特征表示;表示节点j在子图gr上t时刻的特征表示;[·||·]操作表示连接操作,a(·)表示将计算的特征向量映射到具体的值,Ni·r表示节点i在子图gr上的邻居。
步骤32:计算节点间注意力系数
节点间的注意力系数使用softmax函数获取,并由以下公式计算:
步骤33:利用注意力系数与对应的邻居节点特征做线性变换后进行加权求和来更新学习节点特征,且引入多头注意力机制来学习节点特征表示
4.根据权利要求1所述的基于代码异质中间图表示的漏洞检测方法,其特征在于,所述步骤4中函数特征表示生成策略包括:
步骤41:不同边类型子图对应节点特征表示融合
融合代码中间表示图多个子图对应节点的特征表示,由以下公式计算:
其中,h′i是节点i在多个子图融合后的特征表示,|R|表示中间表示图中的边类型的数量,也即是子图类型的数量;hi,r表示经过步骤3更新后的节点i的特征表示;
步骤42:代码中间表示图中节点聚合生成函数特征表示
基于代码中间表示图产生对应函数的特征表示H,由以下公式计算:
式中,对应函数的特征由节点对应维度的平均值获得,H表示中间表示图对应函数的特征表示,|V|表示中间表示图中存在节点的个数。
6.一种基于代码异质中间图表示的漏洞检测装置,其特征在于,包括代码中间表示抽取模块、节点特征初始化模块、节点表示学习模块、函数特征表示学习模块和函数漏洞检测模块;
所述代码中间表示抽取模块将程序源代码按照函数进行拆分,对于每一个函数抽取其代码的中间表示;所述中间表示通过具有结构化的信息的图形表示,称为中间表示图,为将函数代码的代码属性图CPG和代码的编码顺序NCS融合形成一种组合图,也即CPG+图;
所述节点特征初始化模块计算中间表示图中每个节点的词嵌入作为中间表示图中节点的初始特征属性;
所述节点表示学习模块对具有节点初始特征的中间表示图基于图中的邻居信息学习节点的特征表示;
所述函数特征表示学习模块读取函数代码中间表图中的节点特征来生成函数的特征表示;
所述将学习到的函数特征表示作为输入使用多层全连接网络进行漏洞检测。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111068306.7A CN113868650B (zh) | 2021-09-13 | 2021-09-13 | 基于代码异质中间图表示的漏洞检测方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111068306.7A CN113868650B (zh) | 2021-09-13 | 2021-09-13 | 基于代码异质中间图表示的漏洞检测方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113868650A true CN113868650A (zh) | 2021-12-31 |
CN113868650B CN113868650B (zh) | 2023-04-25 |
Family
ID=78995568
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111068306.7A Active CN113868650B (zh) | 2021-09-13 | 2021-09-13 | 基于代码异质中间图表示的漏洞检测方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113868650B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115879868A (zh) * | 2022-09-09 | 2023-03-31 | 南京审计大学 | 一种专家系统与深度学习相融合的智能合约安全审计方法 |
CN117195238A (zh) * | 2023-10-08 | 2023-12-08 | 北京远禾科技有限公司 | 一种异构图神经网络代码漏洞检测方法 |
CN118246033A (zh) * | 2024-05-28 | 2024-06-25 | 山东大学 | 跨平台代码异常漏洞检测方法、系统、设备、介质及产品 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1940951A (zh) * | 2005-09-22 | 2007-04-04 | 阿尔卡特公司 | 安全漏洞信息聚合 |
US20190171846A1 (en) * | 2017-12-04 | 2019-06-06 | ShiftLeft Inc | System and method for code-based protection of sensitive data |
US20200159934A1 (en) * | 2018-11-15 | 2020-05-21 | ShiftLeft Inc | System and method for information flow analysis of application code |
CN111259394A (zh) * | 2020-01-15 | 2020-06-09 | 中山大学 | 一种基于图神经网络的细粒度源代码漏洞检测方法 |
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
US20210056211A1 (en) * | 2019-08-23 | 2021-02-25 | Praetorian | System and method for automatically detecting a security vulnerability in a source code using a machine learning model |
CN112468487A (zh) * | 2020-11-25 | 2021-03-09 | 清华大学 | 实现模型训练的方法、装置、实现节点检测的方法及装置 |
CN112699377A (zh) * | 2020-12-30 | 2021-04-23 | 哈尔滨工业大学 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
CN113157385A (zh) * | 2021-02-08 | 2021-07-23 | 北京航空航天大学 | 一种基于图神经网络的智能合约漏洞自动化检测方法 |
-
2021
- 2021-09-13 CN CN202111068306.7A patent/CN113868650B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1940951A (zh) * | 2005-09-22 | 2007-04-04 | 阿尔卡特公司 | 安全漏洞信息聚合 |
US20190171846A1 (en) * | 2017-12-04 | 2019-06-06 | ShiftLeft Inc | System and method for code-based protection of sensitive data |
US20200159934A1 (en) * | 2018-11-15 | 2020-05-21 | ShiftLeft Inc | System and method for information flow analysis of application code |
US20210056211A1 (en) * | 2019-08-23 | 2021-02-25 | 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 | 中山大学 | 一种基于图神经网络的细粒度源代码漏洞检测方法 |
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN112468487A (zh) * | 2020-11-25 | 2021-03-09 | 清华大学 | 实现模型训练的方法、装置、实现节点检测的方法及装置 |
CN112699377A (zh) * | 2020-12-30 | 2021-04-23 | 哈尔滨工业大学 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
CN113157385A (zh) * | 2021-02-08 | 2021-07-23 | 北京航空航天大学 | 一种基于图神经网络的智能合约漏洞自动化检测方法 |
Non-Patent Citations (2)
Title |
---|
ZIHUA SONG等: "HGVul :A code vulnerability detection method based on heterogeneous source-level intermediate representation" * |
庄荣飞: "基于图网络的漏洞挖掘关键技术研究" * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115879868A (zh) * | 2022-09-09 | 2023-03-31 | 南京审计大学 | 一种专家系统与深度学习相融合的智能合约安全审计方法 |
CN117195238A (zh) * | 2023-10-08 | 2023-12-08 | 北京远禾科技有限公司 | 一种异构图神经网络代码漏洞检测方法 |
CN118246033A (zh) * | 2024-05-28 | 2024-06-25 | 山东大学 | 跨平台代码异常漏洞检测方法、系统、设备、介质及产品 |
Also Published As
Publication number | Publication date |
---|---|
CN113868650B (zh) | 2023-04-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Wang et al. | Review of android malware detection based on deep learning | |
CN113868650B (zh) | 基于代码异质中间图表示的漏洞检测方法与装置 | |
CN114077741B (zh) | 软件供应链安全检测方法和装置、电子设备及存储介质 | |
CN111259219B (zh) | 恶意网页识别模型建立方法、识别方法及系统 | |
CN111143838B (zh) | 数据库用户异常行为检测方法 | |
CN113010895B (zh) | 一种基于深度学习的漏洞危害评估方法 | |
CN108170467B (zh) | 约束限定聚类和信息度量软件胎记特征选择方法、计算机 | |
CN112733156A (zh) | 基于代码属性图的软件脆弱性智能检测方法、系统及介质 | |
CN113297580B (zh) | 基于代码语义分析的电力信息系统安全防护方法及装置 | |
CN114239083B (zh) | 一种基于图神经网络的高效状态寄存器识别方法 | |
CN113592103A (zh) | 一种基于集成学习和动态分析的软件恶意行为识别方法 | |
CN113326187A (zh) | 数据驱动的内存泄漏智能化检测方法及系统 | |
Sivasangari et al. | SQL injection attack detection using machine learning algorithm | |
CN117633811A (zh) | 一种多视角特征融合的代码漏洞检测方法 | |
Assefa et al. | Intelligent phishing website detection using deep learning | |
Zhdanov | Generation of static YARA-signatures using genetic algorithm | |
Yamany et al. | Ransomware clustering and classification using similarity matrix | |
Liu et al. | Enhancing Malware Detection for Android Apps: Detecting Fine-Granularity Malicious Components | |
CN117725592A (zh) | 一种基于有向图注意力网络的智能合约漏洞检测方法 | |
Visaggio et al. | A comparative study of adversarial attacks to malware detectors based on deep learning | |
KR102068507B1 (ko) | 기계 학습 모델의 신뢰도를 판단하기 위한 후처리 방법 및 이를 사용한 후처리 장치 | |
CN116662991A (zh) | 基于人工智能的智能合约意图检测方法 | |
Moon et al. | Evolved IoT malware detection using opcode category sequence through machine learning | |
Rozenberg et al. | A method for detecting unknown malicious executables | |
CN115545091A (zh) | 基于集成学习器的恶意程序api调用序列检测方法 |
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 |