CVE漏洞扫描插件
原理说明
有一帮用爱发电的人,对已知的组件的版本存在的漏洞做了一个共享数据库,这个插件可以对依赖的版本进行扫描,看你的组件有没有不合规的版本。
你如果高兴,配置mvn编译脚本先进行依赖检测,对于级别高于7的漏洞未修复不允许编译
maven最新版本发布页:https://central.sonatype.com/artifact/org.owasp/dependency-check-maven/overview
maven 插件方式帮助:https://dependency-check.github.io/DependencyCheck/dependency-check-maven/
maven 版本要求:3.8和以上
JDK 8 支持的最高版本为10.0.3,但是无法支持2023以后的漏洞数据库,直接报错。那就只能使用CL方式了
配置mvn项目
<build>
<plugins>
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>12.1.3</version>
<configuration>
<!-- 使用美国国家中心的数据库需要的秘钥,如果配置了镜像可以不需要-->
<nvdApiKey>your_key</nvdApiKey>
<autoUpdate>true</autoUpdate>
<!-- nvdcve 漏洞库镜像地址 -->
<nvdDatafeedUrl>https://nvdcve.iovhm.com</nvdDatafeedUrl>
<!-- retire.js 漏洞库镜像地址 -->
<retireJsUrl>http://nvdcve.iovhm.com/jsrepository.json</retireJsUrl>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
<goal>update-only</goal>
<goal>aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
执行依赖CVE检测
# 升级漏洞库
mvn dependency-check:update-only
# 对 整个多模块项目(含所有子模块) 执行聚合依赖扫描。递归扫描所有子模块的依赖,合并为一个统一报告。多模块项目,想一次性检查所有模块的依赖。
mvn dependency-check:aggregate
# 对 当前 Maven 模块 执行依赖漏洞扫描, 只扫描当前模块的依赖(不会递归子模块),单模块项目,或你只想检查某个模块
mvn dependency-check:check
也可以在可视化区域执行
获取扫描报告
打开扫描报告
我这个项目啥也没有,就检查出这么多问题
获取最新的漏洞库
在没有修改配置的情况下,插件使用美国国家数据库,很慢、半个小时都搞不完,这个时候你需要一个漏洞数据库镜像。
如果你不具备自己搭建漏洞镜像数据库的条件,可以到美国国家数据库申请一个key,会稍微快点,但是还是很慢。
美国国家数据库API_KEY申请(这个KEY在搭建镜像数据库的时候也会用到,记得保存好):https://nvd.nist.gov/developers/request-an-api-key
帮助文档:https://dependency-check.github.io/DependencyCheck/data/mirrornvd.html
帮助文档:https://github.com/jeremylong/open-vulnerability-cli
version: "3"
services:
open-vulnerability-cli:
image: harbor.iovhm.com/hub/jeremylong/open-vulnerability-data-mirror:v9.0.0
container_name: open-vulnerability-cli
restart: always
privileged: true
ports:
- 8089:80
environment:
- TZ=Asia/Shanghai
- NVD_API_KEY=<your_key> # 使用美国国家中心的数据库需要的秘钥
volumes:
- ./cache:/usr/local/apache2/htdocs
# 进入到容器
# docker exec -it open-vulnerability-cli /bin/bash
# 对漏洞数据集进行镜像下载,建议每七天定期执行
# /mirror.sh
# 下载 jsrepository.json ,因为我懒得再去搭建一个服务,我直接在镜像的挂在目录./cache执行了
# wget https://raw.githubusercontent.com/Retirejs/retire.js/master/repository/jsrepository.json
进行相关配置
<configuration>
<!-- 使用美国国家中心的数据库需要的秘钥,如果配置了镜像可以不需要-->
<nvdApiKey>your_key</nvdApiKey>
<autoUpdate>true</autoUpdate>
<!-- nvdcve 漏洞库镜像地址 -->
<nvdDatafeedUrl>https://nvdcve.iovhm.com</nvdDatafeedUrl>
<!-- retire.js 漏洞库镜像地址 -->
<retireJsUrl>http://nvdcve.iovhm.com/jsrepository.json</retireJsUrl>
</configuration>
使用CLI方式
CLI帮助:https://dependency-check.github.io/DependencyCheck/dependency-check-cli/index.html
CLI参数说明:https://dependency-check.github.io/DependencyCheck/dependency-check-cli/arguments.html
扫描之前需要先编译打包
每次都需要进入到bin目录执行太麻烦,可以将dependency-check加入到环境变量的path
# 下载cli版本
https://github.com/dependency-check/DependencyCheck/releases/
# 更新漏洞库
dependency-check --updateonly --nvdDatafeed https://nvdcve.iovhm.com --retireJsUrl http://nvdcve.iovhm.com/jsrepository.json
# 扫描
dependency-check --noupdate --failOnCVSS 7 --scan "D:\vpclub\park-baiyun\baiyun-back\**\*.jar"
# 如果加入过环境变量,可以进入到项目文件夹执行
# --noupdate 不更新数据库
# --failOnCVSS 7 显示分数等于和高于的内容
dependency-check --noupdate --failOnCVSS 7 --scan ./**/*.jar
不支持JAVA 8
如果你的项目是java 8 或者当前默认环境设置为了java 8, 执行dependency-check提示版本不对 ,需要修改dependency-check.bat 里面使用的java版本