CN114386048A - 基于排序的开源软件安全漏洞补丁定位方法 - Google Patents
基于排序的开源软件安全漏洞补丁定位方法 Download PDFInfo
- Publication number
- CN114386048A CN114386048A CN202210049750.2A CN202210049750A CN114386048A CN 114386048 A CN114386048 A CN 114386048A CN 202210049750 A CN202210049750 A CN 202210049750A CN 114386048 A CN114386048 A CN 114386048A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- code
- model
- submission
- code submission
- 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
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
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/25—Fusion techniques
-
- 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
-
- 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/572—Secure firmware programming, e.g. of basic input output system [BIOS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/289—Phrasal analysis, e.g. finite state techniques or chunking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- 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
-
- 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/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/25—Fusion techniques
- G06F18/259—Fusion by voting
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- Mathematical Physics (AREA)
- Molecular Biology (AREA)
- Biomedical Technology (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Virology (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供了一种基于排序的开源软件安全漏洞补丁定位方法,具体包括:从网站中收集漏洞和代码提交数据;使用数据挖掘、统计分析方法抽取代码行、漏洞身份、漏洞修复位置、分词词袋共4个维度的漏洞和代码提交相似性特征;训练基于Bert模型的漏洞领域文本语义编码模块,并使用语义编码模块提取漏洞语义特征和代码提交语义特征;将漏洞语义特征和代码提交语义特征的拼接起来组成漏洞和代码提交的全部特征;模型训练;使用多数投票的思想进行模型融合。本发明能够从漏洞和代码提交中抽取特征,建立漏洞补丁提交排序模型,将开源软件仓库中的代码提交按照与漏洞的匹配程度进行排序,有效地降低补丁标注人员需要检查的代码提交数量。
Description
技术领域
本发明专利涉及计算机安全技术领域,具体涉及一种基于排序的开源软件安全漏洞补丁定位方法。
背景技术
XGBoost模型和LightGBM模型都是梯度提升树,能够从多种特征中提取自变量与因变量之间的联系,其原理是通过融合多个弱分类器来达到强分类器的效果。每次将真实值与当前预测值的残差作为下一次弱分类器的训练目标,不断迭代,使最终模型拟合数据。不同在于,XGBoost模型中树结构采用按层生长,而LightGBM模型中的树结构采用按叶生长,每次找到分裂收益较大的叶子。
卷积神经网络(Convolutional Neural Network,简称CNN)模型是一种采用卷积计算的神经网络模型。由于激活函数的非线性性和较深的网络层数,CNN模型可以检测训练数据和预测数据之间更深层次的关系。CNN模型通过前向传播生成预测数据,通过损失函数获得模型误差,再通过反向传播更新网络内部参数。经过多次迭代,CNN模型可以更好的拟合数据。
Bert(Bidirectional Encoder Representation from Transformers)模型是Google推出的新兴的自然语言处理模型,其将文本映射为向量形式进行训练,并采用注意力机制,能够紧密联系句子上下文,从而获得更真实的文本语义,并通过向量的形式输出出来。Bert模型已被大量应用于文本处理领域中。
当前,开源软件被软件行业的诸多程序所使用。然而开源软件中的安全漏洞会给这些程序造成巨大的损失,如数据泄露、软件崩溃等问题;并且随着开源软件的不断增多,安全漏洞的数量也在一直增加。为了有效管理漏洞数据,出现了以CVE、NVD、Snyk为代表的公开漏洞数据库。这些漏洞数据库中包含着漏洞的描述信息、相关的链接等信息,开发人员可以通过浏览漏洞数据库来了解漏洞、认知漏洞。开源软件开发者为了修复软件中的漏洞,通常以代码提交的形式将漏洞补丁发布于GitHub、GitLab等网站中。漏洞补丁对于开源软件的漏洞管理起着重要的作用。首先,开发人员可以直接应用漏洞补丁来修复相应的漏洞;其次,漏洞补丁可以用来评估漏洞的严重等级,便于软件公司合理安排修复时机;并且,开发人员可以根据漏洞补丁分析漏洞特征,学习如何补救或预防类似问题的发生;此外,丰富的漏洞补丁还可以促进其他方向的漏洞研究,例如漏洞预测、漏洞代码克隆检测、漏洞测试等等。
当前定位漏洞补丁主要通过人工依次检查代码提交的方式来定位漏洞补丁,这种方式十分困难且耗时时间长。当前存在一种使用特征工程的方法来定位漏洞补丁的技术,然而这种方法仅仅从统计分析的角度来抽取漏洞与代码提交之间的联系,忽略了漏洞描述与代码提交中的语义内容;同时,该方法仅仅使用单一模型来进行训练和预测,使得模型效果较差。
发明内容
有鉴于此,本发明提出了一种基于排序的新颖的开源软件安全漏洞补丁定位方法VCMatch(Vulnerability-Commit Match)。该方法使用数据挖掘和统计分析的技术从更广泛的维度出发搜集漏洞与代码补丁之间的联系。本发明又创建了一个漏洞相关的文本语义编码模块来抽取漏洞语义特征和代码提交语义特征,从而更全面的表征漏洞和代码提交。由于当前任务是一个正负样本不平衡的任务,本发明提出使用多模型训练后融合的方法来保证漏洞补丁定位效果的优异性。本发明使用XGBoost、LightGBM和CNN三种模型进行训练和预测,并针对当前基于排序的定位问题,提出了一种新颖的基于投票思想的模型融合方法。通过实验验证,对于相同的数据集,本发明提出的漏洞补丁方法VCMatch优于当前存在的方法。
本发明包括如下步骤:
步骤1:数据采集。
步骤2:数据预处理。
步骤3:漏洞与代码提交相似性特征提取。
步骤4:漏洞语义特征和代码提交语义特征提取。
步骤5:特征拼接。将步骤3和步骤4得到的所有特征拼接起来组成漏洞和代码提交的全部特征。
步骤6:模型训练。
步骤7:使用多数投票的思想进行模型融合。
本发明方法,从CVE、NVD、Snyk、GitHub和GitLab网站中收集漏洞和代码提交数据;使用数据挖掘、统计分析方法抽取代码行、漏洞身份、漏洞修复位置、分词词袋共4个维度的漏洞和代码提交相似性特征;训练基于Bert模型的漏洞领域文本语义编码模块,并使用语义编码模块提取漏洞语义特征和代码提交语义特征;将上述收集的共6个维度的特征进行拼接,使用XGBoost模型、LightGBM模型、CNN模型进行训练,并根据模型预测的漏洞与代码提交匹配概率对所有代码提交进行排序并获取其对应排名;使用投票思想的模型融合方法,将三个模型的排名值进行融合以得到最终代码提交的排名值。
其中,步骤1所述的数据采集具体是指:从Snyk网站中收集漏洞与代码提交匹配关系,根据漏洞及出现仓库生成对应负样本,从CVE和NVD网站中收集漏洞相关数据,从GitHub和GitLab等网站收集代码提交数据。
步骤1具体包括以下步骤:
步骤1.1:收集漏洞与代码提交匹配关系。遍历Snyk漏洞数据库所有数据页面,获得漏洞编号以及相关链接;根据链接中是否包含“commit”关键字和软件仓库名称关键字,获得对应开源软件漏洞补丁提交链接,最后使用正则表达式来提取补丁提交。
步骤1.2:生成数据集负样本。对于每一个漏洞,随机选择5000个漏洞所在仓库的代码提交作为负样本。
步骤1.3:收集漏洞相关数据。根据步骤1.1得到的漏洞编号,遍历CVE网站,获得对应漏洞的漏洞描述、漏洞被赋予编号日期;遍历NVD网站,获得对应漏洞的漏洞类型名称。
步骤1.4:收集提交数据。克隆开源软件在GitHub和GitLab中代码仓库内容;根据步骤1.1和步骤1.2中得到的所有代码提交,从代码仓库中获取每个代码提交对应的提交信息、提交时间、修改的代码内容。
进一步地,步骤2所述的数据预处理,具体是指:使用Google公司的Cubert中的分词方法对漏洞和代码提交中的文本内容进行分词,去掉分词后的停用词,保留既存在于漏洞词袋中又存在于代码提交词袋中的分词。
步骤2具体包括以下步骤:
步骤2.1:使用Google公司Cubert中的分词方法进行分词。对漏洞描述、漏洞类型名称进行分词,获得漏洞分词词袋;对提交信息、修改代码内容进行分词,获得代码提交分词词袋。
步骤2.2:去掉停用词。使用NLTK中的停用词库,去掉漏洞分词词袋和代码提交分词词袋中的停用词。
步骤2.3:统计只出现在其中一个分词词袋中的词语,将其从对应词袋中去除。
进一步地,步骤3所述的相似性特征提取,具体是指:代码行、漏洞身份、漏洞位置、分词词袋共4个大方向上抽取漏洞与代码提交之间的相似性特征。
步骤3具体包括以下步骤:
步骤3.1:从代码行的角度生成相似性特征。统计代码提交中增加的代码行数量、删除的代码行数量、总修改的代码行数。
步骤3.2:从漏洞身份的角度生成相似性特征。统计提交信息中漏洞编号个数、缺陷编号个数、问题编号个数、网页链接个数,统计提交信息中漏洞编号与对应漏洞是否匹配。
步骤3.3:从漏洞位置的角度生成相似性特征。计算漏洞被赋予漏洞编号的时间与代码提交时间之间的天数间隔,统计既出现在漏洞描述又被修改的文件路径/文件名/函数名个数,统计该文件路径/文件名/函数名个数占代码提交修改的文件路径/文件名/函数名数目的比例,统计只出现在代码提交修改内的文件路径/文件名/函数名个数。
步骤3.4:从分词词袋的角度生成相似性特征。统计提交信息与漏洞类型名称之间相同分词的个数,统计该相同分词个数占漏洞类型名称分词总数的比例;计算漏洞TFIDF向量与代码提交TFIDF向量之间的余弦相似度;统计提交信息与漏洞描述之间相同分词的个数,统计该相同分词个数占漏洞描述分词总数的比例,统计该相同分词中最大出现频数、平均出现频数、总出现频数;统计修改的代码内容与漏洞描述之间相同分词的个数,统计该相同分词个数占漏洞描述分词总数的比例,统计该相同分词中最大出现频数、平均出现频数、总出现频数。
进一步地,步骤4所述的语义特征提取,具体是指:构建Bert语义编码模块,并生成训练框架对编码模块进行训练,之后使用Bert模型自带的向量化方法将漏洞描述和提交信息转换为向量形式,然后分别经过语义编码模块得到漏洞语义特征和代码提交语义特征。
步骤4具体包括以下步骤:
步骤4.1:构建Bert语义编码模块。Bert语义编码模块包含两层:Bert层与全连接层。
步骤4.2:构建Bert语义编码模块训练框架并训练。语义编码模块训练框架如图3所示,将步骤4.1得到的漏洞描述向量和提交信息向量分别经过Bert语义编码模块,得到两个向量,对两个向量进行拼接,之后经过全连接层,全连接层的输出为漏洞与对应提交匹配的概率。
步骤4.3:使用Bert模型自带的向量化方法将漏洞描述和提交信息进行向量化。
步骤4.4:使用训练好的语义编码模块生成漏洞语义特征和代码提交语义特征。使用语义编码模块对漏洞描述处理得到漏洞语义特征,使用语义编码模块对提交信息处理得到代码提交语义特征。
进一步地,步骤6所述的模型训练,具体是指:使用XGBoost、LightGBM、CNN三种模型在步骤5拼接好的特征上进行训练并得到各个模型提交在各个模型上排名结果。
步骤6具体包括以下步骤:
步骤6.1:训练XGBoost模型用于代码提交排序。将步骤5拼接后的特征作为XGBoost模型的输入,将漏洞与补丁提交是否匹配作为模型训练结果标签,使用对数损失函数对XGBoost模型进行训练。模型训练后,每一对漏洞与代码提交生成的特征经过模型预测得到两者的匹配概率,根据匹配概率按照降序对所有代码提交进行排序。
步骤6.2:训练LightGBM模型用于漏洞补丁提交排序。将步骤5拼接后的特征作为LightGBM模型的输入,将漏洞与补丁提交是否匹配作为模型训练结果标签,使用对数损失函数对LightGBM模型进行训练。模型训练后,每一对漏洞与代码提交生成的特征经过模型预测得到两者的匹配概率,根据匹配概率按照降序对所有代码提交进行排序。
步骤6.3:训练CNN模型用于漏洞补丁提交排序。将步骤5拼接后的特征作为CNN模型的输入,将漏洞与补丁提交是否匹配作为模型训练结果标签,使用Focalloss损失函数对CNN模型进行训练。模型训练后,每一对漏洞与代码提交生成的特征经过模型预测得到两者的匹配概率,根据匹配概率按照降序对所有代码提交进行排序。
进一步地,步骤7所述的多数投票的思想进行模型融合,具体是指:对于每一个代码提交以及步骤6中三个模型给出的排名值,获得最接近的两个排名的均值;根据该均值对所有代码提交进行升序排序;若均值相同,则按照未使用的排名进行升序排序,以此来得到最终每个代码提交的排名。
与现有技术相比,本发明具有如下优点:
(1)本发明提出了一个基于Bert的语义编码模型:漏洞描述和提交信息中包含着丰富的文本语义信息,而当前基于词频的表征漏洞描述和提交信息的方法并不能有效提取这些深层语义信息。因此,我们构建了一个语义编码模块来提取深层语义信息。相较于使用统计分析方法得到的词频特征,这种方法能够更好的表征文本的真实含义,使得模型最终效果更好。
(2)本发明从更多的维度选取特征:本发明从6个维度提取漏洞与代码提交之间数十种联系,涉及范围广,特征选择更完善,真正抓住了漏洞和代码提交之间的有效联系,有利于将漏洞与补丁代码提交进行匹配。
(3)选择更多优秀的模型并提出有利于定位效果的融合方法:本发明采用XGBoost、LightGBM、CNN三种模型作为基础模型,这些模型能够在数据不平衡的任务中仍保持优秀的效果;同时,针对当前基于排序的定位问题,本发明提出了有利于提高定位效果的基于投票排序的模型融合方法,将三个基础模型的结果进行融合,使得最终模型的效果更优,能够更好的定位漏洞补丁。
(4)数据集丰富、有效性强:收集到的数据集涵盖10个开源项目、3种编程语言,涵盖面广。
附图说明
图1是本发明所提方法的流程图;
图2是本发明中收集漏洞与代码提交匹配关系示意图;
图3是本发明数据预处理流程图;
图4是本发明提出的语义编码模块;
图5是本发明语义编码模块训练框架图;
图6是本发明三个模型训练与预测示意图;
图7是本发明模型融合示意图;
图8是本发明模型框架图。
具体实施方式
为便于本领域普通技术人员理解和实施本发明,下面结合附图及实施示例对本发明作进一步的详细描述。应当理解,所述的实施示例仅用于说明和解释本发明,并不应该限制本发明的范围。
如图1所示,一种基于排序的开源软件安全漏洞补丁定位方法,本发明方法包括以下步骤:
步骤1:数据采集。其具体实现包含以下子步骤:
步骤1.1:收集漏洞与代码提交匹配关系,如图2所示。使用Python爬虫技术遍历Snyk漏洞数据库所有数据页面,获得数据页面中的漏洞编号以及对应的相关链接。
在获得漏洞相关链接后,通过判断链接中是否含有“commit”关键字来获得真正的漏洞补丁链接。
进一步地,筛选出包含“FFmpeg”、“ImageMagick”、“Jenkins”、“OpenSSL”、“QEMU”、“Wireshark”、“Linux”、“Moodle”、“PHP-src”或“phpMyAdmin”关键字的链接,从而获得对应10个开源软件的漏洞补丁数据作为数据集正样本。
之后,应用正则表达式从漏洞相关链接中提取出漏洞补丁提交编号,从而获得漏洞编号与漏洞补丁提交的对应关系,即CVE ID对应的补丁提交ID。
步骤1.2:生成数据集负样本。对于每一个漏洞,使用GitPython库从对应仓库的所有代码提交中随机选择5000个代码提交作为漏洞补丁负样本。
步骤1.3:收集漏洞相关数据。根据步骤1.1中收集到的漏洞编号,遍历CVE网站中对应的漏洞页面,获得漏洞描述、漏洞被赋予CVE编号日期;遍历NVD网站中对应的漏洞页面,获得漏洞对应的漏洞类型(CWE)名称。
步骤1.4:收集提交数据。克隆开源软件在GitHub和GitLab中代码仓库内容;根据步骤1.1和步骤1.2中得到的所有代码提交,使用GitPython库获得所有提交对应的提交信息、提交时间、提交修改的代码内容。
步骤2:数据预处理,如图3所示。其具体实现包含以下子步骤:
步骤2.1:使用Google公司Cubert中的分词方法进行分词。对漏洞描述、漏洞类型名称进行分词,获得漏洞分词词袋;对提交信息、修改代码内容进行分词,获得代码提交分词词袋。
步骤2.2:去掉停用词。使用NLTK中的停用词库,去掉漏洞分词词袋和代码提交分词词袋中的停用词。
步骤2.3:统计只出现在其中一个分词词袋中的词语,将其从对应词袋中去除。
步骤3:漏洞与代码提交相似性特征提取。其具体实现包含以下子步骤:
步骤3.1:从代码行的角度生成相似性特征。统计代码提交中增加的代码行数量、删除的代码行数量、总修改的代码行数。
步骤3.2:从漏洞身份的角度生成相似性特征。统计提交信息中漏洞编号个数、缺陷编号个数、问题编号个数、网页链接个数,统计提交信息中漏洞编号与对应漏洞是否匹配。
步骤3.3:从漏洞位置的角度生成相似性特征。计算漏洞被赋予漏洞编号的时间与代码提交时间之间的天数间隔,统计既出现在漏洞描述又被修改的文件路径/文件名/函数名个数,统计该文件路径/文件名/函数名个数占代码提交修改的文件路径/文件名/函数名数目的比例,统计只出现在代码提交修改内的文件路径/文件名/函数名个数。
步骤3.4:从分词词袋的角度生成相似性特征。统计提交信息与漏洞类型名称之间相同分词的个数,统计该相同分词个数占漏洞类型名称分词总数的比例;计算漏洞TFIDF向量与代码提交TFIDF向量之间的余弦相似度;统计提交信息与漏洞描述之间相同分词的个数,统计该相同分词个数占漏洞描述分词总数的比例,统计该相同分词中最大出现频数、平均出现频数、总出现频数;统计修改的代码内容与漏洞描述之间相同分词的个数,统计该相同分词个数占漏洞描述分词总数的比例,统计该相同分词中最大出现频数、平均出现频数、总出现频数。
步骤4:漏洞语义特征和代码提交语义特征提取,具体步骤如下:
步骤4.1:构建Bert语义编码模块。Bert语义编码模块如图4所示,其共包含两层:Bert层与全连接层,其中全连接层输入768维,输出36维。由于Bert模型模型足够丰富,因此只增加了一层全连接层转换输出维度。
步骤4.2:构建Bert语义编码模块训练框架并训练。语义编码模块训练框架如图5所示,将步骤4.1得到的漏洞描述向量和提交信息向量分别经过Bert语义编码模块,得到两个向量,对两个向量进行拼接,之后经过全连接层,全连接层的输出为漏洞与对应提交匹配的概率。
训练时使用步骤1得到的漏洞数据集训练,将漏洞与补丁提交是否匹配作为训练结果标签,采用Adam优化训练算法对整个框架进行训练。
步骤4.3:使用Bert模型自带的向量化方法将漏洞描述和提交信息进行向量化。
步骤4.4:使用训练好的语义编码模块生成漏洞语义特征和代码提交语义特征。使用语义编码模块对漏洞描述处理得到漏洞语义特征,使用语义编码模块对提交信息处理得到代码提交语义特征。
步骤5:特征拼接。将步骤3和步骤4得到的所有特征拼接起来组成漏洞和代码提交的全部特征。
步骤6:模型训练,如图6所示,具体步骤如下:
步骤6.1:训练XGBoost模型用于代码提交排序。将步骤5拼接后的特征作为XGBoost模型的输入,将漏洞与补丁提交是否匹配作为模型训练结果标签,使用对数损失函数对XGBoost模型进行训练。模型训练后,每一对漏洞与代码提交生成的特征经过模型预测得到两者的匹配概率,根据匹配概率按照降序对所有代码提交进行排序。用Rankxgb来表征XGBoost模型排序结果。
步骤6.2:训练LightGBM模型用于漏洞补丁提交排序。将步骤5拼接后的特征作为LightGBM模型的输入,将漏洞与补丁提交是否匹配作为模型训练结果标签,使用对数损失函数对LightGBM模型进行训练。模型训练后,每一对漏洞与代码提交生成的特征经过模型预测得到两者的匹配概率,根据匹配概率按照降序对所有代码提交进行排序。用Ranklgb来表征LightGBM模型排序结果。
步骤6.3:训练CNN模型用于漏洞补丁提交排序。将步骤5拼接后的特征作为CNN模型的输入,将漏洞与补丁提交是否匹配作为模型训练结果标签,使用Focalloss损失函数对CNN模型进行训练。其中Focalloss损失函数定义如下:
其中,p为预测样本属于1的概率;y为真实漏洞与提交匹配是否匹配标签,y的取值为{0,1};γ为聚焦参数,用于平滑地调整易于正确预测的样本向下加权的速率。
模型训练后,每一对漏洞与代码提交生成的特征经过模型预测得到两者的匹配概率,根据匹配概率按照降序对所有代码提交进行排序。用Rankcnn来表征CNN模型排序结果。
步骤7:使用多数投票的思想进行模型融合,如图7所示。将XGBoost模型、LightGBM模型、CNN模型获得的排序结果进行结果融合。具体方法为:对于每一个代码提交,根据步骤6中的三个模型获得对应三个排名Rankxgb、Ranklgb、Rankcnn,选择数值最接近的两个排名,计算其平均值Rankavg。根据Rankavg按照升序对所有代码提交进行排序,若存在两个提交具有相同Rankavg情况,则按照剩余的排名值进行升序排序。
步骤7排序后,漏洞补丁标注人员即可根据模型给出的排序结果依次检查代码提交,能更快的定位到真实的漏洞补丁提交上。
Claims (7)
1.一种基于排序的开源软件安全漏洞补丁定位方法,其特征在于,包括以下步骤:
步骤1:数据采集;
步骤2:数据预处理;
步骤3:漏洞与代码提交相似性特征提取;
步骤4:漏洞语义特征和代码提交语义特征提取;
步骤5:将步骤3和步骤4得到的所有特征拼接起来组成漏洞和代码提交的全部特征;
步骤6:模型训练;
步骤7:使用多数投票的思想进行模型融合。
2.根据权利要求1所述的基于排序的开源软件安全漏洞补丁定位方法,其特征在于,步骤1中,数据采集具体包括:
从Snyk网站中收集漏洞与代码提交匹配关系,根据漏洞及出现仓库生成对应负样本,从CVE和NVD网站中收集漏洞相关数据,从GitHub和GitLab网站收集代码提交数据。
3.根据权利要求1所述的基于排序的开源软件安全漏洞补丁定位方法,其特征在于,步骤2中,数据预处理包括:
使用Google公司的Cubert中的分词方法对漏洞和代码提交中的文本内容进行分词,去掉分词后的停用词,保留既存在于漏洞词袋中又存在于代码提交词袋中的分词。
4.根据权利要求1所述的基于排序的开源软件安全漏洞补丁定位方法,其特征在于,步骤3中,漏洞与代码提交相似性特征提取,包括:
代码行、漏洞身份、漏洞位置、分词词袋共4个大方向上抽取漏洞与代码提交之间的相似性特征。
5.根据权利要求1所述的基于排序的开源软件安全漏洞补丁定位方法,其特征在于,步骤4中,漏洞语义特征和代码提交语义特征提取,包括:
构建Bert语义编码模块,并生成训练框架对编码模块进行训练,之后使用Bert模型自带的向量化方法将漏洞描述和提交信息转换为向量形式,然后分别经过语义编码模块得到漏洞语义特征和代码提交语义特征。
6.根据权利要求1所述的基于排序的开源软件安全漏洞补丁定位方法,其特征在于,步骤6中,模型训练,包括:
使用XGBoost、LightGBM、CNN三种模型在步骤5拼接好的特征上进行训练并得到各个模型提交在各个模型上排名结果。
7.根据权利要求1所述的基于排序的开源软件安全漏洞补丁定位方法,其特征在于,步骤7中,使用多数投票的思想进行模型融合,包括:
对于每一个代码提交以及步骤6中三个模型给出的排名值,获得最接近的两个排名的均值;根据该均值对所有代码提交进行升序排序;若均值相同,则按照未使用的排名进行升序排序,以此来得到最终每个代码提交的排名。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210049750.2A CN114386048A (zh) | 2022-01-17 | 2022-01-17 | 基于排序的开源软件安全漏洞补丁定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210049750.2A CN114386048A (zh) | 2022-01-17 | 2022-01-17 | 基于排序的开源软件安全漏洞补丁定位方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114386048A true CN114386048A (zh) | 2022-04-22 |
Family
ID=81200923
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210049750.2A Pending CN114386048A (zh) | 2022-01-17 | 2022-01-17 | 基于排序的开源软件安全漏洞补丁定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114386048A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116048454A (zh) * | 2023-03-06 | 2023-05-02 | 山东师范大学 | 一种基于迭代对比学习的代码重排方法及系统 |
-
2022
- 2022-01-17 CN CN202210049750.2A patent/CN114386048A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116048454A (zh) * | 2023-03-06 | 2023-05-02 | 山东师范大学 | 一种基于迭代对比学习的代码重排方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111428044B (zh) | 多模态获取监管识别结果的方法、装置、设备及存储介质 | |
CN111639344B (zh) | 一种基于神经网络的漏洞检测方法及装置 | |
US10705809B2 (en) | Pruning engine | |
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 | |
CN112214610B (zh) | 一种基于跨度和知识增强的实体关系联合抽取方法 | |
CN112579477A (zh) | 一种缺陷检测方法、装置以及存储介质 | |
CN112749284B (zh) | 知识图谱构建方法、装置、设备及存储介质 | |
CN109635288A (zh) | 一种基于深度神经网络的简历抽取方法 | |
CN109871688B (zh) | 漏洞威胁程度评估方法 | |
CN108228758A (zh) | 一种文本分类方法及装置 | |
CN113656805B (zh) | 一种面向多源漏洞信息的事件图谱自动构建方法及系统 | |
CN111723870B (zh) | 基于人工智能的数据集获取方法、装置、设备和介质 | |
CN115495755B (zh) | 一种基于CodeBERT和R-GCN的源代码漏洞多分类检测的方法 | |
CN113742733A (zh) | 阅读理解漏洞事件触发词抽取和漏洞类型识别方法及装置 | |
CN114817932A (zh) | 基于预训练模型的以太坊智能合约漏洞检测方法及系统 | |
CN114386048A (zh) | 基于排序的开源软件安全漏洞补丁定位方法 | |
CN112328469A (zh) | 一种基于嵌入技术的函数级缺陷定位方法 | |
CN116821903A (zh) | 检测规则确定及恶意二进制文件检测方法、设备及介质 | |
CN116467720A (zh) | 一种基于图神经网络的智能合约漏洞检测方法及电子设备 | |
CN115510192A (zh) | 一种新闻事件脉络关系检测方法及装置 | |
CN112115362B (zh) | 一种基于相似代码识别的编程信息推荐方法及装置 | |
Mohsen et al. | Enhancing bug localization using phase-based approach | |
CN114328819A (zh) | 一种基于知识图谱的电力安全生产隐患预控方法 | |
US12008341B2 (en) | Systems and methods for generating natural language using language models trained on computer code | |
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 |