CN112035345A - 一种基于代码片段分析的混合深度缺陷预测方法 - Google Patents

一种基于代码片段分析的混合深度缺陷预测方法 Download PDF

Info

Publication number
CN112035345A
CN112035345A CN202010860365.7A CN202010860365A CN112035345A CN 112035345 A CN112035345 A CN 112035345A CN 202010860365 A CN202010860365 A CN 202010860365A CN 112035345 A CN112035345 A CN 112035345A
Authority
CN
China
Prior art keywords
defect
code
defect prediction
deep learning
prediction
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.)
Pending
Application number
CN202010860365.7A
Other languages
English (en)
Inventor
张攀
沈亮
来风刚
吕俊峰
谢磊
任颖文
粟仁杰
高董英
蒋鑫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
State Grid Information and Telecommunication Co Ltd
State Grid Fujian Electric Power Co Ltd
Original Assignee
State Grid Information and Telecommunication Co Ltd
State Grid Fujian Electric Power Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by State Grid Information and Telecommunication Co Ltd, State Grid Fujian Electric Power Co Ltd filed Critical State Grid Information and Telecommunication Co Ltd
Publication of CN112035345A publication Critical patent/CN112035345A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Biophysics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明涉及一种基于代码片段分析的混合深度缺陷预测方法,属于计算机软件缺陷预测技术领域。本方法,首先基于缺陷库关键点的程序切片方法,将包含缺陷的开源软件代码单元集向量化,将特征表示成深度学习模型能够处理的向量形式。然后,基于混合深度学习的缺陷预测方法,提高混合深度模型的分类、预测能力,训练得到缺陷预测分类器。最后,基于训练好的缺陷预测分类器,对开源软件进行缺陷预测,将目标代码片段分类输出。本方法以预先设计的缺陷库关键点为程序切片的切入点,从开源代码中提取包含缺陷特征的代码片段并向量化表示,基于多种深度学习方法获取混合模型,能够有效提升模型的数据处理能力和自动学习能力。

Description

