CN115563626A - 一种面向cve的漏洞可利用性预测方法 - Google Patents
一种面向cve的漏洞可利用性预测方法 Download PDFInfo
- Publication number
- CN115563626A CN115563626A CN202211295039.1A CN202211295039A CN115563626A CN 115563626 A CN115563626 A CN 115563626A CN 202211295039 A CN202211295039 A CN 202211295039A CN 115563626 A CN115563626 A CN 115563626A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- data
- model
- training
- unstructured
- 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.)
- Granted
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
- 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
Abstract
本发明公开了一种面向CVE的漏洞可利用性预测方法,包括:采集漏洞数据,漏洞数据包括结构化漏洞数据、非结构化漏洞文本数据和非结构化漏洞利用代码数据;基于非结构化漏洞文本数据和非结构化漏洞利用代码数据训练fastText文本嵌入模型,利用fastText文本嵌入模型提取漏洞的漏洞文本特征;基于非结构化漏洞利用代码数据提取基于抽象语法树节点的漏洞利用代码特征;对结构化漏洞数据进行编码或归一化处理,提取每个漏洞的漏洞固有特征;基于漏洞文本特征、漏洞利用代码特征和漏洞固有特征构建LightGBM预测模型,利用LightGBM预测模型进行漏洞可利用性的预测。本发明提供了一种有效的漏洞可利用性预测方法。
Description
技术领域
本发明属于信息安全技术领域,特别是涉及一种面向CVE的漏洞可利用性预测方法。
背景技术
CVE(Common Vulnerability Explosure,通用漏洞披露)是目前使用最广泛的漏洞数据库,列出了已公开披露的各种计算机安全缺陷。近年来,被发现并公开披露的漏洞数量急剧上升,然而其中只有小部分(27.9%)能够被广泛地利用到真实攻击中,且这些漏洞的利用价值各不相同。
CVSS(Common Vulnerability Scoring System,通用漏洞评分系统)是目前对漏洞最为官方的评价系统。CVSS根据漏洞的攻击途径、攻击复杂度、认证、机密性、完整性、可用性等因素通过加权计算得出一个漏洞评分,这一评分可以作为漏洞严重程度的判断标准。然而,CVSS给出的评分仅反映了总体的风险,评分高并不意味着漏洞能够被用来攻击的概率大。因此,CVSS评分本质上与漏洞是否能被利用没有直接的关联,部分漏洞虽然CVSS评分很高,但是没有给出相应的exp(漏洞利用代码),使得漏洞本身难以被广泛利用。现有的其他漏洞评判方法中,也很少针对漏洞的可利用性进行预测。市面上出现的大多数漏洞评判系统仅是将漏洞的描述、建议、缓解措施等信息进行了聚合与可视化,或是如专利申请CN114065223A中的方法,在CVSS的计算标准上进行改进,调整各项权值来重新评分。
目前对于漏洞可利用性的评判,主要是通过描述漏洞与PoC(即exp,漏洞利用代码)之间的关系,或是通过社交网络中提到的漏洞信息(如Twitter)来进行预测。然而,这些方法也存在一些问题:首先,社交网络中的数据无法保证其真实性,部分结合了暗网、深网数据的方法虽然能够得到更优秀的结果,但数据覆盖面较窄;其次,在处理与漏洞相关的文本时,以往的文本处理技术仅表示出了单词层面的统计特征,不能捕捉它们的上下文,也难以识别专业术语和派生词的含义。另外,真实环境下的数据集正负样本比例通常都是极不平衡的,这对模型的预测准确率会造成一定影响,其中,EPSS(Exploit PredictionScoring System,漏洞利用预测评分系统)是目前该领域中一个具有代表性的平台,但也依然存在较多问题:漏洞数据更新不及时、漏洞描述信息不全、预测模型选择的特征较为老旧,因此导致了目前实际应用效果较差,无法解决日益突出的漏洞管理与修复难的问题。
发明内容
本发明的目的在于克服现有技术的不足,提供一种面向CVE的漏洞可利用性预测方法。
本发明的目的是通过以下技术方案来实现的:一种面向CVE的漏洞可利用性预测方法,包括:
S100.采集漏洞数据,所述漏洞数据包括结构化漏洞数据、非结构化漏洞文本数据和非结构化漏洞利用代码数据;
S200.基于所述非结构化漏洞文本数据和非结构化漏洞利用代码数据训练fastText文本嵌入模型,并利用所述fastText文本嵌入模型提取每个漏洞的漏洞文本特征;
S300.基于所述非结构化漏洞利用代码数据提取基于抽象语法树节点的漏洞利用代码特征;
S400.对所述结构化漏洞数据进行编码或归一化处理,并提取每个漏洞的漏洞固有特征;
S500.基于所述漏洞文本特征、漏洞利用代码特征和所述漏洞固有特征构建LightGBM预测模型,并利用LightGBM预测模型进行漏洞可利用性的预测。
优选的,所述S100包括以下步骤:
S110.确定采集漏洞数据的目标网站;
S120.利用网络爬虫访问所述目标网站中的漏洞信息网页,并采集漏洞数据;
S130.将漏洞数据以漏洞编号为索引的结构化形式存储在数据库中。
优选的,所述S200包括以下步骤:
S210.对所述非结构化漏洞文本数据和非结构化漏洞利用代码数据进行预处理得到第一数据;
S220.基于第一数据建立fastText词向量生成模型;
S230.利用fastText词向量生成模型对所述第一数据进行无监督训练得到所述第一数据中的每个单词的词向量;
S240.基于所述第一数据中每个单词的词向量生成句向量。
优选的,对所述非结构化漏洞文本数据和非结构化漏洞利用代码数据进行预处理包括:
S211.利用正则表达式提取非结构化漏洞利用代码数据中的注释文本,并将所述注释文本合并至非结构化漏洞文本数据;
S212.去除所述非结构化漏洞数据中的非ASCII字符、标点符号以及停用词;
S213.将所述非结构化漏洞数据中的所有大写字母替换为小写字母,并进行词形还原操作得到第一数据。
优选的,基于第一数据建立fastText词向量生成模型,包括:
S221.设置多项第一模型超参数,多项第一模型超参数包括训练模式、生成的词向量维数、单词最小出现频数、学习率和上下文窗口大小;
S222.分别为每项第一模型超参数设置对应的搜索范围;
S223.遍历每项第一模型超参数的搜索范围,生成多种第一超参数组合;
S224.分别基于每种第一超参数组合训练fastText词向量生成模型;
S225.分别计算每种第一超参数组合下fastText词向量生成模型的模型评分;
S226.选择模型评分最高的第一超参数组合对应的fastText词向量生成模型作为最终的fastText词向量生成模型。
优选的,所述S300包括以下步骤:
S310.根据非结构化漏洞利用代码数据中漏洞利用代码的语言类型选择对应的工具来生成漏洞利用代码的抽象语法树;
S320.计算所述抽象语法树的圈复杂度;
S330.对所述抽象语法树进行递归遍历,统计第二数据,所述第二数据包括节点的类型数量、叶子节点数量、内部节点数量、调用外部函数库次数、外部函数数量、用户定义函数数量、用户定义函数调用次数、运算符的类型数量、控制语句类型的节点数量;
S340.对每一种节点类型,统计第三数据,所述第三数据包括该类型节点的所有子树的最大深度以及子树的控制语句数量;
S350.合并第二数据和第三数据作为漏洞利用代码特征。
优选的,所述S400中对所述结构化漏洞数据进行编码或归一化处理,包括:
使用One-hot编码将类别型数据转化为向量;
使用缩放至[0,1]区间的归一化处理将数值型数据转化为向量;
使用二进制向量编码将二进制数据转化为向量。
优选的,所述S500包括以下步骤:
S510.分别将每个漏洞的漏洞文本特征、漏洞利用代码特征和漏洞固有特征进行向量拼接得到融合特征向量;
S520.基于融合特征向量生成训练样本集,所述训练样本集的格式为D={(x1,y1),(x2,y2),…(xn,yn)},x代表融合特征向量,y代表正负性标识;
S530.基于所述训练样本集构建LightGBM预测模型;
S540.将LightGBM预测模型对待预测的漏洞样本输出的预测分数作为漏洞可利用性的量化指标。
优选的,所述训练样本的正负性判断方法为:
判断所述训练样本是否曾经被利用以及是否正在被利用,若所述训练样本曾经被利用或者正在被利用,则将该训练样本划分为正样本,否则将该训练样本划分为负样本。
优选的,所述S530包括以下步骤:
S531.设置多项模型超参数,多项模型超参数包括最大训练次数rmax、早停止容忍次数rearly、决策树最大深度mtree、最大叶子数量mleaf、惩罚系数γ、特征子抽样比例pfeature和样本抽样参数a,b;
S532.将训练样本集D={(x1,y1),(x2,y2),…(xn,yn)}作为总数据集,采用十折交叉验证方式将总数据集均分为10份子数据集;
S533.将1份此前未设置为验证数据集的子数据集作为验证数据集,其余9份子数据集作为训练数据集;
S534.对训练数据集中所有训练样本的融合特征向量x抽取pfeature×100%的维度保留,然后采用EFB算法对融合特征向量中互斥的维度进行合并;
S535.初始化一棵决策树,并定义损失函数,决策树中只有一个叶子节点,该叶子节点包含训练数据集的所有训练样本;
S536.对于决策树中的每个叶子节点,计算该叶子节点内所有训练样本的一阶导数gi和二阶导数hi,并根据训练样本的一阶导数与二阶导数比值的绝对值将训练样本从大到小排序,然后根据样本抽样参数选择排序前a×100%的训练样本作为样本集合A,在所有训练样本中随机抽取b×100%的训练样本作为样本集合B,抽取出的样本总集合O=A+B;
S537.遍历样本总集合O中训练样本的融合特征向量,在每一个特征维度j下采用等频分箱算法将O中所有训练样本在特征维度j的连续浮点特征值离散化为k个整数d1j,d2j,…,dkj,即将O中的训练样本分为k个组,将离散化后的整数值dij作为索引,同时为每一组训练样本构造一个直方图;
S538.对于决策树中的每个叶子节点,采用以下公式计算该叶子节点中选择特征维度j下值为d处进行分裂所获得的信息增益,将每个叶子节点对应的所有信息增益中最大的信息增益作为该叶子节点的分裂增益:
其中,以I表示一条训练样本,则nO=∑I(xi∈O),
Al={xi∈A:xij≤d},Ar={xi∈A:xij>d},
Bl={xi∈B:xij≤d},Br={xi∈B:xij>d};
S539.在决策树的所有叶子节点中从左往右遍历,找到分裂增益最大的一个叶子节点进行分裂,通过直方图做差加速得到每个新的叶子节点对应的样本集和直方图;
S5310.判断决策树是否超过设定的最大深度mtree或者叶子节点数量是否超过mleaf,若决策树超过设定的最大深度mtree或者叶子节点数量超过mleaf,则停止分裂,得到一个中间模型,然后执行S5311,否则执行S536;
S5311.利用S5310得到的中间模型对验证数据集进行预测,计算该中间模型的AUC值;
S5312.判断中间模型的AUC值是否连续下降rearly轮或训练轮数是否达到rmax轮:若中间模型的AUC值连续下降rearly轮或训练轮数达到rmax轮,则执行S5313,否则执行S535;
S5313.判断是否每份子数据集曾经均已被设置为验证数据集:若是,则执行S5314,否则执行S533;
S5314.计算十折交叉验证中得到的10个中间模型的AUC值的平均值,将该平均值作为当前设置的模型超参数对应的模型评分;
S5315.判断S5314中的模型评分是否达到第一预设值:若是,则将当前的模型超参数作为最终模型超参数,然后执行S5317;若否,则执行S5316;
S5316.判断获得的模型评分的数量是否达到第二预设值:若是,则将所有模型评分中分值最大的模型评分对应的模型超参数作为最终模型超参数,然后执行S5317;若否,则执行S531;
S5317.将训练样本集全部作为训练数据集,基于最终模型超参数重复S534-S5310步骤,将训练得到的模型作为最终的LightGBM预测模型。
本发明的有益效果是:
(1)本发明使用fastText词对漏洞相关的文本数据进行特征提取,相较于使用TF-IDF等基于词频统计的方法而言,fastText词向量生成模型底层所使用的n-grams特征能够帮助模型理解上下文,实现语义层次上的分析;相较于TextCNN等深度学习方法,fastText词向量生成模型在达到与其性能相当的基础上运行速度更快,而且对于漏洞描述这类长度可变的文本数据,fastText词向量生成模型的结构使得它更加适合这类数据;
(2)本发明结合漏洞描述文本的文本特征、基于抽象语法树节点的漏洞利用代码特征和结构化漏洞数据中的漏洞固有特征共同对漏洞可利用性的预测提供依据,相较于现有方案提供了一种更加全面、有效的可利用性评判方法;
(3)本发明使用LightGBM算法构建LightGBM预测模型,LightGBM是目前生产环境中使用率最高的机器学习模型之一,使用这类基于决策树的模型一方面可以直观地看见模型对数据的预测过程,得到更佳的可解释性,另一方面对于数据样本比例不均衡的情况也具有更好的适应性;此外,LightGBM本身还具有内存占用率低、准确率更高、支持并行化和大规模数据处理、支持类别型特征等优点。
附图说明
图1为本发明中面向CVE的漏洞可利用性预测方法的一种实施例的流程图;
图2为本发明中采集历史数据的一种实施例的流程图;
图3为本发明中提取漏洞文本特征的一种实施例的流程图;
图4为本发明中提取基于抽象语法树节点的漏洞利用代码特征的一种实施例的流程图。
具体实施方式
下面将结合实施例,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
参阅图1-图4,本实施例提供了一种面向CVE的漏洞可利用性预测方法,包括:
S100.采集漏洞数据,所述漏洞数据包括结构化漏洞数据和非结构化漏洞数据。
具体的,所述漏洞数据分为两部分,一部分是非结构化数据(即文本类数据,没有固定格式),另一部分是结构化数据(包含了评分等级、访问复杂度、保密性影响等实施例中具体说明的数据,各类数据都有其固定的格式),这些结构化数据描述了漏洞本身固有的特征。
在一个实施例中,如图2所示,所述S100包括以下步骤:
S110.确定采集漏洞数据的目标网站。
例如,所述目标网站包括NVD、Security Focus、Exploit-DB、CVSS、CPE、CWE、OVAL等,这些网站相对于CVE官方网站提供了更加详细的CVE漏洞信息。本实施例对CVSS、CWE、CPE、OVAL、Exploit-DB等五个漏洞信息相关网站进行数据收集;相较于现有方案,本实施例中多方面的数据收集更能够解决单一数据来源的覆盖范围不全面、描述角度不宽泛、描述内容不充分和数据更新不及时等问题;并且本实施例以官方平台发布的内容作为数据来源,相较于从社交平台、深网暗网中获取的内容,在权威性和真实性上更具有保障。
S120.利用网络爬虫访问所述目标网站中的漏洞信息网页,并采集漏洞数据。
一般的,针对不同的目标网站,分别构建对应的网络爬虫来访问其中的漏洞信息网页,以采集漏洞数据。
在一个实施例中,由于部分目标网站的服务器所在地为海外,如果从国内进行访问时出现响应时间不稳定甚至访问出错的情况,可以通过如Requests+Asyncio+Aiohttp库的结合使用,对目标网站进行异步、并发爬取。具体的,针对访问出错的情况设置10秒的最大访问时间限制和3次的最大访问次数限制,超时则重新进行访问,超过访问次数限制则终止当前访问,并记录所访问网页的URL。
在一个实施例中,如果目标网站出现频繁的访问出错情况,可以使用随机请求头模拟正常浏览器行为,或使用IP代理池技术更换不同IP进行爬取来防止因短时间内大量的请求而被网站限制的情况。
在一个实施例中,定期利用网络爬虫访问所述目标网站中的漏洞信息网页,采集漏洞数据。一般的,每次采集漏洞数据时采集新增的漏洞数据即可。
例如,每日定时利用网络爬虫访问所述目标网站中的漏洞信息网页,采集新增的漏洞数据。
S130.将漏洞数据以漏洞编号为索引的结构化形式存储在数据库中。
将漏洞数据以结构化形式进行存储,方便后续进行处理。
S200.基于所述非结构化漏洞文本数据和非结构化漏洞利用代码数据训练fastText文本嵌入模型,并利用所述fastText文本嵌入模型提取漏洞数据中每个漏洞对应的漏洞文本特征。
在一个实施例中,如图3所示,所述S200包括以下步骤:
S210.对所述非结构化漏洞文本数据和非结构化漏洞利用代码数据进行预处理得到第一数据。
在一个实施例中,对所述非结构化漏洞数据进行预处理包括:
S211.利用正则表达式提取非结构化漏洞利用代码数据中的注释文本,并将所述注释文本合并至非结构化漏洞文本数据;
S212.去除所述非结构化漏洞文本数据中的非ASCII字符、标点符号以及停用词。
S213.将所述非结构化漏洞文本数据中的所有大写字母替换为小写字母,并进行词形还原操作得到第一数据。
在一个实施例中,使用NLTK进行词形还原操作。NLTK(Natural LanguageToolkit,自然语言处理工具包)是Python语言中的一个常用库,其中实现了词形还原的功能
本实施例中使用NLTK进行词形还原可以避免时态或者词汇的单复数形式的影响。
S220.基于第一数据建立fastText词向量生成模型。
在一个实施例中,基于预处理后的漏洞数据建立fastText词向量生成模型,包括:
S221.设置多项第一模型超参数,多项第一模型超参数包括训练模式、生成的词向量维数、单词最小出现频数、学习率和上下文窗口大小。
例如,一个可行的超参数遍历范围如下:训练模式:CBOW、Skip-gram两类;生成的词向量维数:[30,160],以5为间隔;单词最小出现频数:[1,10],以1为间隔;学习率:[0.01,1],以0.05为间隔;上下文窗口大小:[5,50],以5为间隔
S222.分别为每项第一模型超参数设置对应的搜索范围。
S223.遍历每项第一模型超参数的搜索范围,生成多种第一超参数组合。
S224.分别基于每种第一超参数组合训练fastText词向量生成模型。
S225.分别计算每种第一超参数组合下fastText词向量生成模型的模型评分。
在一个实施例中,所述模型评分的计算方法为:fastText词向量生成模型训练完毕后,对于某一给定的单词,可以输出模型认为与该单词最近似的某些单词,以及相应的词向量。因此所述模型评分的计算方法为:对预处理后的文本数据集进行词频统计,从出现次数前100的单词中选取5对相关性较强的单词,作为评价数据集;对于某一超参数组合训练出的fastText词向量生成模型,将评价数据集中的单词输入模型,得到相应的词向量;对于每对单词,使用余弦相似度计算两个单词之间的相似性分数;将5对单词的相似性分数计算平均值,作为fastText词向量生成模型的模型评分。
S226.选择模型评分最高的第一超参数组合对应的fastText词向量生成模型作为最终的fastText词向量生成模型。
S230.利用fastText词向量生成模型对所述第一数据进行无监督训练得到所述第一数据中的每个单词的词向量。
S240.基于所述第一数据中每个单词的词向量生成句向量。
本实施例中的“特征”(包括漏洞文本特征及漏洞固有特征)在计算机中都是以向量的形式表示。对于文本数据而言,特征提取的过程是通过语言模型进行语义分析,将人类可读的自然语言文本转化为计算机可读的向量的过程。即词向量描述了一个单词的特征,句向量描述了一个句子的特征。因此认为句向量和漏洞文本特征两者是一个包含关系,句向量是漏洞文本特征的其中一种形式。
由于漏洞的文本描述是以句子形式存在并与漏洞一一对应,因此需要在词向量的基础上生成句向量来对漏洞文本进行表示。具体的,句向量的生成方法是:利用fastText词向量生成模型对句子中的每一个单词分别生成词向量,然后计算所有词向量的算术平均值来得到句向量。
S300.基于所述非结构化漏洞利用代码数据提取基于抽象语法树节点的漏洞利用代码特征。
在一个实施例中,如图4所示,所述S300包括以下步骤:
S310.根据非结构化漏洞利用代码数据中漏洞利用代码的语言类型选择对应的工具来生成漏洞利用代码的抽象语法树。
S320.计算所述抽象语法树的圈复杂度。
S330.对所述抽象语法树进行递归遍历,统计第二数据,所述第二数据包括节点的类型数量、叶子节点数量、内部节点数量、调用外部函数库次数、外部函数数量、用户定义函数数量、用户定义函数调用次数、运算符的类型数量、控制语句类型的节点数量。
S340.对每一种节点类型,统计第三数据,所述第三数据包括该类型节点的所有子树的最大深度以及子树的控制语句数量。
S350.合并第二数据和第三数据作为漏洞利用代码特征。
S400.对所述结构化漏洞数据进行编码或归一化处理,并提取每个漏洞的漏洞固有特征。
在一个实施例中,对所述结构化漏洞数据进行编码或归一化处理包括以下步骤:
(1)使用One-hot编码将类别型数据转化为向量。例如,CVSS的数据包括访问向量、访问复杂度、是否必须认证、保密性影响、完整性影响、可用性影响六个类别型特征(即“高”、“中”、“低”或“有”、“无”等类别),以及由这些特征计算得到的基础分数、可利用性分数、影响分数三个数值型特征。对于从CVSS采集的漏洞数据,若该漏洞数据为类别型数据,则使用One-hot编码得到向量;若该漏洞数据为数值型数据,则使用缩放至(0,1)区间的归一化处理得到一维向量。
(2)使用二进制向量编码将二进制数据转化为向量。例如,CPE的数据主要为包含相应漏洞的程序等软件产品。因此,对于从CPE采集的漏洞数据,对于这类二进制数据使用二进制向量编码得到向量。又例如,OVAL的数据包括修复漏洞和补丁的方法措施,对于从OVAL采集的漏洞数据,对该漏洞数据中的补丁文件使用二进制向量编码得到向量,对该漏洞数据中方法的描述文本使用S200中的文本数据处理方法得到向量。
(3)使用缩放至[0,1]区间的归一化处理将数值型数据转化为向量。例如,CWE的数据包括关注CWE-ID编号以及涉及的产品数量两个内容。对于从CWE采集的漏洞数据,对该漏洞数据中的CWE-ID编号进行One-hot编码得到向量,对该漏洞数据中的产品数量进行缩放至(0,1)区间的归一化处理得到一维向量。
本实施例中,将对漏洞数据进行编码和归一化处理得到的向量进行拼接生成漏洞特征向量,即为漏洞固有特征。
S500.基于所述漏洞文本特征和所述漏洞固有特征构建LightGBM预测模型,并利用LightGBM预测模型进行漏洞可利用性的预测。
在一个实施例中,所述S500包括以下步骤:
S510.分别将每个漏洞的漏洞文本特征和漏洞固有特征进行向量拼接得到融合特征向量。
S520.基于融合特征向量生成训练样本集,所述训练样本集的格式为D={(x1,y1),(x2,y2),…(xn,yn)},x代表融合特征向量,y代表正负性标识。
模型的实际输入为融合特征向量和样本正负性。
具体的,通过为训练样本设置“是否曾经被利用”以及“是否正在被广泛利用”两类事实性标签,来标识训练样本的正负性。“是否曾经被利用”的判断依据为是否能够找到相应的漏洞利用代码(PoC);“是否正在被广泛利用”的判断依据为是否能够找到相应的攻击特征(attack signature)。若两标签中有一为真,则该样本为正样本,即表示漏洞可被利用。
S530.基于所述训练样本集构建LightGBM预测模型。
在一个实施例中,所述S530包括以下步骤:
S531.设置多项模型超参数,多项模型超参数包括最大训练次数rmax、早停止容忍次数realy、决策树最大深度mtree、最大叶子数量mleaf、惩罚系数γ、特征子抽样比例pfeature和样本抽样参数a,b。
S532.将训练样本集D={(x1,y1),(x2,y2),…(xn,yn)}作为总数据集,采用十折交叉验证方式将总数据集均分为10份子数据集。
S533.将1份此前未设置为验证数据集的子数据集作为验证数据集,其余9份子数据集作为训练数据集。
S534.根据特征子抽样比例pfeature对训练样本的融合特征向量进行子抽样,即,对训练数据集中所有训练样本的融合特征向量x抽取pfeature×100%的维度保留;然后采用EFB算法对融合特征向量中互斥的维度进行合并,将训练样本的融合特征向量降维。
S535.初始化一棵决策树,并定义损失函数,决策树中只有一个叶子节点,该叶子节点包含训练数据集的所有训练样本。
S536.对于决策树中的每个叶子节点,计算该叶子节点内所有训练样本的一阶导数gi和二阶导数hi,并根据训练样本的一阶导数与二阶导数比值的绝对值将训练样本从大到小排序,然后根据样本抽样参数选择排序前a×100%的训练样本作为样本集合A,在所有训练样本中随机抽取b×100%的训练样本作为样本集合B,抽取出的样本总集合O=A+B。
S537.遍历样本总集合O中训练样本的融合特征向量,在每一个特征维度j下采用等频分箱算法将O中所有训练样本在特征维度j的连续浮点特征值离散化为k个整数d1j,d2j,…,dkj,即将O中的训练样本分为k个组,,将离散化后的整数值dij作为索引,同时为每一组训练样本构造一个直方图。
S538.对于决策树中的每个叶子节点,采用以下公式计算该叶子节点中选择特征维度j下值为d处进行分裂所获得的信息增益,将每个叶子节点对应的所有信息增益中最大的信息增益作为该叶子节点的分裂增益:
其中,以I表示一条训练样本,则nO=∑I(xi∈O),
Al={xi∈A:xij≤d},Ar={xi∈A:xij>d},
Bl={xi∈B:xij≤d},Br={xi∈B:xij>d}。
S539.在决策树的所有叶子节点中从左往右遍历,找到分裂增益最大的一个叶子节点进行分裂,通过直方图做差加速得到每个新的叶子节点对应的样本集和直方图。
S5310.判断决策树是否超过设定的最大深度mtree或者叶子节点数量是否超过mleaf,若决策树超过设定的最大深度mtree或者叶子节点数量超过mleaf,则停止分裂,得到一个中间模型,然后执行S5311,否则执行S536。
S5311.利用S5310得到的中间模型对验证数据集进行预测,计算该中间模型的AUC值。
AUC本身含义为ROC曲线的面积,但可以通过以下公式求得:
式中,ranki为第i个样本的排序位置,表示将模型的所有预测值有小到大排序后第i个样本所在的位置;M表示正样本的个数;N表示负样本的个数;∑i∈positiveClassranki表示仅对正样本的排序位置进行求和。
S5312.判断中间模型的AUC值是否连续下降rearly轮或训练轮数是否达到rmax轮:若中间模型的AUC值连续下降rearly轮或训练轮数达到rmax轮,则执行S5313;若中间模型的AUC值未连续下降rearly轮或训练轮数未达到rmax轮,则执行S535。
S5313.判断是否每份子数据集曾经均已被设置为验证数据集:若每份子数据集曾经均已被设置为验证数据集,则执行S5314,否则执行S533。即判断是否已完成十折交叉验证的10轮循环。
S5314.计算十折交叉验证中得到的10个中间模型的AUC值的平均值,将该平均值作为当前设置的模型超参数对应的模型评分。
S5315.判断S5314中的模型评分是否达到第一预设值(例如,第一预设值为0.9):若是,则将当前的模型超参数作为最终模型超参数,然后执行S5317;若否,则执行S5316。
S5316.判断获得的模型评分的数量是否达到第二预设值(例如,第二预设值为5):若是,则将所有模型评分中分值最大的模型评分对应的模型超参数作为最终模型超参数,然后执行S5317;若否,则执行S531。
S5317.将训练样本集全部作为训练数据集,基于最终模型超参数重复S534-S5310步骤,将训练得到的模型作为最终的LightGBM预测模型。
S540.将LightGBM预测模型对待预测的漏洞样本输出的预测分数作为漏洞可利用性的量化指标。
具体的,LightGBM预测模型对于每个输入的样本会输出一个[0,1]间的预测分数,该预测分数即为漏洞可利用性的量化指标。
以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
Claims (10)
1.一种面向CVE的漏洞可利用性预测方法,其特征在于,包括:
S100.采集漏洞数据,所述漏洞数据包括结构化漏洞数据、非结构化漏洞文本数据和非结构化漏洞利用代码数据;
S200.基于所述非结构化漏洞文本数据和非结构化漏洞利用代码数据训练fastText文本嵌入模型,并利用所述fastText文本嵌入模型提取每个漏洞的漏洞文本特征;
S300.基于所述非结构化漏洞利用代码数据提取基于抽象语法树节点的漏洞利用代码特征;
S400.对所述结构化漏洞数据进行编码或归一化处理,并提取每个漏洞的漏洞固有特征;
S500.基于所述漏洞文本特征、漏洞利用代码特征和漏洞固有特征构建LightGBM预测模型,并利用LightGBM预测模型进行漏洞可利用性的预测。
2.根据权利要求1所述的一种面向CVE的漏洞可利用性预测方法,其特征在于,所述S100包括以下步骤:
S110.确定采集漏洞数据的目标网站;
S120.利用网络爬虫访问所述目标网站中的漏洞信息网页,并采集漏洞数据;
S130.将漏洞数据以漏洞编号为索引的结构化形式存储在数据库中。
3.根据权利要求1所述的一种面向CVE的漏洞可利用性预测方法,其特征在于,所述S200包括以下步骤:
S210.对所述非结构化漏洞文本数据和非结构化漏洞利用代码数据进行预处理得到第一数据;
S220.基于第一数据建立fastText词向量生成模型;
S230.利用fastText词向量生成模型对所述第一数据进行无监督训练得到所述第一数据中的每个单词的词向量;
S240.基于所述第一数据中每个单词的词向量生成句向量。
4.根据权利要求3所述的一种面向CVE的漏洞可利用性预测方法,其特征在于,对所述非结构化漏洞文本数据和非结构化漏洞利用代码数据进行预处理包括:
S211.利用正则表达式提取非结构化漏洞利用代码数据中的注释文本,并将所述注释文本合并至非结构化漏洞文本数据;
S212.去除所述非结构化漏洞文本数据中的非ASCII字符、标点符号以及停用词;
S213.将所述非结构化漏洞文本数据中的所有大写字母替换为小写字母,并进行词形还原操作得到第一数据。
5.根据权利要求3所述的一种面向CVE的漏洞可利用性预测方法,其特征在于,基于第一数据据建立fastText词向量生成模型,包括:
S221.设置多项第一模型超参数,多项第一模型超参数包括训练模式、生成的词向量维数、单词最小出现频数、学习率和上下文窗口大小;
S222.分别为每项第一模型超参数设置对应的搜索范围;
S223.遍历每项第一模型超参数的搜索范围,生成多种第一超参数组合;
S224.分别基于每种第一超参数组合训练fastText词向量生成模型;
S225.分别计算每种第一超参数组合下fastText词向量生成模型的模型评分;
S226.选择模型评分最高的第一超参数组合对应的fastText词向量生成模型作为最终的fastText词向量生成模型。
6.根据权利要求1所述的一种面向CVE的漏洞可利用性预测方法,其特征在于,所述S300包括以下步骤:
S310.根据非结构化漏洞利用代码数据中漏洞利用代码的语言类型选择对应的工具来生成漏洞利用代码的抽象语法树;
S320.计算所述抽象语法树的圈复杂度;
S330.对所述抽象语法树进行递归遍历,统计第二数据,所述第二数据包括节点的类型数量、叶子节点数量、内部节点数量、调用外部函数库次数、外部函数数量、用户定义函数数量、用户定义函数调用次数、运算符的类型数量、控制语句类型的节点数量;
S340.对每一种节点类型,统计第三数据,所述第三数据包括该类型节点的所有子树的最大深度以及子树的控制语句数量;
S350.合并第二数据和第三数据作为漏洞利用代码特征。
7.根据权利要求1所述的一种面向CVE的漏洞可利用性预测方法,其特征在于,所述S400中对所述结构化漏洞数据进行编码或归一化处理,包括:
使用One-hot编码将类别型数据转化为向量;
使用缩放至[0,1]区间的归一化处理将数值型数据转化为向量;
使用二进制向量编码将二进制数据转化为向量。
8.根据权利要求1所述的一种面向CVE的漏洞可利用性预测方法,其特征在于,所述S500包括以下步骤:
S510.分别将每个漏洞的漏洞文本特征、漏洞利用代码特征和漏洞固有特征进行向量拼接得到融合特征向量;
S520.基于融合特征向量生成训练样本集,所述训练样本集的格式为D={(x1,y1),(x2,y2),…(xn,yn)},x代表融合特征向量,y代表正负性标识;
S530.基于所述训练样本集构建LightGBM预测模型;
S540.将LightGBM预测模型对待预测的漏洞样本输出的预测分数作为漏洞可利用性的量化指标。
9.根据权利要求8所述的一种面向CVE的漏洞可利用性预测方法,其特征在于,所述训练样本的正负性判断方法为:
判断所述训练样本是否曾经被利用以及是否正在被利用,若所述训练样本曾经被利用或者正在被利用,则将该训练样本划分为正样本,否则将该训练样本划分为负样本。
10.根据权利要求8所述的一种面向CVE的漏洞可利用性预测方法,其特征在于,所述S530包括以下步骤:
S531.设置多项模型超参数,多项模型超参数包括最大训练次数rmax、早停止容忍次数realry、决策树最大深度mtree、最大叶子数量mleaf、惩罚系数γ、特征子抽样比例pfeature和样本抽样参数a,b;
S532.将训练样本集D={(x1,y1),(x2,y2),…(xn,yn)}作为总数据集,采用十折交叉验证方式将总数据集均分为10份子数据集;
S533.将1份此前未设置为验证数据集的子数据集作为验证数据集,其余9份子数据集作为训练数据集;
S534.对训练数据集中所有训练样本的融合特征向量x抽取pfeature×100%的维度保留,然后采用EFB算法对融合特征向量中互斥的维度进行合并;
S535.初始化一棵决策树,并定义损失函数,决策树中只有一个叶子节点,该叶子节点包含训练数据集的所有训练样本;
S536.对于决策树中的每个叶子节点,计算该叶子节点内所有训练样本的一阶导数gi和二阶导数hi,并根据训练样本的一阶导数与二阶导数比值的绝对值将训练样本从大到小排序,然后根据样本抽样参数选择排序前a×100%的训练样本作为样本集合A,在所有训练样本中随机抽取b×100%的训练样本作为样本集合B,抽取出的样本总集合O=A+B;
S537.遍历样本总集合O中训练样本的融合特征向量,在每一个特征维度j下采用等频分箱算法将O中所有训练样本在特征维度j的连续浮点特征值离散化为k个整数d1j,d2j,…,dkj,即将O中的训练样本分为k个组,将离散化后的整数值dij作为索引,同时为每一组训练样本构造一个直方图;
S538.对于决策树中的每个叶子节点,采用以下公式计算该叶子节点中选择特征维度j下值为d处进行分裂所获得的信息增益,将每个叶子节点对应的所有信息增益中最大的信息增益作为该叶子节点的分裂增益:
其中,以I表示一条训练样本,则nO=∑I(xi∈O),
Al={xi∈A:xij≤d},Ar={xi∈A:xij>d},
Bl={xi∈B:xij≤d},Br={xi∈B:xij>d};
S539.在决策树的所有叶子节点中从左往右遍历,找到分裂增益最大的一个叶子节点进行分裂,通过直方图做差加速得到每个新的叶子节点对应的样本集和直方图;
S5310.判断决策树是否超过设定的最大深度mtree或者叶子节点数量是否超过mleaf,若决策树超过设定的最大深度mtree或者叶子节点数量超过mleaf,则停止分裂,得到一个中间模型,然后执行S5311,否则执行S536;
S5311.利用S5310得到的中间模型对验证数据集进行预测,计算该中间模型的AUC值;
S5312.判断中间模型的AUC值是否连续下降rearly轮或训练轮数是否达到rmax轮:若中间模型的AUC值连续下降rearlty轮或训练轮数达到rmax轮,则执行S5313,否则执行S535;
S5313.判断是否每份子数据集曾经均已被设置为验证数据集:若是,则执行S5314,否则执行S533;
S5314.计算十折交叉验证中得到的10个中间模型的AUC值的平均值,将该平均值作为当前设置的模型超参数对应的模型评分;
S5315.判断S5314中的模型评分是否达到第一预设值:若是,则将当前的模型超参数作为最终模型超参数,然后执行S5317;若否,则执行S5316;
S5316.判断获得的模型评分的数量是否达到第二预设值:若是,则将所有模型评分中分值最大的模型评分对应的模型超参数作为最终模型超参数,然后执行S5317;若否,则执行S531;
S5317.将训练样本集全部作为训练数据集,基于最终模型超参数重复S534-S5310步骤,将训练得到的模型作为最终的LightGBM预测模型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211295039.1A CN115563626B (zh) | 2022-10-21 | 2022-10-21 | 一种面向cve的漏洞可利用性预测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211295039.1A CN115563626B (zh) | 2022-10-21 | 2022-10-21 | 一种面向cve的漏洞可利用性预测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115563626A true CN115563626A (zh) | 2023-01-03 |
CN115563626B CN115563626B (zh) | 2023-08-22 |
Family
ID=84746999
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211295039.1A Active CN115563626B (zh) | 2022-10-21 | 2022-10-21 | 一种面向cve的漏洞可利用性预测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115563626B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117216767A (zh) * | 2023-09-05 | 2023-12-12 | 四川大学 | 一种基于图神经网络的漏洞利用攻击预测方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210004726A1 (en) * | 2019-04-05 | 2021-01-07 | Zscaler, Inc. | Machine learning model abstraction layer for runtime efficiency |
CN112668013A (zh) * | 2020-12-31 | 2021-04-16 | 西安电子科技大学 | 一种面向Java源码的语句级模式探索的漏洞检测方法 |
CN113420296A (zh) * | 2021-07-08 | 2021-09-21 | 国网甘肃省电力公司电力科学研究院 | 一种基于Bert模型与BiLSTM的C源代码漏洞检测方法 |
CN113901448A (zh) * | 2021-09-03 | 2022-01-07 | 燕山大学 | 基于卷积神经网络和轻量级梯度提升机的入侵检测方法 |
CN115001763A (zh) * | 2022-05-20 | 2022-09-02 | 北京天融信网络安全技术有限公司 | 钓鱼网站攻击检测方法、装置、电子设备及存储介质 |
-
2022
- 2022-10-21 CN CN202211295039.1A patent/CN115563626B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210004726A1 (en) * | 2019-04-05 | 2021-01-07 | Zscaler, Inc. | Machine learning model abstraction layer for runtime efficiency |
CN112668013A (zh) * | 2020-12-31 | 2021-04-16 | 西安电子科技大学 | 一种面向Java源码的语句级模式探索的漏洞检测方法 |
CN113420296A (zh) * | 2021-07-08 | 2021-09-21 | 国网甘肃省电力公司电力科学研究院 | 一种基于Bert模型与BiLSTM的C源代码漏洞检测方法 |
CN113901448A (zh) * | 2021-09-03 | 2022-01-07 | 燕山大学 | 基于卷积神经网络和轻量级梯度提升机的入侵检测方法 |
CN115001763A (zh) * | 2022-05-20 | 2022-09-02 | 北京天融信网络安全技术有限公司 | 钓鱼网站攻击检测方法、装置、电子设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
YONG FANG等: "FastEmbed Predicting vulnerability exploitation possibility based on ensemble machine learning algorithm", PLOS ONE * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117216767A (zh) * | 2023-09-05 | 2023-12-12 | 四川大学 | 一种基于图神经网络的漏洞利用攻击预测方法 |
CN117216767B (zh) * | 2023-09-05 | 2024-04-05 | 四川大学 | 一种基于图神经网络的漏洞利用攻击预测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115563626B (zh) | 2023-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114610515B (zh) | 基于日志全语义的多特征日志异常检测方法及系统 | |
CN109376222B (zh) | 问答匹配度计算方法、问答自动匹配方法及装置 | |
CN111767725B (zh) | 一种基于情感极性分析模型的数据处理方法及装置 | |
CN110175851B (zh) | 一种作弊行为检测方法及装置 | |
CN115630640B (zh) | 一种智能写作方法、装置、设备及介质 | |
CN110309297B (zh) | 垃圾文本检测方法、可读存储介质和计算机设备 | |
CN113742733B (zh) | 阅读理解漏洞事件触发词抽取和漏洞类型识别方法及装置 | |
CN110083832B (zh) | 文章转载关系的识别方法、装置、设备及可读存储介质 | |
CN111241824A (zh) | 一种用于中文隐喻信息识别的方法 | |
CN115563626B (zh) | 一种面向cve的漏洞可利用性预测方法 | |
CN111274494B (zh) | 结合深度学习和协同过滤技术的复合标签推荐方法 | |
CN112527981A (zh) | 开放式信息抽取方法、装置、电子设备及存储介质 | |
CN112287199A (zh) | 一种基于云服务器的大数据中心处理系统 | |
CN113111645B (zh) | 一种媒体文本相似性检测方法 | |
CN110750981A (zh) | 一种基于机器学习的高准确度网站敏感词检测方法 | |
Farooq et al. | Fake news detection in Urdu language using machine learning | |
Hao et al. | A novel method using LSTM-RNN to generate smart contracts code templates for improved usability | |
Yao | Design and simulation of integrated education information teaching system based on fuzzy logic | |
CN112183093A (zh) | 一种企业舆情分析方法、装置、设备及可读存储介质 | |
CN114579761A (zh) | 信息安全知识实体关系连接预测方法、系统及介质 | |
CN114662486A (zh) | 一种基于机器学习的突发事件敏感词检测方法 | |
CN114817516A (zh) | 零样本条件下基于逆向匹配的画像映射方法、装置和介质 | |
CN113468396A (zh) | 一种基于元标签的网页分类方法、装置和设备 | |
CN112151186A (zh) | 一种在医疗文本中提取疾病诱因、病因的方法及装置及系统 | |
Ma et al. | ACLSTM: A Novel Method for CQA Answer Quality Prediction Based on Question-Answer Joint Learning. |
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 |