CN116483435B - 一种软件物料清单的生成方法、装置和计算机可读介质 - Google Patents

一种软件物料清单的生成方法、装置和计算机可读介质 Download PDF

Info

Publication number
CN116483435B
CN116483435B CN202310727942.9A CN202310727942A CN116483435B CN 116483435 B CN116483435 B CN 116483435B CN 202310727942 A CN202310727942 A CN 202310727942A CN 116483435 B CN116483435 B CN 116483435B
Authority
CN
China
Prior art keywords
information
component
file
binary
dependency
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.)
Active
Application number
CN202310727942.9A
Other languages
English (en)
Other versions
CN116483435A (zh
Inventor
贾巧娟
郭兴科
刘明
彭轼
田晓芸
靳晓雨
马大伟
卢卫涛
杜嘉祥
李志伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
State Grid Digital Technology Holdings Co ltd
State Grid E Commerce Technology Co Ltd
Original Assignee
State Grid Digital Technology Holdings Co ltd
State Grid E Commerce Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by State Grid Digital Technology Holdings Co ltd, State Grid E Commerce Technology Co Ltd filed Critical State Grid Digital Technology Holdings Co ltd
Priority to CN202310727942.9A priority Critical patent/CN116483435B/zh
Publication of CN116483435A publication Critical patent/CN116483435A/zh
Application granted granted Critical
Publication of CN116483435B publication Critical patent/CN116483435B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/30Computing systems specially adapted for manufacturing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本申请公开一种软件物料清单的生成方法、装置和计算机可读介质,通过不同的途径提取依赖信息,并且提取多个层级的依赖信息。多个途径中的第一个途径为:依据第一有效信息在组件信息库中进行组件匹配,然后提取成功匹配到的第二有效信息作为第一依赖信息;第二个途径为:依据第二二进制组件文件与第一二进制组件文件进行同源分析,得到满足预设层级标准的第二依赖信息;第三个途径为:从配置文件中提取得到第三依赖信息;最后依据得到的前三个依赖信息生成第四依赖信息,并根据第四依赖信息生成软件物料清单,本申请通过不同途径提取依赖信息并且能够提取到不同深度的依赖信息,从而得到完整准确的软件物料清单。

Description

一种软件物料清单的生成方法、装置和计算机可读介质
技术领域
本申请属于互联网技术领域,尤其涉及一种软件物料清单的生成方法、装置和计算机可读介质。
背景技术
软件物料清单(Software Bill of Materials,SBOM)是软件使用的所有组件、开源许可证和依赖信息的完整列表,可以类比为我们在日常生活中购买的食品外包装上的配料清单。软件物料清单的存在有诸多好处,比如:当发现一个组件有漏洞的时候,有软件物料清单可以很快了解哪些软件受到了影响,并且能够根据漏洞的等级确定修复漏洞任务的优先级,减少花在排查和审核上的时间;在一些组件出于可靠性、性能、安全、公司的策略等原因不能继续使用的情况下,可以通过检查软件的物料清单就能确定软件有无这些不能使用的组件;软件物料清单可以帮助开发人员或者管理人员掌握软件间的依赖关系,比如开源组件和公司内部组件,一方面,可以了解软件的可维护性,另一方面,便于后续做代码重构等工作。
现有的软件物料清单生成方法,大多采用手工生成方法,从源码、配置文件、生成交付物等处提取所需信息后按需生成对应格式的软件物料清单,这种方法不仅消耗人力,而且容易出现拼写错误、遗漏等问题,生成软件物料清单的效率低且软件物料清单不够完整,致使软件物料清单在后续使用的过程中的上述好处以及其他作用都大打折扣。
发明内容
有鉴于此,本申请提供一种软件物料清单的生成方法、装置和计算机可读介质,以用于解决在已知技术中手工生成软件物料清单的过程中出现的拼写错误、生成的软件物料清单不完整以及生成效率低的问题。
为解决上述问题,本申请提供如下方案:
一种软件物料清单的生成方法,包括:
获取目标软件对象的源代码和配置文件;
层级扫描所述源代码,确定所述目标软件对象的第一有效信息;
依据所述第一有效信息在组件信息库中进行组件匹配,所述组件信息库中至少包括第二有效信息和第一二进制组件文件对应的特征向量;
提取成功匹配到的所述第二有效信息作为第一依赖信息;
将所述源代码进行编译处理得到第二二进制组件文件,依据所述第二二进制组件文件与所述第一二进制组件文件进行同源分析,得到满足预设层级标准的第二依赖信息;
从所述配置文件中提取得到第三依赖信息,所述第三依赖信息为所述目标软件对象对应的更新补充信息;
依据所述第一依赖信息、所述第二依赖信息、所述第三依赖信息生成第四依赖信息,并根据所述第四依赖信息生成软件物料清单。
可选的,还包括:
在满足所述目标软件对象更新条件的情况下,循环上述步骤生成新的软件物料清单。
可选的,所述目标软件对象的更新条件为所述目标软件对象的源代码发生变化、所述目标软件对象进行编译构建。
可选的,在依据所述第一有效信息在组件信息库中进行组件匹配之前,还包括:
采集开源组件的源代码、第三二进制组件文件;
从所述源代码中提取得到所述第二有效信息;
将所述源代码进行编译后得到第四二进制组件文件,所述第一二进制组件文件包括所述第三二进制组件文件和所述第四二进制组件文件;
从所述第一二进制组件文件中提取得到特征向量;
依据所述源代码的所述第二有效信息以及所述第一二进制组件文件的特征向量生成所述组件信息库。
可选的,所述层级扫描所述源代码,确定所述目标软件对象的第一有效信息,包括:
层级扫描所述源代码得到所述目标软件对象的特征文件;
解析所述特征文件得到所述第一有效信息,所述第一有效信息至少包括组件信息、许可证信息、文件信息。
可选的,所述依据所述第二二进制组件文件与所述第一二进制组件文件进行同源分析,得到满足预设层级标准的第二依赖信息,包括:
将所述第二二进制组件文件进行反编译,提取所述第二二进制组件文件对应的第二图数据特征;
通过图神经网络对所述第二图数据特征进行聚合,得到第二图嵌入表示向量;
依据第一图嵌入表示向量和所述第二图嵌入表示向量计算得到所述第一二进制组件文件对应组件和所述第二二进制组件文件对应组件之间的相似度,所述第一图嵌入表示向量为所述组件信息库中的所述第一二进制组件文件对应的特征向量;
依据预设的相似阈值判断所述第一二进制组件文件对应组件和所述第二二进制组件文件对应组件是否为同源组件;
提取判断为同源组件的所述第一二进制组件文件对应组件的组件信息作为满足预设层级标准的第二依赖信息。
可选的,所述满足预设层级标准的第二依赖信息为与所述第二二进制组件文件对应的相同版本的组件的所述第二有效信息,所述相同版本的组件对应的第二有效信息至少包括组件版本和组件多层依赖关系。
可选的,还包括:
依据所述软件物料清单进行风险问题分析,得到所述目标软件对象的追溯定位结果,所述风险问题分析至少包括漏洞风险分析、许可证风险分析。
一种软件物料清单的生成装置,包括:
获取单元、有效信息确定单元、组件匹配单元、第一依赖信息提取单元、同源分析单元、第三依赖信息提取单元和软件物料清单生成单元;
所述获取单元用于获取目标软件对象的源代码和配置文件;
所述有效信息确定单元用于层级扫描所述源代码,确定所述目标软件对象的第一有效信息;
所述组件匹配单元用于依据所述第一有效信息在组件信息库中进行组件匹配,所述组件信息库中至少包括第二有效信息和第一二进制组件文件对应的特征向量;
所述第一依赖信息提取单元用于提取成功匹配到的所述第二有效信息作为第一依赖信息;
所述同源分析单元用于将所述源代码进行编译处理得到第二二进制组件文件,依据所述第二二进制组件文件与所述第一二进制组件文件进行同源分析,得到满足预设层级标准的第二依赖信息;
所述第三依赖信息提取单元用于从所述配置文件中提取得到第三依赖信息,所述第三依赖信息为所述目标软件对象对应的更新补充信息;
所述软件物料清单生成单元用于依据所述第一依赖信息、所述第二依赖信息、所述第三依赖信息生成第四依赖信息,并根据所述第四依赖信息生成软件物料清单。
一种计算机存储可读介质,其上存储有计算机程序,所述计算机程序被处理器执行时,能实现如上文任一项所述的软件物料清单的生成方法。
由以上方案可知,本申请公开的软件物料清单的生成方法、装置和计算机可读介质,通过不同的途径提取依赖信息,并且能提取到多个层级的依赖信息。多个途径中的第一个途径为:服务端获取目标软件对象的源代码和配置文件后,层级扫描源代码,确定目标软件对象的第一有效信息,然后依据第一有效信息在组件信息库中进行组件匹配,组件信息库中至少包括第二有效信息和第一二进制组件文件对应的特征向量,然后提取成功匹配到的第二有效信息作为第一依赖信息;第二个途径为:将源代码进行编译处理得到第二二进制组件文件,依据第二二进制组件文件与第一二进制组件文件进行同源分析,得到满足预设层级标准的第二依赖信息;第三个途径为:从配置文件中提取得到第三依赖信息,第三依赖信息为目标软件对象对应的更新补充信息;最后依据第一依赖信息、第二依赖信息、第三依赖信息生成第四依赖信息,并根据第四依赖信息生成软件物料清单。提取多个层级的依赖信息体现在第二个途径中的同源分析,能够得到满足预设层级标准的第二依赖信息,本方案通过不同途径提取依赖信息并且能够提取到不同深度的依赖信息,从而得到完整准确的软件物料清单,使软件物料清单在后续使用的过程中的作用能够发挥到最大。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是本申请提供的一种软件物料清单的生成方法的流程示意图;
图2是本申请提供的组件信息库的构建图;
图3是本申请提供的组件信息库的生成示例图;
图4是本申请提供的组件匹配的流程示例图;
图5是本申请提供的软件物料清单的界面示例图;
图6是本申请提供的软件物料清单的另一种流程示例图;
图7是本申请提供的追溯定位结果界面的示例图;
图8是本申请提供的软件物料清单的生成装置示例图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本申请中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本申请中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
软件物料清单本质上是给定产品中所有软件组件(包括专有组件和开源代码)、开源许可证和依赖项的清单,能够提高软件供应链的可见性,提高可能存在的任何许可证的合规性、安全性以及质量风险的可见性。
软件物料清单可以帮助开发团队跟踪开发、管理和运维各个软件中的组件,软件物料清单生成的完整性与其在后续使用中产生的作用息息相关,现有生成软件物料清单的方法多为手工生成,效率低并且生成的软件物料清单不够完整,致使软件物料清单在后续使用的过程中的发挥的作用大打折扣。
为了解决上述问题,本申请公开了一种软件物料清单的生成方法、装置和计算机可读介质,依据不同的途径提取的依赖信息以及提取到的多个层级的依赖信息,生成比较完整的软件物料清单,使其在后续的使用过程中的作用发挥到最大。
参见图1,本申请提供的一种软件物料清单的生成方法的流程示意图,软件物料清单的生成方法包括以下流程:
步骤101、获取目标软件对象的源代码和配置文件。
目标软件对象可以为即将生成软件物料清单的待检测软件。
可选的,可以通过开源社区获取待检测软件的源代码以及配置文件,若待检测软件尚未开源,可以通过反编译的方法获取到待检测软件的源代码以及配置文件。
步骤102、层级扫描所述源代码,确定所述目标软件对象的第一有效信息。
可选的,层级扫描待检测软件的源代码,得到待检测软件的特征文件,然后解析特征文件,得到待检测软件的第一有效信息,第一有效信息可以但不限于包括组件信息、许可证信息和文件信息,后续会通过层级扫描提取出来的第一有效信息在组件信息库中进行组件匹配。
步骤103、依据所述第一有效信息在组件信息库中进行组件匹配,所述组件信息库中至少包括第二有效信息和第一二进制组件文件对应的特征向量。
通过组件信息、许可证信息和文件信息等第一有效信息在组件信息库中匹配含有同样有效信息的组件,具体可以使用机器学习匹配算法进行组件匹配,例如:使用k-最邻近(k-Nearest Neighbor,KNN)分类进行组件匹配,通过待检测软件的有效信息作为训练样本,在组件信息库中去匹配与有效信息最接近的各组件作为匹配成功的组件。
需要说明的是,在进行组件匹配之前需要生成组件信息库,组件信息库主要由两部分组成,一部分是第二有效信息,另一部分是第一二进制组件文件对应的特征向量。
组件信息库的生成需要先采集各种开源组件的源代码、从组件包托管站点采集第三二进制组件文件;从源代码中提取出组件数据,第二有效信息可以为提取出的组件数据,具体可以为:组件信息、许可证信息和文件信息等等。
将开源组件的源代码进行编译后得到第四二进制组件文件,第三二进制组件文件和第四二进制组件文件组成第一二进制组件文件,然后提取出第一二进制组件文件的特征向量。
组件信息库主要包括从源代码中提取出的第二有效信息和第一二进制组件文件的特征向量,需要说明是,特征向量可以为图级别的嵌入向量。
具体的,参见图2,本申请提供的组件信息库的构建图,以及图3,本申请提供的组件信息库的生成示例图,图2和图3中的内容是相互对应的。
如图2所示,整个组件信息库的构建过程分为五个模块:采集模块、第四提取模块、编译模块、第五提取模块和存储模块。
如图3所示,采集模块主要包括组件的采集和二进制组件文件的采集,对于组件的采集,可以从GitHub、Gitee、GitLab等代码托管站点采集获取各种开源组件的源代码;对于二进制组件文件的采集,一方面可以从Maven、PYPI等组件包托管站点获取二进制组件文件。然后,将从代码托管站点采集到的开源组件的源代码进行层级扫描,解析特征文件,提取到各开源组件的组件信息、许可证信息和文件信息等,后续将这些提取出来的开源组件的相关信息存储到组件信息库中,这里提取出来的开源组件的相关信息对应于组件信息库中的第二有效信息,在进行组件匹配的时候就可以直接用待检测软件从特征文件中解析出来的组件信息、许可证信息和文件信息和开源组件的组件信息、许可证信息和文件信息进行比对,如果内容完全一致,就可以判定为对应的组件匹配成功。然后,将GitHub、Gitee、GitLab等代码托管站点采集获取各种开源组件的源代码进行编译得到二进制组件文件,通过第五提取模块提取出二进制组件文件的图级别的嵌入表示向量。最后,通过存储模块,将从开源组件中提取的组件信息、许可证信息和文件信息等和采集的二进制组件文件对应的图级别的嵌入表示向量以及由开源组件的源代码编译提取的图级别的嵌入表示向量关联存储到组件信息库中。
示例性的,参见图4,本申请提供的组件匹配的流程示例图。
图4囊括了步骤101至步骤103的内容,首先对软件项目对象的源代码进行层级扫描,得到特征文件,然后解析特征文件得到组件信息、许可证信息、文件信息等有效信息,最后依据这些有效信息在组件信息库中进行检索匹配。
步骤104、提取成功匹配到的所述第二有效信息作为第一依赖信息。
可选的,将待检测软件从特征文件中解析出来的有效信息中的组件信息、许可证信息和文件信息与组件信息库中存储的组件信息、许可证信息和文件信息进行比对,将比对内容完全一致的组件的有效信息作为第一依赖信息。第一依赖信息主要包括依赖信息包相关信息、供应商名称、组件名称、组织者名称、组件依赖关系、许可证信息等等信息。
步骤105、将所述源代码进行编译处理得到第二二进制组件文件,依据所述第二二进制组件文件与所述第一二进制组件文件进行同源分析,得到满足预设层级标准的第二依赖信息。
为了使软件物料清单更加的完整,进行组件的同源分析可以得到更深层次的依赖信息,由于组件和组件之间的关系多为嵌套,所以组件之间存在多层嵌套的情况,进行同源分析的主要目的是为了找到相同版本的组件,可以理解的是,满足预设层级标准的第二依赖信息可以为第二二进制组件文件对应的相同版本的组件的有效信息,并且,相同版本的组件的有效信息至少包括组件版本和多层依赖关系。
可选的,同源分析主要包括以下步骤:
1)将第二二进制组件文件进行反编译,提取第二二进制组件文件对应的第二图数据特征。
示例性的,可以通过一种静态反编译软件对第二二进制组件文件进行反编译,提取对应二进制组件文件的结构特征,结构特征可以为函数调用图和函数控制流图,函数调用图主要是对二进制组件文件进行反汇编,获取到二进制组件文件的汇编代码,从二进制组件文件中提取出多个不同的函数,这些函数之间存在着相互调用关系,从而构成的一张函数调用关系的有向图;函数控制流图主要是对二进制组件文件进行反汇编,获取到二进制组件文件的汇编代码,从二进制组件文件中提取出多个不同的函数,每一个函数的汇编指令中存在着许多的跳转关系,根据这些跳转关系可以对函数进行划分,获取函数内部的基本块,函数内部基本块之间的跳转关系构成的。然后进一步提取函数调用图和函数控制流图的图数据特征,图数据特征为二进制组件文件的函数、基本块、指令等特征,从待检测软件的二进制组件文件中提取出来的图数据特征称为第二图数据特征。
2)通过图神经网络对第二图数据特征分别进行聚合,得到第二图嵌入表示向量。
示例性的,采用图神经网络对第二图数据特征进行聚合,得到节点嵌入表示,可以理解的是,节点嵌入表示可以更好的保留和提取节点关系。
然后,通过注意力机制的图嵌入将节点嵌入表示聚合为图级别的嵌入表示向量,计算公式可以如下:
其中, 表示第i层图神经网络输出的节点嵌入表示E i ,N为节点个数,D i 为第i层图神经网络输出的节点嵌入表示的维度,其中每一行/>表示节点n的嵌入表示向量,ReLu为激活函数,U i 为训练学习参数,y i 为全局的图是结构和特征信息的表示。
然后计算每个节点嵌入在整个节点嵌入集合中的注意力权重,公式如下:
α i =leakyReLU(E i ·y i T )
式中α i 为注意力权重,leakyReLU为非线性激活函数,y i T 为全局图的结构和特征信息表示y i 的转置。
计算图级别的嵌入表示r i 可以通过如下公式:
r i =E i T ·α i
然后通过拼接的方式得到二进制组件文件的图级别嵌入表示向量:
R=CAT(r 1 ,…,r i ,…,r m )
式中R为图级别的嵌入表示向量,CAT表示拼接的操作,m为注意力机制的网络层数。
需要说明的是,从待检测软件的二进制组件文件对应的图嵌入表示向量为第二图嵌入表示向量。
3)依据第一图嵌入表示向量和第二图嵌入表示向量计算得到第一二进制组件文件对应组件和第二二进制组件文件对应组件之间的相似度,第一图嵌入表示向量为组件信息库中的第一二进制组件文件对应的特征向量。
需要说明的是,第一图嵌入表示向量为组件信息库中的第一二进制组件文件对应的特征向量,第一图嵌入表示向量与第二图嵌入表示向量的生成原理和过程的基本一致,并且,第一图嵌入表示向量在生成组件信息库时已经生成并进行了存储。
对于第一二进制组件文件对应组件和第二二进制组件文件对应组件之间的相似度的计算,示例性的,通过注意力机制的图嵌入分别计算第一图嵌入表示向量和第二图嵌入表示向量的相似度,公式如下:
式中R 1 为第二图嵌入表示向量,R 2 为第一图嵌入表示向量,由于sim(R 1 ,R 2 )的范围为[-1,1],相似度为-1时完全不相似,相似度为1时为完全相似,计算得到相似度值。
4)依据预设的相似阈值判断第一二进制组件文件对应组件和第二二进制组件文件对应组件是否为同源组件。
示例性的,设相似度阈值为0.85,当相似度大于等于相似度阈值时,可判断待检测软件中的组件和组件信息库中的组件为相同版本的组件。
5)提取判断为同源组件的第一二进制组件文件对应组件的组件信息作为满足预设层级标准的第二依赖信息。
提取相似度大于等于预设的相似阈值的组件信息库中的组件信息作为第二依赖信息,第二依赖信息主要包括组件版本和组件多层的依赖信息。
步骤106、从所述配置文件中提取得到第三依赖信息,所述第三依赖信息为所述目标软件对象对应的更新补充信息。
该步骤主要是为了保证生成的软件物料清单更加的完整,从配置文件中提取一些更新补充的信息作为第三依赖信息。
步骤107、依据所述第一依赖信息、所述第二依赖信息、所述第三依赖信息生成第四依赖信息,并根据所述第四依赖信息生成软件物料清单。
将第一依赖信息、第二依赖信息和第三依赖信息进行整合,得到第四依赖信息,并对第四依赖信息进行数据去重和数据规范化后,得到软件物料清单,软件物料清单可以包括依赖包相关信息、供应商名称、组件名称、组织者名称、组件依赖关系、许可证信息、组件版本、唯一标识、SBOM创建者、时间戳等内容。
参见图5,本申请提供的软件物料清单的界面示例图,图中包括组件详情:应用包名称、组件描述、目标路径、开源许可等等,还包括组件名称、当前版本、建议版本、最高威胁等级、漏洞数量等等内容。
综上所述,本申请公开的软件物料清单的生成方法,通过不同的途径提取依赖信息,并且能提取到多个层级的依赖信息。多个途径中的第一个途径为:服务端获取目标软件对象的源代码和配置文件后,层级扫描源代码,确定目标软件对象的有效信息,然后依据有效信息在组件信息库中进行组件匹配,组件信息库中至少包括组件数据和第一二进制组件文件对应的特征向量,然后提取成功匹配到的组件的信息作为第一依赖信息;第二个途径为:将源代码进行编译处理得到第二二进制组件文件,依据第二二进制组件文件与第一二进制组件文件进行同源分析,得到满足预设层级标准的第二依赖信息;第三个途径为:从配置文件中提取得到第三依赖信息,第三依赖信息为目标软件对象对应的更新补充信息;最后依据第一依赖信息、第二依赖信息、第三依赖信息生成第四依赖信息,并根据第四依赖信息生成软件物料清单。提取多个层级的依赖信息体现在第二个途径中的同源分析,能够得到满足预设层级标准的第二依赖信息,本方案通过不同途径提取依赖信息并且能够提取到不同深度的依赖信息,从而得到完整准确的软件物料清单,使软件物料清单在后续使用的过程中的作用能够发挥到最大。
可选的,在一实施例中,上述方法还包括在满足目标软件对象更新条件的情况下,循环上述步骤生成新的软件物料清单这一步骤。目标软件对象的更新条件可以为目标软件对象的源代码发生变化时以及目标软件对象进行编译构建。通过提前配置的扫描机制和获取机制更新待检测软件的源代码和配置文件。具体的,当扫描机制检测到待检测软件的源代码发生变动时,会调用扫描接口,重新扫描待检测软件的源代码,当获取机制检测到待检测软件进行编译构建时,调用获取接口获取待检测软件在编译构建过程中的配置文件,整个过程都是自动完成的,所以整个新的软件物料请单生成的过程也是自动的,新增的这一步骤可以保证软件物料清单的实时更新,并且基本不需要耗费人力就可以完成软件物料清单的生成,效率很高。
可选的,参见图6,本申请提供的软件物料清单的另一种流程示例图。
如图6所示,在软件物料清单生成之后会有一个追溯定位的过程,主要是依据生成的软件物料清单的数据,分析漏洞风险和许可证风险,软件开发人员可以根据风险分析结果快速定位,进行漏洞修复和组件安全版本的修复。
对于漏洞风险分析,具体可以从CVE、CMS和CNVD等公开漏洞库、开源社区等网站爬取组件漏洞信息,然后建立漏洞数据库,漏洞数据库中主要存储存在安全漏洞的组件数据,在软件物料清单生成之后,将软件物料清单中的组件与漏洞数据库中的数据进行比对,如果存在安全漏洞组件,说明该软件物料清单对应的软件存在漏洞风险,本申请会自动将漏洞信息展示在漏洞分析页面,同时将漏洞分析结果发送给软件开发人员。软件开发人员在接收到漏洞分析结果后会进行漏洞修复,完成漏洞修复后,再次进行编译构建,触发扫描机制,重新生成软件物料清单,对应漏洞分析页面的组件中的漏洞修复状态会由未修复变为已修复,从而实现软件物料清单的实时更新。
对于许可证风险分析,可以从GitHub等网站采集各种开源组件的许可证信息,对许可证中的协议进行分析,得到存在风险的协议类型,比如:允许转授开源许可证授权、授权专利权、专利报复性条款等。根据这些信息预设许可证的风险协议类型,生成软件物料清单后,查看检测到的许可证信息是否存在预设许可证的风险类型,如果存在,则判断组件许可证存在风险,将对应的存在风险的许可证信息展示在许可证的分析页面上,同时将许可证风险分析结果发送至软件开发人员,软件开发人员在接收到许可证风险分析结果后会给相应组件及组件安全版本的更换,完成许可证风险的修复,再次进行编译构建,触发扫描机制,重新生成软件物料清单,对应许可证分析页面的组件的许可证信息移除,实现软件物料清单的更新。
在以上软件物料清单的追溯定位过程中,软件项目对象的源代码可能发生了变化,或者在修复的过程中对软件项目对象进行了编译,满足了软件项目对象的更新条件,触发循环,完成软件物料清单的更新。触发更新的这一过程是由提前配置的扫描机制和获取机制完成,当待检测软件的源代码或者配置文件发生变化时,会调用相应的接口触发软件物料清单的更新过程。
参见图7,本申请提供的追溯定位结果界面的示例图。
如图所示,经过追溯定位之后,界面上会显示扫描结果:扫描总数以及存在漏洞、存在高版本、安全的组件的占比,漏洞总数以及漏洞的风险等级,开源许可总数以及存在许可风险的风险等级等等信息内容。
对于上述软件物料清单的生成方法,本申请还提供了一种软件物料清单的生成装置,同时提供了一种软件物料清单的生成装置示例图,如图8所示,两个装置中的内容相互对应。
本申请提供的软件物料清单的生成装置主要包括获取单元、有效信息确定单元、组件匹配单元、第一依赖信息提取单元、同源分析单元、第三依赖信息提取单元和软件物料清单生成单元;
所述获取单元用于获取目标软件对象的源代码和配置文件,对应于图8中的源代码扫描模块和配置文件获取模块;
所述有效信息确定单元用于层级扫描所述源代码,确定所述目标软件对象的第一有效信息,对应于图8中的第一解析模块;
所述组件匹配单元用于依据所述第一有效信息在组件信息库中进行组件匹配,所述组件信息库中至少包括第二有效信息和第一二进制组件文件对象的特征向量,对应于图8中的组件匹配模块;
所述第一依赖信息提取单元用于提取成功匹配到的所述第二有效信息作为第一依赖信息,对应于图8中的第一提取模块;
所述同源分析单元用于将所述源代码进行编译处理得到第二二进制组件文件,依据所述第二二进制组件文件与所述第一二进制组件文件进行同源分析,得到满足预设层级标准的第二依赖信息,对应于图8中的组件同源分析模块和第二提取模块;
所述第三依赖信息提取单元用于从所述配置文件中提取得到第三依赖信息,所述第三依赖信息为所述目标软件对象对应的更新补充信息,对应于图8中的配置文件获取模块、第二解析模块、第三提取模块;
所述软件物料清单生成单元用于依据所述第一依赖信息、所述第二依赖信息、所述第三依赖信息生成第四依赖信息,并根据所述第四依赖信息生成软件物料清单,对应于图8中第一生成模块和软件物料清单生成模块(SOBM)。
在一实施例中,上述装置还包括循环更新单元,具体用于:
在满足所述目标软件对象更新条件的情况下,循环上述步骤生成新的软件物料清单。
在一实施方式中,循环更新单元中的目标软件对象的更新条件为所述目标软件对象的源代码发生变化、所述目标软件对象进行编译构建。
在一实施方式中,在依据所述有效信息在组件信息库中进行组件匹配之前,还包括组件信息库生成单元,具体用于:
采集开源组件的源代码、第三二进制组件文件;
从所述源代码中提取得到所述第二有效信息;
将所述源代码进行编译后得到第四二进制组件文件,所述第一二进制组件文件包括所述第三二进制组件文件和所述第四二进制组件文件;
从所述第一二进制组件文件中提取得到特征向量;
依据所述源代码的所述第二有效信息以及所述第一二进制组件文件的特征向量生成所述组件信息库。
在一实施方式中,有效信息确定单元,具体用于:
层级扫描所述源代码得到所述目标软件对象的特征文件;
解析所述特征文件得到所述第一有效信息,所述第一有效信息至少包括组件信息、许可证信息、文件信息。
在一实施方式中,同源分析单元,具体用于:
将所述第二二进制组件文件进行反编译,提取所述第二二进制组件文件对应的第二图数据特征;
通过图神经网络对所述第二图数据特征进行聚合,得到第二图嵌入表示向量;
依据第一图嵌入表示向量和所述第二图嵌入表示向量计算得到所述第一二进制组件文件对应组件和所述第二二进制组件文件对应组件之间的相似度,所述第一图嵌入表示向量为所述组件信息库中的所述第一二进制组件文件对应的特征向量;
依据预设的相似阈值判断所述第一二进制组件文件对应组件和所述第二二进制组件文件对应组件是否为同源组件;
提取判断为同源组件的所述第一二进制组件文件对应组件的组件信息作为满足预设层级标准的第二依赖信息。
在一实施方式中,同源分析单元中所述满足预设层级标准的第二依赖信息为与所述第二二进制组件文件对应的相同版本的组件的所述第二有效信息,所述相同版本的组件对应的第二有效信息至少包括组件版本和组件多层依赖关系。
在一实施方式中,上述装置还包括风险问题分析单元,具体用于:
依据所述软件物料清单进行风险问题分析,得到所述目标软件对象的追溯定位结果,所述风险问题分析至少包括漏洞风险分析、许可证风险分析,对应于图8中的许可证风险分析模块和漏洞风险分析模块。
另外,本申请实施例还提供了一种计算机可读介质,其上存储有计算机程序,所述计算机程序被处理器执行时,能实现软件物料清单的各个处理流程。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
为了描述的方便,描述以上系统或装置时以功能分为各种模块或单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
最后,还需要说明的是,在本文中,诸如第一、第二、第三和第四等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

