基于Bert_TextCNN模型的漏洞知识库问答系统

2023-10-31 09:08应王萍宋建华
湖北大学学报(自然科学版) 2023年6期
关键词:漏洞情报图谱

应王萍,宋建华

(1.湖北大学计算机与信息工程学院,湖北 武汉 430062;2.湖北大学网络空间安全学院,湖北 武汉 430062;3.智慧政务与人工智能应用湖北省工程研究中心,湖北 武汉 430062;4.湖北省高校人文社科重点研究基地(绩效评价信息管理研究中心),湖北 武汉 430062)

0 引言

随着网络技术的高速发展,我国的互联网使用率迅速上升.中国互联网络信息中心发布的第50次《中国互联网网络发展状况统计报告》指出,截至2022年6月,我国互联网普及率达到了74.4%,网民规模高达10.51亿,网络环境日益复杂,加强网络安全治理成为了当下刻不容缓的艰巨任务.为全方位感知网络安全态势,我国建设了国家信息安全漏洞共享平台(CNVD)和中国国家信息安全漏洞库(CNNVD)[1]等漏洞库,收集管理海量漏洞情报,实时更新漏洞以提高预警能力,有效保障软件的安全性.但由于不同漏洞平台相互独立,收集管理漏洞情报的侧重点不同,存在同一漏洞在不同平台信息不一致或不全面等问题.知识图谱(knowledge graph)是在传统关系型知识库的基础之上发展而来的,相较于传统知识库更注重其中的数据与数据间的关系,将独立的知识相互关联,结构化管理,形式更灵活,可扩展性更好[2],可以有效弥补传统漏洞库存在的问题.

因此本研究打破传统漏洞库存储数据的方法,以CNVD和CNNVD中管理的漏洞情报数据作为数据源,利用网络爬虫技术爬取漏洞情报并对爬取的数据进行数据预处理,实体和关系抽取,以及知识融合,提出构建融合CNVD和CNNVD的综合漏洞知识图谱用于存储数据,并在此基础上构建问答系统,为用户快捷、精准查询漏洞信息提供服务.

1 相关工作

目前,知识图谱凭借其强大的结构化统一管理数据的能力,在医学、军事、金融等多个领域得到广泛应用[3].而在网络安全领域,同样也有一批学者通过研究,尝试将知识图谱融入安全领域.贾焰等[4]提出一种五元组模型用于构建知识图谱.但由于实体字典难以构建,导致识别精度不高,还需进一步丰富网络安全知识库,为后续态势感知研究提供帮助.针对这一现状,如何提高技术人员搜集漏洞情报的效率,并全面把握漏洞信息成为至关重要的工作.目前,由于各个平台的安全漏洞管理方式标准不一致,结构不统一,导致漏洞数量繁多、缺乏相关性等问题,因此本文中提出借助知识图谱结构化管理数据,以实体和关系为基础构建网络型结构的特点,为解决漏洞库现有问题提供有效的解决方案.

知识图谱这一词汇最早是由Google提出的,Google利用知识图谱增强其搜索功能[5].知识图谱以节点和边的形式将自然界中复杂的语义关系表示为简洁、结构化的语义网络,以实体为节点,其间的关系为有向边,将知识以三元组的形式进行存储[6].叶子维等[7]通过对实体进行原子攻击的知识图谱的设计,可以实现扩展攻击图信息的输入和显示功能,有效解决目前由于外部环境因素的干扰,不能准确生成反映节点和路径实际风险水平的问题,实验证明,该知识图谱可以有效得到更全面的漏洞信息和更精准的评分.

知识图谱因其具备专有的Cypher查询语句,因此可以拓展问答功能.融合知识图谱使得问答的可拓展性更强,能够查询到实体的各种属性,覆盖面广.融合知识图谱的问答系统在其他领域已经得到了广泛的应用,但在安全漏洞领域没有综合大量漏洞信息的问答系统,用户只能有针对性地去专业平台上查询,因此在构建综合漏洞知识图谱的基础之上构建问答系统,以满足用户便捷获取漏洞信息的需求.

