System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种针对Python开源生态的细粒度软件供应链构建方法技术_技高网

一种针对Python开源生态的细粒度软件供应链构建方法技术

技术编号:40109585 阅读:7 留言:0更新日期:2024-01-23 18:57
本发明专利技术实现了一种针对Python开源生态的细粒度软件供应链构建方法。通过五个步骤实现:步骤一:构建软件包集合;步骤二:获取软件包集合源代码;步骤三:构建导入图;步骤四:构建继承图;步骤五:构建函数调用图。本方法将细粒度供应链建模为导入图、继承图、函数调用图三种基本的数据结构;解决了函数完全限定名不统一和类继承关系缺失导致的函数级别依赖分析不完全的问题,提出了一种更细粒度、更精确的供应链构建方法,同时可以为Python语言其他静态分析提供支持。

【技术实现步骤摘要】

本专利技术涉及软件,尤其涉及一种针对python开源生态的细粒度软件供应链构建方法。


技术介绍

1、软件开发过程中,由于软件使用者的需求不断增长,软件开发呈现出快速更新迭代和多场景异构兼容的特点。在这种背景下,为突破传统软件开发模式在迭代更新的速度上的瓶颈,开源模式迅速发展。在开源模式下,源代码、文档等资源具有公开透明的特点,有助于吸引优质开发人员,形成群体协作、资源共享的模式,从而更有助于实现软件功能的快速更新迭代,从而突破传统软件开发模式的瓶颈。在为软件开发者带来便利的同时,由于开源软件之间互相引用,形成了复杂的依赖关系,漏洞的影响范围也从一个软件扩大到整个供应链,因此为开源生态造成了很大的安全风险。根据black duck《2021开源安全和风险分析报告》显示,团队审计的1500多个代码库中,其中98%的商业代码库包含开源成分,84%的代码库包含至少一个公开披露的漏洞,比2019年增加了9%。同样包含高风险开源漏洞的代码库所占的百分比比2020年增长至60%,比2019年的49%增加了11%。

2、现有的开源生态分析方法主要从粗粒度和细粒度两种分析粒度对供应链进行构建。粗粒度构建方法是指从包级别对第三方软件包之间的供应关系进行分析,其供应链中的节点为第三方软件包,供应链中的边指示的是第三方软件包的依赖关系。这种方法一般是通过提取项目元数据,基于项目的依赖声明文件或者安装项目过程中的信息来获取第三方软件之间的依赖关系,同时添加一些项目的基本信息,包括版本控制信息、许可证信息、包级别的漏洞信息以及涉及代码安全性的其他重要指标。细粒度构建方法是指从函数级别对第三方软件包之间的依赖关系进行分析,其供应链中的节点为第三方软件包对外提供的api,供应链中的边为第三方软件包内部和软件包之间函数的调用关系。目前人们提出了针对java程序的细粒度软件供应链构建方法,但尚未有针对python程序的细粒度供应链构建方法,该方法目前只针对java开源生态。

3、为应对开源模式下,漏洞传播范围扩展到整个供应链的问题,研究者采用了不同的方法对开源软件供应链进行建模和分析。而现有的粗粒度供应链构建方法给出的依赖信息是不准确的,无法准确地进行漏洞传播分析,从而给出了很多误报的漏洞预警信息,造成时间和人力资源的浪费,或者是导致不必要的软件包替换和版本更新。而细粒度供应链构建方法目前只针对java开源生态,相比于java,python引入了一些利于开发的机制,如import机制允许给api定义别名,造成了python细粒度分析的障碍。因此需要针对这些机制,提出相应的处理方法,从而实现针对python开源生态的细粒度供应链构建方法。

4、本专利技术针对python开源生态治理,旨在提出一种细粒度的供应链构建方法,能够从函数级别对python开源生态进行建模和分析,以便能够更加准确地对python开源生态中第三方软件包之间的依赖关系进行构建。基于python细粒度供应链,可以进行更加精确的漏洞传播分析,使得开发者和维护者能够更好地了解和应用第三方软件包,同时提高第三方软件包应用的安全性,为python开源生态分析和治理提供支持。

5、具体来说,主要解决的问题包括:(1)针对python第三方软件包,通过构建导入图解决由于python导入机制引起的同一函数具有不同完全限定名的问题,从而解决了细粒度供应链构建过程中,由于函数完全限定名不统一导致的漏洞传播路径断裂的问题;(2)通过构建继承图解决由于python继承机制引起的类成员函数定义不在当前模块的问题,从而解决了细粒度供应链构建过程中,由于继承机制引起的子类成员函数无定义的问题;(3)通过构建函数调用图,最终实现了python细粒度供应链的构建。


技术实现思路

1、为此,本专利技术首先提出一种针对python开源生态的细粒度软件供应链构建方法,输入三种基本数据结构:导入图、继承图、函数调用图,基于三种基本数据结构对细粒度供应链进行构建;

2、具体而言,方法包括五个步骤:

3、步骤一:构建软件包集合,软件包集合包括给定名称和版本号标识的第三方软件包及其所有的上游依赖包,包括直接依赖项和传递依赖项,在供应链中构成以给定软件包为起点的一个连通子图;

4、步骤二:获取软件包集合源代码,获取软件包集合中所有元素对应的元数据和源代码,解析软件包元数据,将软件包基本信息和包级别依赖关系添加到供应链中,完成包级别供应链的构建。