一种基于代码片段分析的混合深度缺陷预测方法
技术领域
本发明涉及一种基于代码片段分析的开源软件混合深度缺陷预测技术,属于计算机软件缺陷预测技术领域。
背景技术
随着计算机技术的发展,尤其是互联网技术和相关企业的兴起,开源软件在研发框架、操作***、编译工具链、数据库、WEB服务器等各个方面已经成为主流。在各大企事业单位机构信息化建设中,开源软件应用范围逐步扩大。已广泛应用的开源组件包括:研发框架(如Spring、Struts等)、操作***(如ubuntu)、数据库(如Mysql)、中间件(如Tomcat)、功能组件(如Zookeeper、Solr)等。开源软件具有开放、共享、自由等特性,在软件开发中扮演着越来越重要的角色,是软件供应链的重要组成部分。
随着软件规模不断扩展和提升,软件复杂度越来越高,发现软件缺陷并对缺陷进行修改,会消耗大量资源人力。
软件缺陷预测技术,通过评估软件的基本属性来预测软件当中可能存在的缺陷,并将测试资源分配给缺陷存在较多的模块,从而能够缩短测试周期、提高软件质量。
发明内容
本发明的目的是为了解决开源软件代码质量参差不齐、存在安全隐患的技术问题,提出一种基于代码片段分析的开源软件混合深度缺陷预测方法,用以预测发现输入的代码单元集中是否包含缺陷,保证开源软件使用的安全。
本发明提出的一种基于代码片段分析的混合深度缺陷预测方法,包括基于缺陷库关键点的程序切片方法和基于混合深度学习的缺陷预测方法。
步骤1:基于缺陷库关键点的程序切片方法,将包含缺陷的开源软件代码单元集向量化,将特征表示成深度学习模型能够处理的向量形式。
其实现方式如下:
首先,以开源缺陷库为导向,定义开源软件缺陷关键点,并进一步将关键点细分为多种缺陷类,具体包括输入验证类、缓冲区溢出类、内存管理类、API误用类、错误处理类、信息泄露类和跨站脚本类。
然后,以缺陷库中的关键点为切入点进行程序切片,从开源代码中提取包含缺陷特征的代码片段,提高切片效率,并得到代码单元集。
最后,基于所述代码单元集,将包含缺陷的代码单元集向量化处理,把特征表示成深度学习模型能够处理的向量形式。
本方法创造性地提出以关键点集指导程序切片,可以使程序切片更加准确,更有利于得到合理的代码单元集。
步骤2:基于混合深度学习的缺陷预测方法,提高混合深度模型的分类、预测能力,训练得到缺陷预测分类器。其目标在于,使混合模型的数据处理方面效率更高,自动学习能力更强。
捕获源程序前后的相关性,选择最优、最适合的分类器是程序缺陷预测成功的关键。目前,尚未有一种学习方法同时在捕获程序前、后相关性和分类能力上做到最,而只能勉强取其折中。
步骤3:基于训练好的缺陷预测分类器,对开源软件进行缺陷预测,将目标代码片段分类输出。
有益效果
本发明方法,以预先设计的缺陷库关键点为程序切片的切入点,从开源代码中提取包含缺陷特征的代码片段并向量化表示,基于多种深度学习方法获取混合模型,能够有效提升模型的数据处理能力和自动学习能力。
(1)极大提高了软件缺陷预测的能力。混合深度网络模型能够发现并刻画海量缺陷数据集内部隐藏的复杂结构特征,从而提高了缺陷预测的准确性。
(2)深度学习强调从海量数据中进行学习,解决海量数据中存在的高维、冗杂以及高噪等传统机器学习算法难以处理的问题。
(3)基于混合深度模型的缺陷预测模型能够自主判断输入的代码单元集中是否包含缺陷。
附图说明
图1为本方法所述方法的示意图。
图2为本发明程序源代码特征处理流程。
图3为基于CNN和GRU深度模型的混合模型结构。
具体实施方式
下面结合附图和实施例,对本发明方法做进一步详细说明。
一种基于代码片段分析的开源软件混合深度缺陷预测方法,包括基于缺陷库关键点的程序切片方法和基于混合深度学习的缺陷预测方法。
步骤1:基于缺陷库关键点的程序切片方法,提出开源软件代码特征。将包含缺陷的开源软件代码单元集向量化,将特征表示成深度学习模型能够处理的向量形式。
步骤1.1:以开源软件缺陷库为导向,在缺陷库中定义开源软件程序切片的关键点,使切片工具能够准确定位到包含缺陷特征的代码部分。
进一步地,所述缺陷库可以依据已有的缺陷数据库生成,如:CVE(CommonVulnerabilities and Exposures)、CWE(Common Weakness Enumeration)、NVD(NationalVulnerability Database)、CNNVD(China National Vulnerability Database ofInformation Security)等。
具体地,缺陷库可以细分为:输入验证、缓冲区溢出、内存管理、API误用、错误处理、信息泄露和跨站脚本等缺陷问题类。
步骤1.2:对开源程序进行切片,并生成代码单元集。
其中,程序切片用于实现代码缺陷特征提取,将源代码处理成包含特征的代码单元集。以步骤1.1缺陷库中的关键点为切入点,根据程序中函数之间相互调用的顺序和数据参数的流向,构建控制流图和数据流图,提取出与关键点有关的表达式和语句,去除与特征无关的代码语句和注释。
具体地,所述的对开源程序的切片过程,可以使用目前已存在程序切片的算法和工具,如LLVM等。
步骤1.3:为代码单元集的代码单元添加类型标签:对步骤1.2中得到的每个代码单元,若包含已知的缺陷代码,则增加有缺陷标签,否则,增加无缺陷标签。
步骤1.4:对代码单元集进行规则化处理。将代码中用户自己定义的变量和函数名称一一对应的换成标准的符号名称。
具体地,可以使用目前已存在的静态分析工具cppcheck等逐行遍历代码,完成用户定义变量和标准化名称的替换。
步骤1.5:对代码单元集的代码单元进行特征向量化。
特征向量化过程,不仅包括对特征本身的数字化,还包括寻找特征之间关系,通过不同纬度的空间之间的转换来捕获特征之间的时序和共现关系。特征向量化以后的数据,作为混合深度学习模型的输入。
具体地,可以使用词向量化模型word2vec、gensim、one-hot等完成特征的向量化。
步骤2:基于混合深度学习的缺陷预测方法,提高混合深度模型的分类、预测能力。
步骤2.1:以步骤1生成的特征向量,作为混合深度学习模型的输入。
步骤2.2:将输入的特征向量进行卷积和池化处理,使用卷积核和池化窗口对特征向量降维。
其中,池化层用于完成对特征的压缩和降维,并防止过度拟合。
步骤2.3:有机融合CNN和GRU两种深度模型的优势,将CNN作为与特征向量进行交互的接口,GRU作为处理代码语句之间关系的门控机制。
CNN模型虽然在缺陷预测时有较好的分类能力,却不能很好地保留代码语句之间的上下文关系,过于复杂的神经网络结构会随着层数增多而存在梯度消失问题。
RNN模型常用于处理时序问题,可以更好的表达代码之间的上下文调用关系,但RNN同样存在梯度消失的问题。GRU是RNN的改进模型,而且拥有比较简单的内部结构,参数较少使得内部计算更少且更容易收敛。
将GRU作为中间层嵌入到池化层和全连接层之间,能够保留代码数据之间的调用和传递关系。
步骤2.4:调节参数,使模型达到最佳缺陷预测效果,得到训练好的缺陷预测分类器。
步骤3:基于训练好的缺陷预测分类器,对开源软件进行缺陷预测,将目标代码片段分类输出。
步骤3.1:以步骤1中生成的特征向量,作为混合深度学习模型的输入。与步骤2.1类似,不同之处在于,作用目标是目标程序的源代码。
进一步地,步骤3.1中的混合深度学习模型,可以采用循环神经网络(RNN,LSTM,GRU)、双向循环神经网络(BRNN,BLSTM,BGRU)、卷积神经网络(CNN等中任意几种的组合),优选CNN与GRU的组合。
步骤3.2:将输入的特征向量进行卷积和池化处理,使用卷积核和池化窗口对特征向量降维。与步骤2.2类似,不同之处在于,作用目标是目标程序源代码。
步骤3.3:使用CNN作为与特征向量进行交互的接口,使用GRU作为处理代码语句之间关系的门控机制。与步骤2.3类似,不同之处在于作用目标是目标程序源代码。
步骤3.4:使用步骤2中训练好的分类器,分类目标程序源代码,输出分类结果为有缺陷代码和无缺陷代码。