现有的问答系统根据问题答案的数据来源和回答的方式不同,大体可以分为三类,分别是信息检索类、知识图谱类和社区类问答系统[8].信息检索类问答系统需以搜索引擎为支撑,理解问题意图后通过搜索引擎在全网范围内搜索相关答案反馈给用户,其缺点为搜索结果不准确,在判断文本相关度能力方面较为欠缺,适用于通用领域;社区类问答系统(CQA)针对网民提出的问题,由其他网民自发参与回答,针对已有的问题,系统通过检索与其相关度较高的问题反馈给用户,其缺点是答案的正确性没有权威保障,需要用户甄别,不适用于专业领域问答.知识图谱类问答系统(KBQA)[9]则是通过对专业知识的结构化存储管理构建一个知识图谱,以知识图谱为支撑的问答系统,适用于具体业务和垂直领域的知识问答.曹明宇等[10]针对在成年人群体中较为常见的原发性肝癌问题,从知识库中抽取三元组构建知识图谱,并实现了流水线式问答系统,实现有效回答肝癌相关问题的功能.陈晓军等[11]针对目前金融领域知识图谱存在的信息缺失、准确率低等问题,提出一种基于企业风险的知识图谱,并构建了一个基于企业风险知识图谱的答疑机器人来进行查询.武书钊等[12]建立了一种心理咨询知识图谱问答系统,以解决当前人群中的精神患疾率不断上升的问题.通过CHI特征实现问题分类,以提高问答效率,选用BILSTM模型构造一个文本分类器,用于识别用户可能带有危险性的发言,通过对相似度得分的分析,获得问题模板的最佳匹配并返回答案.

2 CNNVD和CNVD的综合漏洞知识图谱的构建

知识图谱的构建方法有自底而上(bottom-up)和自顶而下(top-down)两种[13].自底而上是先形成底层概念,再从底层概念逐步向上对概念抽象化形成上层概念,适用于通用领域知识图谱;自顶而下则是先定义知识图谱的数据模式(schema),也即是顶层概念,再逐步向下构建,适用于构建垂直行业领域知识图谱.因此本文中采用自顶而下的方法来构造漏洞情报知识图谱,首先是对数据模型进行合理设计,为知识图谱的建立搭好结构框架,接着根据定义好的数据模型爬取采集漏洞情报数据样本,对多源异构的漏洞情报进行数据预处理,解决数据冗余杂乱的问题,再进行知识融合,也即是将多元的信息进行整合,获得完整的结构化数据,最后通过Neo4j图数据库的Neo4j-import方法导入数据,完成知识图谱的构建.漏洞情报知识图谱的构建框架如图1所示.

图1 知识图谱构建框架

2.1 数据模式设计在构建知识图谱之前,必须先确定一个数据模式(schema),它是对实体的一种抽象表示,而实体则是数据模式的实例.一般情况下,数据模式会以结构化概念树的形式展现,为知识图谱的构建工作搭建好结构框架.定义数据模式通常需要领域专家进行严格划分,或参考现有的分类方法结合需求进行修改.本文中以现有的漏洞情报分类方式为依据,设计一种方法确定数据模式,具体步骤如下:

1)明确领域.本文是面向漏洞情报领域,范畴是CNVD和CNNVD收集的漏洞情报知识.

2)参考现有的漏洞情报本体进行复用,保证本体的构建效率.

3)针对本文的漏洞情报数据特性,明确概念本体、本体间的关系和本体属性.

根据以上步骤,设计面向漏洞情报领域的数据模式.概念本体包括漏洞名称(vulnerability)、漏洞类型(type)、风险等级(level)和受影响软件(affected software);本体间的关系包括别称(nickname)、影响(affect)和解决(solve);本体属性包括CVE编号(CVE)、参考链接(reference)、漏洞描述(description)、解决方案(solution)和发布日期(release date).

2.2 数据采集从1999年到2021年,通过CNVD和CNNVD这两个安全漏洞平台获取的漏洞情报原始数据共35.8万条.数据采集的步骤主要有:先全部提取漏洞报告的地址,接着Redis对比URL完成去重,最后进行异步请求和多路采集.Scrapy是一种适用于python的结构数据抽取框架,它可以用于捕捉web站点和从网页中抽取结构性数据,利用Scrapy框架进行漏洞情报的收集,针对多种不同的漏洞平台,建立了多种漏洞匹配规则多通道异步请求,采取分布式采集漏洞信息.

