支持漏洞关联性挖掘的漏洞自动分类方法转让专利

申请号 : CN201710052203.9

文献号 : CN106897625B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 胡昌振张皓吕坤

申请人 : 北京理工大学

摘要 :

本发明涉及一种支持漏洞关联性挖掘的漏洞自动分类方法,属于信息安全技术领域。具体操作为:步骤一、构建一个漏洞数据库,收集漏洞记录。步骤二、确定特权集类别。步骤三、训练分类器。步骤四、测试数据。本发明提出的支持漏洞关联性挖掘的漏洞自动分类法与已有方法相比较,具有以下优点:①漏洞分类结果适合用于漏洞关联性挖掘;②类与类之间具有互斥性,且分级明显;③实现漏洞的自动分类,提升分类效率,节省人工成本。

权利要求 :

1.一种支持漏洞关联性挖掘的漏洞自动分类方法,其特征在于:其具体操作步骤为:步骤一、构建一个漏洞数据库,收集漏洞记录;

选取国家漏洞数据库NVD作为数据源,构建一个漏洞数据库;

所述漏洞数据库包括:通用漏洞CVE编号、通用漏洞评分系统CVSS评分、是否需要网络、获取容易程度、是否需要认证、机密性影响、完整性影响、可用性影响、漏洞描述字段、前提特权集、结果特权集;

其中,通用漏洞CVE编号、通用漏洞评分系统CVSS评分、是否需要网络、获取容易程度、是否需要认证、机密性影响、完整性影响、可用性影响、漏洞描述字段字段是通过国家漏洞数据库直接获取的;前提特权集和结果特权集为空;

所述漏洞描述字段字段是用自然语言描述漏洞的特征,“漏洞描述字段”字段为“…users/attackers to…by/via…”格式;

步骤二、确定特权集类别;

特权集类别包括:系统管理员特权集、普通系统管理员特权集、普通用户特权集、访问者特权集、受限访问者特权集;

所述系统管理员特权集包含系统管理员所拥有的所有权限;系统管理员为拥有系统最高权限的用户帐号,系统管理员的权限为:管理系统设备、系统文件和系统进程,读写任意文件内容;攻击者利用系统管理员特权集造成的危害有:植入系统级木马,以虚假身份欺骗或直接追加、修改、删除、创建文件内容,造成系统不可恢复性崩溃;

所述普通系统管理员特权集包含系统管理员所拥有的部分权限;普通系统管理员的权限为:管理部分系统设备、系统文件和系统进程,读写部分系统文件内容;攻击者利用普通系统管理员特权集造成的危害有:通过追加、修改、删除、创建某些系统文件内容或系统进程内存空间的数据结构,造成系统某些文件看起来不可用、系统当机或拒绝服务;

所述普通用户特权集包含普通用户所拥有的所有权限;普通用户所拥有的权限为:在自己独立私有的资源空间内追加、修改、删除、创建个人文件;攻击者利用普通用户特权集造成的的危害有:植入用户级木马,修改普通用户的所有文件或进程空间的内容,导致用户崩溃或不可用;

所述访问者特权集包含受信任的系统远程访问者所拥有的所有权限;受信任的系统远程访问者所拥有的权限有:与系统交互数据、扫描系统信息;攻击者利用访问者特权集造成的危害有:帮助其他受限访问者用户完成身份验证或发送大量数据包造成系统内存溢出;

所述受限访问者特权集是指被系统防火墙隔离在外的不受信任的访问者所拥有的权限;不受信任的访问者仅拥有证实主机有效性的权限,不具备使用该系统的任何权限;攻击者利用受限访问者特权集不能对系统造成危害;

漏洞的前提特权集和结果特权集的取值为5个特权集类别中的一个;

步骤三、训练分类器;

针对步骤二所述的5个特权集类别,分别训练3个前提特权集训练器和4个结果特权集训练器;具体操作为:步骤3.0:从步骤一中所述漏洞数据库中选取一部分漏洞记录,作为训练数据集;然后人工标注每条漏洞记录的前提特权集和结果特权集;

步骤3.1:从训练数据集中选取前提特权集为普通用户特权集的300条以上数据;

步骤3.2:对每条训练数据中的“漏洞描述字段”字段进行处理;“漏洞描述字段”字段为“…user/attackers to…by/via…”格式;将“by/via”之后的部分截取出来,存入文件d1中,每条训练数据占一行,文件d1的行数用符号J1表示;

步骤3.3:利用开源分词工具StandardAnalyzer对文件d1进行处理,统计每个单词出现的数量,文件d1中出现的单词的数量用符号I1表示;

步骤3.4:通过公式(1)计算单词的重要性;

其中,tfi,j表示第i个单词在第j行的重要性,i和j均为正整数,并且i∈[1,I1],j∈[1,J1];ni,j表示第i个单词在第j行中出现的次数;

