System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种面向Go开源软件供应链的大规模组件层级依赖图构建方法技术_技高网
当前位置: 首页 > 专利查询>浙江大学专利>正文

一种面向Go开源软件供应链的大规模组件层级依赖图构建方法技术

技术编号:41204227 阅读:13 留言:0更新日期:2024-05-07 22:29
本发明专利技术公开了一种面向Go开源软件供应链的大规模组件层级依赖图构建方法,设计了Go大规模组件元数据数据库,以及基于组件元数据数据库的Go最小版本选择算法MVS,从而不需实际下载组件代码仓库即可高精度解析得到组件的构建列表,在五千个组件版本上与Go编译器相关命令go list‑m all,输出比较,结果显示精度高达99.8%。设计了两轮构建的层级依赖图解析算法,在构建列表的基础上得以进一步恢复出较精确的组件层级依赖图。最终能够高效地构建Go生态规模的组件层级依赖图数据库。为研究Go软件生态的特征,安全漏洞在Go开源软件供应链中的传播态势以及如何进行有效阻断和修复方面提供基础数据支撑。

【技术实现步骤摘要】

本专利技术涉及开源软件供应链安全领域,具体地说,一种面向go开源软件供应链的大规模组件层级依赖图构建方法。


技术介绍

1、软件正在吞噬世界,而开源则在吞噬软件。开源组件与工具的广泛应用使得软件开发效率大幅提升,软件的功能和体系越发复杂,整个软件开发、构建与分发的过程成为多方参与的供应链。但同时,这也提高了软件系统中的不可信比重,增加其被攻击的风险。新思2023年《开源安全和风险分析(ossra)报告》显示,在其分析的来自17个行业的1,703个商业代码库中,有96%包含开源代码,84%的代码库包含至少一个已知开源漏洞(比2022年版的ossra报告增加了近4%)。开源软件供应链使得软件的威胁入口点涵盖整个软件生命周期,攻击面由开发者编辑的代码本身扩展到其构建和交付环境及其供应链上游供应商的编码过程、构建和交付环境。在软件供应链攻击引起重视之前,传统攻击往往需要根据0-day漏洞构造复杂的攻击脚本,攻击难度较高,攻击范围也有限。近年来频繁爆出的软件供应链攻击,则在利用难度上明显降低,在影响范围上则随着依赖链急剧扩大。

2、面对软件供应链攻击,及早发现并修复由第三方组件引入的漏洞至关重要。通过准确的依赖解析,可以有效评估某项目自身引入安全漏洞的风险,及时阻断漏洞来源;对整个软件生态而言,可以挖掘供应链上的关键组件,能够有效评估安全漏洞对整个生态产生的潜在风险,辅助决策供应链攻击防御措施。现有的go依赖分析工作,如snyk和悬镜opensca,需要下载go组件,即go module,的代码仓库,然后再基于依赖配置文件,来进行依赖解析及漏洞检测,难以支持漏洞在go软件生态层面的影响分析;并且大多没有考虑版本选择、依赖图剪枝的问题,导致解析结果中过多的依赖项;以及都没有考虑go可能会将间接依赖也记录在当前组件的依赖配置文件中的特性,导致得到的依赖树/依赖图的依赖层级较不准确。

3、因此,需要提供一种方法,能够在go语言生态依赖关系分析中克服上述问题。


技术实现思路

1、本专利技术的目的在于针对开源软件供应链安全问题,一种面向go开源软件供应链的大规模组件层级依赖图构建方法,基于组件元数据数据库和设计go组件module的层级依赖图构建算法,以高效解析go生态规模的组件层级依赖图,有利于进一步go开源软件供应链的研究分析。

2、本专利技术的目的是通过以下技术方案来实现的:

3、本专利技术公开了一种面向go开源软件供应链的大规模组件层级依赖图构建方法,包括以下步骤:

4、1)同步go官方module索引到本地module索引数据库,得到索引信息,对组件依赖配置文件集进行预处理,得到依赖配置信息、校验信息;

5、2)使用索引信息、依赖配置信息、校验信息构建组件元数据数据库;

6、3)基于组件元数据数据库,对校验通过的组件批量运行层级依赖图构建算法,构建生态规模的组件层级依赖图数据库。

7、作为进一步地改进,本专利技术所述的步骤2)中使用索引信息、依赖配置信息、校验信息构建组件元数据数据库包括以下子步骤:

8、2.1)设计数据库结构表,表中记录聚合组件索引信息、依赖配置信息、校验信息;

9、2.2)将步骤1)得到的组件索引信息、依赖配置信息、校验信息整合并且存储到组件元数据数据库中;

10、2.3)创建数据库索引。

11、作为进一步地改进,本专利技术所述的子步骤中的索引信息包含:用来标志和引用该组件的组件路径path、版本version、缓存时间cachetime。

12、作为进一步地改进,本专利技术所述的子步骤中的依赖配置信息包含:依赖配置文件中声明的组件路径modulepath、开发该组件使用的go编译器版本goversion、依赖配置文件中声明的直接依赖列表dirrequire、依赖配置文件中声明的间接依赖列表indirrequire、被声明排除的依赖列表exclude、被声明需要被替换的依赖列表replace、原始依赖配置文件modfile。