2.3 数据预处理知识融合就是使来自不同知识源的关于同一实体的信息进行信息整合,使其形成信息更加完整的实体数据.知识融合童超包括实体消歧和实体对齐本文数据来源CNNVD和CNVD为专业领域数据库,漏洞编号一一对应,不存在实体歧义的情况,不需要进行实体消歧.因此只需实体对齐,对不同来源数据进行归一化处理.

2.4 知识融合知识融合就是使来自不同知识源的关于同一实体的信息进行信息整合,使其形成信息更加完整的实体数据.知识融合任务包括实体消歧和实体对齐.本文中数据来源CNNVD和CNVD为专业领域数据库,漏洞编号一一对应,因此不需要进行实体消歧.只需实体对齐,对不同来源数据进行归一化处理.

2.5 数据存储Neo4j图数据库包含节点、关系和属性这三个基本要素,通过本体与属性间的联系添加关系边,可以对节点的属性进行增删操作.此外,Neo4j图数据库还具有快速、便捷的图形检索功能,可以用专用的查询操作语言Cypher进行信息查询.Neo4j可以通过CREATE语句、LOAD CSV语句、Batch Inserter、Batch Import和Neo4j-import等方式导入数据信息.CREATE语句用于实时插入少量数据;LOAD CSV语句可批量插入10 KB~100 KB数据,缺点是可插入的字节数据量较小且速度慢;Batch Inserter可批量导入千万字节以上的数据,但需转换为CSV且在JAVA中使用;Batch Import基于Batch Inserter可直接运行jar包;Neo4j-import具备Batch Import功能的同时比Batch Import占用更少的资源.由于本文中的数据量较大,因此采用Neo4j-import的方法高效导入数据.

3 融合Bert_TextCNN模型的综合漏洞知识库问答系统

在问答系统中,准确地理解用户的自然语言问题是解决问题的关键.意图识别的主要任务则是对用户的核心需求作出准确的分析,并将其归类为不同的意图.对用户query意图的识别,本质上就是对文本进行归类,因此可以基于分类模型判断用户的意图,将用户query分类到相应的意图种类.问答系统中通常用语义槽来表示用户的需求,而槽位填充本质上是序列标注任务,也即是将query中的每个词打上相应语义类别标签,因此可以使用序列标注模型进行槽位填充.意图识别与槽位填充流程如图2所示.

图2 Bert模型

3.1 Bert模型对漏洞情报数据进行预处理后,常规的处理方法是输入Word2vec模型对漏洞情报进行特征的提取任务.相较于Word2vec模型,Bert模型能够通过联系上下文语义进行学习,并且可以根据上下文输出特征表示,使其具有更多的语义信息.在意图识别和槽位填充任务中,需要通过编码上下文语义信息获得整个数据语句的句子级向量表示,通过运用Bert模型可以有效解决这一问题.模型结构如图2所示.

其中,词向量通常为随机初始字向量,段向量是由于文本上句与下句会出现拼接在一起的情况,因此文本中每一句都有段向量,位置向量的功能则是为了表示出现在文本不同位置的字所携带的语义信息差异,用于弥补transformer模型不能记住时序的缺陷,因此加入用于表示位置的向量.

模型在预训练阶段分为掩码语言模型(masked lauguage model,MLM)和下一句预测(next sentence prediction,NSP)两个任务[14].MLM任务的做法是随机选择一部分输入词进行隐藏.随机隐藏一段文本内容中15%的词保留作为被预测的词,其余的所有词则用于对隐藏词进行预测.在训练中80%的词被替换为隐藏的词,10%被替换为随机词;剩下的10%保持原样不做任何修改.NSP则是二分类任务,其目的在于判定相连的两个句子是否是逻辑上连续的上下句.

Bert模型最关键之处就是它是基于Attention机制的,由若干个transformer模型[15]的编码结构组成的自然语言处理通用模型.其中每一个transformer模型的内部又是由self-attention层和前向神经网络构成,self-attention层的输出公式如式(1)所示:

多头注意力机制是利用Q,K,V的线性变换作投影,进行多次self-attention运算,最后将不同的结果进行拼接,计算结果如式(2)和式(3)所示:

MultiHead(Q,K,V)=Concat(head1,head2,…,headh)WO

(2)

