CN112733156B - 基于代码属性图的软件脆弱性智能检测方法、系统及介质 - Google Patents
基于代码属性图的软件脆弱性智能检测方法、系统及介质 Download PDFInfo
- Publication number
- CN112733156B CN112733156B CN202110130315.8A CN202110130315A CN112733156B CN 112733156 B CN112733156 B CN 112733156B CN 202110130315 A CN202110130315 A CN 202110130315A CN 112733156 B CN112733156 B CN 112733156B
- Authority
- CN
- China
- Prior art keywords
- vector
- code
- sequence
- vulnerability
- 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.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 66
- 239000013598 vector Substances 0.000 claims abstract description 321
- 238000000034 method Methods 0.000 claims abstract description 48
- 230000006870 function Effects 0.000 claims description 50
- 238000013507 mapping Methods 0.000 claims description 47
- 238000012549 training Methods 0.000 claims description 35
- 238000011176 pooling Methods 0.000 claims description 21
- 238000010801 machine learning Methods 0.000 claims description 17
- 238000006243 chemical reaction Methods 0.000 claims description 12
- 238000007781 pre-processing Methods 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 9
- 238000006467 substitution reaction Methods 0.000 claims description 9
- 238000004422 calculation algorithm Methods 0.000 claims description 8
- 238000007637 random forest analysis Methods 0.000 claims description 7
- 230000011218 segmentation Effects 0.000 claims description 6
- 230000000694 effects Effects 0.000 abstract description 12
- 238000012545 processing Methods 0.000 abstract description 3
- 239000010410 layer Substances 0.000 description 27
- 238000004458 analytical method Methods 0.000 description 16
- 238000010586 diagram Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 8
- 230000008901 benefit Effects 0.000 description 7
- 239000000284 extract Substances 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000012512 characterization method Methods 0.000 description 3
- 230000007547 defect Effects 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000008439 repair process Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000002547 anomalous effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 239000002355 dual-layer Substances 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000009225 memory damage Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/004—Artificial life, i.e. computing arrangements simulating life
- G06N3/006—Artificial life, i.e. computing arrangements simulating life based on simulated virtual individual or collective life forms, e.g. social simulations or particle swarm optimisation [PSO]
-
- 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
- G06N3/044—Recurrent networks, e.g. Hopfield networks
-
- 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
- G06N3/045—Combinations of networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computational Linguistics (AREA)
- Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于代码属性图的软件脆弱性智能检测方法、系统及介质,方法包括为被检测的代码样本生成代码属性图并提取出抽象语法树序列、控制流图序列和程序依赖图序列,将得到的各种序列分别通过预先训练好的向量映射器转换为数值型向量,再通过对应的预先训练好的特征提取器提取特征向量,然后将提取得到的三种特征向量合并成代码样本的特征向量;将代码样本的特征向利用预先训练好的脆弱性检测器得到代码样本为脆弱性代码的概率,若该概率超过预设阈值则判定该代码样本为脆弱性代码。本发明的处理方式能够保留源代码较多的语法和语义等信息,可提高面向跨软件源代码混合的真实数据集的脆弱性检测效果,降低误报率和漏报率。
Description
技术领域
本发明涉及计算机程序检测、以及软件脆弱性检测检测技术领域,具体涉及一种基于代码属性图的软件脆弱性智能检测方法、系统及介质。
背景技术
软件脆弱性是指软件在其生命周期(即开发、部署、执行整个过程)中存在的缺陷,这些缺陷可被不法分子利用,如绕过系统的访问控制、非法窃取较高的权限等,往往造成用户隐私数据泄露、数字资产被盗、系统信息被更改等安全问题,从而导致企业和个人巨大的经济损失和名誉损失。随着现在软件系统的复杂度越来越高,规模越来越大,脆弱性代码出现的频率也在不断提升。根据美国国家漏洞数据库(National Vulnerability Database,NVD)公布数据显示,2017年公布的脆弱性代码数目为14645个,2018年公布的脆弱性代码数目为16511个,2019年公布的脆弱性代码数目为17305个。随着计算机技术的发展,脆弱性代码出现的频率也在不断上升,因此及时发现软件中存在的脆弱性代码是一份十分重要的工作。
目前检测软件脆弱性的方法主要有静态、动态和混合三大类。静态方法包括基于规则的分析、代码相似性检测(即代码克隆检测)和符号执行等方法。其中,基于规则的分析主要依靠专家人工去发现脆弱性代码中的脆弱性代码中的规则,并用脆弱性代码的规则对源代码进行匹配;代码相似性检测是将源代码与脆弱性代码进行相似度比较,进而发现脆弱性;符号执行是将输入用符号来表征而不是具体值,将程序的执行过程和程序变量表征成符号表达式。静态分析技术主要依靠对源代码的分析,往往难以发现在运行时发生的错误和脆弱性,并且存在误报率高的缺点。与静态方法不同,动态方法是通过实际运行软件来寻找脆弱性,因此可以发现软件运行时的错误。动态方法包括模糊测试和污点分析等方法。模糊测试主要是通过向目标系统提供非预期的输入并监视异常结果来发现软件脆弱性的方法;污点分析主要是通过实时监控程序的污点数据在系统程序中的传播来检测数据能否从污点源传播到污点汇聚点,进而检测软件中的脆弱性。动态测试方法通常十分耗时并且缺乏完整性,容易出现漏报的现象。混合方法结合了静态和动态分析技术,克服了部分缺点,但混合方法难以全部实现自动化检测,并且对未知脆弱性的检测效果相对较弱。
目前,软件规模越来越庞大和复杂,脆弱性形式也更趋向多样化,传统的软件脆弱性检测方法在处理复杂且多样化的脆弱性方面存在着困难。与传统的软件脆弱性检测方法相比,基于机器学习的方法可以从海量数据中发现和学习规律,具有可自动寻找脆弱性的特点,减少了人工参与度,提高了检测的自动化程度。基于机器学习的软件脆弱性检测方法能通过学习已有的脆弱性代码特征检测出类似或未知脆弱性。与基于规则的分析方法相比,无需人工进行规则的提取,降低了人的主观性对于误报率和漏报率的影响等优势;代码相似性分析方法检测未知脆弱性的能力有限,机器学习算法具有自动学习脆弱性代码的特点,在检测未知脆弱性方面有一定优势;与符号执行相比,无需分析程序的执行过程以构建执行路径,可检测的脆弱性类型更具有一般性;与动态方法相比,无需运行软件,只需分析软件源代码,降低了对运行环境配置要求等优势。因此,机器学习方法和工具被研究者们应用到软件脆弱性检测领域,并提出了很多十分有效的算法。但是,机器学习方法应用到软件脆弱性领域,具体如何选择有效的检测特征、如何选择有效的及其学习模型以提高检测的效果,则仍然是一项亟待解决的关键技术问题。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种基于代码属性图的软件脆弱性智能检测方法、系统及介质,本发明针对现在脆弱性检测方法对于对跨软件的真实数据集的脆弱性检测效果较弱、误报率和漏报率较高等问题,通过先将源代码函数表征成代码属性图,再从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列的方式,以减少源代码表征过程中语义和语法信息的损失、保留更多代码特征信息,然后通过机器学习的方法从序列中提取出特征向量,最后将特征向量作为脆弱性检测模型的输入对源代码进行脆弱性检测,通过这种方式可保留源代码较多的语法和语义等信息,可提高面向跨软件源代码混合的真实数据集的脆弱性检测效果,降低误报率和漏报率。
为了解决上述技术问题,本发明采用的技术方案为:
一种基于代码属性图的软件脆弱性智能检测方法,包括:
1)基于待检测的代码样本生成代码属性图,所述代码样本为一个函数;
2)从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列;
3)将抽象语法树序列、控制流图序列和程序依赖图序列分别通过预先训练好的向量映射器转换为数值型向量,得到抽象语法树向量、控制流图向量和程序依赖图向量;
4)将抽象语法树向量、控制流图向量和程序依赖图向量分别通过对应的预先训练好的特征提取器提取特征向量,然后将提取得到的三种特征向量合并成代码样本的特征向量;
5)将代码样本的特征向利用预先训练好的脆弱性检测器得到代码样本为脆弱性代码的概率,若该概率超过预设阈值则判定该代码样本为脆弱性代码。
可选地,步骤1)之前还包括对待检测的代码样本进行预处理的步骤,所述预处理包括:针对所有的参数将名称按照出现的顺序替换为第一指定符号加顺序编号的形式,针对所有的变量将名称按照出现的顺序替换为第二指定符号加顺序编号的形式,针对所有的字符串常量,将名称替换为第三指定符号。
可选地,步骤3)中预先训练好的向量映射器由分词器Tokenizer和词向量转换模型Word2Vec构成,输入是文本型向量,输出为N1*N2维的数值型向量,用于将文本型向量转换成机器学习算法可识别的N1*N2维向量,其中N1为词向量转换模型Word2Vec训练得到的单个映射向量的长度,N2为单个代码样本的文本型向量的长度。
可选地,步骤3)之前包括训练向量映射器的步骤:
A1)从预设的脆弱性代码数据集中提取代码样本,生成代码属性图,并从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列,生成的抽象语法树序列、控制流图序列和程序依赖图序列中的所有元素组成一个语料库;
A2)利用语料库对分词器Tokenizer进行训练得到词典D1,在词典D1中每个在语料库中出现过的词Token都有唯一对应的索引号;
A3)利用语料库对词向量转换模型Word2Vec进行训练,词向量转换模型Word2Vec根据每个词Token在语料库中出现的频次生成词Token的映射集V1,语料库中出现次数超过阈值的每个词Token在映射集V1中有唯一的长度为N1的向量表示;
步骤3)将抽象语法树序列、控制流图序列和程序依赖图序列分别通过预先训练好的向量映射器转换为数值型向量的步骤包括:
将抽象语法树序列先通过词典D1转化由序列中的每个Token对应的索引号构成的数值型向量V2,当V2长度大于N2时,在向量末端截断,当V2长度小于N2时,在向量末端补0,使所有的向量长度全部为N2;由于索引号是整数,存在大小关系,而抽象语法树序列本身的每个Token是没有大小关系的因此再通过映射集V1,将数值型向量V2中的每个Token用映射集中Token对应的长度为N1的向量替换,当映射集V1中不存在当前Token的映射时,用长度为N1的零向量替换,得到N1*N2维的数值型向量V3;
将控制流图序列先通过词典D1转化由序列中的每个Token对应的索引号构成的数值型向量V2,当V2长度大于N2时,在向量末端截断,当V2长度小于N2时,在向量末端补0,使所有的向量长度全部为N2;由于索引号是整数,存在大小关系,而控制流图序列本身的每个Token是没有大小关系的因此再通过映射集V1,将数值型向量V2中的每个Token用映射集中Token对应的长度为N1的向量替换,当映射集V1中不存在当前Token的映射时,用长度为N1的零向量替换,得到N1*N2维的数值型向量V3;
将程序依赖图序列先通过词典D1转化由序列中的每个Token对应的索引号构成的数值型向量V2,当V2长度大于N2时,在向量末端截断,当V2长度小于N2时,在向量末端补0,使所有的向量长度全部为N2;由于索引号是整数,存在大小关系,而程序依赖图序列本身的每个Token是没有大小关系的因此再通过映射集V1,将数值型向量V2中的每个Token用映射集中Token对应的长度为N1的向量替换,当映射集V1中不存在当前Token的映射时,用长度为N1的零向量替换,得到N1*N2维的数值型向量V3。
可选地,步骤4)中对应的预先训练好的特征提取器由双层LSTM和多个池化层构成的模型,所述双层LSTM用于提取向量中的语法和语义信息、并将多维向量转化成一维向量以提取函数的特征,所述多个池化层用于保留主要特征并减少参数,且各个特征提取器的输入是N1*N2维的数值型向量,输出是提取得到的一维特征向量;
步骤4)之前还包括分别训练对应的特征提取器的步骤:
B1)根据脆弱性代码数据集的标注,分别对抽象语法树向量、控制流图向量和程序依赖图向量进行标记,如果向量是从脆弱性代码样本中生成的则标记标签为1,如果不是,则标记标签为0,分别得到带标签的抽象语法树向量数据集、控制流图向量数据集和程序依赖图向量数据集;
B2)利用带标签的抽象语法树向量数据集、控制流图向量数据集和程序依赖图向量数据集,分别对抽象语法树序列、控制流图序列和程序依赖图序列对应的特征提取器进行训练,并根据数据的规模选择指定的一个池化层的输出作为该特征提取器的输出,最终分别完成对抽象语法树序列、控制流图序列和程序依赖图序列对应的特征提取器的训练。
可选地,步骤4)中将提取得到的三种特征向量合并成代码样本的特征向量是指将将提取得到的三种位数相同的一维特征向量,按照抽象语法树向量、控制流图向量和程序依赖图向量的顺序拼接得到代码样本的特征向量。
可选地,步骤5)中预先训练好的脆弱性检测器为随机森林模型,且所述随机森林模型输入为代码样本的特征向量,输出代码样本的特征向量代码样本为脆弱性代码的概率;步骤5)之前还包括预先训练脆弱性检测器的步骤:通过从脆弱性代码数据集得到的带标签的代码样本的特征向量,对脆弱性检测器进行训练,且在完成训练后得到预先训练好的脆弱性检测器。
可选地,步骤1)中待检测的代码样本为待检测源代码中的一个函数,且步骤5)中判定该代码样本为脆弱性代码后,还包括输出代码样本在待检测源代码中的位置信息的步骤。
此外,本发明还提供一种基于代码属性图的软件脆弱性智能检测系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述基于代码属性图的软件脆弱性智能检测方法的步骤。
此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有被编程或配置以执行所述基于代码属性图的软件脆弱性智能检测方法的计算机程序。
和现有技术相比,本发明具有下述优点:
1、本发明采用函数作为被检测的代码样本,可降低漏报率和误报率。依据分析对象,基于机器学习的软件脆弱性检测方法可以分为基于二进制文件和基于源代码两类。基于二进制文件的脆弱性检测方法可以用来检测内存损坏类型的漏洞,但二进制代码缺乏上层代码的结构信息和类型信息等,很难与上层代码建立对应关系,分析难度很大,因此基于二进制的代码的脆弱性检测方法较少。源代码与二进制代码相比,具有信息丰富、易理解的优势,因此大部分基于机器学习的脆弱性检测方法是以源代码作为分析对象的。根据算法输入单位的不同,目前基于源代码的方法又可以分为文件级、代码段级和函数级等。文件级的漏洞检测存在着无法精确定位漏洞的位置和漏洞漏报率高的问题。而代码段级的漏洞检测由于缺少完整的语法关系,很难得到代码的语法结构信息,只能在依赖源代码的文本信息进行漏洞检测,但这会导致较高的漏报率和误报率。与文件级和代码段级相比,函数级具有易划分和语法结构信息较为完整的优势。
2、为了将函数转化成机器学习算法能够识别的输入形式,需要对源代码进行表征。在基于机器学习的函数级软件脆弱性检测方法中,代码表征方式主要是将源代码表征成文本、抽象语法树、控制流图、代码属性图等方式。目前,将代码表征成代码属性图的方法主要通过从中提取抽象语法树和直接表征成图的方式来提取代码特征,提取抽象语法树的方式会损失较多代码特征信息,而直接表示成图的方式会导致预处理的时间过长。本发明提取代码属性图作为代码表征方式,再从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列的方式,以减少源代码表征过程中语义和语法信息的损失、保留更多代码特征信息,然后通过机器学习的方法从序列中提取出特征向量,最后将特征向量作为脆弱性检测模型的输入对源代码进行脆弱性检测,通过这种方式可保留源代码较多的语法和语义等信息,可提高面向跨软件的真实数据集的脆弱性检测效果,降低误报率和漏报率。
附图说明
图1为本发明实施例方法的基本流程示意图。
图2为本发明实施例中的序列提取流程示意图。
图3为本发明实施例中对代码样本进行预处理的基本流程示意图。
图4为本发明实施例中的训练及应用流程示意图。
图5为本发明实施例中的软件脆弱性代码数据集的构建流程示意图。
图6为本发明实施例中的训练流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例对本发明进行进一步详细说明。
如图1所示,本实施例基于代码属性图的软件脆弱性智能检测方法包括:
1)基于待检测的代码样本生成代码属性图,所述代码样本为一个函数;
2)从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列;
3)将抽象语法树序列、控制流图序列和程序依赖图序列分别通过预先训练好的向量映射器转换为数值型向量,得到抽象语法树向量、控制流图向量和程序依赖图向量;
4)将抽象语法树向量、控制流图向量和程序依赖图向量分别通过对应的预先训练好的特征提取器提取特征向量,然后将提取得到的三种特征向量合并成代码样本的特征向量;
5)将代码样本的特征向利用预先训练好的脆弱性检测器得到代码样本为脆弱性代码的概率,若该概率超过预设阈值则判定该代码样本为脆弱性代码。
本实施例基于代码属性图的软件脆弱性智能检测方法针对现有通过机器学习算法进行脆弱性检测技术对于跨软件的真实数据集的脆弱性检测方法的误报率和漏报率较高等问题,本实施例基于代码属性图的软件脆弱性智能检测方法通过先将源代码函数表征成代码属性图,再从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列的方式,以减少源代码表征过程中语义和语法信息的损失、保留更多代码特征信息,然后通过机器学习的方法从序列中提取出特征向量,最后将特征向量作为脆弱性检测模型的输入对源代码进行脆弱性检测,通过这种方式可保留源代码较多的语法和语义等信息,可提高面向跨软件的真实数据集的脆弱性检测效果,降低误报率和漏报率。
代码属性图是一种结合了抽象语法树,控制流图和程序依赖图的属性的联合数据结构;一段代码的代码属性图是通过将这段代码对应的抽象语法树、控制流图和程序依赖图表示为属性图的形式,然后进行合并得到的;属性图本质上是一个有向多重图,图中每个节点都包含有属性、属性对应的值以及代码,节点之间通过带标签的有向边连接,并且由一些方法(function)将属性和标签赋给每个节点和边。如图2所示,提取代码属性图及其抽象语法树序列、控制流图序列和程序依赖图序列的步骤包括:S1)从脆弱性代码数据集或者待检测软件源码中提取代码样本,每个代码样本就是一个函数;S2)对代码样本的代码进行解析,按照代码属性图的生成规则,生成代码样本的代码属性图;S3)通过深度遍历或者广度遍历的方式从代码属性图中得到代码样本的抽象语法树序列、控制流图序列和程序依赖图序列,三种序列是由代码属性图节点中节点类型和节点代码按一定顺序构成的文本型向量,在提取序列时,需要通过词法分析将节点代码转化成Token集合然后再加入序列中,序列中的每个元素都是无法再通过词法分析做分割的Token,;代码属性图(CPG)是由Yamaguchi等人设计的一种用于增量和分布式代码分析的可扩展且与语言无关的表示形式。代码属性图本质是一个边带有标记的有向多重图,整合了抽象语法树(AST)、控制流图(CFG)和程序依赖图(PDG)三种表示形式,综合了各表示形式的优点,能够鲁棒地解析代码,并针对多种代码特征设计了高效的遍历方式,可以有效用于识别如缓冲区溢出、整数溢出和内存泄漏等常见脆弱性。由于本实施例方法中仅仅涉及基本的代码属性图(CPG)及其生成规则的应用,并不包含对代码属性图(CPG)方法的改进,故代码属性图(CPG)的具体实现细节在此不再展开说明。本实施例可利用第三方工具将直接从软件源代码中生成代码属性图,避免了代码编译的问题;通过从代码属性图中提取抽象语法树序列、控制流图序列和程序依赖图序列,保留了多方面的代码特征,减少了代码语法和语义信息方面的损失。
如图3所示,步骤1)之前还包括对待检测的代码样本进行预处理的步骤,预处理包括:针对所有的参数将名称按照出现的顺序替换为第一指定符号(本实施例中为p)加顺序编号的形式,针对所有的变量将名称按照出现的顺序替换为第二指定符号(本实施例中为x)加顺序编号的形式,针对所有的字符串常量,将名称替换为第三指定符号(本实施例中为str)。参见图3,本实施例中对所有源代码进行参数重命名,将所有的参数根据出现的顺序替换成p1,p2等形式;对脆弱性代码数据集中的所有源代码进行变量重命名,将所有的变量根据出现的顺序替换成x1,x2等形式;对脆弱性代码数据集中的所有源代码进行字符串常量替换,将源代码中的所有字符串常量替换成str。
图4所示为本实施例中向量映射器、特征提取器和脆弱性检测器的训练以及使用流程图,其通用流程包括:1)基于公共脆弱性数据库提供的信息定位脆弱性代码段,针对脆弱性的函数进行标记,形成脆弱性代码数据集;2)对脆弱性代码数据集和待检测软件源代码进行变量重命名、字符串常量替换、参数名替换等预处理操作;3)从脆弱性代码数据集生成代码属性图并从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列;4)通过带标签的脆弱性代码数据集对向量映射器、特征提取器和脆弱性检测器进行训练;5)将从待检测软件源代码生成的序列通过向量映射器转换成数值型向量,然后再通过特征提取器提取特征,最后通过脆弱性检测器检测代码是否为脆弱性代码,输出结果。
参见图4,本实施例步骤1)中待检测的代码样本为待检测源代码中的一个函数,且步骤5)中判定该代码样本为脆弱性代码后,还包括输出代码样本在待检测源代码中的位置信息的步骤。
本实施例中,将脆弱性代码段包含的一个或多个函数称为脆弱函数,源码库中的函数为待测函数。将公共脆弱性数据库中的脆弱性代码,根据是否提供了对应的修复补丁进行分类,按指定方法定位脆弱性代码所在文件和代码段,以函数为单位提取涉及到的完整代码,构建软件脆弱性代码数据集。
如图5所示,本实施例中构建软件脆弱性代码数据集的步骤包括:S1)获取公共脆弱性数据库(如CVE等)中收集的脆弱性代码信息(包含高危的脆弱性信息和普通的脆弱性代码信息);需要说明的是,软件的脆弱性是指由软件缺陷的客观存在所形成的一个可以被攻击者利用的实例,脆弱性代码是指与脆弱性的产生直接相关的代码,在本实施例中具体是以函数为单位的代码段;S2)针对每一个脆弱性代码:判断公共脆弱性数据库是否提供了该脆弱性代码的补丁文件,如果公共脆弱性数据库提供了补丁文件,则直接通过补丁文件内的信息定位脆弱性代码涉及的文件和代码段;如果公共脆弱性数据库没有提供补丁文件,则根据公共脆弱性数据库对脆弱性的描述获取其所在软件被修复的版本号,通过比对修复前后两个软件版本之间的差别,定位到脆弱性涉及到的文件和代码段;S3)以函数为单位提取涉及到的完整代码,构建代码样本集合记为软件脆弱性代码数据集,且代码样本集合中的一个代码样本包含零个或一个与该脆弱性相关的脆弱性代码段,每个代码段就是一个函数。本实施例中,软件脆弱性代码数据集以函数为单位、以代码文件的形式保存。
本实施例中,步骤3)中预先训练好的向量映射器由分词器Tokenizer和词向量转换模型Word2Vec构成,输入是文本型向量,输出为N1*N2维的数值型向量,用于将文本型向量转换成机器学习算法可识别的N1*N2维向量,其中N1为词向量转换模型Word2Vec训练得到的单个映射向量的长度,N2为单个代码样本的文本型向量的长度。
本实施例中,N1和N2的值可根据三种序列向量的长度和Token的数量进行设置,其中N1为Word2vec模型训练得到的单个映射向量的长度每个文本形式的词Token对应一个长度为N1的数值型映射向量。N2为单个代码样本的文本型向量的长度,即每个样本包含多少个词Token,为了规范输入。N1通过语料库中不重复词token的数目确定,默认为100,范围为100-400。N2通过所有样本的文本型向量的长度确定,至少95%的代码样本的文本型向量的长度小于N2。
如图4和图6所示,本实施例中步骤3)之前包括训练向量映射器的步骤:
A1)从预设的脆弱性代码数据集中提取代码样本,生成代码属性图,并从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列,生成的抽象语法树序列、控制流图序列和程序依赖图序列中的所有元素组成一个语料库;
A2)利用语料库对分词器Tokenizer进行训练得到词典D1,在词典D1中每个在语料库中出现过的词Token都有唯一对应的索引号;
A3)利用语料库对词向量转换模型Word2Vec进行训练,词向量转换模型Word2Vec根据每个词Token在语料库中出现的频次生成词Token的映射集V1,语料库中出现次数超过阈值的每个词Token在映射集V1中有唯一的长度为N1的向量表示;
通过向量映射器将抽象语法树序列转换成数值型的向量,记为抽象语法树向量,每个抽象语法树序列都可转化成一个N1*N2维的数值型向量。通过向量映射器将控制流图序列转换成数值型的向量,记为控制流图向量,每个控制流图序列都可转化成一个N1*N2维的数值型向量。通过向量映射器将程序依赖图序列转换成数值型的向量,记为程序依赖图向量,每个程序依赖图序列都可转化成一个N1*N2维的数值型向量。如图4和图6所示,步骤3)将抽象语法树序列、控制流图序列和程序依赖图序列分别通过预先训练好的向量映射器转换为数值型向量的步骤包括:
将抽象语法树序列先通过词典D1转化由序列中的每个Token对应的索引号构成的数值型向量V2,当V2长度大于N2时,在向量末端截断,当V2长度小于N2时,在向量末端补0,使所有的向量长度全部为N2;由于索引号是整数,存在大小关系,而抽象语法树序列本身的每个Token是没有大小关系的因此再通过映射集V1,将数值型向量V2中的每个Token用映射集中Token对应的长度为N1的向量替换,当映射集V1中不存在当前Token的映射时,用长度为N1的零向量替换,得到N1*N2维的数值型向量V3;
将控制流图序列先通过词典D1转化由序列中的每个Token对应的索引号构成的数值型向量V2,当V2长度大于N2时,在向量末端截断,当V2长度小于N2时,在向量末端补0,使所有的向量长度全部为N2;由于索引号是整数,存在大小关系,而控制流图序列本身的每个Token是没有大小关系的因此再通过映射集V1,将数值型向量V2中的每个Token用映射集中Token对应的长度为N1的向量替换,当映射集V1中不存在当前Token的映射时,用长度为N1的零向量替换,得到N1*N2维的数值型向量V3;
将程序依赖图序列先通过词典D1转化由序列中的每个Token对应的索引号构成的数值型向量V2,当V2长度大于N2时,在向量末端截断,当V2长度小于N2时,在向量末端补0,使所有的向量长度全部为N2;由于索引号是整数,存在大小关系,而程序依赖图序列本身的每个Token是没有大小关系的因此再通过映射集V1,将数值型向量V2中的每个Token用映射集中Token对应的长度为N1的向量替换,当映射集V1中不存在当前Token的映射时,用长度为N1的零向量替换,得到N1*N2维的数值型向量V3。
本实施例中,步骤4)中对应的预先训练好的特征提取器由双层LSTM和多个池化层构成的模型,所述双层LSTM用于提取向量中的语法和语义信息、并将多维向量转化成一维向量以提取函数的特征,所述多个池化层用于保留主要特征并减少参数,且各个特征提取器的输入是N1*N2维的数值型向量,输出是提取得到的一维特征向量。利用双层LSTM加池化层的方式构建特征提取器,通过不同的特征提取器分别从抽象语法树向量,控制流图向量和程序依赖图向量中提取特征向量,然后组成函数的特征向量,保留源代码较多的语法和语义等信息,提高了面向跨软件的真实数据集的脆弱性检测效果,降低误报率和漏报率。
如图4和图6所示,步骤4)之前还包括分别训练对应的特征提取器的步骤:
B1)根据脆弱性代码数据集的标注,分别对抽象语法树向量、控制流图向量和程序依赖图向量进行标记,如果向量是从脆弱性代码样本中生成的则标记标签为1,如果不是,则标记标签为0,分别得到带标签的抽象语法树向量数据集、控制流图向量数据集和程序依赖图向量数据集;
B2)利用带标签的抽象语法树向量数据集、控制流图向量数据集和程序依赖图向量数据集,分别对抽象语法树序列、控制流图序列和程序依赖图序列对应的特征提取器进行训练,并根据数据的规模选择指定的一个池化层的输出作为该特征提取器的输出,最终分别完成对抽象语法树序列、控制流图序列和程序依赖图序列对应的特征提取器的训练。
利用带标签的抽象语法树向量数据集对抽象语法树特征提取器进行训练,抽象语法树特征提取器的输入是N1*N2维的数值型向量,输出是一维的抽象语法树特征向量,抽象语法树特征提取器的作用是提取特征,将多维的输入转化成一维的特征向量。可选地,详细步骤包括:S1)利用带标签的抽象语法树向量训练由双层LSTM和多个池化层构成的模型,双层LSTM的作用是提取向量中的语法和语义信息,并将多维向量转化成一维向量,提取函数的特征,而池化层的作用是保留主要特征的同时并减少参数,提高模型泛化能力;S2)获取其中一个池化层的输出,作为特征提取器的输出,可根据数据的规模选择不同池化层的输出作为特征提取器的输出。利用带标签的控制流图向量数据集对控制流图特征提取器进行训练,控制流图特征提取器的输入是N1*N2维的数值型向量,输出是一维的控制流图特征向量,控制流图特征提取器的作用是提取特征,将多维的输入转化成一维的特征向量。可选地,详细步骤包括:S1)利用带标签的控制流图向量训练由双层LSTM和多个池化层构成的模型,双层LSTM的作用是提取向量中的语法和语义信息,并将多维向量转化成一维向量,提取函数的特征,而池化层的作用是保留主要特征的同时并减少参数,提高模型泛化能力;S)获取其中一个池化层的输出,作为特征提取器的输出,可根据数据的规模选择不同池化层的输出作为特征提取器的输出;利用带标签的程序依赖图向量数据集对程序依赖图特征提取器进行训练,程序依赖图特征提取器的输入是N1*N2维的数值型向量,输出是一维的程序依赖图特征向量,程序依赖图特征提取器的作用是提取特征,将多维的输入转化成一维的特征向量。可选地,详细步骤包括:S1)利用带标签的程序依赖图向量训练由双层LSTM和多个池化层构成的模型,双层LSTM的作用是提取向量中的语法和语义信息,并将多维向量转化成一维向量,提取函数的特征,而池化层的作用是保留主要特征的同时并减少参数,提高模型泛化能力;S2)获取其中一个池化层的输出,作为特征提取器的输出,可根据数据的规模选择不同池化层的输出作为特征提取器的输出。
本实施例中,步骤4)中将提取得到的三种特征向量合并成代码样本的特征向量是指将将提取得到的三种位数相同的一维特征向量,按照抽象语法树向量、控制流图向量和程序依赖图向量的顺序拼接得到代码样本的特征向量。根据数据规模选定特征提取器输出特征向量的位数,抽象语法树特征提取器、控制流图特征提取器和程序依赖图特征提取器输出的特征向量位数保持一致;通过抽象语法树特征提取器、控制流图特征提取器和程序依赖图特征提取器将抽象语法树向量,控制流图向量和程序依赖图向量转化成一维特征向量;将从抽象语法树特征提取器、控制流图特征提取器和程序依赖图特征提取器得到的特征向量按照抽象语法树特征向量、控制流图特征向量、程序依赖图特征向量的顺序拼接成函数的特征向量。
本实施例中,步骤5)中预先训练好的脆弱性检测器为随机森林模型,且所述随机森林模型输入为代码样本的特征向量,输出代码样本的特征向量代码样本为脆弱性代码的概率;步骤5)之前还包括预先训练脆弱性检测器的步骤:通过从脆弱性代码数据集得到的带标签的代码样本的特征向量,对脆弱性检测器进行训练,且在完成训练后得到预先训练好的脆弱性检测器。利用抽象语法树向量、控制流图向量和程序依赖图向量的标签对函数的特征向量进行标记,如果从脆弱性代码生成的特征向量则标记为“1”,如果不是,则标记为“0”;利用带标签的特征向量对脆弱性检测器进行训练,脆弱性检测器由随机森林模型构成,输入函数的特征向量,可以输出函数特征向量是脆弱性代码的概率。
本实施例中,步骤5)的详细步骤包括:5.1)利用向量映射器分别将抽象语法树序列、控制流图序列和程序依赖图序列转换成数值型的向量,分别记为抽象语法树向量、控制流图向量和程序依赖图向量;5.2)通过抽象语法树特征提取器、控制流图特征提取器和程序依赖图特征提取器分别将抽象语法树向量,控制流图向量和程序依赖图向量转化成一维特征向量;5.3)将从抽象语法树特征提取器、控制流图特征提取器和程序依赖图特征提取器得到的特征向量拼接成函数的特征向量;5.4)将特征向量作为脆弱性检测器的输入进行脆弱性检测,并输出当前的待测函数为脆弱性代码的概率;5.5)当概率大于预设阈值,则认为当前的待测函数是脆弱代码段,输出当前待测函数的位置信息。
综上所述,本实施例基于代码属性图的软件脆弱性检测方法首先针对软件源码这一分析对象,基于公共脆弱性数据库提取软件相关脆弱性代码段,并基于获取的软件脆弱性代码段集合,构建软件脆弱性代码数据集;对脆弱性代码数据集和待检测软件源代码进行预处理;从脆弱性代码数据集和待检测软件源代码中生成代码属性图并从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列;通过带标签的脆弱性代码数据集对向量映射器、特征提取器和脆弱性检测器进行训练;将从待检测软件源代码生成的序列通过向量映射器转换成数值型向量,然后再通过特征提取器提取特征,最后通过脆弱性检测器检测代码是否为脆弱性代码,输出结果。本实施例针对现在脆弱性检测方法对于对跨软件的真实数据集的脆弱性检测效果较弱、误报率和漏报率较高等问题,通过先将源代码函数表征成代码属性图,再从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列的方式,以减少源代码表征过程中语义和语法信息的损失、保留更多代码特征信息,然后通过机器学习的方法从序列中提取出特征向量,最后将特征向量作为脆弱性检测模型的输入对源代码进行脆弱性检测,通过这种方式可保留源代码较多的语法和语义等信息,可提高面向跨软件源代码混合的真实数据集的脆弱性检测效果,降低误报率和漏报率。
此外,本实施例还提供一种基于代码属性图的软件脆弱性智能检测系统,包括相互连接的微处理器和存储器,该微处理器被编程或配置以执行前述基于代码属性图的软件脆弱性智能检测方法的步骤。
此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行前述基于代码属性图的软件脆弱性智能检测方法的计算机程序。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (9)
1.一种基于代码属性图的软件脆弱性智能检测方法,其特征在于,包括:
1)基于待检测的代码样本生成代码属性图,所述代码样本为一个函数;
2)从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列;
3)将抽象语法树序列、控制流图序列和程序依赖图序列分别通过预先训练好的向量映射器转换为数值型向量,得到抽象语法树向量、控制流图向量和程序依赖图向量;所述预先训练好的向量映射器由分词器Tokenizer和词向量转换模型Word2Vec构成,输入是文本型向量,输出为N1*N2维的数值型向量,用于将文本型向量转换成机器学习算法可识别的N1*N2维向量,其中N1为词向量转换模型Word2Vec训练得到的单个映射向量的长度,N2为单个代码样本的文本型向量的长度;
4)将抽象语法树向量、控制流图向量和程序依赖图向量分别通过对应的预先训练好的特征提取器提取特征向量,然后将提取得到的三种特征向量合并成代码样本的特征向量;所述预先训练好的特征提取器由双层LSTM和多个池化层构成的模型,所述双层LSTM用于提取向量中的语法和语义信息、并将多维向量转化成一维向量以提取函数的特征,所述多个池化层用于保留主要特征并减少参数,且各个特征提取器的输入是N1*N2维的数值型向量,输出是提取得到的一维特征向量;
5)将代码样本的特征向利用预先训练好的脆弱性检测器得到代码样本为脆弱性代码的概率,若该概率超过预设阈值则判定该代码样本为脆弱性代码。
2.根据权利要求1所述的基于代码属性图的软件脆弱性智能检测方法,其特征在于,步骤1)之前还包括对待检测的代码样本进行预处理的步骤,所述预处理包括:针对所有的参数将名称按照出现的顺序替换为第一指定符号加顺序编号的形式,针对所有的变量将名称按照出现的顺序替换为第二指定符号加顺序编号的形式,针对所有的字符串常量,将名称替换为第三指定符号。
3.根据权利要求1所述的基于代码属性图的软件脆弱性智能检测方法,其特征在于,步骤3)之前包括训练向量映射器的步骤:
A1)从预设的脆弱性代码数据集中提取代码样本,生成代码属性图,并从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列,生成的抽象语法树序列、控制流图序列和程序依赖图序列中的所有元素组成一个语料库;
A2)利用语料库对分词器Tokenizer进行训练得到词典D1,在词典D1中每个在语料库中出现过的词Token都有唯一对应的索引号;
A3)利用语料库对词向量转换模型Word2Vec进行训练,词向量转换模型Word2Vec根据每个词Token在语料库中出现的频次生成词Token的映射集V1,语料库中出现次数超过阈值的每个词Token在映射集V1中有唯一的长度为N1的向量表示;
步骤3)将抽象语法树序列、控制流图序列和程序依赖图序列分别通过预先训练好的向量映射器转换为数值型向量的步骤包括:
将抽象语法树序列先通过词典D1转化由序列中的每个Token对应的索引号构成的数值型向量V2,当V2长度大于N2时,在向量末端截断,当V2长度小于N2时,在向量末端补0,使所有的向量长度全部为N2;由于索引号是整数,存在大小关系,而抽象语法树序列本身的每个Token是没有大小关系的因此再通过映射集V1,将数值型向量V2中的每个Token用映射集中Token对应的长度为N1的向量替换,当映射集V1中不存在当前Token的映射时,用长度为N1的零向量替换,得到N1*N2维的数值型向量V3;
将控制流图序列先通过词典D1转化由序列中的每个Token对应的索引号构成的数值型向量V2,当V2长度大于N2时,在向量末端截断,当V2长度小于N2时,在向量末端补0,使所有的向量长度全部为N2;由于索引号是整数,存在大小关系,而控制流图序列本身的每个Token是没有大小关系的因此再通过映射集V1,将数值型向量V2中的每个Token用映射集中Token对应的长度为N1的向量替换,当映射集V1中不存在当前Token的映射时,用长度为N1的零向量替换,得到N1*N2维的数值型向量V3;
将程序依赖图序列先通过词典D1转化由序列中的每个Token对应的索引号构成的数值型向量V2,当V2长度大于N2时,在向量末端截断,当V2长度小于N2时,在向量末端补0,使所有的向量长度全部为N2;由于索引号是整数,存在大小关系,而程序依赖图序列本身的每个Token是没有大小关系的因此再通过映射集V1,将数值型向量V2中的每个Token用映射集中Token对应的长度为N1的向量替换,当映射集V1中不存在当前Token的映射时,用长度为N1的零向量替换,得到N1*N2维的数值型向量V3。
4. 根据权利要求3所述的基于代码属性图的软件脆弱性智能检测方法,其特征在于,步骤4)之前还包括分别训练对应的特征提取器的步骤:
B1)根据脆弱性代码数据集的标注,分别对抽象语法树向量、控制流图向量和程序依赖图向量进行标记,如果向量是从脆弱性代码样本中生成的则标记标签为1,如果不是,则标记标签为0,分别得到带标签的抽象语法树向量数据集、控制流图向量数据集和程序依赖图向量数据集;
B2)利用带标签的抽象语法树向量数据集、控制流图向量数据集和程序依赖图向量数据集,分别对抽象语法树序列、控制流图序列和程序依赖图序列对应的特征提取器进行训练,并根据数据的规模选择指定的一个池化层的输出作为该特征提取器的输出,最终分别完成对抽象语法树序列、控制流图序列和程序依赖图序列对应的特征提取器的训练。
5.根据权利要求4所述的基于代码属性图的软件脆弱性智能检测方法,其特征在于,步骤4)中将提取得到的三种特征向量合并成代码样本的特征向量是指将提取得到的三种位数相同的一维特征向量,按照抽象语法树向量、控制流图向量和程序依赖图向量的顺序拼接得到代码样本的特征向量。
6.根据权利要求1所述的基于代码属性图的软件脆弱性智能检测方法,其特征在于,步骤5)中预先训练好的脆弱性检测器为随机森林模型,且所述随机森林模型的输入为代码样本的特征向量,输出为代码样本是脆弱性代码的概率;步骤5)之前还包括预先训练脆弱性检测器的步骤:通过从脆弱性代码数据集得到的带标签的代码样本的特征向量,对脆弱性检测器进行训练,且在完成训练后得到预先训练好的脆弱性检测器。
7.根据权利要求1所述的基于代码属性图的软件脆弱性智能检测方法,其特征在于,步骤1)中待检测的代码样本为待检测源代码中的一个函数,且步骤5)中判定该代码样本为脆弱性代码后,还包括输出代码样本在待检测源代码中的位置信息的步骤。
8.一种基于代码属性图的软件脆弱性智能检测系统,包括相互连接的微处理器和存储器,其特征在于,所述微处理器被编程或配置以执行权利要求1~7中任意一项所述基于代码属性图的软件脆弱性智能检测方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有被编程或配置以执行权利要求1~7中任意一项所述基于代码属性图的软件脆弱性智能检测方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110130315.8A CN112733156B (zh) | 2021-01-29 | 2021-01-29 | 基于代码属性图的软件脆弱性智能检测方法、系统及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110130315.8A CN112733156B (zh) | 2021-01-29 | 2021-01-29 | 基于代码属性图的软件脆弱性智能检测方法、系统及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112733156A CN112733156A (zh) | 2021-04-30 |
CN112733156B true CN112733156B (zh) | 2024-04-12 |
Family
ID=75594965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110130315.8A Active CN112733156B (zh) | 2021-01-29 | 2021-01-29 | 基于代码属性图的软件脆弱性智能检测方法、系统及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112733156B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113791757B (zh) * | 2021-07-14 | 2023-08-22 | 北京邮电大学 | 软件需求和代码映射方法及系统 |
CN113886520B (zh) * | 2021-08-26 | 2024-05-14 | 广东工业大学 | 一种基于图神经网络的代码检索方法、系统及计算机可读存储介质 |
CN115373737B (zh) * | 2022-07-06 | 2023-05-26 | 武汉大学 | 一种基于特征融合的代码克隆检测方法 |
CN115879868B (zh) * | 2022-09-09 | 2023-07-21 | 南京审计大学 | 一种专家系统与深度学习相融合的智能合约安全审计方法 |
CN115617694B (zh) * | 2022-11-30 | 2023-03-10 | 中南大学 | 基于信息融合的软件缺陷预测方法、系统、设备及介质 |
CN115659344B (zh) * | 2022-12-28 | 2023-03-10 | 北京邮电大学 | 一种软件供应链检测方法及装置 |
CN116661852B (zh) * | 2023-04-06 | 2023-12-08 | 华中师范大学 | 一种基于程序依赖图的代码搜索方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110543422A (zh) * | 2019-09-05 | 2019-12-06 | 中国人民解放军国防科技大学 | 一种用于fpr的软件包代码缺陷数据处理方法、系统及介质 |
CN110543770A (zh) * | 2019-09-02 | 2019-12-06 | 南瑞集团有限公司 | 一种开源软件的漏洞检测方法、装置及系统 |
CN111240687A (zh) * | 2020-01-09 | 2020-06-05 | 华东师范大学 | 源代码静态分析装置 |
CN111400724A (zh) * | 2020-05-08 | 2020-07-10 | 中国人民解放军国防科技大学 | 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101051600B1 (ko) * | 2010-03-29 | 2011-07-22 | 주식회사 소프트 포 소프트 | 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템 |
-
2021
- 2021-01-29 CN CN202110130315.8A patent/CN112733156B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110543770A (zh) * | 2019-09-02 | 2019-12-06 | 南瑞集团有限公司 | 一种开源软件的漏洞检测方法、装置及系统 |
CN110543422A (zh) * | 2019-09-05 | 2019-12-06 | 中国人民解放军国防科技大学 | 一种用于fpr的软件包代码缺陷数据处理方法、系统及介质 |
CN111240687A (zh) * | 2020-01-09 | 2020-06-05 | 华东师范大学 | 源代码静态分析装置 |
CN111400724A (zh) * | 2020-05-08 | 2020-07-10 | 中国人民解放军国防科技大学 | 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质 |
Non-Patent Citations (1)
Title |
---|
一种基于特征矩阵的软件脆弱性代码克隆检测方法;甘水滔;秦晓军;陈左宁;王林章;软件学报;第26卷(第2期);348-363 * |
Also Published As
Publication number | Publication date |
---|---|
CN112733156A (zh) | 2021-04-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112733156B (zh) | 基于代码属性图的软件脆弱性智能检测方法、系统及介质 | |
CN110245496B (zh) | 一种源代码漏洞检测方法及检测器和其训练方法及系统 | |
CN111639344B (zh) | 一种基于神经网络的漏洞检测方法及装置 | |
CN109697162B (zh) | 一种基于开源代码库的软件缺陷自动检测方法 | |
CN108446540B (zh) | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 | |
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 | |
CN110737899B (zh) | 一种基于机器学习的智能合约安全漏洞检测方法 | |
CN112733137B (zh) | 一种面向漏洞检测的二进制代码相似性分析方法 | |
CN111400724B (zh) | 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质 | |
CN111783100A (zh) | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 | |
CN108763931A (zh) | 基于Bi-LSTM和文本相似性的漏洞检测方法 | |
Xiaomeng et al. | CPGVA: Code property graph based vulnerability analysis by deep learning | |
CN112288079B (zh) | 图神经网络模型训练方法、软件缺陷检测方法及系统 | |
CN114297654A (zh) | 一种源代码层级的智能合约漏洞检测方法及系统 | |
CN113297580B (zh) | 基于代码语义分析的电力信息系统安全防护方法及装置 | |
CN113326187A (zh) | 数据驱动的内存泄漏智能化检测方法及系统 | |
CN114861194A (zh) | 一种基于bgru与cnn融合模型的多类型漏洞检测方法 | |
CN115033895B (zh) | 一种二进制程序供应链安全检测方法及装置 | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
CN115658080A (zh) | 一种软件开源代码成分的识别方法及系统 | |
CN113779590B (zh) | 一种基于多维度表征的源代码漏洞检测方法 | |
CN116340952A (zh) | 一种基于操作码程序依赖图的智能合约漏洞检测方法 | |
Yang et al. | Smart contract vulnerability detection based on abstract syntax tree | |
CN116361816B (zh) | 一种智能合约漏洞检测方法、系统、存储介质及设备 | |
CN117592061B (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 |