步骤3.5:通过公式(2)计算第i个单词的逆向文件频率,用符号idfi表示;逆向文件频率用来度量单词的普遍性;

其中,ti表示第i个单词;|{j:ti∈rj}|表示文件d1包含单词ti的行数;

步骤3.6:通过公式(3)计算单词的权重得分;

其中,TFIDFi表示第i个单词的权重得分;

某一行的高词语频率,以及该词语在整个文件内的低行数频率,可以产生高权重的TFIDFi;因此,TFIDFi值倾向于过滤掉常见词语,保留重要的词语;

步骤3.7:将文件d1中出现的单词按照TFIDFi值降序排列,取前n个词作为特征关键词,n∈[5,12];记录特征关键词及对应的TFIDFi值;

步骤3.8:经过步骤3.1至3.7的操作,得到前提特权集为普通用户特权集对应的特征关键词及对应的TFIDFi值;

步骤3.9:从训练数据集中选取前提特权集为访问者特权集的300条以上数据;重复3.2至至3.7的操作,得到前提特权集为访问者特权集对应的特征关键词及对应的TFIDFi值;

步骤3.10:从训练数据集中选取前提特权集为受限访问者特权集的300条以上数据;重复3.2至至3.7的操作,得到前提特权集为受限访问者特权集对应的特征关键词及对应的TFIDFi值;

步骤3.11:从训练数据集中选取结果特权集为系统管理员特权集的300条以上数据;

步骤3.12:对每条训练数据中的“漏洞描述字段”字段进行处理;“漏洞描述字段”字段为“…user/attackers to…by/via…”格式;将“to”到“by/via”之间的部分截取出来,存入文件d2中,每条训练数据占一行,文件d2的行数用符号J2表示;

步骤3.13:利用开源分词工具StandardAnalyzer对文件d2进行处理,统计每个单词出现的数量,文件d2中出现的单词的数量用符号I2表示;

步骤3.14:通过公式(4)计算单词的重要性;

其中,tfi′,j′表示第i′个单词在第j′行的重要性,i′和j′均为正整数,并且i∈[1,I2],j∈[1,J2];ni′,j′表示第i′个单词在第j′行中出现的次数;

步骤3.15:通过公式(5)计算第i′个单词的逆向文件频率,用符号idfi′表示;逆向文件频率用来度量单词的普遍性;

其中,ti′表示第i′个单词;|{j′:ti′∈rj′}|表示文件d2包含单词ti′的行数;

步骤3.16:通过公式(6)计算单词的权重得分;

其中,TFIDFi′表示第i′个单词的权重得分;

步骤3.17:将文件d2中出现的单词按照TFIDFi′值降序排列,取前n个词作为特征关键词,n∈[5,12];记录特征关键词及对应的TFIDFi′值;

步骤3.18:经过步骤3.11至3.17的操作,得到结果特权集为系统管理员特权集对应的特征关键词及对应的TFIDFi′值;

步骤3.19:从训练数据集中选取结果特权集为普通系统管理员特权集的300条以上数据;重复3.12至至3.17的操作,得到结果特权集为普通系统管理员特权集对应的特征关键词及对应的TFIDFi′值;

步骤3.20:从训练数据集中选取结果特权集为普通用户特权集的300条以上数据;重复

3.12至至3.17的操作,得到结果特权集为普通用户特权集对应的特征关键词及对应的TFIDFi′值;

步骤3.21:从训练数据集中选取结果特权集为访问者特权集的300条以上数据;重复

3.12至至3.17的操作,得到结果特权集为访问者特权集对应的特征关键词及对应的TFIDFi′值;

步骤四、测试数据;

步骤4.1:从步骤一中所述漏洞数据库中选取一条测试数据;

步骤4.2:对测试数据中的“漏洞描述字段”字段进行处理;“漏洞描述字段”字段为“…user/attackers to…by/via…”格式;将“by/via”之后的部分截取出来,并利用开源分词工具StandardAnalyzer处理,得到若干个单词;

步骤4.3:对于步骤4.2得到的单词,依次查找每个单词是否在步骤3.8得到前提特权集为普通用户特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi值并求和,结果用符号P1表示;

步骤4.4:对于步骤4.2得到的单词,依次查找每个单词是否在步骤3.9得到前提特权集为访问者特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi值并求和,结果用符号P2表示;

步骤4.5:对于步骤4.2得到的单词,依次查找每个单词是否在步骤3.10得到前提特权集为受限访问者特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi值并求和,结果用符号P3表示;

步骤4.6:比较P1、P2和P3的值,选取最大值对应的特权集作为该条测试数据的前提特权集的值;

步骤4.7:对测试数据中的“漏洞描述字段”字段进行处理;“漏洞描述字段”字段为“…user/attackers to…by/via…”格式;将“to”到“by/via”之间的部分截取出来,并利用开源分词工具StandardAnalyzer处理,得到若干个单词;