3.2 意图识别本文中提出利用Bert_TextCNN模型进行意图识别.卷积神经网络(CNN)具有局部提取特征的能力.TextCNN模型则是基于卷积神经网络提出的一种变体模型.作为CNN的变体模型,TextCNN模型利用卷积神经网络进行分类,采用不同的过滤核对不同大小的文本序列进行特征的提取.将Bert模型和TextCNN模型相结合,融合Bert模型进行词向量化方法的优势,有效地提高了模型的识别能力,增强了模型的泛化能力.

Bert_TextCNN模型由Bert模型与TextCNN模型联合组成,包括词嵌入层、卷积层、池化层、融合层和全连接层.Bert_TextCNN模型先通过Bert模型训练语料,对其进行向量化表示,并以字向量矩阵的形式输出,TextCNN模型接收Bert模型输出的字向量矩阵为输入,先通过卷积层对输入的字向量矩阵进行运算获得特征,经过卷积层中多个卷积操作后得到若干个不同的特征,接着将其输入池化层进行卷积运算,将各特征中的最大值作为保留的特征信息,接着传送到全连接层,通过softmax函数进行特征分类任务,将所有特征结合得到全局特征.Bert_TextCNN模型如图3所示.

图3 Bert_TextCNN模型

3.3 槽位填充Bert_BiLSTM_CRF模型是当前用于完成序列标注任务的基准模型,本文中选择Bert_BiLSTM_CRF模型进行槽位填充任务,Bert_BiLSTM_CRF模型如图4所示.相较于BiLSTM_CRF模型增加了一个Bert模块,其初始化word embedding优于随机初始化,且它能够计算语言之间的相互关系,利用计算的关系调节权重提取文本中的特征,利用注意力机制的结构进行预训练.能捕捉上下文信息,学习到连续文本片段间的关系.

图4 BERT-BiLSTM-CRF模型

BiLSTM用于获取前向和后向的上下文特征,利用softmax函数用于评估每个词所对应标签的概率,并输出最大概率的标签.但由于LSTM不考虑标签的依赖关系,就容易出现序列不合理的情况,影响准确率.CRF层接收softmax函数输出的标签作为输入,作用就是对BiLSTM的输出进行合理修正,对输出的序列顺序进行标注,最大概率获得合理序列.对于输入序列S=(S1,S2,…,Sn),其中n是S序列的词个数,输出的预测序列y=(y1,y2,…,yn)的分数函数如式(4)所示:

预测序列y在S给定的情况下概率如式(5)所示:

似然函数如式(6)所示:

4 实验

4.1 实验环境本研究采用Intel(R) Core(TM) i5-8300H CPU@2.30 GHz处理器、8 GB内存,操作系统为64位Windows10的环境展开实验.编程环境为python3.6.0,开发框架为PyCharm,深度学习框架为Tensorflow1.15.0.

4.2 实验数据与预处理本文中的原始数据通过网络爬虫爬取CNNVD和CNVD获得.由于数据存在数据多源异构的问题,因此需要对数据进行人工处理,获得结构化数据.

数据预处理首先要对文本进行分词操作,接着对分词后的数据采用BIO标注方法对文本中的cve编号、漏洞简介、漏洞等级、发布时间、参考网址、解决方案、漏洞名称和漏洞网址进行标注.以cve编号为例,其首字后标注为B-CVE,非首字后标注为I-CVE,非实体的字标注为O.部分BIO标注符号及其含义示例如表1所示.

表1 BIO标注

4.3 数据存储与可视化展示本文中采用neo4j图数据库用于存储综合漏洞情报数据.由于漏洞情报数据量巨大,根据2.5节阐述的内容,采用的方法是Neo4j-import.通过Neo4j-import的方法将CSV文件中的数据批量导入Neo4j图数据库,即可构建知识图谱.知识图谱部分知识可视化效果如图5所示.

图5 知识图谱可视化

4.4 实验评测

4.4.1 实验设计 为了验证Bert_TextCNN模型在意图识别任务上的性能,引入多种用于意图识别的模型进行实验对比,引入的模型有以下5个:

1)FastText[16]:仅包含一层隐层和输出层,因此能够及其快速完成分类任务.

2)TextCNN:TextCNN是将文本中的局部特征抽取出来,并自动将特征进行组合和筛选,从而得到具有不同层次的语义信息.