Claims (7)

1.一种软件物料清单的生成方法,其特征在于,包括:
获取目标软件对象的源代码和配置文件;
层级扫描所述源代码,确定所述目标软件对象的第一有效信息;
依据所述第一有效信息在组件信息库中进行组件匹配,所述组件信息库中至少包括第二有效信息和第一二进制组件文件对应的特征向量;
提取成功匹配到的所述第二有效信息作为第一依赖信息;
将所述源代码进行编译处理得到第二二进制组件文件,依据所述第二二进制组件文件与所述第一二进制组件文件进行同源分析,得到满足预设层级标准的第二依赖信息;
从所述配置文件中提取得到第三依赖信息,所述第三依赖信息为所述目标软件对象对应的更新补充信息;
依据所述第一依赖信息、所述第二依赖信息、所述第三依赖信息生成第四依赖信息,并根据所述第四依赖信息生成软件物料清单;
其中,在依据所述第一有效信息在组件信息库中进行组件匹配之前,还包括:
采集开源组件的源代码、第三二进制组件文件;
从所述源代码中提取得到所述第二有效信息;
将所述源代码进行编译后得到第四二进制组件文件,所述第一二进制组件文件包括所述第三二进制组件文件和所述第四二进制组件文件;
从所述第一二进制组件文件中提取得到特征向量;
依据所述源代码的所述第二有效信息以及所述第一二进制组件文件的特征向量生成所述组件信息库;
其中,所述层级扫描所述源代码,确定所述目标软件对象的第一有效信息,包括:
层级扫描所述源代码得到所述目标软件对象的特征文件;
解析所述特征文件得到所述第一有效信息,所述第一有效信息至少包括组件信息、许可证信息、文件信息;
其中,所述满足预设层级标准的第二依赖信息为与所述第二二进制组件文件对应的相同版本的组件的所述第二有效信息,所述相同版本的组件对应的第二有效信息至少包括组件版本和组件多层依赖关系。
2.根据权利要求1所述的方法,其特征在于,还包括:
在满足所述目标软件对象更新条件的情况下,循环上述步骤生成新的软件物料清单。
3.根据权利要求2所述的方法,其特征在于,所述目标软件对象的更新条件为所述目标软件对象的源代码发生变化、所述目标软件对象进行编译构建。
4.根据权利要求1所述的方法,其特征在于,所述依据所述第二二进制组件文件与所述第一二进制组件文件进行同源分析,得到满足预设层级标准的第二依赖信息,包括:
将所述第二二进制组件文件进行反编译,提取所述第二二进制组件文件对应的第二图数据特征;
通过图神经网络对所述第二图数据特征进行聚合,得到第二图嵌入表示向量;
依据第一图嵌入表示向量和所述第二图嵌入表示向量计算得到所述第一二进制组件文件对应组件和所述第二二进制组件文件对应组件之间的相似度,所述第一图嵌入表示向量为所述组件信息库中的所述第一二进制组件文件对应的特征向量;
依据预设的相似阈值判断所述第一二进制组件文件对应组件和所述第二二进制组件文件对应组件是否为同源组件;
提取判断为同源组件的所述第一二进制组件文件对应组件的组件信息作为满足预设层级标准的第二依赖信息。
5.根据权利要求1所述的方法,其特征在于,还包括:
依据所述软件物料清单进行风险问题分析,得到所述目标软件对象的追溯定位结果,所述风险问题分析至少包括漏洞风险分析、许可证风险分析。
6.一种软件物料清单的生成装置,其特征在于,包括:
获取单元、有效信息确定单元、组件匹配单元、第一依赖信息提取单元、同源分析单元、第三依赖信息提取单元和软件物料清单生成单元;
所述获取单元用于获取目标软件对象的源代码和配置文件;
所述有效信息确定单元用于层级扫描所述源代码,确定所述目标软件对象的第一有效信息;
所述组件匹配单元用于依据所述第一有效信息在组件信息库中进行组件匹配,所述组件信息库中至少包括第二有效信息和第一二进制组件文件对应的特征向量;
所述第一依赖信息提取单元用于提取成功匹配到的所述第二有效信息作为第一依赖信息;
所述同源分析单元用于将所述源代码进行编译处理得到第二二进制组件文件,依据所述第二二进制组件文件与所述第一二进制组件文件进行同源分析,得到满足预设层级标准的第二依赖信息;
所述第三依赖信息提取单元用于从所述配置文件中提取得到第三依赖信息,所述第三依赖信息为所述目标软件对象对应的更新补充信息;
所述软件物料清单生成单元用于依据所述第一依赖信息、所述第二依赖信息、所述第三依赖信息生成第四依赖信息,并根据所述第四依赖信息生成软件物料清单;
其中,在依据所述第一有效信息在组件信息库中进行组件匹配之前,还包括:
采集开源组件的源代码、第三二进制组件文件;
从所述源代码中提取得到所述第二有效信息;
将所述源代码进行编译后得到第四二进制组件文件,所述第一二进制组件文件包括所述第三二进制组件文件和所述第四二进制组件文件;
从所述第一二进制组件文件中提取得到特征向量;
依据所述源代码的所述第二有效信息以及所述第一二进制组件文件的特征向量生成所述组件信息库;
其中,所述层级扫描所述源代码,确定所述目标软件对象的第一有效信息,包括:
层级扫描所述源代码得到所述目标软件对象的特征文件;
解析所述特征文件得到所述第一有效信息,所述第一有效信息至少包括组件信息、许可证信息、文件信息;
其中,所述满足预设层级标准的第二依赖信息为与所述第二二进制组件文件对应的相同版本的组件的所述第二有效信息,所述相同版本的组件对应的第二有效信息至少包括组件版本和组件多层依赖关系。
7.一种计算机存储可读介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,能实现如权利要求1-5任一项所述的软件物料清单的生成方法。
CN202310727942.9A 2023-06-19 2023-06-19 一种软件物料清单的生成方法、装置和计算机可读介质 Active CN116483435B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310727942.9A CN116483435B (zh) 2023-06-19 2023-06-19 一种软件物料清单的生成方法、装置和计算机可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310727942.9A CN116483435B (zh) 2023-06-19 2023-06-19 一种软件物料清单的生成方法、装置和计算机可读介质