5、步骤三:构建导入图,对于软件包集合中所有元素,基于抽象语法树对软件包源代码进行分析,获取其中所有import语句给出的导入关系,分析并构建导入图;同时,基于抽象语法树对软件包源代码进行分析,获取软件包源代码中所有类定义以及类之间的继承关系;

6、步骤四:构建继承图,执行步骤三的过程中,收集软件包集合中所有元素对应的import关系、类定义以及类继承关系,分析并构建继承图;

7、步骤五:构建函数调用图,对于软件包集合中所有元素,基于pycg对软件包源代码进行分析,获取函数调用关系,在导入图和继承图的基础上,将函数完全限定名进行归一化,构建python细粒度供应链;

8、所述构建导入图的具体方法为:导入图被建模为带有标签和属性的有向图g={v,e,σ,l},其中v表示节点集合,表示边集合,σ表示标签集合,l:v→σ表示节点集合到标签集合的映射函数,导入图中的标签集合σ具体包括:函数、类、模块、包、目录;

9、import语句结合两个操作,首先搜索执行名称的模块/包,然后将搜索结果绑定到当前作用域中的名称,使用import语句导入一个模块通常有两种形式:import模块名1[as别名1],模块名2[as别名2]、from[包名.]包名1import模块名1[as别名1],模块名2[as别名2];

10、导入图的构建流程包括:

11、步骤1遍历源代码,获取源代码的目录结构,以及所有.py文件的抽象语法树;

12、步骤2将目录结构添加到导入图中,通过识别目录结构下是否存在__init__.py文件添加节点标签为目录或包;将python文件对应节点添加到导入图中,添加节点标签为模块,分析所有python文件,基于抽象语法树,提取所有类定义和函数定义,将节点添加到导入图中,添加节点标签分别为类和函数,同时添加属性define,为表示类和函数定义节点;

13、步骤3分析所有python文件,基于抽象语法树,分析import语句,得到python软件包中所有的import关系;

14、步骤4遍历步骤3获取的import关系,为导入的包/模块/类/函数构建新的完全限定名,并在导入图中添加新的节点,在导入图中查询被导入的包/模块/类/函数的定义节点,在新节点和定义节点之间添加import_mapping关系,迭代该步骤,直至执行步骤4不能增加导入图中的节点数量和节点关系,则导入关系全部处理完成。

15、本文档来自技高网...

【技术保护点】

1.一种针对Python开源生态的细粒度软件供应链构建方法,其特征在于:输入Python第三方软件包名和版本号,方法首先基于源代码生成导入图、继承图和函数调用图三种基本数据结构,进而基于这三种基本数据结构对细粒度供应链进行构建;

2.如权利要求1所述的一种针对Python开源生态的细粒度软件供应链构建方法,其特征在于:所述构建导入图的具体方法为:导入图被建模为带有标签和属性的有向图G={V,E,Σ,l},其中V表示节点集合,表示边集合,Σ表示标签集合,l:V→Σ表示节点集合到标签集合的映射函数,导入图中的标签集合Σ具体包括:函数、类、模块、包、目录;

3.如权利要求1所述的一种针对Python开源生态的细粒度软件供应链构建方法,其特征在于:所述构建继承图时,在类继承关系中考虑三个方面的关系:(1)子类可以继承父类的函数;(2)子类可以重写父类的函数;(3)子类在搜索方法时,首先在当前类中搜索方法,其次按照父类声明的顺序从左到右依次在父类中搜索方法,继承图被建模为带有标签和属性的有向图G={V,E,Σ,l},继承图的标签集合Σ只包含类和函数两种类型,构建流程具体为:

4.如权利要求1所述的一种针对Python开源生态的细粒度软件供应链构建方法,其特征在于:所述构建函数调用图的具体方法为:函数调用图被定义为带有标签和属性的有向图G={V,E,Σ,l},其中V表示节点集合,表示边集合,Σ表示标签集合,l:V→Σ表示节点集合到标签集合的映射函数,其中节点v∈V包含四种属性:(1)函数完全限定名,用于唯一表示一个函数;(2)函数名:源代码中函数定义处给出的函数名;(3)函数参数:源代码中函数定义处给出的参数列表;(4)默认参数个数:源代码中函数定义处给出的默认参数的个数。其中标签集合Σ只包含了“函数”一种标签;函数调用图的构建过程具体为:

...

【技术特征摘要】

1.一种针对python开源生态的细粒度软件供应链构建方法,其特征在于:输入python第三方软件包名和版本号,方法首先基于源代码生成导入图、继承图和函数调用图三种基本数据结构,进而基于这三种基本数据结构对细粒度供应链进行构建;

2.如权利要求1所述的一种针对python开源生态的细粒度软件供应链构建方法,其特征在于:所述构建导入图的具体方法为:导入图被建模为带有标签和属性的有向图g={v,e,σ,l},其中v表示节点集合,表示边集合,σ表示标签集合,l:v→σ表示节点集合到标签集合的映射函数,导入图中的标签集合σ具体包括:函数、类、模块、包、目录;

3.如权利要求1所述的一种针对python开源生态的细粒度软件供应链构建方法,其特征在于:所述构建继承图时,在类继承关系中考虑三个方面的关系:(1)子类可以继承父类的函数;(2)子类可以重写父类的函数;(3)子类在...

【专利技术属性】
技术研发人员:孙海龙高祥隋睿
申请(专利权)人:北京航空航天大学
类型:发明
国别省市:

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

1