本发明涉及软件供应链安全,具体为一种开源组件血缘分析方法及系统。
背景技术:
1、近年来的互联网环境下,数据泄露、网络敲诈等事件频繁发生,这些事件多与软硬件漏洞有关,依据有关数据,source check平台对某软件的扫描结果显示,53.8%的该软件项目中包含至少一个高危风险漏洞,增大了软件使用风险,如不及时修复该漏洞,将无法为用户提供良好的体验,软件项目涉及交付、运行、维护、更新等环节,与交付与运行环节相比较,开发环节的安全防护较为缺失,且开发作为供应链条中的上游部分,一旦在此环节发生了安全事件,必将影响到下游环节,造成损失,在申请号为cn202211737067.4的专利中公开了“一种电力行业软件供应链安全治理平台,包括,供应商评估模块,针对技术评估难以定量分析的问题,完善软件供应商风险评估体系,代码成分分析模块,基于卷积神经网络的代码识别技术,通过源代码自动化分析,构建一套详细的软件组件清单,全面掌握业务系统组件使用情况,自动化入侵与攻击模拟模块,采用基于知识图谱的人工智能算法,结合业务组件识别,自动生成攻击模拟工具,帮助企业实时洞察软件供应链安全风险,本技术基于软件供应链全生命周期安全管理针对电力行业业务系统软件在采购、上线、运维各阶段引入安全治理,提升整体的安全防范性,有效处理敏捷开发与安全成本之间的平衡。”
2、然而,目前软件供应链安全检查的难度相当大,在软件交付过程中主要面临以下难点:其一,攻击者通过污染开发工具、复用开源代码等方式控制上游软件供应链,借助软件开发碎片化显著等特点促使污染代码快速传播影响中下游用户,其二,由于交付渠道、交付环境等方面缺乏安全分析评估,导致攻击者利用捆绑软件、下载劫持和依赖混淆等方法实施攻击,其三,由于用户未对升级程序、组件和代码等进行严格检查,导致攻击者在更新升级或者打补丁过程中植入恶意代码控制用户系统。
技术实现思路
1、本发明的目的在于提供一种开源组件血缘分析方法及系统,以解决上述背景技术中提出的问题。
2、为实现上述目的,本发明提供如下技术方案:一种开源组件血缘分析方法,包括以下步骤:
3、s1、自动发现开源组件:通过对系统源码以及编译部署包进行扫描检测,通过组件指纹特征,依赖及关联分析的方式自动发现系统引用的开源组件,通过引用的开源组件及开源组件的特征识别,自动发现系统所用的框架,通过关联威胁情报,发现框架的威胁与风险;
4、s2、分析软件成分:在发现开源组件之后,对软件中所使用的开源组件进行精确识别,并且支持java、python、javascript、.net、php、.net、c++、perl多种语言开发的开源组件版本的识别;
5、s3、开源组件指纹分析:采用开源组件指纹识别工具进行动态扫描,并收集软件中使用的所有开源组件的清单,提取并利用开源组件中信息数据;
6、s4、生成sbom物料清单:生成完整的sbom物料清单,分析开发人员所使用的信息数据,并精准识别系统中存在的已知安全漏洞;
7、s5、开源组件血缘分析:对点待溯源的文件进行解包并检索,根据检索情况提取属性数据,获得出厂商、组件名和版本号信息,根据厂商、组件名和版本号信息在特征仓库中查找对应原始jar文件,分析点待溯源的文件和对应原始jar文件来查找宿主,通过相似度分析技术提取特征值并保存作对比后,识别jar包中存在篡改代码明细。
8、优选的,所述步骤s3具体包括以下步骤:
9、s301、采用owaspdependency-check、nexpose、blackduck和snyk开源组件指纹识别工具对软件开源组件进行动态扫描应用程序的源代码、依赖项清单和二进制文件;
10、s302、收集软件中使用的所有开源组件的清单,包括开源组件的版本、许可证信息、潜在漏洞库、框架和辅助依赖项;
11、s303、提取开源组件的特定代码片段、版本号和文件名,并通过密码散列函数使用提取的开源组件的数据和内容生成唯一的指纹以及哈希值。
12、优选的,所述步骤s4具体包括以下步骤:
13、s401、通过软件成分分析生成完整的sbom物料清单,同时建立软件构成图谱;
14、s402、分析开发人员所使用的各种源码、模块、框架和库,以识别和清点开源软件的组件及其构成和依赖关系;
15、s403、精准识别系统中存在的已知安全漏洞和潜在的许可证授权问题,保护最终用户免受安全漏洞的影响。
16、优选的,所述步骤s5具体包括以下步骤:
17、s501、对点待溯源的file1.jar文件使用zip解压缩算法对文件进行解包,检索出pom.xml文件,如果pom.文件不存在则继续查找meta-inf.mf文件;
18、s502、对于pom.xml文件提取groupid、artifactid、version三个属性的数据,该属性的数据分别对应出厂商、组件名和版本号信息;
19、s503、对于meta-inf.mf文件提取specification-title、implementation-title、implementation-version三个属性的数据,该属性的数据分别对应出厂商、组件名和版本号信息;
20、s504、根据出厂商、组件名、版本号信息在库中查找对应原始jar文件file2.jar。
21、优选的,所述步骤s5具体还包括以下步骤:
22、s505、计算file1.jar和file2.jar的sha256值,如果sha256值相同说明是同一个文件,溯源结束,退出,否则继续执行s506;
23、s506、将file1.jar和file2.jar分别解压会得出各自class文件列表lst1和lst2,逐个计算lst1和lst2目录下class文件的sha256值,并且剔除sha256相同的文件;
24、s507、在lst1采取余弦相似度算法篡改列表lst3,遍历lst3目录,将lst3下的每个文件和lst2的文件列表逐个进行内容比较,如果内容相似度超过90%则表示宿主查找成功。
25、优选的,所述步骤s5中包括预制数据和特征对比,所述预制数据通过maven官网下载jar文件,并对该jar文件进行解压,解压之后生成特征数据,保存进特征仓库,所述特征对比首先解压项目中的jar包,接着生成特征数据,之后在特征仓库中进行对比。
26、一种开源组件血缘分析系统,包括开源组件自动发现模块、软件成分分析模块、开源组件指纹分析模块、sbom物料清单模块和开源组件血缘分析模块;
27、所述开源组件自动发现模块通过对系统源码以及编译部署包进行扫描检测,通过组件指纹特征,依赖及关联分析的方式自动发现系统引用的开源组件,通过引用的开源组件及开源组件的特征识别,自动发现系统所用的框架,通过关联威胁情报,发现框架的威胁与风险;
28、所述软件成分分析模块在发现开源组件之后,对软件中所使用的开源组件进行精确识别,并且支持java、python、javascript、.net、php、.net、c++、perl多种语言开发的开源组件版本的识别;
29、所述开源组件指纹分析模块采用开源组件指纹识别工具进行动态扫描,并收集软件中使用的所有开源组件的清单,提取并利用开源组件中信息数据;
30、所述sbom物料清单模块生成完整的sbom物料清单,分析开发人员所使用的信息数据,并精准识别系统中存在的已知安全漏洞;
31、所述开源组件血缘分析模块对点待溯源的文件进行解包并检索,根据检索情况提取属性数据,获得出厂商、组件名和版本号信息,根据厂商、组件名和版本号信息在特征仓库中查找对应原始jar文件,分析点待溯源的文件和对应原始jar文件来查找宿主,通过相似度分析技术提取特征值并保存作对比后,识别jar包中存在篡改代码明细。
32、与现有技术相比,本发明的有益效果是:
33、1、本发明通过密码散列函数与余弦相似度算法实现对源代码数据处理过程的全面追踪,从而找到某个数据对象为起点的所有相关元数据对象以及这些元数据对象之间的关系,这些元数据对象之间的关系特指表示这些元数据对象的数据流输入输出关系,系统会收集常见开源组件的文件指纹特征,通过相似度分析技术,当组件被修改过也能快速识别,平台会定期收集常见开源组件的文件指纹特征,结合提取的开源软件依赖包;
34、2、通过相似度分析技术提取特征值并保存作对比后,识别jar包中存在篡改代码明细,定位开源组件风险,提升软件部署包的可控性和安全性管理,识别出软件产品中使用的组件、库、框架和依赖项,并确定它们的来源、版本、许可证和已知的安全漏洞,帮助管理员更好地理解软件产品的安全风险和影响范围,并采取相应的措施来降低安全风险,通过组件指纹特征,依赖及关联分析的方式自动发现系统引用的开源组件自动发现系统所用的框架,通过关联威胁情报,发现框架的威胁与风险。