Publications (2)

Publication Number Publication Date
CN116483435A CN116483435A (zh) 2023-07-25
CN116483435B true CN116483435B (zh) 2023-09-01

Family

ID=87212197

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310727942.9A Active CN116483435B (zh) 2023-06-19 2023-06-19 一种软件物料清单的生成方法、装置和计算机可读介质

Country Status (1)

Country Link
CN (1) CN116483435B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116756710B (zh) * 2023-08-16 2024-03-22 深圳开源互联网安全技术有限公司 基于特征标记追踪技术的开源治理方法、系统及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115454496A (zh) * 2022-08-10 2022-12-09 深圳开源互联网安全技术有限公司 一种软件物料清单的生成方法和装置
CN115543406A (zh) * 2022-10-08 2022-12-30 鼎道智联(北京)科技有限公司 一种软件的物料清单生成方法、装置及电子设备
CN115658128A (zh) * 2022-10-18 2023-01-31 北京瀚马信息科技有限公司 一种生成软件物料清单的方法、装置及存储介质
CN115658080A (zh) * 2022-11-11 2023-01-31 浙江路为科技有限公司 一种软件开源代码成分的识别方法及系统
CN115906093A (zh) * 2022-11-02 2023-04-04 中国工商银行股份有限公司 基于组件物料清单的告警方法及装置、电子设备

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160275116A1 (en) * 2015-03-19 2016-09-22 Yan Shi Freeware and open source software data management and analytics system

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115454496A (zh) * 2022-08-10 2022-12-09 深圳开源互联网安全技术有限公司 一种软件物料清单的生成方法和装置
CN115543406A (zh) * 2022-10-08 2022-12-30 鼎道智联(北京)科技有限公司 一种软件的物料清单生成方法、装置及电子设备
CN115658128A (zh) * 2022-10-18 2023-01-31 北京瀚马信息科技有限公司 一种生成软件物料清单的方法、装置及存储介质
CN115906093A (zh) * 2022-11-02 2023-04-04 中国工商银行股份有限公司 基于组件物料清单的告警方法及装置、电子设备
CN115658080A (zh) * 2022-11-11 2023-01-31 浙江路为科技有限公司 一种软件开源代码成分的识别方法及系统