Claims (6)

1.一种基于代码片段分析的混合深度缺陷预测方法,其特征在于,包括基于缺陷库关键点的程序切片方法和基于混合深度学习的缺陷预测方法;
步骤1:基于缺陷库关键点的程序切片方法,将包含缺陷的开源软件代码单元集向量化,将特征表示成深度学习模型能够处理的向量形式;
首先,以开源缺陷库为导向,定义开源软件缺陷关键点,并进一步将关键点细分为多种缺陷类,包括输入验证类、缓冲区溢出类、内存管理类、API误用类、错误处理类、信息泄露类和跨站脚本类;
然后,以缺陷库中的关键点为切入点进行程序切片,从开源代码中提取包含缺陷特征的代码片段,提高切片效率,并得到代码单元集;
最后,基于所述代码单元集,将包含缺陷的代码单元集向量化处理,把特征表示成深度学习模型能够处理的向量形式;
步骤2:基于混合深度学习的缺陷预测方法,提高混合深度模型的分类、预测能力,训练得到缺陷预测分类器;
步骤3:基于训练好的缺陷预测分类器,对开源软件进行缺陷预测,将目标代码片段分类输出。
2.如权利要求1所述的一种基于代码片段分析的混合深度缺陷预测方法,其特征在于,步骤1所述缺陷库依据已有的缺陷数据库生成。
3.如权利要求1所述的一种基于代码片段分析的混合深度缺陷预测方法,其特征在于,步骤1中,程序切片用于实现代码缺陷特征提取,将源代码处理成包含特征的代码单元集;以缺陷库中的关键点为切入点,根据程序中函数之间相互调用的顺序和数据参数的流向,构建控制流图和数据流图,提取出与关键点有关的表达式和语句,去除与特征无关的代码语句和注释;
然后,为代码单元集的代码单元添加类型标签:对得到的每个代码单元,若包含已知的缺陷代码,则增加有缺陷标签,否则,增加无缺陷标签;
最后,对代码单元集进行规则化处理,将代码中用户自己定义的变量和函数名称一一对应的换成标准的符号名称。
4.如权利要求1所述的一种基于代码片段分析的混合深度缺陷预测方法,其特征在于,步骤1所述对代码单元集的代码单元进行特征向量化,不仅包括对特征本身的数字化,还包括寻找特征之间关系,通过不同纬度的空间之间的转换来捕获特征之间的时序和共现关系;特征向量化以后的数据,作为混合深度学习模型的输入。
5.如权利要求1所述的一种基于代码片段分析的混合深度缺陷预测方法,其特征在于,步骤2包括以下步骤:
步骤2.1:以步骤1生成的特征向量,作为混合深度学习模型的输入;
步骤2.2:将输入的特征向量进行卷积和池化处理,使用卷积核和池化窗口对特征向量降维;
其中,池化层用于完成对特征的压缩和降维,并防止过度拟合;
步骤2.3:有机融合CNN和GRU两种深度模型的优势,将CNN作为与特征向量进行交互的接口,GRU作为处理代码语句之间关系的门控机制;将GRU作为中间层嵌入到池化层和全连接层之间,能够保留代码数据之间的调用和传递关系;
步骤2.4:调节参数,使模型达到最佳缺陷预测效果,得到训练好的缺陷预测分类器。
6.如权利要求1所述的一种基于代码片段分析的混合深度缺陷预测方法,其特征在于,步骤3包括以下步骤:
以目标程序的源代码为作用目标;
步骤3.1:以步骤1中生成的特征向量,作为混合深度学习模型的输入;
步骤3.2:将输入的特征向量进行卷积和池化处理,使用卷积核和池化窗口对特征向量降维;
步骤3.3:使用CNN作为与特征向量进行交互的接口,使用GRU作为处理代码语句之间关系的门控机制;
步骤3.4:使用步骤2中训练好的分类器,分类目标程序源代码,输出分类结果为有缺陷代码和无缺陷代码。
CN202010860365.7A 2020-08-20 2020-08-25 一种基于代码片段分析的混合深度缺陷预测方法 Pending CN112035345A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202010845083 2020-08-20
CN202010845083X 2020-08-20

