学海无涯,心存高远。
需求分析
- 每一个项目都会用到很多的第三方依赖,我们需要知晓和保证第三方依赖的安全行。
- 我们需要定期的更新和检查第三方依赖。
工具介绍
我使用的是开源的 Dependency-Check,Dependency-Check 是一种软件组合分析 (SCA) 工具,它试图检测项目依赖项中包含的公开披露的漏洞。它通过确定给定依赖项是否存在通用平台枚举 (CPE) 标识符来做到这一点。如果找到,它将生成链接到相关 CVE 条目的报告。
目前 Dependency-check 有一个命令行界面、一个 Maven 插件、一个 Ant 任务和一个 Jenkins 插件。核心引擎包含一系列分析器,用于检查项目依赖关系,收集有关依赖关系的信息(在工具中称为证据)。
如何使用
通过命令行运行
从开源仓库中获取 https://github.com/jeremylong/DependencyCheck
以 MAC 为例,我下载的 7.0 版本的 dependency-check-7.0.0-release.zip。解压之后运行以下命令:
1 |
|
第一次运行可能需要很长时间,它会从 NIST 托管的国家漏洞数据库 (NVD) 下载和处理数据。执行完成后如下所示:
1 |
|
从下面的报告里可以看到,dependency-check 一共扫描了 138 项依赖。其中 22 个依赖易受攻击,60 个依赖发现了漏洞。

在 Summary 的总结列表中清晰的展示了:依赖、漏洞的 ID、所属包、最高严重性、CVE 数量、信赖程度、证据数量
以 aws-java-sdk-core-1.12.215.jar 为例,在 Dependencies 里面可以看到详细的说明。从说明中可以看到,这个问题在 1.12.261 版本中得到了解决,所以最好的解决办法就是升级版本。

使用 Maven 存储库 搜索 aws-java-sdk-core 最新版本。不搜不知道,一搜吓一跳,短短几个月里,aws-java-sdk-core 包竟然进行了 60+ 次更新。
Lunix 官方示例:
1 |
|
Windows 官方示例:
1 |
|
Maven 插件
需要定期扫描推荐使用这种方式,Dependency-check-maven 使用起来非常简单,可以作为独立插件使用,也可以作为站点插件的一部分使用。该插件需要 Maven 3.1 或更高版本。
重要的是要了解,第一次执行此任务时,它可能需要 20 分钟或更长时间,因为它会从 NIST 托管的国家漏洞数据库 (NVD) 下载和处理数据:https ://nvd.nist.gov
首次批量下载后,只要每隔 7 天至少执行一次插件,更新只需几秒钟。
默认情况下,依赖检查插件绑定到verifyorsite阶段,具体取决于它是否配置为构建或报告插件。下面的示例可以使用mvn verify或在报告示例中执行mvn site。
示例一:在目标目录中创建dependency-check-report.html
1 |
|
示例二:创建 dependency-check-report.html 并在 CVSS 大于或等于 8 时使构建失败
1 |
|