买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种基于深度特征的细粒度漏洞检测方法_华中科技大学_201811340404.X 

申请/专利权人:华中科技大学

申请日:2018-11-12

公开(公告)日:2020-09-18

公开(公告)号:CN109657473B

主分类号:G06F21/57(20130101)

分类号:G06F21/57(20130101);G06F40/211(20200101);G06F16/35(20190101);G06N3/04(20060101)

优先权:

专利状态码:有效-授权

法律状态:2020.09.18#授权;2019.05.14#实质审查的生效;2019.04.19#公开

摘要:本发明公开了一种基于深度特征的细粒度漏洞检测方法,其步骤包括以下两个阶段:训练阶段和检测阶段。训练阶段包含:收集大量的有漏洞和无漏洞的程序;对这些程序进行预处理,并从程序依赖图中提取出程序切片;对生成的程序切片按照漏洞类型打上标签;按照安全分析规则,从程序切片中提取出程序关注点;将程序切片和程序关注点转化成向量;搭建基于深度学习的漏洞检测模型,用向量训练模型参数至最优;最终得到一个训练完备的基于深度学习的漏洞检测模型。检测阶段包含:按照训练阶段的源码处理方式,从待测程序中提取程序切片和程序关注点并分别将其转化为向量;利用训练好的漏洞检测模型对向量进行分类,最后根据分类结果生成漏洞检测报告。

主权项:1.一种基于深度特征的细粒度漏洞检测方法,其特征在于,包括如下步骤:S1,训练阶段:收集训练程序,从训练程序中提取出程序切片,并给程序切片打上对应的标签,所述标签包括:该程序切片有无漏洞、如有漏洞其对应的漏洞属性;遍历所述训练程序中的所有语句,根据当前遍历到的语句在所述程序切片中对应的语句类型从所述程序切片中提取程序关注点,根据所述程序切片和程序关注点得到最终的训练数据;初步搭建基于深度学习的漏洞检测模型,以通过融合程序切片和程序关注点中的特征来检测漏洞,将所述训练数据和训练数据包括的程序切片对应的标签输入初步搭建的基于深度学习的漏洞检测模型,根据输出的训练数据对应的检测结果和程序切片对应的标签调整漏洞检测模型的参数,以使得漏洞检测模型的检测结果达到最优,基于调整好的漏洞检测模型的参数得到训练完备的基于深度学习的漏洞检测模型;步骤S1包括以下步骤:S1.1,收集训练程序,对所述训练程序进行预处理,将所述训练程序的源代码解析成程序依赖图的格式,再从程序依赖图中提取出程序切片;S1.2,按照程序切片有无漏洞和漏洞的属性给程序切片打上标签;S1.3,遍历训练程序中的所有语句,根据当前遍历到的语句在所述程序切片中对应的语句类型从所述程序切片中提取程序关注点;S1.4,解析程序切片和程序关注点中每条语句的成分,提取出其中的变量名和函数名,规范这些变量名和函数名的命名格式,消除不一致的代码命名规范;S1.5,将程序切片和程序关注点分别转化为数字化表征对应的向量;S1.6,初步搭建基于深度学习的漏洞检测模型,该漏洞检测模型通过融合程序切片和程序关注点中的特征来检测漏洞,用步骤S1.5中生成的向量训练该漏洞检测模型,根据输出的向量对应的检测结果和步骤S1.2打上的标签调整漏洞检测模型的参数,以使得漏洞检测模型的检测结果达到最优,得到一个训练完备的基于深度学习的漏洞检测模型;S2,检测阶段:按照训练阶段中源代码的处理方式,从待测程序中提取对应的程序切片和程序关注点,得到检测数据;将检测数据输入所述训练完备的基于深度学习的漏洞检测模型进行检测,根据检测结果生成对应的漏洞检测报告,所述漏洞检测报告包括待检测程序是否包含漏洞以及若包含漏洞其对应的漏洞属性。