Publications (1)

Publication Number Publication Date
CN112035345A true CN112035345A (zh) 2020-12-04

Family

ID=73581081

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010860365.7A Pending CN112035345A (zh) 2020-08-20 2020-08-25 一种基于代码片段分析的混合深度缺陷预测方法

Country Status (1)

Country Link
CN (1) CN112035345A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112579469A (zh) * 2020-12-29 2021-03-30 中国信息安全测评中心 一种源代码缺陷检测方法与装置
CN112597038A (zh) * 2020-12-28 2021-04-02 中国航天***科学与工程研究院 软件缺陷预测方法及***
CN113641586A (zh) * 2021-02-26 2021-11-12 北京北大软件工程股份有限公司 软件源代码缺陷检测方法、***、电子设备及储存介质

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105224463A (zh) * 2015-10-28 2016-01-06 南京大学 一种基于崩溃栈数据的软件缺陷代码定位方法
CN107943704A (zh) * 2017-12-04 2018-04-20 扬州大学 一种基于深度森林网络的软件缺陷预测方法
US20180267886A1 (en) * 2017-03-20 2018-09-20 Devfactory Fz-Llc Defect Prediction Operation
CN109726120A (zh) * 2018-12-05 2019-05-07 北京计算机技术及应用研究所 一种基于机器学习的软件缺陷确认方法
CN110489348A (zh) * 2019-08-23 2019-11-22 山东浪潮人工智能研究院有限公司 一种基于迁移学习的软件功能缺陷挖掘方法
CN110515826A (zh) * 2019-07-03 2019-11-29 杭州电子科技大学 一种基于次数频谱与神经网络算法的软件缺陷定位方法
CN110688312A (zh) * 2019-09-26 2020-01-14 山东浪潮人工智能研究院有限公司 一种基于Transformer的软件缺陷预测方法
CN110766660A (zh) * 2019-09-25 2020-02-07 上海众壹云计算科技有限公司 基于融合深度学习模型的集成电路缺陷图像识别分类***
CN111459799A (zh) * 2020-03-03 2020-07-28 西北大学 一种基于Github的软件缺陷检测模型建立、检测方法及***
CN111506504A (zh) * 2020-04-13 2020-08-07 扬州大学 基于软件开发过程度量的软件安全性缺陷预测方法及装置

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105224463A (zh) * 2015-10-28 2016-01-06 南京大学 一种基于崩溃栈数据的软件缺陷代码定位方法
US20180267886A1 (en) * 2017-03-20 2018-09-20 Devfactory Fz-Llc Defect Prediction Operation
CN107943704A (zh) * 2017-12-04 2018-04-20 扬州大学 一种基于深度森林网络的软件缺陷预测方法
CN109726120A (zh) * 2018-12-05 2019-05-07 北京计算机技术及应用研究所 一种基于机器学习的软件缺陷确认方法
CN110515826A (zh) * 2019-07-03 2019-11-29 杭州电子科技大学 一种基于次数频谱与神经网络算法的软件缺陷定位方法
CN110489348A (zh) * 2019-08-23 2019-11-22 山东浪潮人工智能研究院有限公司 一种基于迁移学习的软件功能缺陷挖掘方法
CN110766660A (zh) * 2019-09-25 2020-02-07 上海众壹云计算科技有限公司 基于融合深度学习模型的集成电路缺陷图像识别分类***
CN110688312A (zh) * 2019-09-26 2020-01-14 山东浪潮人工智能研究院有限公司 一种基于Transformer的软件缺陷预测方法
CN111459799A (zh) * 2020-03-03 2020-07-28 西北大学 一种基于Github的软件缺陷检测模型建立、检测方法及***
CN111506504A (zh) * 2020-04-13 2020-08-07 扬州大学 基于软件开发过程度量的软件安全性缺陷预测方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李元诚;崔亚奇;吕俊峰;来风刚;张攀;: "开源软件漏洞检测的混合深度学习方法" *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112597038A (zh) * 2020-12-28 2021-04-02 中国航天***科学与工程研究院 软件缺陷预测方法及***
CN112597038B (zh) * 2020-12-28 2023-12-08 中国航天***科学与工程研究院 软件缺陷预测方法及***
CN112579469A (zh) * 2020-12-29 2021-03-30 中国信息安全测评中心 一种源代码缺陷检测方法与装置
CN113641586A (zh) * 2021-02-26 2021-11-12 北京北大软件工程股份有限公司 软件源代码缺陷检测方法、***、电子设备及储存介质