步骤4.8:对于步骤4.7得到的单词,依次查找每个单词是否在步骤3.18得到结果特权集为系统管理员特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi′值并求和,结果用符号R1表示;

步骤4.9:对于步骤4.7得到的单词,依次查找每个单词是否在步骤3.19得到结果特权集为普通系统管理员特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi′值并求和,结果用符号R2表示;

步骤4.10:对于步骤4.7得到的单词,依次查找每个单词是否在步骤3.20得到结果特权集为普通用户特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi′值并求和,结果用符号R3表示;

步骤4.11:对于步骤4.7得到的单词,依次查找每个单词是否在步骤3.21得到访问者特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi′值并求和,结果用符号R4表示;

步骤4.12:比较R1、R2、R3和R4的值,选取最大值对应的特权集作为该条测试数据的结果特权集的值。

说明书 :

支持漏洞关联性挖掘的漏洞自动分类方法

技术领域

[0001] 本发明涉及一种支持漏洞关联性挖掘的漏洞自动分类方法,属于信息安全技术领域。

背景技术

[0002] 网络安全脆弱性是指计算机系统中存在某些可能被恶意主体(攻击者或攻击程序)利用的安全漏洞,从而可能导致对系统资源的非授权访问或对系统造成其他损害。近年来逐渐发展成熟的脆弱性扫描技术及CVE(Common Vulnerabilities&Exposures,公共漏洞和暴露)标准与通用漏洞评分系统(Common Vulnerability Scoring System,CVSS)漏洞评级方法,可以检测并发现网络中存在的脆弱点,但无法分析脆弱点之间的关联性与相互利用关系。而网络风险中的攻击手段往往是通过彼此关联的漏洞,从一个漏洞切入,逐步利用网络中与此相关的漏洞扩散至整个网络。因此研究挖掘漏洞之间的关联性有重大意义。
[0003] 漏洞关联图是一个描述漏洞间关联关系的有向图,它提供了一种形式化、系统化描述漏洞关联性的方法,能比较直观地反映出漏洞之间的关联关系。漏洞的关联往往体现在某低用户级L的攻击者通过成功地利用某个漏洞,获得一定的特权提升,从而在非授权的情况下达到了一个高用户级H的目的。现有的一种描述用户权限提升过程的方法是采用“特权”、“特权集”与“特权提升”的概念,利用决策树的方法将访问者与特权集集合起来,将访问者分为若干类,并将其拥有的特权集按重要程度设置一个量化的权值,比如在0-1之内的若干个小数。
[0004] 目前存在的漏洞分类法主要有普渡大学COAST实验室的Aslam提出的Unix操作系统分类法,分为操作故障、环境故障和编码故障,但由于没有具体的量化指标,无法评价漏洞的危害级别;哈工大的汪立东提出的软件弱点分类法,描述了漏洞对机密性、完整性和可用性等安全性的影响,Knight等人提出的广义分类法,将弱点分为社会工程、策略疏忽、逻辑错误和软件漏洞四种类型,由于一定程度上的概念模糊,类与类之间不具备互斥性。
[0005] 以上分类方法都是将漏洞作为单一缺陷来分析,张永铮强调了漏洞之间的关联性,提出了判断漏洞前后关联性的前提是漏洞可以按“前提特权集”及“结果特权集”进行的准确分类,实现了一种新颖的支持关联性挖掘的多维量化属性漏洞分类法,然而并没有明确指出每一类的具体特征,无法自动进行分类。

发明内容