Also Published As

Publication number Publication date
CN116483435A (zh) 2023-07-25

Similar Documents

Publication Publication Date Title
Yang et al. A survey on deep learning for software engineering
Li et al. Vulnerability detection with fine-grained interpretations
Kalgutkar et al. Code authorship attribution: Methods and challenges
Li et al. Dear: A novel deep learning-based approach for automated program repair
Nayrolles et al. Clever: Combining code metrics with clone detection for just-in-time fault prevention and resolution in large industrial projects
Ossher et al. Automated dependency resolution for open source software
CN106537333A (zh) 用于软件产物的数据库的系统和方法
KR102058966B1 (ko) 악성 어플리케이션 탐지 방법 및 그 장치
CN116483435B (zh) 一种软件物料清单的生成方法、装置和计算机可读介质
Gao et al. A novel gapg approach to automatic property generation for formal verification: The gan perspective
Nichols et al. Syntax-based improvements to plagiarism detectors and their evaluations
Gustafsson et al. Architecture-centric software evolution by software metrics and design patterns
Nam et al. Marble: Mining for boilerplate code to identify API usability problems
Meilong et al. An approach to semantic and structural features learning for software defect prediction
CN112688966A (zh) webshell检测方法、装置、介质和设备
CN116186716A (zh) 一种面向持续集成部署的安全分析方法及装置
Bryksin et al. Using large-scale anomaly detection on code to improve kotlin compiler
Martínez et al. Efficient model similarity estimation with robust hashing
Armengol-Estapé et al. ExeBench: an ML-scale dataset of executable C functions
Di Grazia et al. DiffSearch: A scalable and precise search engine for code changes
Tinnes et al. Mining domain-specific edit operations from model repositories with applications to semantic lifting of model differences and change profiling
Dramko et al. DIRE and its data: Neural decompiled variable renamings with respect to software class
Jansen et al. Searchseco: A worldwide index of the open source software ecosystem
Ali et al. Selective Traceability for Rule-Based Model-to-Model Transformations
Hemid et al. RDF Doctor: A Holistic Approach for Syntax Error Detection and Correction of RDF Data.

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