CN117195233A - 面向开源软件供应链的物料清单sbom+分析方法及装置 - Google Patents
面向开源软件供应链的物料清单sbom+分析方法及装置 Download PDFInfo
- Publication number
- CN117195233A CN117195233A CN202311201774.6A CN202311201774A CN117195233A CN 117195233 A CN117195233 A CN 117195233A CN 202311201774 A CN202311201774 A CN 202311201774A CN 117195233 A CN117195233 A CN 117195233A
- Authority
- CN
- China
- Prior art keywords
- license
- software
- target software
- function
- node
- 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
- 238000004458 analytical method Methods 0.000 title claims abstract description 34
- 239000000463 material Substances 0.000 title claims abstract description 23
- 238000001514 detection method Methods 0.000 claims abstract description 31
- 238000000034 method Methods 0.000 claims abstract description 30
- 238000012916 structural analysis Methods 0.000 claims abstract description 8
- 230000006870 function Effects 0.000 claims description 74
- 239000013598 vector Substances 0.000 claims description 24
- 230000009471 action Effects 0.000 claims description 15
- 239000011159 matrix material Substances 0.000 claims description 7
- 238000004364 calculation method Methods 0.000 claims description 6
- 238000001914 filtration Methods 0.000 claims description 2
- 238000012545 processing Methods 0.000 claims description 2
- 238000011946 reduction process Methods 0.000 claims description 2
- 238000012549 training Methods 0.000 claims description 2
- 238000002474 experimental method Methods 0.000 description 15
- 230000009467 reduction Effects 0.000 description 8
- 238000000605 extraction Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000012706 support-vector machine Methods 0.000 description 2
- 241000157593 Milvus Species 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013145 classification model Methods 0.000 description 1
- 238000010367 cloning Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013499 data model Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/30—Computing systems specially adapted for manufacturing
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开一种面向开源软件供应链的物料清单SBOM+分析方法及装置,所述方法包括:对目标软件进行软件信息采集以及结构化解析,得到SBOM基本信息、源代码、二进制码和许可证框架;计算二进制码的基础特征以及二进制码中每一函数对应的函数特征后,通过基础特征以及函数特征进行候选组件的检索,以得到目标软件包含的候选组件以及版本;基于源代码进行目标软件的漏洞识别,以得到目标软件对应的漏洞识别结果;根据许可证框架计算目标软件对应的许可证冲突检测结果;基于目标软件包含的候选组件以及对应的版本、漏洞识别结果、许可证冲突检测结果,生成物料清单SBOM+分析结果。本发明能解决当前开源软件供应链中SBOM解析不充分以及SCA识别组件准确率不足问题。
Description
技术领域
本发明属于计算机软件技术领域,涉及一种面向开源软件供应链的物料清单SBOM+分析方法及装置。
背景技术
在“软件定义一切”的时代,随着软件需求的快速发展,网络空间中的安全威胁也在不断发生变化。当前,开源软件供应链攻击已经成为网络空间中最具挑战的威胁之一,攻击者可以通过软件组件注入或以其他方式破坏产品的完整性。软件物料清单(SoftwareBill of Materials,SBOM)是一种标准化的、机器可读的描述软件包依赖树的一系列元数据,包括供应商、版本号和组件名称等多项关键信息SBOM作为开源软件供应链的标准,要求所有供应链的参与者在发布软件产品时提供机器可读的SBOM。通过SBOM的方式可以有效提高软件供应链的透明度,使攻击者难以隐藏恶意代码,同时为开发者和终端用户提供了更准确的信息。
目前主要通过两种方式生成SBOM:一是通过自动化开源工具创建SBOM,但是开源工具生成的SBOM清单通常只涵盖软件的基础信息。二是利用依赖软件成分分析(SCA)技术识别组件和版本,并输出对应的层级依赖关系,从而生成SBOM。其复杂性包括:1)要适配不同的编程语言,而像JAVA和C/C++这样不同语言的包管理机制会有较大差异;2)要从源码、制品、二进制等不同形态的软件产物中解析提取这些特征,这些特征的提取策略依赖于对各类产物的理解。SCA虽然可以识别开源软件中的第三方库,也就是相应的软件组件信息,但由于内部代码克隆等问题,会降低组件识别的准确性。除此之外,上述两种方法生成的SBOM信息仅被用来在软件供应链中跟踪组件,没有考虑到基于开源许可证冲突、漏洞检测等辅助信息。
发明内容
针对上述问题,本发明提出了一种面向开源软件供应链的物料清单SBOM+分析方法及装置,可以解决当前开源软件供应链中SBOM解析不充分以及SCA识别组件准确率不足问题,
本发明的技术方案,包括:
一种面向开源软件供应链的物料清单SBOM+分析方法,所述方法包括:
对目标软件进行软件信息采集以及结构化解析,得到SBOM基本信息、源代码、二进制码和许可证框架;
计算所述二进制码的基础特征以及所述二进制码中每一函数对应的函数特征后,通过所述基础特征以及所述函数特征进行候选组件的检索,以得到所述目标软件包含的候选组件以及版本;
基于所述源代码进行所述目标软件的漏洞识别,以得到所述目标软件对应的漏洞识别结果;
根据所述许可证框架计算所述目标软件对应的许可证冲突检测结果;
基于所述目标软件包含的候选组件以及对应的版本、漏洞识别结果、许可证冲突检测结果,生成物料清单SBOM+分析结果。
进一步地,所述SBOM基本信息包括:开发者、项目语言、发布日期以及软件描述。
进一步地,计算所述二进制码中每一函数对应的函数特征,包括:
基于Ghidra工具反汇编所述二进制码,以得到所述二进制码包含的函数;
采用Gemini模型将所述二进制码包含的每一函数转换为对应的属性控制流图;
基于Structure2vec图嵌入网络,将所述属性控制流图转换为函数特征;其中,训练所述Structure2vec图嵌入网络的损失包括:向量fi与向量fj之间的对比损失,所述向量fi表示相同源代码编译的函数所对应的向量,所述向量fj表示不同源代码编译的函数所对应的向量。
进一步地,通过所述基础特征以及所述函数特征进行候选组件的检索,以得到所述目标软件包含的候选组件以及版本,包括:
根据所述基础特征反向索引优化匹配基本特征数据库,并基于规则和阈值进行过滤基本特征数据库中的候选组件,以得到第一初始候选组件集合;其中,所述基础特征包括:字符串文字和导出的函数名;
基于所述函数特征进行最近邻算法搜索,以得到第二初始候选组件集合;
通过函数配对和FCG比较,排除第一初始候选组件集合与第二初始候选组件集合中误报的候选组件后,进行候选组件集合并,以得到最终候选组件;
针对所述最终候选组件进行相似性得分计算,并选择相似性得分最大的作为所述目标软件的版本。
进一步地,所述基于所述源代码进行所述目标软件的漏洞识别,以得到所述目标软件对应的漏洞识别结果,包括:
解析所述源代码,并根据源代码解析结果构建代码属性图;
对所述代码属性图进行图简化,得到一有向图;其中,所述图简化的过程包括:依据节点类型合并相邻节点和/或根据节点变量合并叶节点;
将所述有向图中的异构边缘信息融合到节点表示后,通过捕捉远处节点之间的关系来学习有向图的全局信息;
基于所述有向图的全局信息进行分类,得到所述目标软件对应的漏洞识别结果。
进一步地,将所述有向图中的异构边缘信息融合到节点表示,包括:
通过将多个边缘信息合并到节点嵌入中,得到边权重;
使用边权重来更新节点vi的表示,以得到节点vi的隐藏状态其中,l表示图卷积网络中的第l层;
基于所述隐藏状态生成边缘增强节点表示矩阵/>
进一步地,所述通过捕捉远处节点之间的关系来学习有向图的全局信息,包括:
针对边缘增强节点表示矩阵使用两个尺寸分别为N和M的卷积核进行并行卷积计算,得到两个分支的计算结果;其中,N>M,尺寸为N的卷积核用于关注远处节点的关系,尺寸为M的卷积核用于关注领域节点的关系;
将两个分支的计算结果通过批处理归一化后相加,得到所述有向图的全局信息。
进一步地,根据所述许可证框架计算所述目标软件对应的许可证冲突检测结果,包括:
基于所述许可证框架,获取集成软件的文件结构;其中,所述集成软件的组件包括所述目标软件,所述集成软件的文件结构包含主目录中的许可证以及若干子目录中组件的许可证;
根据所述文件结构构建许可证层次结构;
从下到上删除所述许可证层次结构中没有许可证的节点,并将其的子节点与父节点连接后,得到最终的许可证层次结构;
提取所述最终的许可证层次结构中的父子对,并通过对许可证的理解,判断符合父节点要求时是否会违反任何子节点的要求;
当符合父节点要求时不违反任何子节点的要求,则定义该父子对兼容;否则,定义该父子对存在许可证不兼容。
进一步地,所述通过对许可证的理解,判断符合父节点要求时是否会违反任何子节点的要求,包括:
针对父节点和任一子节点对应的许可证内容,使用预先训练好的BERT模型作为句子编码器来捕获每个标记的嵌入ei;
结合预设的关系表示rk,列举所有可能的三元组(ei,rk,ej);其中,关系表示rk包括:行动与对象之间的关系、行动与态度之间的关系、行动与条件之间的关系、条件与行动之间的关系、其他实体之间的关系;
评估任一所述三元组(ei,rk,ej)是否属于一个事实三元组,并在该三元组(ei,rk,ej)属于一个事实三元组的情况下,计算对应的标签;
针对父节点和一子节点中相同的两个标记,若该两个标记之间具有相同的标签,则判断符合父节点要求时不违反任何子节点的要求,则定义该父子对兼容;否则,定义该父子对存在许可证不兼容。
一种面向开源软件供应链的物料清单SBOM+分析装置,包括:
软件分析模块,用于对目标软件进行软件信息采集以及结构化解析,得到SBOM基本信息、源代码、二进制码和许可证框架;
组件与版本获取模块,用于计算所述二进制码的基础特征以及所述二进制码中每一函数对应的函数特征后,通过所述基础特征以及所述函数特征进行候选组件的检索,以得到所述目标软件包含的候选组件以及版本;
漏洞识别模块,用于基于所述源代码进行所述目标软件的漏洞识别,以得到所述目标软件对应的漏洞识别结果;
许可证检测模块,用于根据所述许可证框架计算所述目标软件对应的许可证冲突检测结果;
结果生成模块,用于基于所述目标软件包含的候选组件以及对应的版本、漏洞识别结果、许可证冲突检测结果,生成物料清单SBOM+分析结果。
本公开实施例提供的技术方案至少包括以下有益效果:
本发明基于二进制代码检测软件组件,除了字符串文字和导出函数名的特征之外,还利用函数内容作为新的特征,提高组件检测的准确性,减少潜在的安全威胁。同时,引入基于源码检测的漏洞识别功能以及许可证冲突检测功能,进一步扩充了开源软件供应链的物料清单内容,帮助开发者更好地管理软件许可证和合规性,从而提高整个供应链的安全性、合规性和可追溯性。
附图说明
图1是面向开源软件供应链的软件物料清单SBOM+分析方法框架。
图2是基于二进制代码的开源软件第三方组件识别(SCA)方法。
图3是基于源码的隐匿漏洞挖掘方法。
图4是基于许可证协议的许可证冲突检测及解决方法。
具体实施方式
下面结合附图,对本发明做进一步的说明。
本发明的目的在于提供一种面向开源软件供应链的物料清单SBOM+分析方法及装置。该方法包含主要包含五个模块,分别为软件基础信息解析模块、基于二进制代码的SCA分析模块、漏洞识别模块、许可证冲突检测模块以及标准化输出模块。上述方法能够有效提高开源组件识别的准确率,扩充SBOM清单分析维度,从而保障开源软件供应链各个环节的健壮性和鲁棒性。
为实现上述目的,本发明采用如下技术方案:
一种面向开源软件供应链的物料清单SBOM+分析方法及装置,其步骤包括:
1)软件基础信息解析模块。该模块主要实现软件信息采集以及结构化解析等,通过结构化解析,实验中可以获取开发者、项目语言、发布日期以及软件描述等SBOM基本信息。而采集到的源码、二进制代码、框架等,则基于下述各个模块进行特定解析,从而扩展开源软件供应链的物料清单。
2)基于二进制代码的SCA模块。对于二进制代码的检测目标,库可以被编译并链接到单独的动态链接文件,或者构建到包含多个库和项目特定代码的融合二进制中。这可能导致可用的代码特性减少,并降低特征工程的有效性。该SCA模块为了缓解上述问题,除了基本的和粗粒度的特性之外,也就是字符串文字和导出的函数名,还利用函数内容作为一种新的特性。它将二进制文件中的所有函数嵌入到经过训练的神经网络的低维表示中,并进一步采用了基于函数调用图的比较方法,以提高检测的准确性。除此之外,该模块还支持检测目标中包含的软件组件版本,这是现有检测方法所没有考虑的。
3)漏洞识别模块。在开源软件中约70%的安全漏洞在诸如NVD等漏洞数据库收录之前就已经发布相关安全补丁,这使得软件存在被黑客攻击的风险。因此,该模块基于源代码实现隐匿漏洞挖掘。代码结构图通常包含复杂的层次信息,当前基于深度学习的方法主要使用各种图神经网络(GNN)模型。但当前的GNN模型往往存在过平滑、无法建模边缘特征等问题。为了更好的表征全局代码信息,该模型中引入一种新的代码输入表述,用于减少节点之间的距离,以及一种增强的图表示学习方法,用于更好的获取代码结构信息。最终,实现源代码中的隐匿漏洞挖掘。
4)许可证冲突检测模块。开放源码软件(OSS)许可证规定了0SS可以合法重复使用、分发和修改的条件,然而在合并带有许可证的第三方OSS时会出现许可证冲突的情况。当前许可证冲突检测工作仍然面临着一些问题,比如先前的研究仅涵盖少量预定义的许可证,比如SPDX-VT只支持20个许可证分析。此外,先前的工作只考虑知名许可证,而缺乏理解许可证文本和理解许可证冲突的内在原因的能力,这限制了它们以灵活和细粒度的方式解决许可证冲突问题。为了解决上述问题,该模块提供了一种细粒度、可扩展和灵活的解决方案。它首先提取项目附带的所有许可证并根据文件结构构建许可证层次结构。其次,它提供了对于许可证所规定的法规的细粒度理解,通过解析父子对中的实体关系,检测许可证冲突问题。最后,实验中提供了两种解决方案来解决这些许可证冲突:(1)更换开源许可证;(2)替换源代码。
5)标准化输出模块。为充分实现SBOM和软件组件透明度的优势需要机器处理和自动化,需要跨供应链的广泛互操作性,这需要标准化的数据格式和识别方案。目前,常见的格式包括SPDX、CycloneDX、SWID、CoSWID、CPE和Grafeas等。各格式的应用场景存在一定区别。NTIA在《软件物料清单的最小元素》中明确从众多格式中选择了SPDX、CycloneDX和SWID并指定其为批准的标准格式。
本实施例为一种面向开源软件供应链的物料清单SBOM+分析方法及装置,其中总体流程如图1所示,主要包括以下步骤:
1)软件基础信息解析模块。具体说明如下:该模块主要包括采集软件信息以及结构化解析数据,首先数据源选择面比较广,包括但不限于GitHub、Gitee以及包管理器PyPI、NPM、Maven等,还包含Linux操作系统的软件包数据、openEuler基础软件数据、OpenHarmony等。采集方法上最方便的就是基于软件库数据接口调用,其次则是编写爬虫代码自定义的采集数据。然后,则是基于采集数据的结构化解析,不同数据集的结构需自定义解析。将能够获取的属性值直接存在SBOM中,而源码、二进制码等信息则通过下述模块进行处理。
2)基于二进制代码的SCA模块。其总体流程图如图2所示,具体说明如下:为了解决现有SCA方法针对大型数据库进行检测时精度低、基于功能不多时召回率低以及无法识别版本的问题。模块整体框架包含特征提取器、基本特征匹配、函数检索、功能调用图(FCG)过滤器以及组件识别。此外该模块依赖于两个特征数据库,即基本特征数据库和函数向量数据库。
在特征提取器中,首先基于Ghidra工具反汇编二进制输入,提取出字符串文字、导出的函数名以及函数特性。考虑到不同的编译条件可能会改变同一源代码编译的二进制代码,比如:跨操作系统、跨体系结构以及交叉编译器等场景,实验中采用Gemini模型将每个函数转换为属性控制流图(ACFG),并采用Structure2vec作为图嵌入网络,它将ACFG转换为表示向量。对于每个函数,随机测试在不同编译条件下从相同源代码编译的相似函数以及不同源代码编译的不同函数,通过对比损失来优化函数嵌入网络,其中,Yi,j表示向量对fi,fj的标签,S(fi,fj)是两个表示向量的余弦相似性,fi表示上述相似函数对应的向量,fj表示上述不同函数对应的向量。
基本特征匹配是基于目标软件获取初始候选组件的过程,实验中使用反向索引优化匹配基本特征数据库,每个候选特征都有一组共同特征,存在于比较单元和检测目标中。具体实施则基于规则和阈值过滤候选者,比如公共字符串与比较单元比例大于0.5或者导出函数名的数量大于20。
除了基本特征匹配外,还可以使用函数检索候选者,尤其适用于二进制的基本功能很少或者没有的情况。实验中适用Structure2vec提取检测目标的所有函数并将其转换为表示向量,由于所有相似的函数都映射到更近的向量,因此能够使用最近邻算法搜索相似函数,从而得到候选组件。除此之外,实验中还实现了基于高效向量搜索引擎Milvus的函数检索模块,以加快搜索阶段。
FCG过滤器的作用是排除上述基本特征匹配和函数检索匹配中的误报候选组件,该算法包括函数配对和FCG比较。通过计算FCG中共同边缘的数量作为相似性得分,实验发现函数向量通道中的候选组件质量高于基本特征通道的候选组件。最终合并两个通道的输出作为最终候选组件,同时选择相似性得分最大的作为版本包。
3)漏洞识别模块。其总体流程图如图3所示,该模块输入信息来源于1)中解析的源代码,实验中根据Joern解析源代码的结果创建代码属性图。代码属性图是一种综合了抽象语法树(AST)、控制流图(CFG)和程序依赖图(PDG)的联合数据结构,包含了代码的控制依赖、数据依赖以及语法结构等语义信息。为了缓解图算法(GNN)无法充分捕捉代码图的全局信息,实验中引入了图简化和增强的图表示学习模块。
图简化部分旨在浓缩代码结构图中的重要信息,从而缩小图的大小并减少节点之间的距离。在具体实施中,主要有两种方式:基于类型的图简化、基于变量的图简化。其中,基于类型的图简化(TGS)方法依据节点类型合并相邻节点,根据解析原理和手动检查代码结构图,确定了七个基于类型的图简化合并规则,包含表达式语句、标识符声明语句、条件语句、for循环语句和函数调用语句。每个类型分别包含定义的父节点和子节点,比如表达式语句的子节点包含赋值表达式、一元表达式和调用表达式,标识符声明语句的子节点则为具体标识符,条件语句、for循环语句的子节点包括所有节点类型。函数调用语句本身包括调用表达式、Argument参数以及函数对象,其对应的子节点分别为参数列表、所有节点类型以及具体函数值。对于匹配一个合并规则的每对父子相邻节点,子节点将被删除,因为其信息是其父信息的细化。基于变量的图简化(VGS)方法旨在根据节点变量合并叶节点,也就是将具有重复变量的节点合并为代码结构图中的一个节点。
增强的图表示学习模块中包含两个子模块:边缘感知图卷积网络(EA-GCN)模块用于将异构边缘信息融合到节点表示中;内核缩放表示模块用于调节卷积内核的大小,以捕捉图中远处节点之间的关系。
在边缘感知图卷积网络模块中,EA-GCN用于简化有向图中不同的边缘类型,那么输入的简化结构图可以表示为G(V,E,R)。V是节点集合,每个节点通过Word2vec得到。E表示边的集合,R表示边类型的集合。在EA-GCN的消息传递过程中,首先将多个边缘信息合并到节点嵌入中,节点vi对应的边权重为:
其中,是第l层中的边权重表示,/>是特定于边缘类型β∈R的可学习权重。然后基于以下传播机制使用边权重来更新节点vi的表示:
其中,是节点vi的隐藏状态,/>表示边缘类型为β的邻域节点的索引集,并且ci,β是相邻节点的数量。
为了进一步利用图中的异构边缘信息,实验中采取多头注意力机制,它能够表征不同边缘信息对节点表示的贡献程度。源节点vi对邻居节点vj的注意力分数如下:
其中,k表示注意力头数目,和/>分别对应节点vi和vj。dk表示词向量维度,通常/>起到调节作用,防止梯度消失。然后通过聚集节点边缘的注意力得分来增强节点表示hi。
其中,Ni表示节点vi的相邻节点的集合,并且P是注意力头的数目。Concat(…)表示不同头部的表示的组合,和/>是具有偏置项的线性变换层。最后整个图的边缘增强节点表示矩阵如下公式,|V|表示图中节点的数目。
内核缩放模块通过显式捕捉远处节点之间的关系来学习图的全局信息,具体来说模块涉及两个不同尺寸的卷积核,分别关注远处节点和领域节点的关系。给定边缘增强节点表示矩阵该模块进行内核缩放卷积,卷积核的尺寸分别为N、M(N>M)。不同核尺寸的卷积并行进行,基于双分支卷积的输出定义为:
其中,*是卷积算子,和/>分别对应尺寸M、N的卷积核,Cout和Cin是卷积核的输入和输出通道。两个分支的结果在通过批处理归一化(BN)后相加,μL和μS表示两个分支在BN层的参数。最后,再通过两个全连接层和softmax函数进行二分类,即预测源码是否为漏洞。
4)许可证冲突检测模块。其总体流程图如图4所示,该模块输入信息来源于1)中解析的许可证文件,项目中通常包含多个开源第三方库,如同2)中SCA解析后的结果。而每个第三方库存在相应的许可证,这就不可避免地出现许可证不兼容问题。为了解决此类问题,在模块中设计了三个功能,首先是对许可证的理解,其次是判断许可证冲突,最后则是提供相应的解决方案。
许可证的位置决定了其许可范围,这会影响许可证不兼容的检测和解决。开源软件通常作为组件被集成到更大的软件中,那么软件相应的文件结构中也就包含主目录中的许可证以及若干子目录中组件的许可证。因此,首先根据文件结构构建许可证层次结构。当前从项目中提取三种类型的许可证,即声明许可证、引用许可证和内联许可证。在获得原始文件结构后,再从下到上删除没有许可证的节点,并在必要时将其子节点链接到其父节点。最后,依据层次结构可以获得所有许可证的许可范围,以及他们之间的依赖关系,这些依赖关系可以进一步用于解决许可证不兼容问题。
在获得许可证层次结构后,则需要对许可证进行理解。当前官方许可证信息达到552个,而且其数量还在持续增加,此处将许可证理解视为一个信息抽取问题。实验中定义了四种类型的实体:行动(Action)、对象(Object)、态度(Attitude)、条件(Condition)和五种类型的关系:行动对象(Action-Object)、行动态度(Action-Attitude)、行动条件(Action-Condition)、条件行动(Condition-Action)、其他(others),并基于细粒度的结构来对其进行建模。模型中将联合抽取转换为的三分类(即关系抽取的主体、关系类型、客体)问题,具体来说,整个模型包括一个基于评分的分类器和一个针对特定关系的角标记策略。前者评估一个标记对和一个关系是否属于一个事实三元组,后者保证了一个简单而有效的解码过程。对于给出的长度为L的句子S={w1,w2,…wL}和K个预定义的关系类型R={r1,r2,…rK},从句子中找出所有可能的三元组其中hi和ti分别表示头实体和尾实体,N表示三元组的数量。对于句子S,实验中设计了一个分类器为所有可能的关系类型组合分配标签,并维护一个三维矩阵ML×K×L来存储分类结果。首先在数据标记中,本发明使用“BIE”(Begin、Inside、End)符号来表示token在实体中的位置信息。例如,”HB”表示头部实体的开始token,”TE”表示尾部实体的结束token。实验中采用四种类型的标签:HB-TB、HB-TE、HE-TE以及不存在连接关系的”-”。显然,标记矩阵M是稀疏的。标签矩阵ML×K×L标志着成对的头实体和尾实体的边界标记以及它们之间的关系,因此,从M中解码三元组变得简单和直接。对于输入句子,本发明使用预先训练好的BERT作为句子编码器来捕获每个标记的嵌入ei:
{e1,e2…eL}=BERT({x1,x2…xL})
其中,xi是每个token的输入表示,它是对相应的标记嵌入和位置嵌入的总和。然后,列举所有可能的(ei,rk,ej)组合,并设计一个分类器来分配高置信度标签,其中rk是随机初始化的关系表示,然后把三元组作为简单分类网络的输入。基于知识图谱嵌入技术的启发,其分数函数定义为:
fr(h,t)=rT(h*t)
其中,h、t分别是头表示和尾表示。”*”值用来挖掘两个实体之间的潜在依赖关系。[;]是连接操作,/>是RELU激活函数。那么,最终的分数函数表示为:
其中,同时计算token对(wi,wj)对应的/>的显著性,drop(·)用于防止模型过拟合,v表示分数向量。最后,再将(wi,rk,wj)输入softmax函数预测相应的标签(五种类型的关系):
在检测许可证兼容性问题时,首先从上述步骤中提取的许可证层次结构中获取父子对,当符合父节点要求时不会违反任何子节点的要求,则定义该父子对兼容。否则,存在许可证不兼容即冲突情况。然后对于每个父子许可证对,按照上述方式抽取相应的细粒度实体和关系。具体而言,对于每个attitude(例如,”are not allowed”)为其分配一个标签:”CAN”、”CANNOT”或”MUST”,然后基于Action-Object关系构建支持向量机(SVM)的分类模型。通过这种方式,能够将法规从父子对许可证中分组,也就是检测父许可证与其子许可证之间是否存在相同操作对象的attitude冲突。比如,从父许可证中推断出Action-Object关系”distribute source code”的标签为”CAN”,而子许可证中Action-Object关系的标签为”CANNOT”,则许可证之间存在冲突。
对于许可证冲突的项目,实验中设计了两种解决方案:代码替换、许可证替换。代码替换则是将项目中具有冲突许可证的代码替换为具有相同目的但不冲突许可证,或者项目创建者可以重写代码以满足功能要求。而当识别项目冲突时,它会编译这些许可证的所有严格责任条款的列表,并在许可证知识库中搜索包含这些条款且所有具有严格责任的许可证,这些条款可用于替换项目中相冲突的许可证。
5)标准化输出模块。实验中将上述模块处理的字段信息以三种标准格式进行存储,以实现机器可读和跨组织的扩展。其中,SPDX标准描述了生成有效SPDX文档所需的部分和字段,每个SPDX文档由创建信息、包信息、文件信息、片段信息、其他许可信息、SPDX元素关系信息、注释信息等内容组成。每个SPDX文档都能够用完整的数据模型实现和标识符语法表示,它可以表示为多种文件格式(RDFa、.xlsx、.spdx),并且正在拓展为其他格式(包括.xml、.json和.yaml)。CycloneDX规范描述了一个规定性的对象模型,可包含SBOM元数据、组件、服务、依赖关系、组合等,它也可以表示为多种不同得文件格式(.xml、.json和协议缓冲区等)。SWID(Software Identification,软件标识)标签旨在为组织提供一种透明方式来跟踪安装在他们托管设备上的软件,通过带有产品名称和版本详细信息的一致标签,在设备上显示软件产品存在的标准指标,通常以.xml的格式存在。
本领域技术人员在考虑说明书及实践本公开后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开也并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。
Claims (10)
1.一种面向开源软件供应链的物料清单SBOM+分析方法,其特征在于,所述方法包括:
对目标软件进行软件信息采集以及结构化解析,得到SBOM基本信息、源代码、二进制码和许可证框架;
计算所述二进制码的基础特征以及所述二进制码中每一函数对应的函数特征后,通过所述基础特征以及所述函数特征进行候选组件的检索,以得到所述目标软件包含的候选组件以及版本;
基于所述源代码进行所述目标软件的漏洞识别,以得到所述目标软件对应的漏洞识别结果;
根据所述许可证框架计算所述目标软件对应的许可证冲突检测结果;
基于所述目标软件包含的候选组件以及对应的版本、漏洞识别结果、许可证冲突检测结果,生成物料清单SBOM+分析结果。
2.如权利要求1所述的方法,其特征在于,所述SBOM基本信息包括:开发者、项目语言、发布日期以及软件描述。
3.如权利要求1所述的方法,其特征在于,计算所述二进制码中每一函数对应的函数特征,包括:
基于Ghidra工具反汇编所述二进制码,以得到所述二进制码包含的函数;
采用Gemini模型将所述二进制码包含的每一函数转换为对应的属性控制流图;
基于Structure2vec图嵌入网络,将所述属性控制流图转换为函数特征;其中,训练所述Structure2vec图嵌入网络的损失包括:向量fi与向量fj之间的对比损失,所述向量fi表示相同源代码编译的函数所对应的向量,所述向量fj表示不同源代码编译的函数所对应的向量。
4.如权利要求1所述的方法,其特征在于,通过所述基础特征以及所述函数特征进行候选组件的检索,以得到所述目标软件包含的候选组件以及版本,包括:
根据所述基础特征反向索引优化匹配基本特征数据库,并基于规则和阈值进行过滤基本特征数据库中的候选组件,以得到第一初始候选组件集合;其中,所述基础特征包括:字符串文字和导出的函数名;
基于所述函数特征进行最近邻算法搜索,以得到第二初始候选组件集合;
通过函数配对和FCG比较,排除第一初始候选组件集合与第二初始候选组件集合中误报的候选组件后,进行候选组件集合并,以得到最终候选组件;
针对所述最终候选组件进行相似性得分计算,并选择相似性得分最大的作为所述目标软件的版本。
5.如权利要求1所述的方法,其特征在于,所述基于所述源代码进行所述目标软件的漏洞识别,以得到所述目标软件对应的漏洞识别结果,包括:
解析所述源代码,并根据源代码解析结果构建代码属性图;
对所述代码属性图进行图简化,得到一有向图;其中,所述图简化的过程包括:依据节点类型合并相邻节点和/或根据节点变量合并叶节点;
将所述有向图中的异构边缘信息融合到节点表示后,通过捕捉远处节点之间的关系来学习有向图的全局信息;
基于所述有向图的全局信息进行分类,得到所述目标软件对应的漏洞识别结果。
6.如权利要求5所述的方法,其特征在于,将所述有向图中的异构边缘信息融合到节点表示,包括:
通过将多个边缘信息合并到节点嵌入中,得到边权重;
使用边权重来更新节点vi的表示,以得到节点vi的隐藏状态其中,l表示图卷积网络中的第l层;
基于所述隐藏状态生成边缘增强节点表示矩阵/>
7.如权利要求6所述的方法,其特征在于,所述通过捕捉远处节点之间的关系来学习有向图的全局信息,包括:
针对边缘增强节点表示矩阵使用两个尺寸分别为N和M的卷积核进行并行卷积计算,得到两个分支的计算结果;其中,N>M,尺寸为N的卷积核用于关注远处节点的关系,尺寸为M的卷积核用于关注领域节点的关系;
将两个分支的计算结果通过批处理归一化后相加,得到所述有向图的全局信息。
8.如权利要求1所述的方法,其特征在于,根据所述许可证框架计算所述目标软件对应的许可证冲突检测结果,包括:
基于所述许可证框架,获取集成软件的文件结构;其中,所述集成软件的组件包括所述目标软件,所述集成软件的文件结构包含主目录中的许可证以及若干子目录中组件的许可证;
根据所述文件结构构建许可证层次结构;
从下到上删除所述许可证层次结构中没有许可证的节点,并将其的子节点与父节点连接后,得到最终的许可证层次结构;
提取所述最终的许可证层次结构中的父子对,并通过对许可证的理解,判断符合父节点要求时是否会违反任何子节点的要求;
当符合父节点要求时不违反任何子节点的要求,则定义该父子对兼容;否则,定义该父子对存在许可证不兼容。
9.如权利要求1所述的方法,其特征在于,所述通过对许可证的理解,判断符合父节点要求时是否会违反任何子节点的要求,包括:
针对父节点和任一子节点对应的许可证内容,使用预先训练好的BERT模型作为句子编码器来捕获每个标记的嵌入ei;
结合预设的关系表示rk,列举所有可能的三元组(ei,rk,ej);其中,关系表示rk包括:行动与对象之间的关系、行动与态度之间的关系、行动与条件之间的关系、条件与行动之间的关系、其他实体之间的关系;
评估任一所述三元组(ei,rk,ej)是否属于一个事实三元组,并在该三元组(ei,rk,ej)属于一个事实三元组的情况下,计算对应的标签;
针对父节点和一子节点中相同的两个标记,若该两个标记之间具有相同的标签,则判断符合父节点要求时不违反任何子节点的要求,则定义该父子对兼容;否则,定义该父子对存在许可证不兼容。
10.一种面向开源软件供应链的物料清单SBOM+分析装置,其特征在于,所述装置包括:
软件分析模块,用于对目标软件进行软件信息采集以及结构化解析,得到SBOM基本信息、源代码、二进制码和许可证框架;
组件与版本获取模块,用于计算所述二进制码的基础特征以及所述二进制码中每一函数对应的函数特征后,通过所述基础特征以及所述函数特征进行候选组件的检索,以得到所述目标软件包含的候选组件以及版本;
漏洞识别模块,用于基于所述源代码进行所述目标软件的漏洞识别,以得到所述目标软件对应的漏洞识别结果;
许可证检测模块,用于根据所述许可证框架计算所述目标软件对应的许可证冲突检测结果;
结果生成模块,用于基于所述目标软件包含的候选组件以及对应的版本、漏洞识别结果、许可证冲突检测结果,生成物料清单SBOM+分析结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311201774.6A CN117195233A (zh) | 2023-09-18 | 2023-09-18 | 面向开源软件供应链的物料清单sbom+分析方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311201774.6A CN117195233A (zh) | 2023-09-18 | 2023-09-18 | 面向开源软件供应链的物料清单sbom+分析方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117195233A true CN117195233A (zh) | 2023-12-08 |
Family
ID=89001378
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311201774.6A Pending CN117195233A (zh) | 2023-09-18 | 2023-09-18 | 面向开源软件供应链的物料清单sbom+分析方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117195233A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117407047A (zh) * | 2023-12-13 | 2024-01-16 | 麒麟软件有限公司 | 一种基于图数据库的linux生态依赖关系图谱构建方法及应用 |
-
2023
- 2023-09-18 CN CN202311201774.6A patent/CN117195233A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117407047A (zh) * | 2023-12-13 | 2024-01-16 | 麒麟软件有限公司 | 一种基于图数据库的linux生态依赖关系图谱构建方法及应用 |
CN117407047B (zh) * | 2023-12-13 | 2024-04-05 | 麒麟软件有限公司 | 一种基于图数据库的linux生态依赖关系图谱构建方法及应用 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Yang et al. | A survey on deep learning for software engineering | |
Tufano et al. | Deep learning similarities from different representations of source code | |
US7774290B2 (en) | Pattern abstraction engine | |
Alrabaee et al. | On the feasibility of malware authorship attribution | |
Bernardi et al. | Design pattern detection using a DSL‐driven graph matching approach | |
CN106843840B (zh) | 一种基于相似度分析的源代码版本演化注释复用方法 | |
CN106537332A (zh) | 软件分析系统和方法 | |
CN117195233A (zh) | 面向开源软件供应链的物料清单sbom+分析方法及装置 | |
Chen et al. | Clone detection in Matlab Stateflow models | |
Lee et al. | Automatic detection and update suggestion for outdated API names in documentation | |
Dit et al. | Supporting and accelerating reproducible empirical research in software evolution and maintenance using tracelab component library | |
Keim et al. | Trace link recovery for software architecture documentation | |
Liguori et al. | Can we generate shellcodes via natural language? An empirical study | |
US20230385037A1 (en) | Method and system for automated discovery of artificial intelligence (ai)/ machine learning (ml) assets in an enterprise | |
Zou et al. | SCVD: A new semantics-based approach for cloned vulnerable code detection | |
Diamantopoulos et al. | Towards mining answer edits to extract evolution patterns in Stack Overflow | |
Bacchelli et al. | Mining structured data in natural language artifacts with island parsing | |
Mondal et al. | A survey of software architectural change detection and categorization techniques | |
Heaps et al. | Toward detection of access control models from source code via word embedding | |
Bernardo et al. | Extracting and semantically integrating implicit schemas from multiple spreadsheets of biology based on the recognition of their nature | |
Fraternali et al. | Almost rerere: An approach for automating conflict resolution from similar resolved conflicts | |
Favre et al. | Reverse engineering of object-oriented code: an ADM approach | |
Jiménez et al. | On the design of an advanced business rule engine | |
Ivkovic et al. | Using formal concept analysis to establish model dependencies | |
Wang et al. | Demystifying What Code Summarization Models Learned |
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 |