CN109657473B - 一种基于深度特征的细粒度漏洞检测方法 - Google Patents
一种基于深度特征的细粒度漏洞检测方法 Download PDFInfo
- Publication number
- CN109657473B CN109657473B CN201811340404.XA CN201811340404A CN109657473B CN 109657473 B CN109657473 B CN 109657473B CN 201811340404 A CN201811340404 A CN 201811340404A CN 109657473 B CN109657473 B CN 109657473B
- Authority
- CN
- China
- Prior art keywords
- program
- training
- vulnerability detection
- slices
- vulnerability
- 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
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
- G06F40/211—Syntactic parsing, e.g. based on context-free grammar [CFG] or unification grammars
-
- 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)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Biophysics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于深度特征的细粒度漏洞检测方法,其步骤包括以下两个阶段:训练阶段和检测阶段。训练阶段包含:收集大量的有漏洞和无漏洞的程序;对这些程序进行预处理,并从程序依赖图中提取出程序切片;对生成的程序切片按照漏洞类型打上标签;按照安全分析规则,从程序切片中提取出程序关注点;将程序切片和程序关注点转化成向量;搭建基于深度学习的漏洞检测模型,用向量训练模型参数至最优;最终得到一个训练完备的基于深度学习的漏洞检测模型。检测阶段包含:按照训练阶段的源码处理方式,从待测程序中提取程序切片和程序关注点并分别将其转化为向量;利用训练好的漏洞检测模型对向量进行分类,最后根据分类结果生成漏洞检测报告。
Description
技术领域
本发明属于网络空间安全领域,更具体地,涉及一种基于深度特征的细粒度漏洞检测方法。
背景技术
大多数网络攻击都是由于某些软件漏洞引起的,尽管现在已经出现了很多的安全技术来避免软件漏洞。但是由于存在诸多原因,例如,软件的复杂性使得软件漏洞是不可避免的。鉴于无法避免软件漏洞,所以另一种防御方法是尽快检测并修补它们。检测软件源代码中的漏洞是解决软件漏洞问题的一个不可或缺的方法。在这种方法下,许多解决方案使用手动定义的漏洞模式来检测漏洞。但是,手动定义漏洞模式是一项主观且繁琐的任务,通常不能保证漏洞检测结果的误报率和漏报率。
发明内容
针对现有技术的以上缺陷或改进需求,本发明的目的在于解决现有手动定义检测漏洞的模式是一项主观且繁琐的任务,通常不能保证漏洞检测结果的误报率和漏报率的技术问题。
为实现上述目的,本发明提供一种基于深度特征的细粒度漏洞检测方法,包括如下步骤:
S1,训练阶段:
收集训练程序,从训练程序中提取出程序切片,并给程序切片打上对应的标签,所述标签包括:该程序切片有无漏洞、如有漏洞其对应的漏洞属性;
遍历所述训练程序中的所有语句,根据当前遍历到的语句在所述程序切片中对应的语句类型从所述程序切片中提取程序关注点,根据所述程序切片和程序关注点得到最终的训练数据;
初步搭建基于深度学习的漏洞检测模型,以通过融合程序切片和程序关注点中的特征来检测漏洞,将所述训练数据和训练数据包括的程序切片对应的标签输入初步搭建的基于深度学习的漏洞检测模型,根据输出的训练数据对应的检测结果和程序切片对应的标签调整漏洞检测模型的参数,以使得漏洞检测模型的检测结果达到最优,基于调整好的漏洞检测模型的参数得到训练完备的基于深度学习的漏洞检测模型;
S2,检测阶段:
按照训练阶段中源代码的处理方式,从待测程序中提取对应的程序切片和程序关注点,得到检测数据;
将检测数据输入所述训练完备的基于深度学习的漏洞检测模型进行检测,根据检测结果生成对应的漏洞检测报告,所述漏洞检测报告包括待检测程序是否包含漏洞以及若包含漏洞其对应的漏洞属性。
在一个可选的实例中,步骤S1包括以下步骤:
S1.1,收集训练程序,对所述训练程序进行预处理,将所述训练程序的源代码解析成程序依赖图的格式,再从程序依赖图中提取出程序切片;
S1.2,按照程序切片有无漏洞和漏洞的属性给程序切片打上标签;
S1.3,遍历训练程序中的所有语句,根据当前遍历到的语句在所述程序切片中对应的语句类型从所述程序切片中提取程序关注点;
S1.4,解析程序切片和程序关注点中每条语句的成分,提取出其中的变量名和函数名,规范这些变量名和函数名的命名格式,消除不一致的代码命名规范;
S1.5,将程序切片和程序关注点分别转化为数字化表征对应的向量;
S1.6,初步搭建基于深度学习的漏洞检测模型,该漏洞检测模型通过融合程序切片和程序关注点中的特征来检测漏洞,用步骤S1.5中生成的向量训练该漏洞检测模型,根据输出的向量对应的检测结果和步骤S1.2打上的标签调整漏洞检测模型的参数,以使得漏洞检测模型的检测结果达到最优,得到一个训练完备的基于深度学习的漏洞检测模型。
在一个可选的实例中,步骤S1.1包括以下步骤:
S1.1.1,解析每个训练程序,生成每个训练程序的程序依赖图G;
S1.1.2,定位程序依赖图G中包含危险函数调用语句的节点p;
S1.1.3,从节点p出发,从程序依赖图G中提取出所有和节点p有直接和间接依赖关系的节点对应的节点集合,获取所述节点集合中的代码语句,生成对应的程序切片S;所述直接和间接依赖关系包括直接或者间接的数据依赖关系和直接或者间接的控制依赖关系。
在一个可选的实例中,步骤S1.3中根据当前遍历到的语句在所述程序切片中对应的语句类型从所述程序切片中提取程序关注点,具体包括:
如果当前遍历到的语句在程序切片中是危险函数调用参数的定义语句,则提取出来作为程序关注点;
如果当前遍历到的语句在程序切片中是条件语句,则提取出来作为程序关注点;
如果当前遍历到的语句在程序切片中是危险函数调用语句,则提取出来作为程序关注点。
在一个可选的实例中,步骤S1.4包括以下步骤:
S1.4.1,将程序切片解析成token流;
S1.4.2,分析每个token在训练程序所包括的语句中的成分,提取出每个token对应的变量标识符和自定义的函数名标识符,将变量标识符和自定义函数名标识符用统一的变量和函数名的命名方式替换。
在一个可选的实例中,所述步骤S1.4.2所用的统一的命名方式包括:
变量命名方式:变量统一命名为variable_ID,对相同的变量标识符映射成相同的变量名,对不同的变量标识符按照其在程序中出现的顺序对其编号,替换成命名统一但是编号不一致的变量名;
自定义函数命名方式,函数统一命名为function_ID,对相同的自定义函数标识符映射成相同的函数名,对不同的函数标识符按照其在程序中出现的顺序对其编号,替换成命名统一但是编号不一致的函数名。
在一个可选的实例中,步骤S1.5包括以下步骤:
S1.5.1,将步骤S1.4.1解析成的token流提取出来生成语料库;
S1.5.2,搭建词向量训练神经网络,将语料库送入词向量训练网络中训练,最后得到语料库中每个单词的词向量;
S1.5.3,将程序切片和程序关注点中的单词替换成对应的词向量,生成数字化表征。
在一个可选的实例中,所述基于深度学习的漏洞检测模型包括:全局特征学习模型、局部特征学习模型、特征融合模型以及针对多分类的SVM分类器,步骤S1.6包括以下步骤:
S1.6.1,搭建全局特征学习模型,输入程序切片的数字化表征和对应的程序切片标签,训练优化所述全局特征学习模型,最终利用训练好的全局特征学习模型生成全局特征;
S1.6.2,搭建局部特征学习模型,输入程序关注点的数字化表征和对应的程序切片标签,训练优化所述局部特征学习模型,最终利用训练好的局部特征学习模型生成局部特征;
S1.6.3,搭建特征融合模型,将步骤S1.6.1和步骤S1.6.2中生成的全局特征和局部特征和对应的程序切片标签输入到特征融合模型中,训练优化所述特征融合模型,最终利用训练好的特征融合模型生成融合特征;
S1.6.4,搭建针对多分类的SVM分类器,用融合特征和程序切片标签训练所述针对多分类的SVM分类器,最终得到一个各部分都训练完备的基于深度学习的漏洞检测模型。
在一个可选的实例中,步骤S2包括以下步骤:
S2.1,对待检测程序预处理,解析待检测程序,生成待检测程序的程序切片;
S2.2,根据待检测程序对应的程序切片所包括的各个语句的类型,生成待检测程序的程序关注点;
S2.3,规范化待检测程序的程序切片和待检测程序的程序关注点的格式,过滤无关的程序语句,消除不一致的代码风格;
S2.4,将待检测程序的程序切片和待检测程序的程序关注点分别转化为数字化的表征对应的向量;
S2.5,将步骤S2.4中生成的向量输入步骤S1得到的训练完备的基于深度学习的漏洞检测模型中检测,最后根据模型的检测结果生成漏洞检测报告。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
本发明通过对漏洞代码的特征分析,从中提取出数据流和控制流,用于深度学习模型的自动化学习,相比于传统的漏洞检测方法,该方法不需要人工的编写漏洞模式,相比于传统的基于深度学习的漏洞检测方法,该方法增加了新的漏洞特征,提高了检测的准确度。
本发明将漏洞数据按照漏洞类型细化,使得检测结果不再局限于有漏洞或者无漏洞,而是准确的漏洞类型。准确的漏洞类型可以使得代码审计人员和开发者快速的定位漏洞出现的点,及时修复漏洞。
本发明提供一种适用于漏洞检测的深度学习模型结构,实现了自动化的细粒度的漏洞检测,基于本发明提供的漏洞检测方法可以在保证漏洞检测的漏报率的基础上同时降低误报率。
附图说明
图1是本发明提供的一种基于深度特征的细粒度漏洞检测方法的流程图;
图2是本发明提供的基于图1方法流程图的细化流程框图;
图3是本发明提供的基于深度特征的细粒度漏洞检测方法步骤S1的执行流程图;
图4是本发明提供的基于深度特征的细粒度漏洞检测方法步骤S2的执行流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及其描述,对本发明进行进一步详细说明。应当理解,此处所描述的具体步骤仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个步骤中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
基于深度学习的漏洞检测方案减少了人类专家的繁琐工作,因为他们不需要定义特定漏洞的模式,只需要定义检测的漏洞的单位和格式。而与传统的机器学习技术相比,深度学习技术可以进一步减少对人类专家的依赖,目前最先进的基于深度学习的漏洞检测技术是一个名为VulDeePecker的系统,它使用双向长短时记忆(BLSTM)神经网络来检测软件漏洞。但是,VulDeePecker是一个二进制分类器,这意味着它可以判断一段代码是否容易受到攻击,但无法分辨该漏洞属于哪种类型或类,即其是一种粗粒度的漏洞检测方法。识别一段代码所包含的漏洞类型非常重要,因为这些信息将有助于用户确定漏洞的精确位置,尽快解决问题。在目前的基于机器学习的所有漏洞检测方法都存在着这个问题。在本发明中,通过研究多类漏洞检测来解决这个问题,它不仅旨在判断程序是否容易受到攻击,而且还旨在告诉用户待测的程序包含的漏洞类型。
本发明的整体思路在于,通过对漏洞代码的特征分析,从中提取出数据流和控制流,用于深度学习模型的自动化学习,相比于传统的漏洞检测方法,该方法不需要人工的编写漏洞模式,相比于传统的基于深度学习的漏洞检测方法,该方法增加了新的漏洞特征,提高了检测的准确度。同时为了适应多特征的学习,本发明还构建了新的基于深度学习的漏洞检测架构。
本发明旨在设计一种细粒度自动化检测漏洞的方法,它保证了在准确检测出程序是否包含漏洞的基础上,进一步的推测出漏洞类型。为了达到以上目的,本发明设计了一个基于深度学习的自动化细粒度漏洞检测模型。该方法在训练和检测的源码上提取出新的特征语句,以提高模型检测的精确度。本发明设计了一个基于双向LSTM神经网络的漏洞检测模型来适应新的特征,该模型包含了4个子模块,这4个子模块分别是全局特征学习模型,局部特征学习模型,特征融合模型和SVM分类器。该方法包含两方面,第一是训练阶段,该阶段用于训练一个功能完备的漏洞检测模型。第二是检测阶段,该阶段用于用训练阶段得到的模型检测待测的源码。
本发明利用深度学习技术自动化的学习源码的语义,提取出隐藏在源码中潜在的特征,从而推导出源码中是否包含漏洞,并且可以根据不同的源码特征推测出具体的漏洞类型;如图1所示,本发明基于深度特征的细粒度漏洞检测方法包含以下步骤:
S1,训练阶段,该阶段负责收集训练程序,对这些程序进行预处理,再提取出普通程序切片,并按照漏洞属性给程序切片打上标签;再从程序切片中提取出程序关注点;然后将程序切片和程序关注点转化成数字化表征,得到最终的训练数据;搭建基于深度学习的漏洞检测模型,将训练数据和对应的标签送入深度学习模型,调整模型参数训练模型至最优,最后得到一个训练完备的基于深度学习的漏洞检测模型;
S2,检测阶段,按照训练阶段的源码处理方式,从待测程序中提取程序切片和程序关注点并分别将其转化为数字化表征,得到检测数据;将检测数据送入训练好的漏洞检测模型,利用模型进行检测,最后根据检测结果生成对应的漏洞检测报告。
图2是本发明提供的基于图1方法流程图的细化流程框图,具体可结合图3和图4的描述部分。
如图3所示,步骤S1的具体实施方案包含以下部分:
S1.1,数据预处理,解析收集的训练程序,定位到程序中所有的危险函数调用语句,生成普通程序切片。具体步骤如下:
S1.1.1,输入训练程序,利用程序解析工具joern,解析训练数据中的每个程序,按照语句的成分和成分之间的关系,生成每个程序的程序依赖图G;
S1.1.2,定位图G中包含危险函数调用语句的节点p,由于每个节点的属性中包含该节点对应的语句源码和语句属性,因此通过分析语句属性和源码即可以定位危险函数调用;
S1.1.3,从节点p出发,提取出和p有直接和间接依赖关系的节点,获取节点属性中的代码语句,递归的执行这个过程,直到无法执行,生成程序切片S,生成程序切片的条件为:
条件1,某一个节点和节点p有直接或者间接的数据依赖关系;
条件2,某一个节点和节点p有直接或者间接的控制依赖关系;
条件3,直到图G中所有的点都无法再进一步获取到和其有数据依赖和控制依赖的节点,切片生成过程结束。
S1.2,构建ground truth,即参考标准,后期用于量化模型分类的误差,按照程序的属性标记普通程序切片,针对不同的漏洞类型标记不同的标签,例如针对无漏洞切片,标记0,缓冲区溢出漏洞,标记1,资源分配类型漏洞,标记2等。
S1.3,分析普通程序切片的语句结构,生成程序关注点,生成条件如下:
条件1,对普通程序切片的每条语句的属性和代码分析,如果该语句是变量定义语句,并且语句代码中的所定义的变量是危险函数调用中的参数,那么提取出该语句,作为程序关注点;
条件2,对普通程序切片的每条语句的属性和代码分析,如果该语句是条件语句,那么提取出该语句,作为程序关注点;
条件3,对普通程序切片的每条语句的属性和代码分析,如果该语句是函数调用语句,并且语句代码中的函数调用名是危险函数名,那么提取出该语句,作为程序关注点;
S1.4,规范化普通程序切片和程序关注点的格式,过滤无关的程序语句,消除不一致的代码风格,具体步骤如下:
S1.4.1,利用词法分析技术将程序切片解析成token流;
S1.4.2,分析每个token在训练程序所包括的语句中的成分,提取出每个token对应的变量标识符和自定义的函数名标识符,将变量标识符和自定义函数名标识符用统一的变量和函数名的命名方式替换,统一的命名方式为:
变量命名方式,变量统一命名为variable_ID,对相同的变量标识符映射成相同的变量名,对不同的变量标识符按照其在程序中出现的顺序对其编号,替换成风格统一但是编号不一致的变量名,如“variable_0”,“variable_1”,“variable_2”,“variable_3”;
自定义函数命名方式,函数统一命名为function_ID,对相同的自定义函数标识符映射成相同的函数名,对不同的函数标识符按照其在程序中出现的顺序对其编号,替换成风格统一但是编号不一致的函数名,如“function_0”,“function_1”,“function_2”,“function_3”;
S1.5,利用word embedding技术将普通的程序切片和程序关注点分别转化为数字化的表征,即词向量,具体步骤如下:
S1.5.1,将S1.4生成的规范后的token流提取出来生成语料库;
S1.5.2,利用Word2vec工具搭建词向量训练神经网络,将语料库送入网络中训练,最后得到一个单词库,该词库中包含每个单词的词向量;
S1.5.3,将程序切片和程序关注点中的单词替换成对应的词向量,生成数字化表征,用于后期模型的训练和检测;
S1.6,搭建基于深度学习的漏洞检测模型,该模型通过融合普通程序切片和程序关注点中的特征来检测漏洞。用S1.5中生成的向量训练该模型,最终生成一个训练完备的漏洞检测模型,具体步骤如下:
S1.6.1,搭建基于多层双向LSTM神经网络的全局特征学习模型,将普通程序切片生成的数字化表征输入到模型中,训练模型,搜索最优参数,最终利用训练好的模型生成全局特征;
S1.6.2,搭建基于多层双向LSTM神经网络的局部特征学习模型,将程序关注点生成的数字化表征输入到模型中,训练模型,搜索最优参数,最终利用训练好的模型生成局部特征;
S1.6.3,搭建基于一层双向LSTM神经网络的特征融合模型,将S1.6.1和S1.6.2中生成的全局特征和局部特征输入到模型中,训练模型,搜索最优参数,最终利用训练好的模型生成融合特征;
S1.6.4,搭建针对多分类的SVM分类器,用融合特征训练分类器,最终得到一个各部分都训练完备的完整的基于深度学习的漏洞检测模型。
如图4所示,步骤S2的具体实施方案包含以下部分:
S2.1,数据预处理,解析待测程序,生成普通程序切片(具体步骤和S1.1相同);
S2.2,分析普通程序切片的句子成分,生成程序关注点(具体步骤和S1.3相同);
S2.3,规范化普通程序切片和程序关注点的格式,过滤无关的程序语句,消除不一致的代码风格(具体步骤和S1.4相同);
S2.4,利用word embedding技术将普通的程序切片和程序关注点分别转化为数字化的表征,即词向量(具体步骤和S1.5相同)。
S2.5,将S2.4中生成的数字化表征送入S1得到的漏洞检测模型中检测,最后根据模型的检测结果生成漏洞检测报告。
为了证明模型的有效性,我们利用模型在3万条程序切片中进行检测,模型精确率和召回率的综合评价指标F1指数达93.65%,可见,基于本发明提供的漏洞模型检测漏洞的准确率很高,具有较好的实用性。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于深度特征的细粒度漏洞检测方法,其特征在于,包括如下步骤:
S1,训练阶段:
收集训练程序,从训练程序中提取出程序切片,并给程序切片打上对应的标签,所述标签包括:该程序切片有无漏洞、如有漏洞其对应的漏洞属性;
遍历所述训练程序中的所有语句,根据当前遍历到的语句在所述程序切片中对应的语句类型从所述程序切片中提取程序关注点,根据所述程序切片和程序关注点得到最终的训练数据;
初步搭建基于深度学习的漏洞检测模型,以通过融合程序切片和程序关注点中的特征来检测漏洞,将所述训练数据和训练数据包括的程序切片对应的标签输入初步搭建的基于深度学习的漏洞检测模型,根据输出的训练数据对应的检测结果和程序切片对应的标签调整漏洞检测模型的参数,以使得漏洞检测模型的检测结果达到最优,基于调整好的漏洞检测模型的参数得到训练完备的基于深度学习的漏洞检测模型;
步骤S1包括以下步骤:
S1.1,收集训练程序,对所述训练程序进行预处理,将所述训练程序的源代码解析成程序依赖图的格式,再从程序依赖图中提取出程序切片;
S1.2,按照程序切片有无漏洞和漏洞的属性给程序切片打上标签;
S1.3,遍历训练程序中的所有语句,根据当前遍历到的语句在所述程序切片中对应的语句类型从所述程序切片中提取程序关注点;
S1.4,解析程序切片和程序关注点中每条语句的成分,提取出其中的变量名和函数名,规范这些变量名和函数名的命名格式,消除不一致的代码命名规范;
S1.5,将程序切片和程序关注点分别转化为数字化表征对应的向量;
S1.6,初步搭建基于深度学习的漏洞检测模型,该漏洞检测模型通过融合程序切片和程序关注点中的特征来检测漏洞,用步骤S1.5中生成的向量训练该漏洞检测模型,根据输出的向量对应的检测结果和步骤S1.2打上的标签调整漏洞检测模型的参数,以使得漏洞检测模型的检测结果达到最优,得到一个训练完备的基于深度学习的漏洞检测模型;
S2,检测阶段:
按照训练阶段中源代码的处理方式,从待测程序中提取对应的程序切片和程序关注点,得到检测数据;
将检测数据输入所述训练完备的基于深度学习的漏洞检测模型进行检测,根据检测结果生成对应的漏洞检测报告,所述漏洞检测报告包括待检测程序是否包含漏洞以及若包含漏洞其对应的漏洞属性。
2.根据权利要求1所述的细粒度漏洞检测方法,其特征在于,步骤S1.1包括以下步骤:
S1.1.1,解析每个训练程序,生成每个训练程序的程序依赖图G;
S1.1.2,定位程序依赖图G中包含危险函数调用语句的节点p;
S1.1.3,从节点p出发,从程序依赖图G中提取出所有和节点p有直接和间接依赖关系的节点对应的节点集合,获取所述节点集合中的代码语句,生成对应的程序切片S;所述直接和间接依赖关系包括直接或者间接的数据依赖关系和直接或者间接的控制依赖关系。
3.根据权利要求1所述的细粒度漏洞检测方法,其特征在于,步骤S1.3中根据当前遍历到的语句在所述程序切片中对应的语句类型从所述程序切片中提取程序关注点,具体包括:
如果当前遍历到的语句在程序切片中是危险函数调用参数的定义语句,则提取出来作为程序关注点;
如果当前遍历到的语句在程序切片中是条件语句,则提取出来作为程序关注点;
如果当前遍历到的语句在程序切片中是危险函数调用语句,则提取出来作为程序关注点。
4.根据权利要求1所述的细粒度漏洞检测方法,其特征在于,步骤S1.4包括以下步骤:
S1.4.1,将程序切片解析成token流;
S1.4.2,分析每个token在训练程序所包括的语句中的成分,提取出每个token对应的变量标识符和自定义的函数名标识符,将变量标识符和自定义函数名标识符用统一的变量和函数名的命名方式替换。
5.根据权利要求4所述的细粒度漏洞检测方法,其特征在于,所述步骤S1.4.2所用的统一的命名方式包括:
变量命名方式:变量统一命名为variable_ID,对相同的变量标识符映射成相同的变量名,对不同的变量标识符按照其在程序中出现的顺序对其编号,替换成命名统一但是编号不一致的变量名;
自定义函数命名方式,函数统一命名为function_ID,对相同的自定义函数标识符映射成相同的函数名,对不同的函数标识符按照其在程序中出现的顺序对其编号,替换成命名统一但是编号不一致的函数名。
6.根据权利要求4所述的细粒度漏洞检测方法,其特征在于,步骤S1.5包括以下步骤:
S1.5.1,将步骤S1.4.1解析成的token流提取出来生成语料库;
S1.5.2,搭建词向量训练神经网络,将语料库送入词向量训练网络中训练,最后得到语料库中每个单词的词向量;
S1.5.3,将程序切片和程序关注点中的单词替换成对应的词向量,生成数字化表征。
7.根据权利要求1所述的细粒度漏洞检测方法,其特征在于,所述基于深度学习的漏洞检测模型包括:全局特征学习模型、局部特征学习模型、特征融合模型以及针对多分类的SVM分类器,步骤S1.6包括以下步骤:
S1.6.1,搭建全局特征学习模型,输入程序切片的数字化表征和对应的程序切片标签,训练优化所述全局特征学习模型,最终利用训练好的全局特征学习模型生成全局特征;
S1.6.2,搭建局部特征学习模型,输入程序关注点的数字化表征和对应的程序切片标签,训练优化所述局部特征学习模型,最终利用训练好的局部特征学习模型生成局部特征;
S1.6.3,搭建特征融合模型,将步骤S1.6.1和步骤S1.6.2中生成的全局特征和局部特征和对应的程序切片标签输入到特征融合模型中,训练优化所述特征融合模型,最终利用训练好的特征融合模型生成融合特征;
S1.6.4,搭建针对多分类的SVM分类器,用融合特征和程序切片标签训练所述针对多分类的SVM分类器,最终得到一个各部分都训练完备的基于深度学习的漏洞检测模型。
8.根据权利要求1所述的细粒度漏洞检测方法,其特性在于,步骤S2包括以下步骤:
S2.1,对待检测程序预处理,解析待检测程序,生成待检测程序的程序切片;
S2.2,根据待检测程序对应的程序切片所包括的各个语句的类型,生成待检测程序的程序关注点;
S2.3,规范化待检测程序的程序切片和待检测程序的程序关注点的格式,过滤无关的程序语句,消除不一致的代码风格;
S2.4,将待检测程序的程序切片和待检测程序的程序关注点分别转化为数字化的表征对应的向量;
S2.5,将步骤S2.4中生成的向量输入训练完备的基于深度学习的漏洞检测模型中检测,最后根据模型的检测结果生成漏洞检测报告。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811340404.XA CN109657473B (zh) | 2018-11-12 | 2018-11-12 | 一种基于深度特征的细粒度漏洞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811340404.XA CN109657473B (zh) | 2018-11-12 | 2018-11-12 | 一种基于深度特征的细粒度漏洞检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109657473A CN109657473A (zh) | 2019-04-19 |
CN109657473B true CN109657473B (zh) | 2020-09-18 |
Family
ID=66110667
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811340404.XA Active CN109657473B (zh) | 2018-11-12 | 2018-11-12 | 一种基于深度特征的细粒度漏洞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109657473B (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113826116A (zh) * | 2019-05-15 | 2021-12-21 | 北京嘀嘀无限科技发展有限公司 | 用于多类分类的对抗性多二元神经网络 |
CN110222512B (zh) * | 2019-05-21 | 2021-04-20 | 华中科技大学 | 一种基于中间语言的软件漏洞智能检测与定位方法与系统 |
CN110119627A (zh) * | 2019-05-22 | 2019-08-13 | 刘士刚 | 自动化人工智能漏洞检测系统 |
CN110618809B (zh) * | 2019-08-08 | 2020-11-03 | 北京大学 | 一种前端网页输入约束提取方法和装置 |
CN110543770B (zh) * | 2019-09-02 | 2022-06-28 | 南瑞集团有限公司 | 一种开源软件的漏洞检测方法、装置及系统 |
WO2021114093A1 (zh) * | 2019-12-10 | 2021-06-17 | 中国科学院深圳先进技术研究院 | 一种基于深度学习的智能合约漏洞检测方法 |
CN111125716B (zh) * | 2019-12-19 | 2022-05-31 | 中国人民大学 | 一种以太坊智能合约漏洞检测方法及装置 |
CN111177731A (zh) * | 2019-12-26 | 2020-05-19 | 江苏深度空间信息科技有限公司 | 一种基于人工神经网络的软件源代码漏洞检测方法 |
CN111274580A (zh) * | 2020-01-19 | 2020-06-12 | 湖南第一师范学院 | 基于深度学习的控制流完整性检测方法 |
CN111460450B (zh) * | 2020-03-11 | 2023-02-10 | 西北大学 | 一种基于图卷积网络的源代码漏洞检测方法 |
CN113742205B (zh) * | 2020-05-27 | 2024-04-23 | 南京大学 | 一种基于人机协同的代码漏洞智能检测方法 |
CN111753303B (zh) * | 2020-07-29 | 2023-02-07 | 哈尔滨工业大学 | 一种基于深度学习和强化学习的多粒度代码漏洞检测方法 |
CN113239360A (zh) * | 2021-04-30 | 2021-08-10 | 杭州安恒信息技术股份有限公司 | 一种基于机器学习的网络资产管理方法及相关组件 |
CN113254329A (zh) * | 2021-04-30 | 2021-08-13 | 展讯通信(天津)有限公司 | 基于机器学习的Bug处理方法、系统、设备及存储介质 |
CN115130110B (zh) * | 2022-07-08 | 2024-03-19 | 国网浙江省电力有限公司电力科学研究院 | 基于并行集成学习的漏洞挖掘方法、装置、设备及介质 |
CN115033895B (zh) * | 2022-08-12 | 2022-12-09 | 中国电子科技集团公司第三十研究所 | 一种二进制程序供应链安全检测方法及装置 |
CN115495755B (zh) * | 2022-11-15 | 2023-04-07 | 四川大学 | 一种基于CodeBERT和R-GCN的源代码漏洞多分类检测的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102360334A (zh) * | 2011-10-17 | 2012-02-22 | 中国人民解放军信息工程大学 | 一种动静态结合的软件安全性测试方法 |
CN102622558A (zh) * | 2012-03-01 | 2012-08-01 | 北京邮电大学 | 一种二进制程序漏洞的挖掘装置和方法 |
CN105701403A (zh) * | 2014-11-25 | 2016-06-22 | 卓望数码技术(深圳)有限公司 | 安卓应用的口令处理路径识别方法及使用该方法的装置 |
CN107862327A (zh) * | 2017-10-26 | 2018-03-30 | 华中科技大学 | 一种基于多特征的安全缺陷识别系统和方法 |
CN107885999A (zh) * | 2017-11-08 | 2018-04-06 | 华中科技大学 | 一种基于深度学习的漏洞检测方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU2531861C1 (ru) * | 2013-04-26 | 2014-10-27 | Закрытое акционерное общество "Лаборатория Касперского" | Система и способ оценки вредоносности кода, исполняемого в адресном пространстве доверенного процесса |
-
2018
- 2018-11-12 CN CN201811340404.XA patent/CN109657473B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102360334A (zh) * | 2011-10-17 | 2012-02-22 | 中国人民解放军信息工程大学 | 一种动静态结合的软件安全性测试方法 |
CN102622558A (zh) * | 2012-03-01 | 2012-08-01 | 北京邮电大学 | 一种二进制程序漏洞的挖掘装置和方法 |
CN105701403A (zh) * | 2014-11-25 | 2016-06-22 | 卓望数码技术(深圳)有限公司 | 安卓应用的口令处理路径识别方法及使用该方法的装置 |
CN107862327A (zh) * | 2017-10-26 | 2018-03-30 | 华中科技大学 | 一种基于多特征的安全缺陷识别系统和方法 |
CN107885999A (zh) * | 2017-11-08 | 2018-04-06 | 华中科技大学 | 一种基于深度学习的漏洞检测方法及系统 |
Non-Patent Citations (2)
Title |
---|
VulDeePecker: A Deep Learning-Based System for Vulnerability Detection;Zhen Li等;《Network and Distributed System Security (NDSS) Symposium 2018》;20180221;第1-15页 * |
Web应用程序漏洞检测关键技术研究;万志远;《中国博士学位论文全文数据库信息科技辑》;20160315;第I139-21页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109657473A (zh) | 2019-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109657473B (zh) | 一种基于深度特征的细粒度漏洞检测方法 | |
CN110245496B (zh) | 一种源代码漏洞检测方法及检测器和其训练方法及系统 | |
CN107885999B (zh) | 一种基于深度学习的漏洞检测方法及系统 | |
CN109739994B (zh) | 一种基于参考文档的api知识图谱构建方法 | |
US8312440B2 (en) | Method, computer program product, and hardware product for providing program individuality analysis for source code programs | |
CN106843840B (zh) | 一种基于相似度分析的源代码版本演化注释复用方法 | |
US11483326B2 (en) | Context informed abnormal endpoint behavior detection | |
CN107862327B (zh) | 一种基于多特征的安全缺陷识别系统和方法 | |
CN103092761A (zh) | 基于差异信息文件识别和检查修改代码块的方法及装置 | |
US11243834B1 (en) | Log parsing template generation | |
WO2019242442A1 (zh) | 基于多模型特征的恶意软件识别方法、系统及相关装置 | |
CN114861194B (zh) | 一种基于bgru与cnn融合模型的多类型漏洞检测方法 | |
CN107273546B (zh) | 仿冒应用检测方法以及系统 | |
CN115495755B (zh) | 一种基于CodeBERT和R-GCN的源代码漏洞多分类检测的方法 | |
Lal et al. | Root cause analysis of software bugs using machine learning techniques | |
CN111338692A (zh) | 基于漏洞代码的漏洞分类方法、装置及电子设备 | |
CN113722719A (zh) | 针对安全拦截大数据分析的信息生成方法及人工智能系统 | |
CN113742205A (zh) | 一种基于人机协同的代码漏洞智能检测方法 | |
CN103679034A (zh) | 一种基于本体的计算机病毒分析系统及其特征提取方法 | |
CN110750297A (zh) | 一种基于程序分析和文本分析的Python代码参考信息生成方法 | |
Saini et al. | Towards automating precision studies of clone detectors | |
Kim | Enhancing code clone detection using control flow graphs. | |
CN116702160B (zh) | 一种基于数据依赖增强程序切片的源代码漏洞检测方法 | |
CN116166789A (zh) | 一种方法命名精准推荐和审查方法 | |
CN115795059A (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 |