Similar Documents

Publication Publication Date Title
CN111783100B (zh) 基于图卷积网络对代码图表示学习的源代码漏洞检测方法
CN110232280B (zh) 一种基于树结构卷积神经网络的软件安全漏洞检测方法
CN112035345A (zh) 一种基于代码片段分析的混合深度缺陷预测方法
CN111046679B (zh) 翻译模型的质量信息获取方法、装置及计算机设备
CN111931179B (zh) 基于深度学习的云端恶意程序检测***及方法
CN111866004B (zh) 安全评估方法、装置、计算机***和介质
CN113672931A (zh) 一种基于预训练的软件漏洞自动检测方法及装置
CN109918296A (zh) 软件自动化测试方法及装置
CN113138920A (zh) 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置
CN114036531A (zh) 一种基于多尺度代码度量的软件安全漏洞检测方法
CN116192477A (zh) 一种基于掩码图自编码器的apt攻击检测方法及装置
CN113221960A (zh) 一种高质量漏洞数据收集模型的构建方法及收集方法
CN116523284A (zh) 基于机器学习的业务操作流程自动化评估方法、***
Yu et al. Deep learning-based hardware Trojan detection with block-based netlist information extraction
CN116305119A (zh) 基于预测指导原型的apt恶意软件分类方法和装置
CN116361788A (zh) 一种基于机器学习的二进制软件漏洞预测方法
CN113609488B (zh) 基于自监督学习及多通道超图神经网络的漏洞检测方法与***
CN116702160B (zh) 一种基于数据依赖增强程序切片的源代码漏洞检测方法
CN115017015B (zh) 一种边缘计算环境下程序异常行为检测方法及***
CN115221045A (zh) 一种基于多任务多视角学习的多目标软件缺陷预测方法
CN113254428A (zh) 一种基于决策树的缺失数据填充方法及***
CN113657453B (zh) 基于生成对抗网络和深度学习的有害网站的检测方法
CN117195238B (zh) 一种异构图神经网络代码漏洞检测方法
CN113778733B (zh) 一种基于多尺度mass的日志序列异常检测方法
CN113313184B (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
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20201204