JAVA

OWASP Dependency-Check软件依赖分析工具

前言


当下的软件开发大量使用开源软件,以便快速开发出产品,迅速占领市场。开源软件确实给软件开发带来了便利,但是随之而来的安全问题也越发凸显,开源软件报告的漏洞数量每年都在增长,企业对开源组件的安全管控已刻不容缓。

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出一些问题