一种基于深层分析的开源组件的扫描系统的制作方法

文档序号:28435540发布日期:2022-01-12 01:48阅读:185来源:国知局
一种基于深层分析的开源组件的扫描系统的制作方法

1.本发明涉及安全漏洞扫描技术领域,具体地,涉及一种基于深层分析的开源组件的扫描系统。


背景技术:

2.随着网络影响力的日益扩大,漏洞扫描系统也随之出现。早期的漏洞扫描程序是专为unix编写的,随后情况便发生了变化。现在几乎每一个平台都出现了扫描程序,扫描程序对提高intemet的安全性有很大的帮助。近年来随着扫描软件的发展,已经出现了众多扫描工具,如acunetix公司的acumetixwebviulerability scanner,watchfire的appscan和nsalker的n-stealth等,另外还有一些免费的扫描软件,如x-scan,nessus等。现有的漏洞扫描系统主要经历了以下阶段:一是在安全漏洞扫描系统的基础上,设置脚本自动生成器,极大地方便了漏洞插件的编写;二是基于多台扫描服务器的分布式网络漏洞描系统,弥补了传统扫描系统在应用过程中的不足,系统会根据运行情况调控各扫描服务器负载,保证系统正常运转;三是防火墙漏洞扫描系统,可以利用漏洞扫描来弥补防火墙的不足,两者相结合使得网络更加安全。以上这些漏洞扫描系统都有各自的优点,但是都存在着扫描效率低下等问题。
3.如今,开发人员广泛使用开源组件,据估计,每个应用程序的80%-90%都由开源组件组成。有研究显示,软件应用程序中使用的第三方组件中有一半已经过时,可能不安全。有报告称,使用开源组件的所有应用程序中,超过60%包含已知的软件漏洞。根据cve(commo vulnerabilities and exposres)分析开源组件及python、php、oracle等官网提供的漏洞数据,部分漏洞只有内容和描述,没有cve编号。传统人工扫描方式具有工作量大,效率低,耗费人力成本高等极大缺点。而市面上现有的开源扫描工具虽然一定程度上解决人工扫描存在的效率低、对人力要求高等问题,但还存在扫描方式不够丰富,漏报、误报多等不足,整体效率仍然难以满足需求。


技术实现要素:

