自动依赖扫描-demo

来源:互联网 发布:英语教练淘宝没了 编辑:程序博客网 时间:2024/05/21 19:34

1、 研究背景

如今应用程序依赖的第三方库和框架数量越来越多,也越来越复杂,比如SSLSpringRails.Net等等,此外还有各种第三方认证系统等,我们暂且统一把它们称之为第三方依赖。通常情况下,在开发应用程序的时候会提前选定好某个第三方依赖的版本,并且在较长一段时间内都不会主动去更新,原因是更新的成本一般都比较高,比如新库和新框架更改了API的使用方法和使用流程,可能导致系统进行大规模重构。但是往往这些依赖为了添加新的功能和修复各种当前的问题——包括安全问题,却会经常发布新版本。这些依赖库和框架的安全问题只要被发现,通常都会被公布到互联网上,比如NVD、乌云等漏洞平台,而此时官方修复补丁很可能还没有发布,因此存在一个相当危险的真空期,导致很多人都可以利用这些漏洞去攻击使用这些依赖的应用程序。


对应用程序使用到的这些第三方依赖进行管理是很有必要的,但是挑战在于,这些依赖的数量是如此的庞大,而且每天都会有各种各样的关于依赖的安全漏洞被公布到网上,人工手动管理的难度相当大,此时就需要借助自动化来完成这一任务了。自动化依赖扫描就是通过扫描当前应用使用到的所有依赖(包括间接依赖)及其版本,并和网上公布的安全漏洞进行匹配,如果当前某个依赖存在某种危险级别(需要自己定义)的漏洞,就立即发出警告(比如阻止CI构建成功等)来通知开发人员或者系统管理员,从而在最短的时间内启动应对措施,达到防止攻击,避免或者减少损失的目的。

 

2、 研究步骤

研究背景(债务来源)的分析可以得出自动依赖扫描需要完成以下几个步骤


(1) 自动发现应用程序的第三方依赖;

(2) 漏洞平台中将第三方依赖的安全漏洞下来;

(3) 对比:漏洞平台发布漏洞的第三方依赖与应用程序的第三方依赖对比,如果匹配上则应用程序的第三方依赖不安全的(匹配规则需自定义

(4) 发现应用程序的第三方依赖不安全,则预警(发送邮件给相关责任人)。

 

3、 研究过程

首先我们需要自动发现应用程序的第三方依赖小编经过调研,发现JarAnalyzer可以满足我们的需求,JarAnalyzer是一个用于.jar文件的依赖管理工具,JarAnalyzer能够在一个给定的目录中分析所有jar文件并标识它们之间的依赖关系,输出格式包括xml或者txt文件格式可以指定)


其次,我们需要将漏洞平台发布第三方依赖的安全漏洞爬取下来,在此,小编借用了小安的CVE漏洞,以此作为本demo的漏洞库。


然后需要对第三方依赖的安全漏洞应用程序的第三方依赖进行匹配匹配的规则可以人工设置,本demo仅以第三方依赖的名称与版本作为匹配)如果规则中匹配,则视应用程序的第三方依赖有安全风险的


最后对于有安全风险的应用程序第三方依赖进行预警,将安全风险信息(包括漏洞名称、威胁等级、厂商补丁等信息推送给相关责任人

 

4、 demo搭建

解决的问题JarAnalyzer虽然能够自动扫描应用程序的第三方依赖,但是JarAnalyzer一个缺点,必须指定到具体的第三方依赖目录才能进行扫描(就是必须指定到lib,这显然不符合我们的预期,二话不说,改写搭建demo


demo需要具体完成的功能:

(1) 首先针对应用程序(一般为压缩包)进行解压。(计划满足ziprarwar等格式,目前完成了对zip的支持后续支持更多的压缩格式)

(2) 压缩完毕之后,需要递归寻找jar包目录。

(3) 找到所有jar目录之后,集成JarAnalyzer,利用JarAnalyzer扫描jar目录jar文件的依赖关系生成xml文件

(4) 解析JarAnalyzer生成xml文件,获得所有jar及依赖关系


(5) 爬虫功能(借用小安的漏洞库,此步省略)

(6) 利用漏洞库的影响产品字段与自动扫描出来的jar名称+版本进行匹配(匹配规则可人工设定,demo暂时支持jar名称+版本匹配规则)

(7) 匹配上的jar展示出来。

(8) 邮件发送给相关责任人(通知形式可追加

 

5、 demo展示

1)登录界面

   域账号登录,如图:




2)自动扫描界面

登录之后进入自动扫描界面,此界面可以上传应用程序压缩包,我们上传一个测试的zip格式工程压缩包,如图




3)漏洞展示界面

点击解析之后,上传压缩包,demo进行解压、扫描、生成xml、解析xml漏洞匹配等步骤,完成之后展示漏洞信息,如图:



4)执行记录页面

执行记录页面,可以看到一些执行的记录,点击漏洞详情跳转漏洞展示界面




5)邮件通知

扫描完成之后,若提交的应用程序有安全的风险,则邮件通知当前登录用户如图:




本文是针对自动扫描依赖进行了研究,并搭建了demo,拉通整个扫描预警的流程,demo制作还比较粗糙,后续进行改进,望大家批评指正。