[0006] 本发明的目的是提出一种支持漏洞关联性挖掘的漏洞自动分类方法,从漏洞的自然语言描述中挖掘出每条漏洞的“前提特权集”及“结果特权集”所属的特权集分类,并根据“特权提升”的概念来判断漏洞之间存在的关联关系。
[0007] 本发明的目的是通过以下技术方案实现的。
[0008] 本发明的目的是提出一种支持漏洞关联性挖掘的漏洞自动分类方法,具体操作为:
[0009] 步骤一、构建一个漏洞数据库,收集漏洞记录。
[0010] 选取国家漏洞数据库(National Vulnerability Database,NVD)作为数据源,构建一个漏洞数据库。
[0011] 所述漏洞数据库包括:通用漏洞(Common Vulnerabilities and Exposures,CVE)编号、通用漏洞评分系统(Common Vulnerability Scoring System,CVSS)评分、是否需要网络、获取容易程度、是否需要认证、机密性影响、完整性影响、可用性影响、漏洞描述、前提特权集、结果特权集。
[0012] 其中通用漏洞CVE编号、通用漏洞评分系统CVSS评分、是否需要网络、获取容易程度、是否需要认证、机密性影响、完整性影响、可用性影响、漏洞描述字段是通过国家漏洞数据库直接获取的。前提特权集和结果特权集为空。
[0013] 所述漏洞描述字段是用自然语言描述漏洞的特征,“漏洞描述”字段为“…users/attackers to…by/via…”格式。
[0014] 步骤二、确定特权集类别。
[0015] 特权集类别包括:系统管理员特权集、普通系统管理员特权集、普通用户特权集、访问者特权集、受限访问者特权集。
[0016] 所述系统管理员特权集包含系统管理员所拥有的所有权限。系统管理员为拥有系统最高权限的用户帐号,系统管理员的权限为:管理系统设备、系统文件和系统进程,读写任意文件内容。攻击者利用系统管理员特权集造成的危害有:植入系统级木马,以虚假身份欺骗或直接追加、修改、删除、创建文件内容,造成系统不可恢复性崩溃。
[0017] 所述普通系统管理员特权集包含系统管理员所拥有的部分权限。普通管理员的权限为:管理部分系统设备、系统文件和系统进程,读写部分系统文件内容。攻击者利用普通系统管理员特权集造成的危害有:通过追加、修改、删除、创建某些系统文件内容或系统进程内存空间的数据结构,造成系统某些文件看起来不可用、系统当机或拒绝服务。
[0018] 所述普通用户特权集包含普通用户所拥有的所有权限。普通用户所拥有的权限为:在自己独立私有的资源空间内追加、修改、删除、创建个人文件。攻击者利用普通用户特权集造成的的危害有:植入用户级木马,修改普通用户的所有文件或进程空间的内容,导致用户崩溃或不可用。
[0019] 所述访问者特权集包含受信任的系统远程访问者所拥有的所有权限。受信任的系统远程访问者所拥有的权限有:与系统交互数据、扫描系统信息。攻击者利用访问者特权集造成的危害有:帮助其他受限访问者用户完成身份验证或发送大量数据包造成系统内存溢出。
[0020] 所述受限访问者特权集是指被系统防火墙隔离在外的不受信任的访问者所拥有的权限。不受信任的访问者仅拥有证实主机有效性的权限,不具备使用该系统的任何权限。攻击者利用受限访问者特权集不能对系统造成危害。
[0021] 漏洞的前提特权集和结果特权集的取值为5个特权集类别中的一个。
[0022] 步骤三、训练分类器。
[0023] 针对步骤二所述的5个特权集类别,分别训练3个前提特权集训练器和4个结果特权集训练器。具体操作为:
[0024] 步骤3.0:从步骤一中所述漏洞数据库中选取一部分漏洞记录,作为训练数据集。然后人工标注每条漏洞记录的前提特权集和结果特权集。
[0025] 步骤3.1:从训练数据集中选取前提特权集为普通用户特权集的300条以上数据。
[0026] 步骤3.2:对每条训练数据中的“漏洞描述”字段进行处理。“漏洞描述”字段为“…user/attackers to…by/via…”格式。将“by/via”之后的部分截取出来,存入文件d1中,每条训练数据占一行,文件d1的行数用符号J 1表示。
[0027] 步骤3.3:利用开源分词工具(StandardAnalyzer)对文件d1进行处理,统计每个单词出现的数量,文件d1中出现的单词的数量用符号I1表示。
[0028] 步骤3.4:通过公式(1)计算单词的重要性。
[0029]
[0030] 其中,tfi,j表示第i个单词在第j行的重要性,i和j均为正整数,并且i∈[1,I1],j∈[1,J1];ni,j表示第i个单词在第j行中出现的次数。
[0031] 步骤3.5:通过公式(2)计算第i个单词的逆向文件频率,用符号idfi表示。逆向文件频率用来度量单词的普遍性。
[0032]
[0033] 其中,ti表示第i个单词;|{j:ti∈rj}|表示文件d1包含单词ti的行数。
[0034] 步骤3.6:通过公式(3)计算单词的权重得分。
[0035]
[0036] 其中,TFIDFi表示第i个单词的权重得分。
[0037] 某一行的高词语频率,以及该词语在整个文件内的低行数频率,可以产生高权重的TFIDFi。因此,TFIDFi值倾向于过滤掉常见词语,保留重要的词语。
[0038] 步骤3.7:将文件d1中出现的单词按照TFIDFi值降序排列,取前n个词作为特征关键词,n∈[5,12]。记录特征关键词及对应的TFIDFi值。
[0039] 步骤3.8:经过步骤3.1至3.7的操作,得到前提特权集为普通用户特权集对应的特征关键词及对应的TFIDFi值。
[0040] 步骤3.9:从训练数据集中选取前提特权集为访问者特权集的300条以上数据。重复3.2至至3.7的操作,得到前提特权集为访问者特权集对应的特征关键词及对应的TFIDFi值。
[0041] 步骤3.10:从训练数据集中选取前提特权集为受限访问者特权集的300条以上数据。重复3.2至至3.7的操作,得到前提特权集为受限访问者特权集对应的特征关键词及对应的TFIDFi值。
[0042] 步骤3.11:从训练数据集中选取结果特权集为系统管理员特权集的300条以上数据。
[0043] 步骤3.12:对每条训练数据中的“漏洞描述”字段进行处理。“漏洞描述”字段为“…user/attackers to…by/via…”格式。将“to”到“by/via”之间的部分截取出来,存入文件d2中,每条训练数据占一行,文件d2的行数用符号J2表示。
[0044] 步骤3.13:利用开源分词工具(StandardAnalyzer)对文件d2进行处理,统计每个单词出现的数量,文件d2中出现的单词的数量用符号I2表示。
[0045] 步骤3.14:通过公式(4)计算单词的重要性。
[0046]
[0047] 其中,tfi′,j′表示第i′个单词在第j′行的重要性,i′和j′均为正整数,并且i∈[1,I2],j∈[1,J2];ni′,j′表示第i′个单词在第j′行中出现的次数。
[0048] 步骤3.15:通过公式(5)计算第i′个单词的逆向文件频率,用符号idfi′表示。逆向文件频率用来度量单词的普遍性。
[0049]
[0050] 其中,ti′表示第i′个单词;|{j′:ti′∈rj′}|表示文件d2包含单词ti′的行数。
[0051] 步骤3.16:通过公式(6)计算单词的权重得分。
[0052]
[0053] 其中,TFIDFi′表示第i′个单词的权重得分。
[0054] 步骤3.17:将文件d2中出现的单词按照TFIDFi′值降序排列,取前n个词作为特征关键词,n∈[5,12]。记录特征关键词及对应的TFIDFi′值。
[0055] 步骤3.18:经过步骤3.11至3.17的操作,得到结果特权集为系统管理员特权集对应的特征关键词及对应的TFIDFi′值。
[0056] 步骤3.19:从训练数据集中选取结果特权集为普通系统管理员特权集的300条以上数据。重复3.12至至3.17的操作,得到结果特权集为普通系统管理员特权集对应的特征关键词及对应的TFIDFi′值。
[0057] 步骤3.20:从训练数据集中选取结果特权集为普通用户特权集的300条以上数据。重复3.12至至3.17的操作,得到结果特权集为普通用户特权集对应的特征关键词及对应的TFIDFi′值。
[0058] 步骤3.21:从训练数据集中选取结果特权集为访问者特权集的300条以上数据。重复3.12至至3.17的操作,得到结果特权集为访问者特权集对应的特征关键词及对应的TFIDFi′值。
[0059] 步骤四、测试数据。
[0060] 步骤4.1:从步骤一中所述漏洞数据库中选取一条测试数据。
[0061] 步骤4.2:对测试数据中的“漏洞描述”字段进行处理。“漏洞描述”字段为“…user/attackers to…by/via…”格式。将“by/via”之后的部分截取出来,并利用开源分词工具(StandardAnalyzer)处理,得到若干个单词。
[0062] 步骤4.3:对于步骤4.2得到的单词,依次查找每个单词是否在步骤3.8得到前提特权集为普通用户特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi值并求和,结果用符号P1表示。
[0063] 步骤4.4:对于步骤4.2得到的单词,依次查找每个单词是否在步骤3.9得到前提特权集为访问者特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi值并求和,结果用符号P2表示。
[0064] 步骤4.5:对于步骤4.2得到的单词,依次查找每个单词是否在步骤3.10得到前提特权集为受限访问者特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi值并求和,结果用符号P3表示。
[0065] 步骤4.6:比较P1、P2和P3的值,选取最大值对应的特权集作为该条测试数据的前提特权集的值。
[0066] 步骤4.7:对测试数据中的“漏洞描述”字段进行处理。“漏洞描述”字段为“…user/attackers to…by/via…”格式。将“to”到“by/via”之间的部分截取出来,并利用开源分词工具(StandardAnalyzer)处理,得到若干个单词。
[0067] 步骤4.8:对于步骤4.7得到的单词,依次查找每个单词是否在步骤3.18得到结果特权集为系统管理员特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi′值并求和,结果用符号R1表示。
[0068] 步骤4.9:对于步骤4.7得到的单词,依次查找每个单词是否在步骤3.19得到结果特权集为普通系统管理员特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi′值并求和,结果用符号R2表示。
[0069] 步骤4.10:对于步骤4.7得到的单词,依次查找每个单词是否在步骤3.20得到结果特权集为普通用户特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi′值并求和,结果用符号R3表示。
[0070] 步骤4.11:对于步骤4.7得到的单词,依次查找每个单词是否在步骤3.21得到访问者特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi′值并求和,结果用符号R4表示。
[0071] 步骤4.12:比较R1、R2、R3和R4的值,选取最大值对应的特权集作为该条测试数据的结果特权集的值。
[0072] 有益效果
[0073] 本发明提出的支持漏洞关联性挖掘的漏洞自动分类法与已有方法相比较,具有以下优点:
[0074] ①漏洞分类结果适合用于漏洞关联性挖掘;
[0075] ②类与类之间具有互斥性,且分级明显;
[0076] ③实现漏洞的自动分类,提升分类效率,节省人工成本。

