CN115455438B - 一种程序切片漏洞检测方法、系统、计算机及存储介质 - Google Patents
一种程序切片漏洞检测方法、系统、计算机及存储介质 Download PDFInfo
- Publication number
- CN115455438B CN115455438B CN202211396035.2A CN202211396035A CN115455438B CN 115455438 B CN115455438 B CN 115455438B CN 202211396035 A CN202211396035 A CN 202211396035A CN 115455438 B CN115455438 B CN 115455438B
- Authority
- CN
- China
- Prior art keywords
- graph
- node
- data
- vector
- program
- 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)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种程序切片漏洞检测方法、系统、计算机及存储介质,程序切片漏洞检测方法,包括提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;将节点及图边进行数据化描述,以将图结构转化为图数据;将图数据区隔为训练集及测试集;基于训练集构建GGNAT图表征学习模型,GGNAT图表征学习模型用于漏洞检测。通过采用上述方法,有效地解决了传统图特征学习方法在图节点向量嵌入中对代码行级的结构特征和统计特征表征能力上不足的问题;能够高效地挖掘多维特征与漏洞之间的关联,相比传统的漏洞检测方法,显著提高检测的性能。
Description
技术领域
本申请涉及信息安全检测技术领域,特别是涉及一种程序切片漏洞检测方法、系统、计算机及存储介质。
背景技术
随着数字化、信息化、智能化技术的高速发展,利用程序漏洞盗取信息或发起网络攻击已成为信息安全的主要威胁,软件安全和信息安全愈发受到重视。为了减少程序漏洞的引入,人们提出了程序切片漏洞检测技术,它能帮助人们在设计、编码等工作中尽早地确定审查重心,并显著地减少漏洞的数量,从而降低软件研制和维护成本。
在程序漏洞分析中,程序切片是一种重要分析方法,通过数据流和控制流来分解程序,并删除程序中不重要语句,提取出影响程序点的程序代码,从而更关注程序中可能包含漏洞的部分。但是,由于产生程序漏洞的类型差异较大,如设计错误、编码不规范、测试不足等,如何更准确地检测这些复杂、隐秘且多样的程序漏洞仍是一个较大挑战。
近年来,深度学习方法在漏洞数据挖掘中显现出了强大的潜力,采用深度学习提升程序切片漏洞检测性能成为了一种趋势。图表征学习是深度学习技术的一种,该方法将图结构表征成低维、稠密的向量结构,实现图结构的深入分析。利用图表征学习方法进行程序切片漏洞检测是一种更为有效的新方法,然而当前图表征学习技术在进行程序切片图节点嵌入过程中采用Word2Vec或Code2Vec实现,强调从代码行的词汇构成的语言处理角度进行特征向量化,没有充分考虑代码行本身的深层结构特征,复杂语义结构难以被充分地体现在嵌入向量。与此同时,以传统图卷积网络、图神经网络为主的图表征学习方法在学习程序切片中深层的结构特征上仍有不足,漏洞检测的效率难以进一步提升。
发明内容
本申请实施例提供了一种程序切片漏洞检测方法、系统、计算机及存储介质,旨在强化图表征能力并提升程序切片漏洞检测性能,并以此为基础,有效地推动信息安全和漏洞检测技术的发展。
第一方面,本申请实施例提供了一种程序切片漏洞检测方法,其特征在于,包括以下步骤:
提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;
将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据;
将所述图数据区隔为训练集及测试集;
基于所述训练集构建GGNAT图表征学习模型,所述GGNAT图表征学习模型用于漏洞检测。
进一步地,所述将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据的步骤包括:
对所述节点进行节点嵌入,以将所述节点转化为节点数据;
将所述图边以邻接矩阵的形式进行存储,以将所述图边转化为图边数据;
组合所述节点数据及所述图边数据,以形成所述图数据。
进一步地,所述对所述节点进行节点嵌入,以将所述节点转化为节点数据的步骤具体为:
获取所述节点数据的包含代码,提取所述包含代码的节点属性特征,将所述节点属性特征映射到数值向量空间,以获取属性向量VAttribute;
将所述包含代码的代码段落进行向量表示,以获取段落向量VParagraph;
将所述包含代码的代码段落转换为AST数据结构树,聚合所述AST数据结构树的子树节点,将聚合后的所述子树节点映射至向量空间,以获取结构向量VAST;
拼接所述属性向量VAttribute、所述段落向量VParagraph及所述结构向量VAST,以形成所述节点数据。
进一步地,所述训练集于所述图数据中的占比为70%~80%。
进一步地,所述基于所述训练集构建GGNAT图表征学习模型,所述GGNAT图表征学习模型用于漏洞检测的步骤包括:
以门控图神经网络构建门控图循环层,将所述训练集作为所述门控图循环层的输入值,以获取节点状态;
以图注意力机制构建图注意层,将所述节点状态作为所述图注意层的输入值,以获取节点特征;
以最大池化与平均池化的组合池化法进行卷积运算,以构建池化层,将所述节点特征作为所述池化层的输入值,以获取全局表征向量;
以多层感知机构建预测层,将所述全局表征向量作为所述预测层的输入值,以获取所述GGNAT图表征学习模型。
进一步地,所述预测层包括多层感知机模型,所述多层感知机模型为:
进一步地,在所述基于所述训练集构建GGNAT图表征学习模型,所述GGNAT图表征学习模型用于漏洞检测的步骤之后,还包括:
将所述测试集代入所述GGNAT图表征学习模型,以检测所述GGNAT图表征学习模型的漏洞检测功能。
第二方面,本申请实施例提供了一种程序切片漏洞检测系统,用于所述程序切片漏洞检测方法,其特征在于,所述系统包括:
提取模块,用于提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;
转化模块,用于将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据;
分隔模块,用于将所述图数据区隔为训练集及测试集;
构建模块,用于基于所述训练集构建GGNAT图表征学习模型,所述GGNAT图表征学习模型用于漏洞检测。
第三方面,本申请实施例提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面所述的程序切片漏洞检测方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第一方面所述的程序切片漏洞检测方法。
相比于相关技术,本发明的有益效果在于:将所述程序切片用程序依赖图表征,并从属性、段落及AST结构三个不同特征维度分别对所述节点进行嵌入,通过拼接共同表征图节点,有效地解决了传统图特征学习方法在图节点向量嵌入中对代码行级的结构特征和统计特征表征能力上不足的问题;采用融合GGNN算法与图注意机制的所述GGNAT图表征学习模型进行图表征学习,能够高效地挖掘多维特征与漏洞之间的关联,相比传统的漏洞检测方法,本发明能显著提高检测的性能。
本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本发明第一实施例中程序切片漏洞检测方法的流程图;
图2为本发明第二实施例中程序切片漏洞检测方法的流程图;
图3为本发明第二实施例中程序切片漏洞检测方法中结构向量的获取流程图;
图4为本发明第二实施例中程序切片漏洞检测方法中以训练集构建GGNAT漏洞检测模型的过程图;
图5为本发明第三实施例中程序切片漏洞检测系统的结构框图。
如下具体实施方式将结合上述附图进一步说明本发明。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。基于本申请提供的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
显而易见地,下面描述中的附图仅仅是本申请的一些示例或实施例,对于本领域的普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图将本申请应用于其他类似情景。此外,还可以理解的是,虽然这种开发过程中所作出的努力可能是复杂并且冗长的,然而对于与本申请公开的内容相关的本领域的普通技术人员而言,在本申请揭露的技术内容的基础上进行的一些定义,制造或者生产等变更只是常规的技术手段,不应当理解为本申请公开的内容不充分。
在本申请中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域普通技术人员显式地和隐式地理解的是,本申请所描述的实施例在不冲突的情况下,可以与其它实施例相结合。
除非另作定义,本申请所涉及的技术术语或者科学术语应当为本申请所属技术领域内具有一般技能的人士所理解的通常意义。本申请所涉及的“一”、“一个”、“一种”、“该”等类似词语并不表示数量限制,可表示单数或复数。本申请所涉及的术语“包括”、“包含”、“具有”以及它们任何变形,意图在于覆盖不排他的包含;例如包含了一系列步骤或模块(单元)的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可以还包括没有列出的步骤或单元,或可以还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。本申请所涉及的“连接”、“相连”、“耦接”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电气的连接,不管是直接的还是间接的。本申请所涉及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。本申请所涉及的术语“第一”、“第二”、“第三”等仅仅是区别类似的对象,不代表针对对象的特定排序。
本申请中的所述程序切片漏洞检测方法的对象为程序切片,在应用前,需将源代码进行程序切片提取,并根据源代码的漏洞状态进行程序切片漏洞标记。
请参阅图1,本发明第一实施例提供的程序切片漏洞检测方法。所述方法包括步骤S10至步骤S40:
步骤S10:提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;
获得程序切片的程序依赖图,所述程序依赖图包括控制依赖图和数据依赖图,所述控制依赖图和所述数据依赖图为由节点和图边构成的有向图。所述节点(对应程序切片一行代码)的存储格式为[节点ID,节点类型,包含代码,位置,是否控制流/数据流节点],所述节点的类型包含函数、函数调用、定义、标识符、if语句、wile循环、赋值、参数、组合语句、等式判断、符号标记;所述图边的存储格式为[起始节点ID,结束节点ID,边的类型], 所述图边的类型包括控制流类型和数据流类型。
步骤S20:将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据;
对所述节点进行嵌入,将所述节点从属性、段落、AST结构三个特征维度进行嵌入,分别转化为对应的数值化特征向量,之后进行拼接,组合成完整的图数据。图数据用G=<N,E>表示,N表示节点数据,E表示图边数据。
步骤S30:将所述图数据区隔为训练集及测试集;
所述训练集于所述图数据中的占比为:70%~80%,所述测试集于所述图数据中的占比为:20%~30%,可以理解地,所述训练集及所述测试集蕴含所述图数据内的全部数据。
步骤S40:基于所述训练集构建GGNAT图表征学习模型,所述GGNAT图表征学习模型用于漏洞检测;
构建带图注意力机制的门控图神经网络(GatedGraphNeuralNetworkwithGraphAttention, GGNAT) 作为图表征学习模型,对所述训练集进行特征挖掘,捕获特征向量与漏洞标签的内在关联。
通过采用融合GGNN算法与图注意机制的所述GGNAT图表征学习模型进行图表征学习,能够高效地挖掘多维特征与漏洞之间的关联,相比传统的漏洞检测方法,能显著提高检测的性能。
请参阅图2,本发明第二实施例提供的程序切片漏洞检测方法,所述方法包括以下步骤:
步骤S100:提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;
对程序切片进行图结构提取,将程序切片的代码文本转化CSV格式的图结构表示的信息。使用开源工具Joern解析源程序,获得源程序对应AST的节点文件Node.csv与边文件Edge.csv。所有的节点信息保存在Node.csv中,边的信保存在Edge.csv中。根据CWE程序切片所包含的代码行,从Edge.csv中的数据流和控制流信息筛选与切片相关的边,在Node.csv中根据筛选的边找到相关的节点,构成程序切片的图结构信息。
步骤S110:对所述节点进行节点嵌入,以将所述节点转化为节点数据;
具体地,包括步骤S111:获取所述节点数据的包含代码,提取所述包含代码的节点属性特征,将所述节点属性特征映射到数值向量空间,以获取属性向量VAttribute;
步骤S112:将所述包含代码的代码段落进行向量表示,以获取段落向量VParagraph;
步骤S113:将所述包含代码的代码段落转换为AST数据结构树,聚合所述AST数据结构树的子树节点,将聚合后的所述子树节点映射至向量空间,以获取结构向量VAST;
步骤S114:拼接所述属性向量VAttribute、所述段落向量VParagraph及所述结构向量VAST,以形成所述节点数据。
将所述程序切片对应的图结构中的节点实行嵌入操作。打开所述程序切片对应的节点的CSV文件,找到CSV文件中“包含代码”,采用分词技术对“包含代码”进行词汇分解,分别从属性、段落、AST结构三个特征维度进行属性特征向量化。
采用统计度量的方式对所述包含代码进行属性提取,针对所述节点设计12个属性,作为所述节点的属性特征,具体属性如下表所述:
节点的属性特征中大部分为数值数据,节点类型采用onehot进行统一编码,图深度更加代码的循环嵌套深度判断,将节点类型映射到数值向量空间,数值化后的12个属性采用向量的方式存储,收集12个属性数据获取所述属性向量VAttribute。
通过段落嵌入方式,对所述包含代码中的代码段落进行向量表示,采用两个主要步骤符号化与Doc2Vec,符号化将源程序包含的变量名词汇规范化为统一的符号形式,使用Doc2Vec技术进行向量化,具体地,首先进行符号化,将包含的变量名词汇规范化为统一的符号形式。对于自定义的变量名,使用VAR_number来表示,对于自定义的函数名使用FUN_number来表示,number用变量名和函数名在代码中出现的先后来计数表示。之后使用Doc2Vec技术进行向量空间映射,本实施例中设置向量大小为100维,即每个所述节点的代码段落通过一个包含100组特征的段落向量表示,即获取段落向量VParagraph。
将所述包含代码的代码段落转换为AST数据结构树,AST嵌入过程如图3所示,通过对所述AST数据结构树自底向上传播信息,逐步实现子树节点的聚合,利用iTBCNN算法实现整个AST到向量空间的映射。本实施例中设置AST向量大小为100维,即每个所述节点的AST数据结构树通过一个包含100组结构特征的AST向量表示,以获取结构向量VAST。
具体地,将其代码段落转换为相应的抽象语法树(AbstractSyntaxTree, AST),AST存储结构为一个有向图,AST中节点数据结构为[类型,信息],AST节点的“类型”参数为函数、操作符、关键字、函数等,“信息”参数包含原始文本信息(如if、while、case关键字,函数名、变量名、常量56, 12等单个token)。利用这些信息对节点进行嵌入。“类型”参数使用one-hot编码进行嵌入,“信息”参数使用word2vec进行嵌入,二者拼接之后经过一个线性层嵌入向量。进一步,使用一种改进的基于树的卷积神经网络编码技术(ImproveTreeBasedConvolutionalNeuralNetwork,iTBCNN)对包含初始嵌入向量的AST结构信息进行二次编码,采用卷积滑动窗口自AST底向上滑动,实现子树节点的信息聚合,卷积滑动窗口内的子树视为二叉树,节点的权重矩阵由表示top、left、right的权重矩阵Wt,Wl,Wr以及偏差D的加权求和得到。因此对于有K个节点的卷积窗口,其输出Out定义为:
经过卷积层之后,使用注意力聚合AST节点信息进行编码。通过注意权重将AST所
有节点特征映射为一个表示整个AST的特征向量。随机初始化一个全局注意力向量,
会随着模型学习过程不断更新。对于AST的节点集合,对应的注意权
重由节点的特征向量与全局注意力向量计算内积然后归一化得到:
对CSV文件所有的所述节点重复上述实施过程,完成一个程序切片对应CSV文件的三类属性特征提取,将三类特征向量进行拼接,组成一个212维的节点向量VGraphnode,VGraphnode=VAttribute+VParagraph+VAST。所述212维的节点向量即为所述节点数据。
步骤S120:将所述图边以邻接矩阵的形式进行存储,以将所述图边转化为图边数据;
步骤S130:组合所述节点数据及所述图边数据,以形成所述图数据。
将有向图中图边通过邻接矩阵进行存储。有向图的表包含起始节点和结束节点,邻接矩阵中行表示起始节点位置,列表示结束节点位置,起始节点到结束节点有边存在,则矩阵向量中对应位置为1,否则为0。所述程序依赖图包含所述控制依赖图和所述数据依赖图,根据图边的类型分别创建控制依赖邻接矩阵及控制依赖邻接矩阵,以获取图边数据。所述节点数据及所述图边数据共同组成所述图数据。
步骤S140:将所述图数据区隔为训练集及测试集;
步骤S150:以门控图神经网络构建门控图循环层,将所述训练集作为所述门控图循环层的输入值,以获取节点状态;
请参阅图4,使用DGL深度学习库提供的门控图循环神经网络APIGatedGraphConvu作为门控图循环层,设置参数in_feats以及out_feats为所述212维的节点向量,num_steps为8,n_etypes为2,将所述训练集,即将70%~80%的所述图数据作为APIGatedGraphConvu的输入,输出为所述节点的初始向量信息更新后的所述212维的节点向量,即为所述节点状态。
通过所述门控图循环层对所述节点的信息进行传播,所述节点的信息通过将所述
节点的自身的信息与相邻的所述节点的信息进行聚合获得。所述程序切片对应图为G(V,X,
A),V为节点集合,数量为n,为顶点的初始特征向量,A为不同类型的边的邻接矩
阵集合。在门控图循环层,节点的初始隐状态,假设总共经过T时间步长
完成训练,则在第t≤T个时间步内,对节点v根据不同类型的边进行信息聚合,对结果求和
得到v的新的状态:
,其中,为第
一个节点第t-1个时间步的隐状态,为最后一个节点第t-1个时间步的隐状态,
表示节点的总数,为需要学习的权重矩阵,k为边的类型总数,Ap为边的类型
为p的邻接矩阵,T表示对矩阵进行转置,b为偏差bais。然后使用门控循环单元计算v的隐状
态:
,其中GRU为门控循环单元,使用门控机制对,的信息进行筛选。
表示第t ≤ T个时间步任意一个节点v的隐状态,由它的前一个时间步的隐状态和
新得到的状态信息经门控循环单元进行信息筛选得到,当经过T时间步长完成训练后,
隐状态(T表示最后一个时间步)就作为节点v经过门控图循环层得到的特征向量。
步骤S160:以图注意力机制构建图注意层,将所述节点状态作为所述图注意层的输入值,以获取节点特征;
使用DGL深度学习库提供的图注意力网络APIGATConv作为图注意力层,设置参数in_feats以及out_feats为所述212维的节点向量,num_heads为3,feat_drop为0.5,atten_drop为0.2。所述图注意力层采用多头注意力机制,对多个注意力的结果取均值作为所述图注意力层的输出。所述门控图循环层的输出的所述节点状态即为所述图注意层的输入,所述图注意力层的输出为强化表达后的212维的节点向量,即所述节点特征。
所述图注意力层采用一种基于空间域的图神经网络架构,通过某一顶点通过注意力机制对相邻的所述节点特征进行加权来更新自己的特征。对于输入的所述节点状态向量集合,首先为节点的相邻节点分配注意力,注意力相关系数:
对于采用多头注意力机制的图注意力层,最终输出结果取均值,因此所述节点特征:
其中,aij k表示第k阶的注意力机制的注意力系数归一化的结果,Wk表示第k阶的注
意力机制的权值矩阵,Ni表示节点i的相邻节点集合,表示节点i的相邻节点j由门控图
循环层计算得到的状态向量, SigMoid为激活函数,avg表示对结果求平均值,表示节点
i经过图注意力层计算之后的状态向量。
步骤S170:以最大池化与平均池化的组合池化法进行卷积运算,以构建池化层,将所述节点特征作为所述池化层的输入值,以获取全局表征向量;
使用PyTorch提供的APIConv1d卷积运算、APIMaxPool1d池化运输和AvgPool1d池化运输构建池化层。卷积层数设置为2,第一层卷积中设置Conv1d的参数in_channels和out_channels为424,核数量为3,设置MaxPool1d和AvgPool1d的参数核大小为3,步长为3。第二层卷积中设置Conv1d的参数in_channels为424,out_channels为1,设置MaxPool1d和AvgPool1d的参数核数量为2,步长为2。
结合了Maxpool和Avgpool两种池化的组合池化方法进行卷积运算,分别定义两种池化运算
式中Conv(·)为卷积运算,Elu为激活函数,MAXPOOL负责筛选卷积窗口内的重要
特征,AVGPOOL对卷积窗口内的特征求均值以保留原始信息。池化层的输入为所述节点的初
始特征xi与经过所述门控循环层和所述图注意力层得到的所述节点特征,
步骤S180:以多层感知机构建预测层,将所述全局表征向量作为所述预测层的输入值,以获取所述GGNAT图表征学习模型;
使用PyTorch提供的线性层APILinear构建多层感知机,使用Linear分别创建MLP和mlp_h, mlp_h设置参数in_features为所述212维的节点向量,out_features为1,MLP设置参数in_features为424,out_features为1。
使用PyTorch提供APISigMoid来计算最终的预测结果,对所述池化层的输出分别经过MLP和MLP_H后的结果求均值,得到的均值在经过SigMoid计算预测结果。
可以理解地,所述预测层包括多层感知机模型,所述训练集经过所述门控图循环层、所述图注意层及所述池化层后,形成所述全局表征向量,所述全局表征向量经过多层感知机模型后的输出即为所述GGNAT图表征学习模型,所述多层感知机模型为:
,分别进行线性变换,然后计算点积,并对结果求均值,最后通过SigMoid函数得到预测结果。
步骤S190:将所述测试集代入所述GGNAT图表征学习模型,以检测所述GGNAT图表征学习模型的漏洞检测功能;
在本实施例中,所述GGNAT图表征学习模型被视为一个黑盒漏洞检测方式,对采用多特征图数据输入的所述GGNAT图表征学习模型命名为MulfGGNAT。在所述训练集通过所述门控图循环层、所述图注意层、所述池化层及所述预测层,经所述多层感知机模型输出为所述GGNAT图表征学习模型后,将所述测试集,即将剩余20%~30%的所述图数据代入所述GGNAT图表征学习模型,以检验所述GGNAT图表征学习模型的漏洞检测效率。
本实施例中,以信息安全领域中开源的软件保证参考数据集提供的程序切片集为对象,选择其中六种最为常见的程序漏洞类型作为本实施例的分析对象,如下表所示:
为了衡量本发明的漏洞检测性能表现,选择基于token的CNN方法、BI-LSTM方法,基于程序依赖图的GCN方法与GGNN方法作为本实施例的比较对象,比较结果如下表。
可以看出,本申请的程序切片漏洞检测方法相比传统的基于深度学习的漏洞检测方法在准确率和F值上有明显提升。从平均值来看,比其他方法中最好的GCN方法其准确率提升约2.2%,F值提升约7.1%。
将所述程序切片用程序依赖图表征,并从属性、段落及AST结构三个不同特征维度分别对所述节点进行嵌入,通过拼接共同表征图节点,有效地解决了传统图特征学习方法在图节点向量嵌入中对代码行级的结构特征和统计特征表征能力上不足的问题;采用融合GGNN算法与图注意机制的所述GGNAT图表征学习模型进行图表征学习,能够高效地挖掘多维特征与漏洞之间的关联,相比传统的漏洞检测方法,本发明能显著提高检测的性能。
请参阅图5,本发明第三实施例提供了一种程序切片漏洞检测系统,该系统应用于所述程序切片漏洞检测方法,并实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”、“单元”、“子单元”等可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
所述系统包括:
提取模块10,用于提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;
转化模块20,用于将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据;
优选地,所述转化模块20包括:
嵌入单元,用于对所述节点进行节点嵌入,以将所述节点转化为节点数据;
所述嵌入单元具体用于获取所述节点数据的包含代码,提取所述包含代码的节点属性特征,将所述节点属性特征映射到数值向量空间,以获取属性向量VAttribute;
将所述包含代码的代码段落进行向量表示,以获取段落向量VParagraph;
将所述包含代码的代码段落转换为AST数据结构树,聚合所述AST数据结构树的子树节点,将聚合后的所述子树节点映射至向量空间,以获取结构向量VAST;
拼接所述属性向量VAttribute、所述段落向量VParagraph及所述结构向量VAST,以形成所述节点数据。
存储单元,用于将所述图边以邻接矩阵的形式进行存储,以将所述图边转化为图边数据。
组合单元,用于组合所述节点数据及所述图边数据,以形成所述图数据
分隔模块30,用于将所述图数据区隔为训练集及测试集;
构建模块40,用于基于所述训练集构建GGNAT图表征学习模型,所述GGNAT图表征学习模型用于漏洞检测。
所述构建模块40包括:
第一构建单元,用于以门控图神经网络构建门控图循环层,将所述训练集作为所述门控图循环层的输入值,以获取节点状态;
第二构建单元,用于以图注意力机制构建图注意层,将所述节点状态作为所述图注意层的输入值,以获取节点特征;
第三构建单元,用于以最大池化与平均池化的组合池化法进行卷积运算,以构建池化层,将所述节点特征作为所述池化层的输入值,以获取全局表征向量;
第四构建单元,用于以多层感知机构建预测层,将所述全局表征向量作为所述预测层的输入值,以形成所述GGNAT图表征学习模型;
测试模块50,用于将所述测试集代入所述GGNAT图表征学习模型,以检测所述GGNAT图表征学习模型的漏洞检测功能。
本发明还提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述技术方案中所述的程序切片漏洞检测方法。
本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述技术方案中所述的程序切片漏洞检测方法。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (9)
1.一种程序切片漏洞检测方法,其特征在于,包括以下步骤:
提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;
将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据;
将所述图数据区隔为训练集及测试集;
基于所述训练集构建GGNAT图表征学习模型,所述GGNAT图表征学习模型用于漏洞检测;
所述基于所述训练集构建GGNAT图表征学习模型,所述GGNAT图表征学习模型用于漏洞检测的步骤包括:
以门控图神经网络构建门控图循环层,将所述训练集作为所述门控图循环层的输入值,以获取节点状态;
以图注意力机制构建图注意层,将所述节点状态作为所述图注意层的输入值,以获取节点特征;
以最大池化与平均池化的组合池化法进行卷积运算,以构建池化层,将所述节点特征作为所述池化层的输入值,以获取全局表征向量;
以多层感知机构建预测层,将所述全局表征向量作为所述预测层的输入值,以获取所述GGNAT图表征学习模型。
2.根据权利要求1所述的程序切片漏洞检测方法,其特征在于,所述将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据的步骤包括:
对所述节点进行节点嵌入,以将所述节点转化为节点数据;
将所述图边以邻接矩阵的形式进行存储,以将所述图边转化为图边数据;
组合所述节点数据及所述图边数据,以形成所述图数据。
3.根据权利要求2所述的程序切片漏洞检测方法,其特征在于,所述对所述节点进行节点嵌入,以将所述节点转化为节点数据的步骤具体为:
获取所述节点数据的包含代码,提取所述包含代码的节点属性特征,将所述节点属性特征映射到数值向量空间,以获取属性向量VAttribute;
将所述包含代码的代码段落进行向量表示,以获取段落向量VParagraph;
将所述包含代码的代码段落转换为AST数据结构树,聚合所述AST数据结构树的子树节点,将聚合后的所述子树节点映射至向量空间,以获取结构向量VAST;
拼接所述属性向量VAttribute、所述段落向量VParagraph及所述结构向量VAST,以形成所述节点数据。
4.根据权利要求1所述的程序切片漏洞检测方法,其特征在于,所述训练集于所述图数据中的占比为70%~80%。
6.根据权利要求1所述的程序切片漏洞检测方法,其特征在于,在所述基于所述训练集构建GGNAT图表征学习模型,所述GGNAT图表征学习模型用于漏洞检测的步骤之后,还包括:
将所述测试集代入所述GGNAT图表征学习模型,以检测所述GGNAT图表征学习模型的漏洞检测功能。
7.一种程序切片漏洞检测系统,其特征在于,所述系统包括:
提取模块,用于提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;
转化模块,用于将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据;
分隔模块,用于将所述图数据区隔为训练集及测试集;
构建模块,用于基于所述训练集构建GGNAT图表征学习模型,所述GGNAT图表征学习模型用于漏洞检测;
所述构建模块包括:
第一构建单元,用于以门控图神经网络构建门控图循环层,将所述训练集作为所述门控图循环层的输入值,以获取节点状态;
第二构建单元,用于以图注意力机制构建图注意层,将所述节点状态作为所述图注意层的输入值,以获取节点特征;
第三构建单元,用于以最大池化与平均池化的组合池化法进行卷积运算,以构建池化层,将所述节点特征作为所述池化层的输入值,以获取全局表征向量;
第四构建单元,用于以多层感知机构建预测层,将所述全局表征向量作为所述预测层的输入值,以形成所述GGNAT图表征学习模型。
8.一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6中任一项所述的程序切片漏洞检测方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至6中任一项所述的程序切片漏洞检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211396035.2A CN115455438B (zh) | 2022-11-09 | 2022-11-09 | 一种程序切片漏洞检测方法、系统、计算机及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211396035.2A CN115455438B (zh) | 2022-11-09 | 2022-11-09 | 一种程序切片漏洞检测方法、系统、计算机及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115455438A CN115455438A (zh) | 2022-12-09 |
CN115455438B true CN115455438B (zh) | 2023-02-07 |
Family
ID=84311021
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211396035.2A Active CN115455438B (zh) | 2022-11-09 | 2022-11-09 | 一种程序切片漏洞检测方法、系统、计算机及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115455438B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116781327B (zh) * | 2023-05-24 | 2024-01-16 | 中国科学院信息工程研究所 | 自动化密码应用安全漏洞挖掘方法、装置、介质及设备 |
CN118484814B (zh) * | 2024-07-16 | 2024-10-11 | 西安电子科技大学 | 一种切片级特征驱动的软件漏洞精准检测方法 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109977205A (zh) * | 2019-03-08 | 2019-07-05 | 中南大学 | 一种计算机自主学习源代码的方法 |
CN111400560A (zh) * | 2020-03-10 | 2020-07-10 | 支付宝(杭州)信息技术有限公司 | 一种基于异构图神经网络模型进行预测的方法和系统 |
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN111931181A (zh) * | 2020-07-07 | 2020-11-13 | 北京理工大学 | 基于图挖掘的软件逻辑漏洞检测方法 |
CN112699377A (zh) * | 2020-12-30 | 2021-04-23 | 哈尔滨工业大学 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
CN113221127A (zh) * | 2021-07-07 | 2021-08-06 | 鹏城实验室 | 程序的漏洞检测方法、装置、终端设备以及存储介质 |
CN113220884A (zh) * | 2021-05-19 | 2021-08-06 | 西北工业大学 | 基于双滑动窗口的图神经网络文本情感分类方法 |
CN113254648A (zh) * | 2021-06-22 | 2021-08-13 | 暨南大学 | 一种基于多层次图池化的文本情感分析方法 |
CN113742205A (zh) * | 2020-05-27 | 2021-12-03 | 南京大学 | 一种基于人机协同的代码漏洞智能检测方法 |
CN114238100A (zh) * | 2021-12-10 | 2022-03-25 | 国家电网有限公司客户服务中心 | 基于GGNN和分层注意力网络的Java漏洞检测定位方法 |
CN114942879A (zh) * | 2022-03-31 | 2022-08-26 | 天桐(苏州)网络科技有限公司 | 一种基于图神经网络的源代码漏洞检测与定位方法 |
CN115185736A (zh) * | 2022-09-09 | 2022-10-14 | 南京航空航天大学 | 基于图卷积神经网络的微服务调用链异常检测方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017181286A1 (en) * | 2016-04-22 | 2017-10-26 | Lin Tan | Method for determining defects and vulnerabilities in software code |
US10699700B2 (en) * | 2018-07-31 | 2020-06-30 | Tencent Technology (Shenzhen) Company Limited | Monaural multi-talker speech recognition with attention mechanism and gated convolutional networks |
US20210279338A1 (en) * | 2020-03-04 | 2021-09-09 | The George Washington University | Graph-based source code vulnerability detection system |
US12045843B2 (en) * | 2020-10-09 | 2024-07-23 | Jpmorgan Chase Bank , N.A. | Systems and methods for tracking data shared with third parties using artificial intelligence-machine learning |
-
2022
- 2022-11-09 CN CN202211396035.2A patent/CN115455438B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109977205A (zh) * | 2019-03-08 | 2019-07-05 | 中南大学 | 一种计算机自主学习源代码的方法 |
CN111400560A (zh) * | 2020-03-10 | 2020-07-10 | 支付宝(杭州)信息技术有限公司 | 一种基于异构图神经网络模型进行预测的方法和系统 |
CN113742205A (zh) * | 2020-05-27 | 2021-12-03 | 南京大学 | 一种基于人机协同的代码漏洞智能检测方法 |
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN111931181A (zh) * | 2020-07-07 | 2020-11-13 | 北京理工大学 | 基于图挖掘的软件逻辑漏洞检测方法 |
CN112699377A (zh) * | 2020-12-30 | 2021-04-23 | 哈尔滨工业大学 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
CN113220884A (zh) * | 2021-05-19 | 2021-08-06 | 西北工业大学 | 基于双滑动窗口的图神经网络文本情感分类方法 |
CN113254648A (zh) * | 2021-06-22 | 2021-08-13 | 暨南大学 | 一种基于多层次图池化的文本情感分析方法 |
CN113221127A (zh) * | 2021-07-07 | 2021-08-06 | 鹏城实验室 | 程序的漏洞检测方法、装置、终端设备以及存储介质 |
CN114238100A (zh) * | 2021-12-10 | 2022-03-25 | 国家电网有限公司客户服务中心 | 基于GGNN和分层注意力网络的Java漏洞检测定位方法 |
CN114942879A (zh) * | 2022-03-31 | 2022-08-26 | 天桐(苏州)网络科技有限公司 | 一种基于图神经网络的源代码漏洞检测与定位方法 |
CN115185736A (zh) * | 2022-09-09 | 2022-10-14 | 南京航空航天大学 | 基于图卷积神经网络的微服务调用链异常检测方法及装置 |
Non-Patent Citations (4)
Title |
---|
Adversarial Attack Against DoS Intrusion Detection: An Improved Boundary-Based Method;Xiao Peng;《2019 IEEE 31st International Conference on Tools with Artificial Intelligence (ICTAI)》;20200213;全文 * |
Representation vs. Model: What Matters Most for Source Code Vulnerability Detection;Wei Zheng;《2021 IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER)》;20210511;全文 * |
基于图结构源代码切片的智能化漏洞检测系统;邹德清;《网络与信息安全学报》;20211216;第1-8页 * |
基于门控图注意力神经网络的程序分类;谭丁武等;《计算机工程与应用》(第07期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115455438A (zh) | 2022-12-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115455438B (zh) | 一种程序切片漏洞检测方法、系统、计算机及存储介质 | |
CN108304911B (zh) | 基于记忆神经网络的知识抽取方法以及系统和设备 | |
CN109408389B (zh) | 一种基于深度学习的代码缺陷检测方法及装置 | |
CN107516041B (zh) | 基于深度神经网络的WebShell检测方法及其系统 | |
US20210232376A1 (en) | Vectorized representation method of software source code | |
CN107506793B (zh) | 基于弱标注图像的服装识别方法及系统 | |
CN111783100A (zh) | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 | |
CN112487812B (zh) | 一种基于边界识别的嵌套实体识别方法及系统 | |
CN103064941B (zh) | 图像检索方法和装置 | |
CN111600919B (zh) | 智能网络应用防护系统模型的构建方法和装置 | |
CN113343901A (zh) | 基于多尺度注意力图卷积网络的人体行为识别方法 | |
CN110751072B (zh) | 基于知识嵌入图卷积网络的双人交互识别方法 | |
CN115146279A (zh) | 程序漏洞检测方法、终端设备及存储介质 | |
CN113868650B (zh) | 基于代码异质中间图表示的漏洞检测方法与装置 | |
Bewley et al. | Hierarchical classification in AUV imagery | |
CN112214623A (zh) | 一种面向图文样本的高效监督图嵌入跨媒体哈希检索方法 | |
CN103942214B (zh) | 基于多模态矩阵填充的自然图像分类方法及装置 | |
CN110110120B (zh) | 一种基于深度学习的图像检索方法和装置 | |
CN108805280A (zh) | 一种图像检索的方法和装置 | |
CN109543114A (zh) | 异构信息网络链接预测方法、可读存储介质和终端 | |
CN116881471B (zh) | 一种基于知识图谱的大语言模型微调方法及装置 | |
CN115906863B (zh) | 基于对比学习的情感分析方法、装置、设备以及存储介质 | |
CN107426580A (zh) | 基于朱刘法和蚁群法的群体图像编码结构生成方法 | |
CN116796288A (zh) | 一种面向工业文档的多模态信息提炼方法和系统 | |
CN115586996A (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 |