【技术实现步骤摘要】
一种软件开源代码成分的识别方法及系统
[0001]本专利技术属于软件开源代码成分检测
,尤其涉及一种软件开源代码成分的识别方法及系统。
技术介绍
[0002]软件成分分析是一种用于管理开源组件应用安全的方法。目的是为了开发团队可以快速跟踪和分析引入项目的开源组件。同时,软件成分分析工具可以发现所有相关组件、支持库以及它们之间直接和间接依赖关系。软件成分分析工具还可以检测软件许可证、已弃用的依赖项以及漏洞和潜在威胁。扫描过程会生成物料清单Bill of Materials(BOM),从而提供项目软件资产的完整清单。软件成分是衡量软件供应链是否安全的重要指标,但是目前市面上暂无完整的、高准确率的软件成分分析产品的统计方案。
[0003]现有公开了基于simhash的源代码中开源成分筛选识别方法及系统(本方案申请号为:CN202210337119.2),其包括:构建基础源码库;采用simhash算法,分别对基础源码库中的每一开源文件中的源代码进行解析处理,以得到数据匹配表;采用与开源文件相同的解析处理方式对待测源码组件中的每一源码文件进行解析处理,以获得若干第二数码组;分别将第二数码组中的字符串与数据匹配表中每一第一数码组中的字符串整体匹配;判断任一第一数码组中是否存在与当前第二数码组中相同的字符串,如果是,则将该第一数码组定义为待选数码组;根据待选数码组在基础源码库中找出与该待测源码组件相关的若干开源组件。
[0004]该方案是基于simhash算法进行的开源成分识别,simhash算法是进行源代码 ...
【技术保护点】
【技术特征摘要】
1.一种软件开源代码成分的识别方法,其特征在于,包括:获取待测软件的源代码,得到第一源代码文件,获取方式包括GIT、SVN、TFS和Mercurial;对第一源代码文件分别进行配置文件元数据和源代码文件元数据的提取和第一预处理,得到第一依赖组件有向无环图和第二依赖组件有向无环图;对第一依赖组件有向无环图和第二依赖组件有向无环图进行第二预处理,得到关系孤岛;使用深度遍历算法对关系孤岛进行补点,得到巨岛;获取所有开源的源代码并建立知识库,将巨岛代入相应计算机语言的分析引擎中进行读取分析,并将读取分析结果代入知识库中进行关联数据的筛选,按照SBOM格式生成识别结果报告。2.根据权利要求1所述的一种软件开源代码成分的识别方法,其特征在于,GIT获取方式,包括个人访问令牌方式和用户名密码方式;个人访问令牌方式为:访问GIT仓库主站地址的首页和子页,分别提取首页和子页的特征并利用SHA1算法形成特征值,将特征值代入知识库中进行SHA值比对,得到GIT仓库的类型版本数据,根据类型版本数据确定访问令牌的正确接口,进而获取GIT仓库中待测软件的源代码;用户名密码方式为:根据类型版本数据建立网络爬虫,通过网络爬虫获取GIT中所有待测软件仓库的源代码。3.根据权利要求1所述的一种软件开源代码成分的识别方法,其特征在于,对第一源代码文件分别进行配置文件元数据和源代码文件元数据的提取和第一预处理,得到第一依赖组件有向无环图和第二依赖组件有向无环图,包括:使用遍历目录算法和文件类型识别算法筛选第一源代码文件中具有特殊特征的文件,并对文件的元数据进行特征提取、内容清洗,得到第一组件信息,然后将第一组件信息中每个组件作为图中的点,依赖关系为有向边,建立第一依赖组件有向无环图,特殊特征包括xml文件格式、json文件格式、ini文件格式、text文件格式和lock文件格式;将第一源代码文件中代码切分成固定粒度,得到比较代码单元,从比较代码单元中抽取度量值建立颗粒度矩阵,使用向量相似度算法将颗粒度矩阵代入知识库中进行向量相似度的计算,将知识库中相似度满足阈值的组件汇总,得到第二组件信息,将第二组件信息中每个组件作为图中的点,依赖关系为有向边,建立第二依赖组件有向无环图,度量值包括代码变量、关键字、变量循环次数、参数、返回值、常量和符号。4.根据权利要求3所述的一种软件开源代码成分的识别方法,其特征在于,向量相似度算法包括:
其中,Sim
CM
为颗粒度矩阵与知识库中对应矩阵的相似度值,CM1[i]为知识库中矩阵的第i个向量,CM2[match(i)]为颗粒度矩阵中相匹配的第i个向量,A为CM1中向量,B为CM2中向量,α为A向量与B向量的夹角,n和m为自然数,Similarity(A,B)为A向量与B向量的相似度,balance为平均数,SimThres为相似度输入值,a为关键字的度量值,b为符号的度量值,CompareResult为运算结果,Sim
a
...
【专利技术属性】
技术研发人员:宋秉嵘,
申请(专利权)人:浙江路为科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。