附图说明

[0077] 图1为本发明具体实施方式中支持漏洞关联性挖掘的漏洞自动分类法的流程图。

具体实施方式

[0078] 下面结合附图和实施例对本发明技术方案做详细描述。
[0079] 采用本发明提出的支持漏洞关联性挖掘的漏洞自动分类方法对漏洞进行分类并得到漏洞间关联关系的操作流程如图1所示,具体操作步骤为:
[0080] 步骤一、构建一个漏洞数据库,从国家漏洞数据库(National Vulnerability Database,NVD)下载2010-2016年的漏洞数据,挑选linux下漏洞数据并筛选字段后导入本地数据库。
[0081] 本地漏洞数据库字段如表1所示。
[0082] 表1漏洞数据库字段表
[0083]
[0084]
[0085] 步骤二、确定特权集类别。
[0086] 特权集类别包括:系统管理员特权集、普通系统管理员特权集、普通用户特权集、访问者特权集、受限访问者特权集。每个特权集对应英文标识如表2所示。
[0087] 表2特权集对应英文标识表
[0088]特权集名称 特权集描述 英文标识
系统管理员特权集 包括系统最高权限 root
普通系统管理员特权集 访问或修改部分系统文件 admin
普通用户特权集 有自己独立私有的资源 user
访问者特权集 交互数据,扫描系统信息 access
受限访问者特权集 隔离在防火墙外 phyaccess
[0089] 步骤三、训练分类器。
[0090] 针对步骤二所述的5个特权集类别,分别训练3个前提特权集训练器和4个结果特权集训练器。具体操作为:
[0091] 步骤3.0:从步骤一中所述漏洞数据库中选取一部分漏洞记录,作为训练数据集。然后人工标注每条漏洞记录的前提特权集和结果特权集。包含漏洞描述、前提特权集和结果特权集的训练数据集如表3所示。
[0092] 表3训练数据集
[0093]
[0094] 步骤3.1:从训练数据集中选取前提特权集为普通用户特权集的323条数据。
[0095] 步骤3.2:对每条训练数据中的“漏洞描述”字段进行处理。“漏洞描述”字段为“…users to…by/via…”格式。将“to”到“by/via”之间的部分截取出来,存入文件d1中,每条训练数据占一行,文件d1的行数J1=323。
[0096] 步骤3.3:利用开源分词工具(StandardAnalyzer)对文件d1进行处理,统计每个单词出现的数量,文件d1中出现的单词的数量I1=1346。
[0097] 步骤3.4:通过公式(1)计算单词的重要性。
[0098]
[0099] 其中,tfi,j表示第i个单词在第j行的重要性,i和j均为正整数,并且i∈[1,I1],j∈[1,J1];ni,j表示第i个单词在第j行中出现的次数。
[0100] 文件d1中的第1个单词为“execute”,在第一行出现了1次,而第一行一共出现了5个单词,所以单词“execute”在第一行的重要性tfi,j=0.2。
[0101] 步骤3.5:通过公式(2)计算第i个单词的逆向文件频率,用符号idfi表示。逆向文件频率用来度量单词的普遍性。
[0102]
[0103] 其中,ti表示第i个单词;|{j:ti∈rj}|表示文件d1包含单词ti的行数。
[0104] 在全部323行数据中,包含单词“execute”的行数为46行,所以单词“execute”的idf1=0.84.
[0105] 步骤3.6:通过公式(3)计算单词的权重得分。单词“execute”的TFIDF1值为9.66.[0106]
[0107] 其中,TFIDFi表示第i个单词的权重得分。
[0108] 某一行的高词语频率,以及该词语在整个文件内的低行数频率,可以产生高权重的TFIDFi。因此,TFIDFi值倾向于过滤掉常见词语,保留重要的词语。
[0109] 步骤3.7:将文件d1中出现的单词按照TFIDFi值降序排列,取前8个词作为特征关键词,记录特征关键词及对应的TFIDFi值。
[0110] 步骤3.8:经过步骤3.1至3.7的操作,得到前提特权集为普通用户特权集对应的特征关键词及对应的TFIDFi值,如表4所示。
[0111] 表4前提特权集为普通用户特权集的特征关键词与对应的TFIDFi值对应表[0112]特征关键词 TFIDFi值
execute 9.66
code 8.54
leverage 7.81
craft 5.67
modify 4.18
program 3.78
write 2.76
script 2.53
[0113] 步骤3.9:从训练数据集中选取前提特权集为访问者特权集的300条以数据。重复3.2至至3.7的操作,得到前提特权集为访问者特权集对应的特征关键词及对应的TFIDFi值,如表5所示。
[0114] 表5前提特权集为访问者特权集的特征关键词与对应的TFIDFi值对应表
[0115]特征关键词 TFIDFi值
package 12.84
craft 11.67
vector 7.56
access 5.78
file 4.96
message 2.01
send 1.45
bypass 1.04
[0116] 步骤3.10:从训练数据集中选取前提特权集为受限访问者特权集的300条以上数据。重复3.2至至3.7的操作,得到前提特权集为受限访问者特权集对应的特征关键词及对应的TFIDFi值,如表6所示。
[0117] 表6前提特权集为受限访问者特权集的特征关键词与对应的TFIDFi值对应表[0118]
[0119]
[0120] 步骤3.11:从训练数据集中选取结果特权集为系统管理员特权集的300条数据。
[0121] 步骤3.12:对每条训练数据中的“漏洞描述”字段进行处理。“漏洞描述”字段为“…users to…by/via…”格式。将“by/via”之后的部分截取出来,存入文件d2中,每条训练数据占一行,文件d2的行数用符号J2表示。
[0122] 步骤3.13:利用开源分词工具(StandardAnalyzer)对文件d2进行处理,统计每个单词出现的数量,文件d2中出现的单词的数量用符号I2表示。
[0123] 步骤3.14:通过公式(4)计算单词的重要性。
[0124]
[0125] 其中,tfi′,j′表示第i′个单词在第j′行的重要性,i′和j′均为正整数,并且i∈[1,I2],j∈[1,J2];ni′,j′表示第i′个单词在第j′行中出现的次数。
[0126] 步骤3.15:通过公式(5)计算第i′个单词的逆向文件频率,用符号idfi′表示。逆向文件频率用来度量单词的普遍性。
[0127]
[0128] 其中,ti′表示第i′个单词;|{j′:ti′∈rj′}|表示文件d2包含单词ti′的行数。
[0129] 步骤3.16:通过公式(6)计算单词的权重得分。
[0130]
[0131] 其中,TFIDFi′表示第i′个单词的权重得分。
[0132] 步骤3.17:将文件d2中出现的单词按照TFIDFi′值降序排列,取前8个词作为特征关键词。记录特征关键词及对应的TFIDFi′值。
[0133] 步骤3.18:经过步骤3.11至3.17的操作,得到结果特权集为系统管理员特权集对应的特征关键词及对应的TFIDFi′值,如表7所示。
[0134] 表7结果特权集为系统管理员特权集的特征关键词与对应的TFIDFi值对应表[0135]特征关键词 TFIDFi值
root 11.24
gain 10.63
obtain 10.26
access 9.54
privilege 9.32
system 5.64
denial 2.54
service 2.54
[0136] 步骤3.19:从训练数据集中选取结果特权集为普通系统管理员特权集的300条以上数据。重复3.12至至3.17的操作,得到结果特权集为普通系统管理员特权集对应的特征关键词及对应的TFIDFi′值,如表8所示。
[0137] 表8结果特权集为普通系统管理员特权集的特征关键词与对应的TFIDFi值对应表[0138]特征关键词 TFIDFi值
privilege 9.87
gain 9.56
access 8.72
arbitrary 3.21
service 2.54
bypass 2.19
denial 1.96
guest 1.21
[0139] 步骤3.20:从训练数据集中选取结果特权集为普通用户特权集的300条以上数据。重复3.12至至3.17的操作,得到结果特权集为普通用户特权集对应的特征关键词及对应的TFIDFi′值。
[0140] 表9结果特权集为普通用户特权集的特征关键词与对应的TFIDFi值对应表[0141]特征关键词 TFIDFi值
execute 6.73
run 4.86
code 3.48
modify 3.32
overwrite 1.96
write 1.84
bypass 1.66
access 0.93
[0142] 步骤3.21:从训练数据集中选取结果特权集为访问者特权集的300条以上数据。重复3.12至至3.17的操作,得到结果特权集为访问者特权集对应的特征关键词及对应的TFIDFi′值。
[0143] 表10结果特权集为访问者特权集的特征关键词与对应的TFIDFi值对应表[0144]特征关键词 TFIDFi值
firewall 8.54
gain 7.65
bypass 7.43
list 5.94
transmission 5.61
communication 4.93
sensitive 3.38
read 2.63
[0145] 步骤四、测试数据。
[0146] 步骤4.1:从步骤一中所述漏洞数据库中选取一条测试数据,CVE_ID为CVE-2014-3390,漏洞描述字段为“The Virtual Network Management Center(VNMC)policy implementation in Cisco ASA Software 8.7before 8.7(1.14),9.2before 9.2(2.8),and 9.3before 9.3(1.1)allows local users to obtain Linux root access by leveraging administrative privileges and executing a crafted script”。
[0147] 步骤4.2:对测试数据中的“漏洞描述”字段进行处理。“漏洞描述”字段为“…users to…by/via…”格式。将“by/via”之后的部分截取出来,并利用开源分词工具(StandardAnalyzer)处理,得到若干个单词。
[0148] 截取的漏洞描述字段内容为“leveraging administrative privileges and executing a crafted script”,得到的单词为(“leverage”,“administrative”,“privilege”,“execute”,“craft”,“script”)。
[0149] 步骤4.3:对于步骤4.2得到的单词,依次查找每个单词是否在步骤3.8得到的普通用户特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi值并求和,结果用符号P1表示。
[0150] 对于步骤4.2得到的单词,“leverage”、“execute”、“craft”和“script”在步骤3.8得到的前提集为普通用户特权集对应的特征关键词中出现,将它们对应的TFIDFi值相加,所以P1=25.67.
[0151] 步骤4.4:对于步骤4.2得到的单词,依次查找每个单词是否在步骤3.9得到访问者特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi值并求和,结果用符号P2表示。
[0152] 步骤4.2得到的单词都没有在步骤3.9得到前提集为访问者特权集对应的特征关键词中出现,所以P2=0.
[0153] 步骤4.5:对于步骤4.2得到的单词,依次查找每个单词是否在步骤3.10得到受限访问者特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi值并求和,结果用符号P3表示。
[0154] 步骤4.2得到的单词都没有在步骤3.10得到前提集为受限访问者特权集对应的特征关键词中出现,所以P3=0。
[0155] 步骤4.6:比较P1、P2和P3的值,选取最大值P1对应的普通用户特权集作为该条测试数据的前提特权集的值,所以该条漏洞数据的前提特权集字段的值为“user”。
[0156] 步骤4.7:对测试数据中的“漏洞描述”字段进行处理。将“users to”到“by/via”之间的部分截取出来,并利用开源分词工具(StandardAnalyzer)处理,得到若干个单词。
[0157] 截取的漏洞描述字段内容为“obtain Linux root access”,得到的单词为(“obtain”,“Linux”,“root”,“access”)。
[0158] 步骤4.8:对于步骤4.7得到的单词,依次查找每个单词是否在步骤3.18得到的结果集为系统管理员特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi′值并求和,结果用符号R1表示。
[0159] 对于步骤4.7得到的单词,“root”、“obtain”、“access”在步骤3.18得到的结果集为系统管理员特权集对应的特征关键词中出现,将它们对应的TFIDFi值相加,所以R1=31.04。
[0160] 步骤4.9:对于步骤4.7得到的单词,依次查找每个单词是否在步骤3.19得到的结果集为普通系统管理员特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi′值并求和,结果用符号R2表示。
[0161] 对于步骤4.7得到的单词,“access”在步骤3.19得到的结果集为普通系统管理员特权集对应的特征关键词中出现,将它们对应的TFIDFi值相加,所以R2=8.72.[0162] 步骤4.10:对于步骤4.7得到的单词,依次查找每个单词是否在步骤3.20得到的结果集为普通用户特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi′值并求和,结果用符号R3表示。
[0163] 对于步骤4.7得到的单词,“access”在步骤3.20得到的结果集为普通用户特权集对应的特征关键词中出现,将它们对应的TFIDFi值相加,所以R3=0.63。
[0164] 步骤4.11:对于步骤4.7得到的单词,依次查找每个单词是否在步骤3.21得到的结果集为访问者特权集对应的特征关键词中出现,如果出现,则记录该特征关键词对应的TFIDFi′值并求和,结果用符号R4表示。
[0165] 步骤4.7得到的单词都没有在步骤3.21得到的结果集为访问者特权集对应的特征关键词中出现,所以R4=0.
[0166] 步骤4.12:比较R1、R2、R3和R4的值,选取R1对应的系统管理员特权集作为该条测试数据的结果特权集的值,所以该条漏洞数据的结果特权集的值为“root”。
[0167] 然后,重复步骤步骤4.1至4.12,对另外一条漏洞数据进行分类。漏洞数据的编号为CVE-2016-2207,漏洞描述字段为“...allows remote attackers to execute arbitrary code or cause a denial of service(memory access violation)via a crafted RAR file that is mishandled during decompression.”
[0168] 按照步骤4.2-4.6操作一次该条数据,得到最大值为P2=16.63,所以前提特权集的值为access;按照步骤4.7-4.12操作一次该条数据,得到最大值为R3=10.21,所以结果特权集的值为user。
[0169] 比较漏洞CVE-2016-2207与漏洞CVE-2014-3390,漏洞CVE-2016-2207的前提特权集为access,结果特权集为user;漏洞CVE-2014-3390的前提特权集为user,结果特权集为root。对于一个远程访问者来说,特权集为access,不能直接利用漏洞CVE-2014-3390,但是该远程访问者可以先利用漏洞CVE-2016-2207使自己的特权集提升至user,然后就可以利用漏洞CVE-2016-2207,最终一个远程访问者通过一次多级攻击获取了系统的root权限。由此可以得出漏洞CVE-2016-2207与漏洞CVE-2014-3390是相关联的。