DependencyCheck介绍
Dependency-Check 是 OWASP(Open Web Application Security Project)的一个实用开源程序,是一款软件成分(SCA)分析工具,用于识别项目依赖项并检查是否存在任何公开披露的漏洞。目前,已支持Java、.NET、Ruby、Node.js、Python等语言编写的程序,并为C/C++构建系统(autoconf和cmake)提供了有限的支持。而且该工具还是OWASP Top 10的解决方案的一部分。
Dependency-Check 支持面广(支持多种语言)、可集成性强,作为一款开源工具,在多年来的发展中已经支持和许多主流的软件进行集成,比如:命令行、Ant、Maven、Gradle、Jenkins、Sonar等;具备使用方便,落地简单等优势。它会生成报告,显示已检测到的漏洞以及建议的修复措施。这些报告可以帮助开发人员识别和解决与应用程序或依赖项相关的安全问题,从而提高应用程序的安全性。
DependencyCheck 实现原理
依赖性检查可用于扫描应用程序(及其依赖库),执行检查时会将 Common Platform Enumeration (CPE)国家漏洞数据库及NPM Public Advisories库下载到本地,再通过核心引擎中的一系列分析器检查项目依赖性,收集有关依赖项的信息。
然后根据收集的依赖项信息与本地的CPE&NPM库数据进行对比,如果检查发现扫描的组件存在已知的易受攻击的漏洞则标识,最后生成报告进行展示。
官方的命令行参数介绍
DependencyCheck部署方式(三种方式)
1、DependencyCheck与maven集成(开发者本地maven创建)
Dependency-check-maven非常易于使用,可以作为独立插件使用,也可以作为maven site的一部分使用。
该插件需要使用Maven 3.1或更高版本,第一次执行时,可能需要20分钟左右或更长时间,因为它会从NIST托管的国家漏洞数据库下载漏洞数据到本地备份库。
第一次批量下载后,只要插件每七天至少执行一次,本地漏洞库就会自动更新,更新只需几秒钟。
集成很简单,只需要在项目的pom文件中增加maven配置即可。
用法一(推荐)
在target目录中创建dependency-check-report.html
<plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>9.0.9</version> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin> |
用法二
在maven site中创建聚合性的报告
<plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>9.0.9</version> <reportSets> <reportSet> <reports> <report>aggregate</report> </reports> </reportSet> </reportSets> </plugin> |
用法三
设置当风险指数(CVSS)大于等于8时(CVSS分数为0-10)则项目编译失败
<plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>9.0.9</version> <configuration> <failBuildOnCVSS>8</failBuildOnCVSS> </configuration> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin> |
用法四
仅更新NVD(漏洞库)数据,而不执行检查
<plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>9.0.9</version> <executions> <execution> <goals> <goal>update-only</goal> </goals> </execution> </executions> </plugin> |
本地构建成功以及生成的dependency-check-report.html报告(使用方法一)
2、DependencyCheck与 SonarQube 集成(流水线方式)
Jenkins中需要安装插件:Analysis Model API Plugin、OWASP Dependency-Check Plugin和SonarQube Scanner for Jenkins
该插件具有执行依赖关系分析和构建后查看检查结果的功能。
相关配置如下:
流水线脚本内容
pipeline { stages { |
构建成功后趋势图将显示按严重性分组的结果总数。
点击查看详细结果,展示如下(结果已集成到SonarQube,忽略此查看方式):
SonarQube扫描结果展示以及集成展示Dependency-Check扫描结果,只需要在SonarQube上查看结果即可。
3、DependencyCheck与 sonarqube 集成(maven构建)
【全局工具配置】Jenkins可以通过全局工具配置来安装一个或多个Dependency-Check版本。可以自动安装Dependency-Check,这将从Github下载并提取官方的命令行界面(CLI),或者可以手动安装官方版本,并在配置中引用安装路径。Dependency-Check是一个用于识别应用程序中存在的已知漏洞和依赖项的开源工具。
【Builder配置】Builder是指使用预定义的Dependency-Check CLI安装之一执行分析的组件。在Jenkins中,特定于配置的部分很少,工作配置中的重要方面是“Arguments”字段,该字段直接发送到定义的CLI安装程序。Builder用于在Jenkins工作流中集成Dependency-Check分析。Builder的配置将传递给Dependency-Check CLI进行分析,并将分析结果传递回Jenkins用于显示和后续处理。
【Publisher配置】Publisher是一个独立于工具配置或Builder的组件,负责读取dependency-check-report.xml并生成指标、趋势、发现,并根据可配置的阈值选择性地将构建设为失败或警告状态。在Jenkins工作流程中,Publisher用于生成Dependency-Check的度量和报告,并可根据预定义的阈值将构建标记为失败或警告状态。通过读取dependency-check-report.xml文件,Publisher可以对构建进行分析并提供有关依赖项和已知漏洞的详细信息。
相关配置如下:
当任务配置了Publisher时,趋势图将显示按严重性分组的结果总数。
SonarQube扫描结果展示以及集成展示Dependency-Check扫描结果,只需要在SonarQube上查看结果即可(与流水线一致)。
参考链接:
dependency-check-maven – Usage