4.由于在所有的开发语言里,都是需要引入第三方组件包的,以此为基础进行开发能大幅提升开发效率,且代码简洁易懂,因此一般都会有一个第三方库的汇总引入文件,这个文件会写入具体第三方组件的名称,版本及位置,比如java的pom.xml,php的composer.json,有了这种文件才可方便地进行第三方组件的自动化下载及批量化管理。而多数语言项目上线后,会经过打包编译过程,这些第三方的开源组件和自身代码文件会被转化为二进制编码文件。
5.本发明的目的在于提供一种基于深层分析的开源组件的扫描系统,以解决上述背景技术中提出的问题。
6.为实现上述目的,本发明提供如下技术方案:
7.一种基于深层分析的开源组件的扫描系统,所述扫描系统包括开源组件与漏洞关
系库、通过多文本组合方式对开源组件进行扫描的深层分析算法库,具体包括以下步骤:
8.s1.用户通过系统,采取设置监控扫描服务、自助远程登录的方式,或自助上传的方式,将待扫描文件上传;
9.s2.解压待扫描文件,所述深层分析算法库交替采用扫描汇总文件、二进制文件、普通文件三种独立扫描方法,进行开源组件信息提取,对扫描出来的信息进行比对互补;
10.s3.通过调取所述开源组件与漏洞关系库的漏洞情报,对组件版本、许可协议、组件代码等内容进行全面分析,批量找出开源组件对应的漏洞;
11.s4.形成包括开源组件信息、漏洞信息的漏洞报告,添加至开源组件与漏洞关系库。
12.优选的,所述二进制文件扫描方法对二进制编译文件进行扫描,具体步骤为:先通过后缀判断文件类型,当文件后缀是.dll时,则视为c语言、c++或c#的二进制编译包,这一类包编码采用了汇编语言,无法直接读取,则尝试进行反编译后按行读取,并提取第三方组件信息;当文件后缀为.jar时,则视为java开发语言的二进制jar包,这里面第三方开源信息的内容可直接读取,则尝试将文件内容转化成jarentry对象进行文件迭代读取,获取pom.properties文件里面的组件名称和版本,对于许可协议通过metainfo元数据或pom汇总文件获取。
13.优选的,所述汇总文件扫描方法对第三方库信息汇总文件采用特征文件扫描方式进行扫描,具体步骤为:检查文件名和后缀是否匹配,当匹配到文件为第三方库汇总文件php的composer.json或javascript的package.json或typescript的package.json时,则将文本转化为json对象进行解析,批量提取第三方库信息。进一步的,当提取的信息为java语言的pom.xml时,则利用开源工具dom4j将xml内容转化为model对象进行提取;当为rust语言的第三方库汇总文件cargo.toml,或者是c#的.csproj汇总文件时,则进行逐行解析获取开源组件信息。
14.由于jquery,bootstrap,layui这些非常知名的开源组件会把开源组件信息和代码写在同一个文件,内部信息格式完全不同,即使同一开源组件也有多个版本,需有多个处理方法,优选的,所述普通文件扫描方法采用代码文件扫描方法扫描普通代码文本,具体步骤为:先进行知名开源组件筛查,当文件名带有关键词jquery,bootstrap,layui时,则先分析文件版本后进行针对性提取;
15.当不包含上述关键词,则根据不同开发语言引入第三方库文件写法提取第三方引入:当java为import+包名,则提取import后面内容;当c语言为include《包名》,则截取《》号内的内容;当python语言为from包名+方法,则截取from后面包名,其他文件以此类推。
16.针对每种扫描方式都有各自的优缺点,都可能因为不规范操作只能扫描到部分信息的情况,综合多种扫描方式,优选的,在所述s2步骤中,当采用汇总文件扫描方法不能扫描出文件版本时,而采取二进制文件扫描方法;当采用二进制文件扫描方法扫描出文件版本,则将二进制包的扫描处理出来的版本补充到汇总文件扫描的扫描结果里;
17.当在二进制包扫描里由于文件不规范打包许可协议而没扫描出来,则采用汇总文件扫描方法;当采用汇总文件扫描方法扫描出时,则采用扫描出的汇总文件的许可协议补充二进制包的扫描结果;
18.对扫描结果进行去重处理,将其与所述开源组件与漏洞关系库内的数据进行名称
和版本对比,匹配成功则判定系统存在相应的漏洞。
19.为更好地适应多种编程语言,提升文本类型自动识别能力,优选的,所述开源组件与漏洞关系库包括cnvd国家信息安全漏洞库、cve漏洞库等漏洞库的数据,并实时更新。
20.与现有技术相比,本发明的有益效果是:本发明所述的基于深层分析的开源组件的扫描系统,通过多文本组合方式,对组件版本、许可协议、组件代码等内容进行全面分析,批量找出开源组件对应的漏洞,并将开源组件信息与漏洞信息添加至开源组件与漏洞关系库,最大程度减少误报漏报,帮助用户掌握开源软件具体信息,及时获取开源软件漏洞情报,降低由开源软件带来的安全风险,保障交付更安全的软件,有效提升了自动识别的文本类型,提升了编程语言适应性,提升了开源组件扫描分析效率,具有开源软件资产识别、安全风险分析、安全管理等功能。
附图说明
21.图1为本发明实施例整体流程示意图;
22.图2为本发明实施例二进制文件扫描流程示意图;
23.图3为本发明实施例汇总文件扫描流程示意图;
24.图4为本发明实施例普通文件扫描流程示意图。
具体实施方式
25.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
26.本发明的目的在于提供一种基于深层分析的开源组件的扫描系统,以解决上述背景技术中提出的问题。
27.为实现上述目的,本发明提供如下技术方案:
28.参照图1所示,一种基于深层分析的开源组件的扫描系统,所述扫描系统包括开源组件与漏洞关系库、通过多文本组合方式对开源组件进行扫描的深层分析算法库,具体包括以下步骤:
29.s1.用户通过系统,采取设置监控扫描服务、自助远程登录的方式,或自助上传的方式,将待扫描文件上传;
30.s2.解压待扫描文件,所述深层分析算法库交替采用扫描汇总文件、二进制文件、普通文件三种独立扫描方法,进行开源组件信息提取,对扫描出来的信息进行比对互补;
31.s3.通过调取所述开源组件与漏洞关系库的漏洞情报,对组件版本、许可协议、组件代码等内容进行全面分析,批量找出开源组件对应的漏洞;
32.s4.形成包括开源组件信息、漏洞信息的漏洞报告,添加至开源组件与漏洞关系库。
33.参照图2所示,所述二进制文件扫描方法对二进制编译文件进行扫描,具体步骤为:先通过后缀判断文件类型,当文件后缀是.dll时,则视为c语言、c++或c#的二进制编译包,这一类包编码采用了汇编语言,无法直接读取,则尝试进行反编译后按行读取,并提取
第三方组件信息;当文件后缀为.jar时,则视为java开发语言的二进制jar包,这里面第三方开源信息的内容可直接读取,则尝试将文件内容转化成jarentry对象进行文件迭代读取,获取pom.properties文件里面的组件名称和版本,对于许可协议通过metainfo元数据或pom汇总文件获取。
34.参照图3所示,所述汇总文件扫描方法对第三方库信息汇总文件采用特征文件扫描方式进行扫描,具体步骤为:检查文件名和后缀是否匹配,当匹配到文件为第三方库汇总文件php的composer.json或javascript的package.json或typescript的package.json时,则将文本转化为json对象进行解析,批量提取第三方库信息。进一步的,当提取的信息为java语言的pom.xml时,则利用开源工具dom4j将xml内容转化为model对象进行提取;当为rust语言的第三方库汇总文件cargo.toml,或者是c#的.csproj汇总文件时,则进行逐行解析获取开源组件信息。
35.参照图4所示,由于jquery,bootstrap,layui这些非常知名的开源组件会把开源组件信息和代码写在同一个文件,内部信息格式完全不同,即使同一开源组件也有多个版本,需有多个处理方法,优选的,所述普通文件扫描方法采用代码文件扫描方法扫描普通代码文本,具体步骤为:先进行知名开源组件筛查,当文件名带有关键词jquery,bootstrap,layui时,则先分析文件版本后进行针对性提取;
36.当不包含上述关键词,则根据不同开发语言引入第三方库文件写法提取第三方引入:当java为import+包名,则提取import后面内容;当c语言为include《包名》,则截取《》号内的内容;当python语言为from包名+方法,则截取from后面包名,其他文件以此类推。
37.针对每种扫描方式都有各自的优缺点,都可能因为不规范操作只能扫描到部分信息的情况,综合多种扫描方式,优选的,在所述s2步骤中,当采用汇总文件扫描方法不能扫描出文件版本时,而采取二进制文件扫描方法;当采用二进制文件扫描方法扫描出文件版本,则将二进制包的扫描处理出来的版本补充到汇总文件扫描的扫描结果里;
38.当在二进制包扫描里由于文件不规范打包许可协议而没扫描出来,则采用汇总文件扫描方法;当采用汇总文件扫描方法扫描出时,则采用扫描出的汇总文件的许可协议补充二进制包的扫描结果;
39.对扫描结果进行去重处理,将其与所述开源组件与漏洞关系库内的数据进行名称和版本对比,匹配成功则判定系统存在相应的漏洞。
40.为更好地适应多种编程语言,提升文本类型自动识别能力,所述开源组件与漏洞关系库包括cnvd国家信息安全漏洞库、cve漏洞库等漏洞库的数据,并实时更新。这里,开源组件与漏洞关系库还可采用人工录入、下载更新其他漏洞库数据的方式进行更新扩库。
41.尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1