3)TextRNN[17]:TextRNN采用循环神经网络进行文本的分类.相比于TextCNN适用于短文本,TextRNN擅长捕捉长序列,将Word Embedding后输入Bi-Lstm获取文本特征,将最后一步输入softmax层进行分类,完成文本分类任务.

4)TextRCNN[18]:采用RNN代替TextCNN进行特征抽取,将RNN的优势和CNN的优势相结合.

5)DPCNN:可以有效提升文本中的远程关系特征,有效弥补CNN捕获距离端的缺点.不采用加权卷积,而是对n个词进行pooling后加卷积,用1/2池化层,size=3,stride=2的卷积核使可编码长度翻倍.

4.4.2 评估指标 选用平均准确率PAcc、平均召回率RRecall和平均F1值作为评估指标.其公式如式(7~9)所示:

为了验证Bert_TextCNN模型用于漏洞情报领域的意图识别有效性,本文中对比主流模型,以平均准确率、平均召回率和平均F1值作为评价指标,表2为上述各模型与本模型在意图识别任务上的分类表现.

表2 意图识别结果对比

由表5可见,本模型的平均准确率为96.5%,平均召回率为96.5%,平均F1值为96.5%,相较于对照组模型结果最优的TextCNN模型提升了2.4%.TextRCNN、DPCNN和FastText则分别取得了92.5%,92.1%和89.2%的成绩.由于漏洞情报文本数量多,专业词汇较多,导致TextRNN模型在本文中数据集中的分类表现较差.从实验结果可以看出,Bert_TextCNN模型在漏洞情报数据集上的意图识别能力超过了以上主流模型.

4.5 问题模板匹配问答系统由问句分类、问句分析和查询结果三大模块组成.问句分类分为以下4个步骤:1)定义问题分类的特征词,定义疑问词、关键词、词典、领域树等成员变量;2)去除短的有重复字符串的领域词,返回最长的领域词;3)按照特征词对句子进行合理归类;4)合并处理多个分类的结果,将其组合为词典.问句分析模块先将从问句分类模块输出的归类结果输入主函数中,接着抽取关键字并返回词典,最后将问题转化为由Neo4j的提供的Cyther语句.查询语句为:MATCH (m:a) --(n:b)where m.a=‘{关系}’ return m.a,n.b.例如:查询“CNNVD-201209-190的cve编号是什么?”,其对应的Cypher语句为:MATCH (m:cnnvd_id) --(n:cve_id)where m.cnnvd_id=‘{rels_cve_id}’ return m.cnnvd_id,n.cve_id.Cypher查询语句是在查询结果模块执行并返回相应结果,最后按照不同的问题类型调用相应的答复模板.

常见的自然语言问答通常是通过模板匹配、检索模型和基于深度学习等方法来实现.由于检索模型查询答案的方法需要对大量的问答文本进行比对,而基于深度学习的方法需要大量标注样本集,耗费大量的人力成本,由此本文中采用的是模板匹配的方法.计算用户query与模板之间的相似度,相似度得分最高的为目标问题.对系统提出的漏洞问题示例如表3所示,当用户依次输入表中的问题,漏洞库问答系统则会依次给出正确答案,系统演示效果如图6所示.

表3 问题示例

图6 问答演示

5 结论

针对国内现有漏洞平台对漏洞情报的收集工作存在的漏洞信息不全面、信息孤立不关联、利用率低等问题,本文中构建融合CNNVD和CNVD的综合漏洞知识图谱,并以该知识图谱为基础,针对漏洞常见问题进行设计,构建融合Bert_TextCNN模型实现用户意图的综合漏洞知识库问答系统,方便用户精准获取所需的漏洞知识,弥补当前漏洞情报领域尚未有问答系统研究的空缺.通过与主流模型的对比,以准确率、召回率和F1值作为评估指标,得出了Bert_TextCNN模型在安全漏洞意图识别任务上性能优于主流模型的结论.后续工作需要进一步扩大数据集,动态更新最新漏洞情报,对复杂问题的智能问答做进一步研究,以满足用户更多的需求.

猜你喜欢
漏洞情报图谱
情报
漏洞
情报
情报
绘一张成长图谱
补肾强身片UPLC指纹图谱
三明:“两票制”堵住加价漏洞
漏洞在哪儿
主动对接你思维的知识图谱
高铁急救应补齐三漏洞