13、作为进一步地改进,本专利技术所述的子步骤中的校验信息包含:依赖配置文件是否有效validmod、是否在官方包信息查询网站上可查onpkg

14、作为进一步地改进,本专利技术所述的步骤3)中基于组件元数据数据库,对校验通过的组件批量运行层级依赖图构建算法,构建生态规模的组件层级依赖图数据库包括以下子步骤:

15、3.1)向组件元数据数据库分批量请求校验通过等待解析的组件,并行进行依赖图解析,得到若干批量依赖图;

16、3.2)将解析得到的批量依赖图序列化,存储到组件层级依赖图数据库。

17、作为进一步地改进,本专利技术所述的子步骤3.1)中的依赖图解析包括以下两种方法:

18、3.1.1)改造go编译器依赖解析所使用的版本选择算法,使其只需基于组件元数据数据库,就能获得指定组件的构建列表,即go编译器构建相关命令所需的组件版本列表,其中,采用在线解析的方式解决通过replace指令将依赖项替换到本地路径的情况;

19、3.1.2)go组件层级依赖图生成算法;基于组件元数据数据库和3.1.1)得到的待解析组件的构建列表,首先根据待解析组件依赖配置信息中的go版本确定依赖图的候选节点,再通过两轮构建得到组件层级依赖图;

20、两轮构建包括:

21、第一轮构建,以待解析组件为初始节点,层序遍历展开图,展开中忽略在依赖配置文件中被标记为indirect的依赖,得到图g0;

22、第二轮构建,对g0的每一个节点n,对其声明的标记为indirect的依赖,令其成为n的未被标记为indirect的一个随机选取的后继节点的后继节点,再对该新增节点作层序遍历,展开时忽略已在图上且被标记为indirect的依赖。

23、本专利技术的有益效果:

24、本专利技术提出的一种面向go开源软件供应链的大规模组件层级依赖图构建方法,设计了go大规模组件元数据数据库,以及基于组件元数据数据库的go最小版本选择算法mvs,从而不需实际下载组件代码仓库即可高精度解析得到组件的构建列表,在五千个组件版本上与go编译器相关命令go list-m all,输出比较,结果显示精度高达99.8%。设计了两轮构建的层级依赖图解析算法,在构建列表的基础上得以进一步恢复出较精确的组件层级依赖图。最终能够高效地构建go生态规模的组件层级依赖图数据库。为研究go软件生态的特征,安全漏洞在go开源软件供应链中的传播态势以及如何进行有效阻断和修复方面提供基础数据支撑。

本文档来自技高网...

【技术保护点】

1.一种面向Go开源软件供应链的大规模组件层级依赖图构建方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的面向Go开源软件供应链的大规模组件层级依赖图构建方法,其特征在于,所述的步骤2)中使用索引信息、依赖配置信息、校验信息构建组件元数据数据库包括以下子步骤:

3.根据权利要求2所述的面向Go开源软件供应链的大规模组件层级依赖图构建方法,其特征在于,所述子步骤中的索引信息包含:用来标志和引用该组件的组件路径Path、版本Version、缓存时间CacheTime。

4.根据权利要求2所述的面向Go开源软件供应链的大规模组件层级依赖图构建方法,其特征在于,所述子步骤中的依赖配置信息包含:依赖配置文件中声明的组件路径ModulePath、开发该组件使用的Go编译器版本GoVersion、依赖配置文件中声明的直接依赖列表DirRequire、依赖配置文件中声明的间接依赖列表IndirRequire、被声明排除的依赖列表Exclude、被声明需要被替换的依赖列表Replace、原始依赖配置文件ModFile。

5.根据权利要求2所述的面向Go开源软件供应链的大规模组件层级依赖图构建方法,其特征在于,所述子步骤中的校验信息包含:依赖配置文件是否有效ValidMod、是否在官方包信息查询网站上可查OnPkg。

6.根据权利要求1或2或3或4或5所述的面向Go开源软件供应链的大规模组件层级依赖图构建方法,其特征在于,所述的步骤3)中基于组件元数据数据库,对校验通过的组件批量运行层级依赖图构建算法,构建生态规模的组件层级依赖图数据库包括以下子步骤:

7.根据权利要求6所述的面向Go开源软件供应链的大规模组件层级依赖图构建方法,其特征在于,所述的子步骤3.1)中的依赖图解析包括以下两种方法:

...

【技术特征摘要】

1.一种面向go开源软件供应链的大规模组件层级依赖图构建方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的面向go开源软件供应链的大规模组件层级依赖图构建方法,其特征在于,所述的步骤2)中使用索引信息、依赖配置信息、校验信息构建组件元数据数据库包括以下子步骤:

3.根据权利要求2所述的面向go开源软件供应链的大规模组件层级依赖图构建方法,其特征在于,所述子步骤中的索引信息包含:用来标志和引用该组件的组件路径path、版本version、缓存时间cachetime。

4.根据权利要求2所述的面向go开源软件供应链的大规模组件层级依赖图构建方法,其特征在于,所述子步骤中的依赖配置信息包含:依赖配置文件中声明的组件路径modulepath、开发该组件使用的go编译器版本goversion、依赖配置文件中声明的直接依赖列表dirrequire、...

【专利技术属性】
技术研发人员:常瑞杨申毅余丰申文博
申请(专利权)人:浙江大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1