全文数据:一种基于深度特征的细粒度漏洞检测方法技术领域本发明属于网络空间安全领域,更具体地,涉及一种基于深度特征的细粒度漏洞检测方法。背景技术大多数网络攻击都是由于某些软件漏洞引起的,尽管现在已经出现了很多的安全技术来避免软件漏洞。但是由于存在诸多原因,例如,软件的复杂性使得软件漏洞是不可避免的。鉴于无法避免软件漏洞,所以另一种防御方法是尽快检测并修补它们。检测软件源代码中的漏洞是解决软件漏洞问题的一个不可或缺的方法。在这种方法下,许多解决方案使用手动定义的漏洞模式来检测漏洞。但是,手动定义漏洞模式是一项主观且繁琐的任务,通常不能保证漏洞检测结果的误报率和漏报率。发明内容针对现有技术的以上缺陷或改进需求,本发明的目的在于解决现有手动定义检测漏洞的模式是一项主观且繁琐的任务,通常不能保证漏洞检测结果的误报率和漏报率的技术问题。为实现上述目的,本发明提供一种基于深度特征的细粒度漏洞检测方法,包括如下步骤: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,构建groundtruth,即参考标准,后期用于量化模型分类的误差,按照程序的属性标记普通程序切片,针对不同的漏洞类型标记不同的标签,例如针对无漏洞切片,标记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,利用wordembedding技术将普通的程序切片和程序关注点分别转化为数字化的表征,即词向量,具体步骤如下: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,利用wordembedding技术将普通的程序切片和程序关注点分别转化为数字化的表征,即词向量具体步骤和S1.5相同。S2.5,将S2.4中生成的数字化表征送入S1得到的漏洞检测模型中检测,最后根据模型的检测结果生成漏洞检测报告。为了证明模型的有效性,我们利用模型在3万条程序切片中进行检测,模型精确率和召回率的综合评价指标F1指数达93.65%,可见,基于本发明提供的漏洞模型检测漏洞的准确率很高,具有较好的实用性。本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

