技术新讯 > 计算推算,计数设备的制造及其应用技术 > 基于多源知识的开源漏洞影响组件及其生态的识别方法  >  正文

基于多源知识的开源漏洞影响组件及其生态的识别方法

  • 国知局
  • 2024-08-08 16:52:13

本发明属于软件工程,具体涉及一种开源漏洞影响组件及其生态的识别方法。

背景技术:

1、开源软件在软件开发中扮演着至关重要的角色,它们允许开发复用代码而不必重新编写。目前开源软件的基数大,使用范围广,开发者能够通过拷贝、二次开发源代码以及引入依赖组件等方式复用其它开源软件,构成了复杂且庞大的开源软件供应链。开源软件给开发者带来了便利的同时也引入了安全风险[1-4],新思科技2023年的供应链安全报告显示[5],在用户下载的每八个开源软件中至少就会有一个遭受已有的安全风险问题影响。针对上述问题,应用软件成分分析(sca)技术对应用程序进行安全检测,是目前实现开源软件安全管理较有效的方法之一[6]。gartner[7]评估了sca供应商,包括synopsys[8]、veracode[9]、snyk[10]、mend.io[11]、github[12]和gitlab[13]。这些供应商都维护着自己的漏洞数据库,建立了每个漏洞与其影响组件、影响组件版本、修复补丁之间的映射。为了使供应商能够提供有效的sca服务,漏洞数据库需要持续更新,并保持准确。然而,ying等人[14]、bao等人[15]、sun等人[16]的研究表明,目前安全数据库中漏洞影响组件的知识有着严重的质量问题,包括组件的漏洞影响组件及其生态的不全面和不准确。这会严重误导安全研究者,并给漏洞传播、漏洞修复、漏洞利用等下游的分析工作带来极大阻碍。

2、由于可能在漏洞描述和cpe配置中没有明确提到受影响的组件,而是隐藏在直接或间接的引用中,因此对于安全团队来说,手动识别每个受漏洞影响的组件是费时且容易出错的。为了协助安全团队的漏洞筛选,最近提出了几种方法[15-18]来自动识别受影响的组件。dong等人[16]利用命名实体识别(ner)来从漏洞描述中识别受影响的组件。然而,由于漏洞描述可能没提及受影响的组件,由于知识源有限,这种基于ner的方法不能识别受影响的组件。此外,由于漏洞描述可能未提及完整的组件坐标,这种基于ner的方法可能会识别出与开发人员声明的组件坐标不符的受影响组件名称。为了缓解上述问题,一些基于xml的方法[15],[17],[18]使用组件坐标作为标签,并基于漏洞描述、cpe配置和引用中提取的特征来为每个漏洞预测受影响的组件。然而,在实践中它们仍然存在限制。一是标签集的大小有限,使它们无法处理不在标签集中的受影响组件的漏洞。另一个是对生态系统不敏感,导致它们无法区分相同名称但来自不同语言生态系统的组件。

技术实现思路

1、本发明的目的在于提供一种开源漏洞影响组件及其生态的识别方法,从而高效地识别漏洞库中记录的开源漏洞的影响组件及其生态。

2、本发明提供的开源漏洞影响组件及其生态的识别方法,包括,从多个信息源收集有关漏洞影响组件及其生态系统的多源证据;利用网络资源组建全量的生态组件池,并计算已收集证据与组件池中每个组件的相关性;将现有的公共漏洞和暴露漏洞(cve)条目与其对应的影响组件及其生态作为训练数据集,训练开源漏洞影响组件及其生态识别器;输入待检测cve漏洞条目进行漏洞组件相关度排序,取出全量排序中排名最高的组件与其对应的生态作为漏洞影响组件及其生态;具体步骤如下:

3、(一)收集cve与开源代码仓库(github)信息源中的漏洞信息与组件信息,从中抽取漏洞受影响组件及其生态系统的证据;

4、通过cve和github,收集cve中的漏洞信息,cve引用网站中的漏洞描述;定位github中组件相关代码仓库的位置,组件相关的问题提交(issue,pull request)和补丁(commit);基于规则在上述信息源中收集供应商和产品名称(vpn)、产品版本(ver)、组件坐标(lc)、文件路径(fp)、类名称(cn)、语言(lang);抽取github代码仓库的语言占比情况与生态配置文件中的组件名称;具体包括以下子步骤:

