前言
当下的软件开发大量使用开源软件,以便快速开发出产品,迅速占领市场。开源软件确实给软件开发带来了便利,但是随之而来的安全问题也越发凸显,开源软件报告的漏洞数量每年都在增长,企业对开源组件的安全管控已刻不容缓。
Dependency-Check是非营利组织OWASP开源的的一款软件组成分析(SCA, Software Composition Analysis)工具,它通过扫描项目软件包结构、依赖配置文件提取依赖组件的厂商、名称、版本信息,然后通过与美国NVD开放漏洞库数据进行匹配,如果匹配成功则认为存在漏洞。目前工具已支持的扫描应用类型有Java&.NET、Python、PHP(comoser)、Ruby、Node.js、CocoaPods、Swift Package Manager。
值得一提的是SCA领域最著名的软件是黑鸭Black Duck Software,我试着通过官网申请试用,得到的答复是不提供个人用户的试用,连用户文档都不愿意提供。
下载
访问链接[OWASP Dependency-Check Project | OWASP](
https://owasp.org/www-project-dependency-check/),点击Common Line即可下载工具,另外,还提供其他使用方式,可以根据实际场景选择合适的方式,本文以命令行方式进行介绍。

下载解压后的目录如下

bin目录如下,windows系统下运行.bat脚本,linux系统运行同名的.sh脚本,建议将bin目录添加到系统环境变量,这样就可以在任意位置执行。

基本命令
执行扫描任务非常简单,下面是执行命令的示例,执行扫描任务前会首先从NVD数据库下载漏洞数据,如果之前已经执行过扫描则会增量进行同步。
dependency-check.sh --project DEMO --disableRetireJS --exclude */web/node_modules/** -s ./ -o /opt/data/report/dependency_check_report.html
命令参数说明: --project 表示项目名称; --disableRetireJS 表示忽略RetireJS,还支持其他类型,参加下面的链接详情; --exclude 表示排除扫描的目录,模式"*/web/node_modules/**"表根目录下级子目录中 包含web/node_modules路径以及以下所有层级路径都不扫描,*表示一个层级任意目录, **表示任意层级目录。支持多个排除项需要分别增加多个--exclude; -s 表示扫描的目录,./表示在当前目录下执行扫描; -o 表示输出报告的目录,默认输出html报告,也可以不指定具体的html报告名称而仅指定目录即可,自动创建报告默认名称为 dependency_check_report.html; -f 表述输出的格式,示例命令未使用该参数,如果要指定多个输出报告格式, 需要增加多个-f参数,如-f HTML -f JSON. 命令支持的参数详情请查看[dependency-check-cli – Command Line Arguments (http://jeremylong.github.io)]( https://jeremylong.github.io/DependencyCheck/dependency-check-cli/arguments.html);
报告
执行完毕后就会在指定目录生成报告,html格式报告示例如下,各项内容含义已做了标注。

MacBook 执行dependency-check的例子
1.从https://owasp.org/www-project-dependency-check/下载 dependency-check命令行工具,并解压缩到本地文件夹。

2.MAC添加环境变量
- 打开 ~/.bash_profile 文件并编辑保存
export JAVA_HOME="/Users/testuser/Documents/Tools/jdk-17.0.2.jdk/Contents/Home" export Maven_Home="/usr/local/apache-maven-3.8.4" // 添加dependency_check的在本地文件夹的路径 export dependency_check="/Users/testuser/Documents/Tools/dependency-check" // 添加dependency_check的bin路径加入到PATH export PATH=${dependency_check}/bin:${JAVA_HOME}/bin:${Maven_Home}/bin:$PATH
- 打开
~/.zshrc
// 添加下面这个代码,这样每次重启电脑或者命令行终端,会自动执行source ~/.bash_profile 保证path每次都会生效 source ~/.bash_profile
- 配置完以后,在终端可以直接通过dependency-check.sh命令执行了

- 执行命令check一下
dependency-check.sh --project DEMO --disableRetireJS -s ./ -o /Users/testuser/Documents/Temp/output/dependency_check_report.html

可以看到被check出一些问题