权利要求:1.一种基于深度特征的细粒度漏洞检测方法,其特征在于,包括如下步骤:S1,训练阶段:收集训练程序,从训练程序中提取出程序切片,并给程序切片打上对应的标签,所述标签包括:该程序切片有无漏洞、如有漏洞其对应的漏洞属性;遍历所述训练程序中的所有语句,根据当前遍历到的语句在所述程序切片中对应的语句类型从所述程序切片中提取程序关注点,根据所述程序切片和程序关注点得到最终的训练数据;初步搭建基于深度学习的漏洞检测模型,以通过融合程序切片和程序关注点中的特征来检测漏洞,将所述训练数据和训练数据包括的程序切片对应的标签输入初步搭建的基于深度学习的漏洞检测模型,根据输出的训练数据对应的检测结果和程序切片对应的标签调整漏洞检测模型的参数,以使得漏洞检测模型的检测结果达到最优,基于调整好的漏洞检测模型的参数得到训练完备的基于深度学习的漏洞检测模型;S2,检测阶段:按照训练阶段中源代码的处理方式,从待测程序中提取对应的程序切片和程序关注点,得到检测数据;将检测数据输入所述训练完备的基于深度学习的漏洞检测模型进行检测,根据检测结果生成对应的漏洞检测报告,所述漏洞检测报告包括待检测程序是否包含漏洞以及若包含漏洞其对应的漏洞属性。2.根据权利要求1所述的细粒度漏洞检测方法,其特征在于,步骤S1包括以下步骤:S1.1,收集训练程序,对所述训练程序进行预处理,将所述训练程序的源代码解析成程序依赖图的格式,再从程序依赖图中提取出程序切片;S1.2,按照程序切片有无漏洞和漏洞的属性给程序切片打上标签;S1.3,遍历训练程序中的所有语句,根据当前遍历到的语句在所述程序切片中对应的语句类型从所述程序切片中提取程序关注点;S1.4,解析程序切片和程序关注点中每条语句的成分,提取出其中的变量名和函数名,规范这些变量名和函数名的命名格式,消除不一致的代码命名规范;S1.5,将程序切片和程序关注点分别转化为数字化表征对应的向量;S1.6,初步搭建基于深度学习的漏洞检测模型,该漏洞检测模型通过融合程序切片和程序关注点中的特征来检测漏洞,用步骤S1.5中生成的向量训练该漏洞检测模型,根据输出的向量对应的检测结果和步骤S1.2打上的标签调整漏洞检测模型的参数,以使得漏洞检测模型的检测结果达到最优,得到一个训练完备的基于深度学习的漏洞检测模型。3.根据权利要求2所述的细粒度漏洞检测方法,其特征在于,步骤S1.1包括以下步骤:S1.1.1,解析每个训练程序,生成每个训练程序的程序依赖图G;S1.1.2,定位程序依赖图G中包含危险函数调用语句的节点p;S1.1.3,从节点p出发,从程序依赖图G中提取出所有和节点p有直接和间接依赖关系的节点对应的节点集合,获取所述节点集合中的代码语句,生成对应的程序切片S;所述直接和间接依赖关系包括直接或者间接的数据依赖关系和直接或者间接的控制依赖关系。4.根据权利要求2所述的细粒度漏洞检测方法,其特征在于,步骤S1.3中根据当前遍历到的语句在所述程序切片中对应的语句类型从所述程序切片中提取程序关注点,具体包括:如果当前遍历到的语句在程序切片中是危险函数调用参数的定义语句,则提取出来作为程序关注点;如果当前遍历到的语句在程序切片中是条件语句,则提取出来作为程序关注点;如果当前遍历到的语句在程序切片中是危险函数调用语句,则提取出来作为程序关注点。5.根据权利要求2所述的细粒度漏洞检测方法,其特征在于,步骤S1.4包括以下步骤:S1.4.1,将程序切片解析成token流;S1.4.2,分析每个token在训练程序所包括的语句中的成分,提取出每个token对应的变量标识符和自定义的函数名标识符,将变量标识符和自定义函数名标识符用统一的变量和函数名的命名方式替换。6.根据权利要求5所述的细粒度漏洞检测方法,其特征在于,所述步骤S1.4.2所用的统一的命名方式包括:变量命名方式:变量统一命名为variable_ID,对相同的变量标识符映射成相同的变量名,对不同的变量标识符按照其在程序中出现的顺序对其编号,替换成命名统一但是编号不一致的变量名;自定义函数命名方式,函数统一命名为function_ID,对相同的自定义函数标识符映射成相同的函数名,对不同的函数标识符按照其在程序中出现的顺序对其编号,替换成命名统一但是编号不一致的函数名。7.根据权利要求5所述的细粒度漏洞检测方法,其特征在于,步骤S1.5包括以下步骤:S1.5.1,将步骤S1.4.1解析成的token流提取出来生成语料库;S1.5.2,搭建词向量训练神经网络,将语料库送入词向量训练网络中训练,最后得到语料库中每个单词的词向量;S1.5.3,将程序切片和程序关注点中的单词替换成对应的词向量,生成数字化表征。8.根据权利要求2所述的细粒度漏洞检测方法,其特征在于,所述基于深度学习的漏洞检测模型包括:全局特征学习模型、局部特征学习模型、特征融合模型以及针对多分类的SVM分类器,步骤S1.6包括以下步骤:S1.6.1,搭建全局特征学习模型,输入程序切片的数字化表征和对应的程序切片标签,训练优化所述全局特征学习模型,最终利用训练好的全局特征学习模型生成全局特征;S1.6.2,搭建局部特征学习模型,输入程序关注点的数字化表征和对应的程序切片标签,训练优化所述局部特征学习模型,最终利用训练好的局部特征学习模型生成局部特征;S1.6.3,搭建特征融合模型,将步骤S1.6.1和步骤S1.6.2中生成的全局特征和局部特征和对应的程序切片标签输入到特征融合模型中,训练优化所述特征融合模型,最终利用训练好的特征融合模型生成融合特征;S1.6.4,搭建针对多分类的SVM分类器,用融合特征和程序切片标签训练所述针对多分类的SVM分类器,最终得到一个各部分都训练完备的基于深度学习的漏洞检测模型。9.根据权利要求2所述的细粒度漏洞检测方法,其特性在于,步骤S2包括以下步骤:S2.1,对待检测程序预处理,解析待检测程序,生成待检测程序的程序切片;S2.2,根据待检测程序对应的程序切片所包括的各个语句的类型,生成待检测程序的程序关注点;S2.3,规范化待检测程序的程序切片和待检测程序的程序关注点的格式,过滤无关的程序语句,消除不一致的代码风格;S2.4,将待检测程序的程序切片和待检测程序的程序关注点分别转化为数字化的表征对应的向量;S2.5,将步骤S2.4中生成的向量输入训练完备的基于深度学习的漏洞检测模型中检测,最后根据模型的检测结果生成漏洞检测报告。

百度查询: 华中科技大学 一种基于深度特征的细粒度漏洞检测方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。