OWASP dependency-check is an open source solution to the OWASP Top 10 2021 entry: A06:2021 – Vulnerable and Outdated Components. Dependency-check can currently be used to scan software to identify the use of known vulnerable components. For a full list of supported languages/technologies please see the File Type Analyzer page). Note that some of the analyzers are experimental and may produce more false positive and false negative rates. To use the experimental analyzers they must be specifically enabled via the appropriate experimental configuration.
The problem with using known vulnerable components was covered in a paper by Jeff Williams and Arshan Dabirsiaghi titled, “The Unfortunate Reality of Insecure Libraries” (registration required). The gist of the paper is that we as a development community include third party libraries in our applications that contain well known published vulnerabilities (such as those at the National Vulnerability Database).
The top of the report contains a list of the identified vulnerable components. By clicking the ‘Showing Vulnerable Dependencies’ link the list will be expanded to include all of the dependencies scanned. The table lists:
• Dependency - the file name of the dependency scanned.
• CPE - any Common Platform Enumeration identifiers found.
• GAV - the Maven Group, Artifact, Version (GAV).
• Highest Severity - the highest severity of any associated CVEs.
• CVE Count - the number of associated CVEs.
• CPE Confidence - a ranking of how confident dependency-check is that the CPE was identified correctly.
• Evidence Count - the quantity of data extracted from the dependency that was used to identify the CPE.
点击jar包可以看到修复的建议。
• Dependency # 被扫描的第三依赖库机器版本
• Highest Severity # 所有关联的CVE的最高漏洞等级
• CVE Count # 关联的CVE个数
• Confidence # 正确识别CPE的程度
• Evidence Count # 识别CPE的数据个数
• Dependency-Check 是 OWASP(Open Web Application Security Project)的一个实用开源程序,用于识别项目依赖项并检查是否存在任何已知的,公开披露的漏洞。目前,已支持Java、.NET、Ruby、Node.js、Python等语言编写的程序,并为C/C++构建系统(autoconf和cmake)提供了有限的支持。而且该工具还是OWASP Top 10的解决方案的一部分。
• Dependency-Check 支持面广(支持多种语言)、可集成性强,作为一款开源工具,在多年来的发展中已经支持和许多主流的软件进行集成,比如:命令行、Ant、Maven、Gradle、Jenkins、Sonar等;具备使用方便,落地简单等优势。
• 依赖性检查可用于扫描应用程序(及其依赖库),执行检查时会将 Common Platform Enumeration (CPE)国家漏洞数据库及NPM Public Advisories库下载到本地,再通过核心引擎中的一系列分析器检查项目依赖性,收集有关依赖项的信息。
• 然后根据收集的依赖项信息与本地的CPE&NPM库数据进行对比,如果检查发现扫描的组件存在已知的易受攻击的漏洞则标识,最后生成报告进行展示。
检测过程
• 执行检查时会将 Common Platform Enumeration (CPE)国家漏洞数据库及NPM Public Advisories库下载到本地,
• 再通过核心引擎中的一系列分析器检查项目依赖性,收集有关依赖项的信息,
• 然后根据收集的依赖项信息与本地的CPE&NPM库数据进行对比,
• 如果检查发现扫描的组件存在已知的易受攻击的漏洞则标识,最后生成报告进行展示
• Dependency-Check依赖NVD漏洞数据库(美国国家通用漏洞数据库)进行依赖漏洞检查
• 全球信息安全领域著名的漏洞数据库包括中国国家信息安全漏洞库,美国国家信息安全漏洞库NVD,赛门铁克漏洞库等等
• NVD评级依赖CVSS(CommonVulnerability Scoring System),即“通用漏洞评分系统”,是一个“行业公开标准,其被设计用来评测漏洞的严重程度,并帮助确定所需反应的紧急度和重要度”;
• CVSS是安全内容自动化协议(SCAP)的一部分,通常CVSS同CVE一同由美国国家漏洞库(NVD)发布并保持数据的更新
• CVSS官网:https://www.first.org/
1、 下载依赖项检查命令行工具,将此压缩包放到Linux环境某个目录下,解压缩
https://github.com/jeremylong/DependencyCheck/releases/download/v8.3.1/dependency-check-8.3.1-release.zip
2、 在解压缩的文件的 /dependency-check/bin 目录下输入如下命令,进行analyze
./dependency-check.sh --project 项目名称 -s lib库路径 -o report保存的路径
可能遇到的问题:
最后的命令 :
./dependency-check.sh --proxyserver 3.242.253.13 --proxyport 80 --disableCentral --disableOpenSSL --disableOssIndex --project 项目名称 -s lib库路径 -o 保存report的路径
执行完命令后,等待分析漏洞:
完成之后可以在命令中填写的保存的report路径下去找 dependency-check-report.html ,DC tool 分析完成,可以通过sftp工具将文件copy到windows下查看。
Report:
其他有关命令想要了解,可以在dependency-check/bin输入命令 ./dependency-check.sh --advancedHelp查看,如下图:
二、 plugins方式
此处只介绍gradle plugin ,其他方式类似,请参考官网 https://jeremylong.github.io/DependencyCheck/
1、 项目中安装插件,在项目的根目录的build.gradle文件中添加plugin
plugins {
id "org.owasp.dependencycheck" version "6.0.3"
}
apply plugin: 'org.owasp.dependencycheck'
2、 执行分析命令,在项目的根目录中的Build/gradle 下下载插件并执行
./gradlew dependencyCheckAnalyze
执行完命令之后,右边gradle工具中也会出现此插件,直接点击插件也可以。
分析完成之后,在build/report 路径下形成report:dependency-check-report.html,可以通过sftp工具将文件copy到windows下查看。
可能遇到的问题:
dependencyCheck {
analyzers {
assemblyEnabled = false
centralEnabled = false
opensslEnabled = false
ossIndex {
enabled = false
}
}
}
三、 Ant Task方式
没有尝试,可以参考官网,https://jeremylong.github.io/DependencyCheck/dependency-check-ant/index.html