简介
Dependency-Check 是 OWASP(Open Web Application Security Project)的⼀个实⽤开源程序,⽤于识别项⽬依赖项并检查是否存在任何已知的,公开披露的漏洞。
⽬前,已⽀持 Java、.NET、Ruby、Node.js、Python 等语⾔编写的程序,并为 C/C++构建系统 (autoconf 和 cmake)提供了有限的⽀持。⽽且该⼯具还是 OWASP Top 10 的解决⽅案的⼀部分。
实现原理
依赖性检查可⽤于扫描应⽤程序(及其依赖库),执⾏检查时会将 Common Platform Enumeration (CPE)国家漏洞数据库及 NPM Public Advisories 库下载到本地,再通过核⼼引擎中的⼀系列分析器检查项⽬依赖性,收集有关依赖项的信息, 然后根据收集的依赖项信息与本地的 CPE&NPM 库数据进⾏对⽐, 如果检查发现扫描的组件存在已知的易受攻击的漏洞则标识, 最后⽣成报 告进⾏展⽰
集成
与 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>4.0.2</version>
<configuration>
<autoUpdate>true</autoUpdate>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal> </goals>
</execution>
</executions>
</plugin>
⽤法⼆ 在 maven site 中创建聚合性的报告
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>4.0.2</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>4.0.2</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>4.0.2</version>
<executions>
<execution>
<goals>
<goal>update-only</goal>
</goals>
</execution>
</executions>
</plugin>
以 Jenkins 插件形式运⾏
1)安装 OWASP Dependency-Check 插件
2)全局⼯具配置下配置 dependency 插件路径及版本(可单独下载)
3)pipeline 流⽔线中执⾏ dependency-check 安全扫描
⽅法 1:
dependencyCheck additionalArguments: ‘’, odcInstallation: 'dependency-check’
//可增加参数具体参数参考 https://bloodzer0.github.io/ossa/other-security-branch/devsecops/sdc/
dependencyCheckPublisher pattern: ‘dependency-check-report.xml’
⽅法 2:
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-
check/bin/dependency-check.sh -s $PWD/ -f XML -o $PWD/dependency-check-report.xml’ //⽣成 xml 报告
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-
check/bin/dependency-check.sh -s $PWD/ -f HTML -o $PWD/dependency-check-report.html’ //⽣成 html 报告
3)pipeline 流⽔线中执⾏ dependency-check 安全扫描
⽅法 1:
dependencyCheck additionalArguments: ‘’, odcInstallation: 'dependency-check’
//可增加参数具体参数参考https://bloodzer0.github.io/ossa/other-security-branch/devsecops/sdc/
dependencyCheckPublisher pattern: ‘dependency-check-report.xml’
⽅法 2:
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-
check/bin/dependency-check.sh -s $PWD/ -f XML -o $PWD/dependency-check-report.xml’ //⽣成xml报告
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-
check/bin/dependency-check.sh -s $PWD/ -f HTML -o $PWD/dependency-check-report.html’ //⽣成html报告
结果查看:
以 Sonarqube 插件形式运⾏
与代码质量管理平台 SonarQube 7.x 以上的版本集成
以 Jenkins 插件形式运⾏
1)安装 OWASP Dependency-Check 插件
2)全局⼯具配置下配置 dependency 插件路径及版本(可单独下载)
3)pipeline 流⽔线中执⾏ dependency-check 安全扫描
⽅法 1:
dependencyCheck additionalArguments: ‘’, odcInstallation: 'dependency-check’
//可增加参数具体参数参考 https://bloodzer0.github.io/ossa/other-security-branch/devsecops/sdc/
dependencyCheckPublisher pattern: ‘dependency-check-report.xml’
⽅法 2:
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-
check/bin/dependency-check.sh -s $PWD/ -f XML -o $PWD/dependency-check-report.xml’ //⽣成xml报告
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-
check/bin/dependency-check.sh -s $PWD/ -f HTML -o $PWD/dependency-check-report.html’ //⽣成html报告
结果查看:
4、以 Sonarqube 插件形式运⾏
1)github 上下载插件 jar 包,地址:
https://github.com/dependency-check/dependency-check-sonar-plugin(注意插件版本与 soanr 版本的兼容关系)
2)上传到 %SONAR_HOME%/extensions/plugins ⽬录下
3)重启 sonar
4)验证查看
5)jenkins 流⽔线中执⾏ sonar 扫描和本次内容⽆关,不做赘述
6)结果查看
将插件(jar⽂件)复制到 $SONAR_INSTALL_DIR/extensions/plugins并重新启动 SonarQube。
但需要添加以下配置:
sonar.dependencyCheck.reportPath = ${WORKSPACE}/dependency-check-report.xml
## 以 Jenkins 为例报告 .xml 路径 sonar.dependencyCheck.htmlReportPath = ${WORKSPACE}/dependency-check-report.html
## 以 Jenkins .html 为例报告 .html 路径
问题严重性分数设定:
sonar.dependencyCheck.severity.blocker = 9.0
sonar.dependencyCheck.severity.critical = 7.0
sonar.dependencyCheck.severity.major = 4.0
sonar.dependencyCheck.severity.minor = 0.0
报告查看
DependencyCheck 离线扫描配置
重点参数解析
autoUpdate
dataDirectory
这是存放 CVE 漏洞数据的⽬录,如果 autoUpdate 为 true,也会在这个⽬录下更新
搭建本地 NVD Mirror 库实际企业中内⽹环境可能 CI 服务器不会开放对外⽹的访问权限,故需要搭建⼀个本地的 NVDMirror
具体搭建步骤参考:
https://jeremylong.github.io/DependencyCheck/data/mirrornvd.html
实际操作步骤如下:
主要需要变更两个东⻄,⼀个是 nvd 库,还有⼀个是 jsrepository.json
1、搭建 nvd 库:
官⽅提供了对应 jar 包来作为mirror的服务, 具体 github 地址:https://github.com/stevespringett/nist-data-mirror/
1)下载 release jar 包,如需定制请⾃⾏改写代码
2)服务器上执⾏ java -jar nist-data-mirror.jar,改命令会把 2002-最近⼀年的所有 *.json.gz 和 *.meta ⽂件下载下来
3)搭建本地 apache 服务
使⽤官⽅ docker 镜像直接启动即可,具体命令:
docker run -dit --name mirror -p 30006:80 --mount type=bind,source=/data/mirror-repo,target=/usr/local/apache2/htdocs sspringett/nvdmirror:latest
其中 source 为宿主机⽬录
搭建成功后访问:
4、定时任务更新 jsreponsitory.json5、搭建成功后执⾏ dependency check 命令⾏中添加参数应⽤ mirror 地址即可以 pipeline 为例:
dependencyCheck additionalArguments: '–cveUrlModified http://x.x.x.x:8080/nvdcve-1.1-2019.json.gz --cveUrlBase http://x.x.x.x:8080/nvdcve-1.1-2019.json.gz ', odcInstallation: ‘dependency-check’
其他注意事项
运⾏命令
检查单个 maven ⼯程安全漏洞
mvn dependency-check:check
会在 target ⽬录下⽣成⼀个 dependency-check-report.html
检查多个 maven⼦⼯程汇总⼀个报告
mvn dependency-check:aggregate
会在⽗⼯程的 target⽬录下⽣成⼀个 dependency-check-report.html
命令⾏⽅式运⾏
dependency-check.bat --cveUrlModified "file:///D:/ProgramFiles/dependency-check/data/nvdcache/nvdcve-1.1-modified.json.gz" --cveUrlBase "file:///D:/ProgramFiles/dependency-check/data/nvdcache/nvdcve-1.1-modified.json.gz" --disableRetireJS --disableNodeJS --project "demo-project" -s "G:/workspaces/projects/demo-project/target/unification-api/WEB- INF/lib" -o "G:/workspaces/projects/demo-project/target"
Jenkins DependencyCheck 插件扫描 Node.js 程序
执⾏DependencyCheck 之前, 先执⾏ npm install && npm run build在 dependencyCheck 扫描参数中添加配置 --disablePnpmAudit
dependencyCheck 完整的配置如下:
-project $projectName --scan $WORKSPACE --format HTML --format XML --format JUNIT --disableYarnAudit --disablePnpmAudit --disableMSBuild --out $WORKSPACE
SonarQube 插件配置为:
sonar.projectKey=$projectName
sonar.projectName=$projectName
sonar.projectVersion=$branch
sonar.language=js
sonar.sourceEncoding=UTF-8
sonar.sources=./src
sonar.dependencyCheck.htmlReportPath=${WORKSPACE}/dependency-check-report.html
完整参数参考附录
近期好文:注意!用 ChatGPT 写代码不小心这些“坑”,你的饭碗可能真保不住了
“DevOps 时代”公众号诚邀广大技术人员投稿
点击阅读原文,更多精彩