组件漏洞测试工具---Dependency-Check

2021年11月23日 阅读数:2
这篇文章主要向大家介绍组件漏洞测试工具---Dependency-Check,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

目录php

文章综述html

Dependency-Check简介java

工做原理node

经常使用命令python

报告解读git

使用场景github

 缺点web


文章综述

本文主要介绍Dependency-Check工具的工做原理和使用方法,并提供一个开源方案帮助企业建设SDL中的一环。数据库

 

Dependency-Check简介

使用 "存在已知漏洞的组件" 已经成为OWASP TOP 10的漏洞之一了。因此,愈来愈有必要对上线前的项目作好三方依赖库的检测,寻找中已知的漏洞,下降上线后的安全风险。Dependency-Check 就是这样的一款工具。他会分析软件构成,检测项目中依赖项的公开披露漏洞。Dependency-Check 经常使用于扫描java和.NET程序,另外还有些实验性的分析器,例如:python、ruby、php以及nodejs等,这些做为实验性研究是由于他们的高误报率。若是你公司主要使用c#,java开发程序,那这款工具做为项目上线前的漏洞扫描不乏是个好选择。c#

Dependency-Check 发行的版本主要有jenkins插件、命令行工具、maven插件等,详解介绍可查看https://github.com/jeremylong/DependencyCheck,如下是基于命令行工做模式的介绍。

 

工做原理

  1. Dependency-Check工做的方式是经过分析器对文件进行扫描搜集信息,搜集到的信息被叫作迹象。

  2. 这边共搜集3种迹象,分时是vendor(供应商),product(产品)和version(版本)。例如,jarAnalyzer将从jar文件包中的Mainfest、pom.xml和包名进行信息搜集,而后把各类搜集到的源放到一个或者多个迹象表里。

  3. 经过搜集到的迹象和CPE条目(NVD、CVE数据索引)进行匹配,分析器匹配到了就会给个标志发送到报告。

  4. Dependency-Check 目前不使用hash识别文件,由于第三方依赖从源码中的hash值构建一般不会匹配官方发布版本的hash。后续版本中可能会增长一些hash来匹配一些经常使用的第三方库,例如Spring, Struts等。

 

经常使用命令

详细参数可以使用./dependency-check.sh -h查看,如下列出一些最经常使用的参数:

  • ./dependency-check.sh -n --project "test" --scan "WEB-INF/lib/" -o output.html

  • · -n 不更新漏洞库,默认4小时自动拉取

  • · --project 项目名字

  • · --scan 扫描的路径或文件(能够扫目录,也能够直接扫压缩文件,zip,war,tgz等)

     

  • /dependency-check.sh -n --project "test" --scan "strusts2.war" --log logfile

  • · 扫描压缩文件

  • · --log 日志记录

     

  • ./dependency-check.sh --updateonly

  • · --updateonly 只更新数据库,不作扫描

 

报告解读

部分报告截图:

图片1.png

图片2.png

 

 

关于扫描的准确性,笔者搜集测试了java三方依赖库。获得的结论是准确率高、误报率低、覆盖率高,适合在实际业务中使用该工具进行上线前的漏洞扫描(java三方依赖库)。

报告中一些重要字段的含义:

· Dependency - 被扫描的第三依赖库名字

· CPE - 全部被识别出来的CPE.

· GAV - Maven 组, Artifact, 版本 (GAV).

· Highest Severity - 全部关联的cve的最高漏洞等级

· CVE Count - 关联的cve个数

· CPE Confidence - dependency-check正确识别cpe的程度

· Evidence Count - 识别CPE的数据个数

 

使用场景

在企业中实际应用的场景:

一、项目不少,迭代很块:能够考虑结合代码管理系统,每次新发布前,自动提交进行扫描

二、项目迭代不快,或者只想监控重点项目:可以让业务提单,安全人员进行扫描后提供结果和修复建议给到业务方。

(注意点:报告是英文报告,不过很直观,能够根据上面的介绍写个说明文档供业务参考;报告没有修复参考,通常的修复方案是推荐有漏洞的组件更新到最新版。)

根据实际业务场景的需求,笔者把这个Dependency-Check二进制版本封装成web接口,可供本身和业务方调用。项目地址:https://github.com/he1m4n6a/dcweb。项目中还有不少地方能够完善,后续根据需求会补充改造。

例如:

一、添加接口鉴权

二、解析报告并输出中文漏洞报告到邮件


 缺点

      报告的可读性仍是有点差的,这个项目貌似开源的,若是能将呈现方式修改一下就行了,特别是将CVE也放到一览里面就更好了。。。