5、(1)提取cve中的cpe信息与漏洞描述字段,提取cve中的引用网站内容与二级引用网站内容,并构建网站的文档对象模型树(html dom tree),使用规则进行dom树剪枝,抽取子树中的所有漏洞相关描述信息;

6、(2)使用cpe的供应商字段和产品名字段在github中搜索组件相关代码仓,并根据公共漏洞和暴露标识符(cve id)和软件缺陷标识符(bug id)进行组件相关的issue、pullrequest与commit收集并抽取代码仓库的语言信息;

7、(3)解析cve及其引用,github代码仓中的知识源,抽取漏洞组件相关证据,包括:

8、供应商和产品名称(vpn):cpe配置中的供商名称和产品名称可能会直接揭示受影响的组件或提示受影响组件的所属产品;

9、产品版本(ver):产品及其组件的版本通常共享相同的版本,cpe产品的版本范围可以缩小受影响组件的范围;

10、组件坐标(lc):来自代码存储库中包管理器的引用或包管理器配置文件中的包注册表url可以查明受影响的组件;

11、文件路径(fp):漏洞报告中提到的或代码存储库中修复提交所涉及的源代码文件的路径可能包含这些路径的受影响的组件;

12、类名称(cn):在参考网页中可能包含受影响组件的相关类名;

13、语言(lang):来自代码存储库的语言信息表明受影响组件的潜在生态系统。

14、(二)利用网络资源获得生态组件元信息以及组件源码,从而构建一个全量的组件池并计算已收集证据与组件池中每个组件的相关性;

15、首先从面向java编程语言的生态仓库(名为maven仓库)、面向javascript编程语言的生态仓库(名为npm仓库)、面向python编程语言的生态仓库(名为pypi仓库)和面向go编程语言的生态仓库(名为go仓库)中抓取组件的名称和组件版本以及对应的组件源代码,并以此构建关于这四个生态的全量组件库;解析组件库中每一个组件的所有类名、方法名、文件路径,并补充到本组件库中;构建lucene搜索引擎,查询数据库中的相关的组件元信息;通过改进的bm25算法[19]计算出每个组件的供应商和产品名称、产品版本、文件路径、类名称的相关性评分;具体包括以下子步骤:

16、(1)爬取maven仓库、npm仓库、pypi仓库和go软件仓库中组件的名称、版本以及对应的源代码,并以此构建关于这四个生态的全量组件库;解析组件库中各个组件的所有类名、方法名、文件路径,并补充到本组件库中;

17、(2)构建lucene搜索引擎,查询返回组件数据库中的相关的组件元信息;并通过改进的bm25算法计算出每个组件的供应商和产品名称、产品版本、文件路径、类名称的相关性评分。

18、(三)随机采样cve漏洞条目与其对应的影响组件与生态作为训练数据集,训练基于学习排序算法(lambdamart)[20]的开源漏洞影响组件及其生态识别器;输入待检测cve漏洞条目,取出全量排序中排名最高的组件与对应的生态作为漏洞影响组件及其生态;

19、准备漏洞影响组件与其他组件的训练数据集;使用步骤(一)方法提取并处理漏洞影响组件的知识,使用步骤(二)方法为比较漏洞影响组件知识与所有组件的相关度,并作为本步的输入;使用lambdamart算法[20]进行漏洞影响组件的学习排序;使用训练完成的学习排序模型将组件数据库中的所有组件进行漏洞相关性排序,取出排名最高的组件为漏洞影响组件,具体包括如下子步骤:

20、(1)将每个组件的六个维度的证据相关性向量化为1×6的特征矩阵;

21、(2)对每一个cve生成的全量漏洞相关组件特征矩阵使用lambdamart算法进行漏洞影响组件的学习排序训练,得到开源漏洞影响组件及其生态的识别器。

22、本发明的基本过程示意图如图1所示。本发明方法通过从多个信息源收集有关受影响组件及其生态系统的多源证据;将每个组件与漏洞条目的相关度使用排序算法进行全量排序;随机采样cve漏洞条目与其对应的影响组件与生态作为训练数据集,训练开源漏洞影响组件及其生态识别器;检测cve漏洞条目组件对应的漏洞影响组件及其生态。本发明方法可以帮助审查并纠正漏洞知识库的组件知识,缓解依赖漏洞组件的项目的风险和损失。

本文地址:https://www.jishuxx.com/zhuanli/20240808/270888.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。