网站首页 > 技术文章 正文
在现代软件开发中,使用开源库和第三方依赖项已成为常态。然而,这些依赖项可能包含已知的安全漏洞,给应用程序带来潜在的风险。为了解决这个问题,OWASP Dependency-Check 应运而生。本文将介绍 OWASP Dependency-Check 的功能、安装方法、使用步骤以及最佳实践。
1.什么是 OWASP Dependency-Check?
OWASP Dependency-Check 是一个开源工具,旨在帮助开发人员识别项目中使用的库和组件的已知漏洞。它通过扫描项目的依赖项,生成详细的报告,帮助团队及时发现并修复安全问题。该工具支持多种编程语言和构建工具,包括 Java、.NET、Node.js 等。
2.主要功能
- 漏洞检测:通过与国家漏洞数据库(NVD)和其他漏洞数据库对比,识别项目中使用的库的已知漏洞。
- 多种输出格式:支持生成多种格式的报告,包括 HTML、XML 和 JSON,方便团队进行审查和记录。
- 集成支持:可以与常见的构建工具(如 Maven、Gradle、Ant)和 CI/CD 工具(如 Jenkins)集成,实现自动化扫描。
- 定期更新:定期更新漏洞数据库,确保检测结果的准确性和时效性。
3.检测流程
- 数据源准备: 在执行检查前,从 National Vulnerability Database (NVD) 和 OWASP Dependency-Check Data下载最新的漏洞数据,并将其存储在本地数据库中,以供后续的检查使用。
- 依赖项分析: 分析应用程序的依赖性结构。这包括扫描项目的源代码、配置文件和构建文件,以识别所使用的开源库、框架和组件。
- 漏洞检测: 通过一系列分析器遍历项目的依赖项列表,并与本地数据库中的漏洞信息进行比对。
- 数据对比与标识: 当分析器在项目依赖项中发现与本地数据库匹配的已知漏洞时,标识相关的组件,并记录漏洞的详细信息,如 CVE 编号、受影响版本范围等。
- 报告生成: 完成漏洞检测后,生成详细的漏洞报告。报告列出了受影响组件的清单,提供漏洞的描述、严重程度、CVE 编号以及可能的修复建议。
4.如何j结合maven使用 Dependency-Check?
在pom.xml配置文件中引入插件
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>10.0.3</version>
<executions>
<execution>
<goals>
<goal>aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
在IDEA主界面的右边侧边栏上找到Maven模块,执行 Plugins 目录下 Depedancy-check 中的 aggregate 。
介绍一下各个选项的作用:
- aggregate 分析当前项目及其子项目并生成报告。
- check 分析当前项目并生成报告。
- update-only 更新本地漏洞数据库。
- purge 清除本地漏洞数据副本。
第一次执行会下载漏洞库,数据量大概在20多万,视网络情况等待时间可能在10-20分钟左右。
One or more dependencies were identified with known vulnerabilities in Java-demo:
bcpkix-jdk15on-1.70.jar (pkg:maven/org.bouncycastle/bcpkix-jdk15on@1.70, cpe:2.3:a:bouncycastle:bouncy_castle_for_java:1.70:*:*:*:*:*:*:*) : CVE-2023-33202
bcprov-jdk15on-1.70.jar (pkg:maven/org.bouncycastle/bcprov-jdk15on@1.70, cpe:2.3:a:bouncycastle:bouncy-castle-crypto-package:1.70:*:*:*:*:*:*:*, cpe:2.3:a:bouncycastle:bouncy_castle_crypto_package:1.70:*:*:*:*:*:*:*, cpe:2.3:a:bouncycastle:bouncy_castle_for_java:1.70:*:*:*:*:*:*:*, cpe:2.3:a:bouncycastle:legion-of-the-bouncy-castle-java-crytography-api:1.70:*:*:*:*:*:*:*, cpe:2.3:a:bouncycastle:the_bouncy_castle_crypto_package_for_java:1.70:*:*:*:*:*:*:*) : CVE-2024-34447, CVE-2024-29857, CVE-2024-30171, CVE-2023-33202, CVE-2023-33201
bcutil-jdk15on-1.70.jar (pkg:maven/org.bouncycastle/bcutil-jdk15on@1.70, cpe:2.3:a:bouncycastle:bouncy_castle_for_java:1.70:*:*:*:*:*:*:*) : CVE-2023-33202
commons-compiler-3.0.8.jar (pkg:maven/org.codehaus.janino/commons-compiler@3.0.8, cpe:2.3:a:janino_project:janino:3.0.8:*:*:*:*:*:*:*) : CVE-2023-33546
commons-compress-1.21.jar (pkg:maven/org.apache.commons/commons-compress@1.21, cpe:2.3:a:apache:commons_compress:1.21:*:*:*:*:*:*:*) : CVE-2024-25710, CVE-2024-26308
commons-io-2.11.0.jar (pkg:maven/commons-io/commons-io@2.11.0, cpe:2.3:a:apache:commons_io:2.11.0:*:*:*:*:*:*:*) : CVE-2024-47554
janino-3.0.8.jar (pkg:maven/org.codehaus.janino/janino@3.0.8, cpe:2.3:a:janino_project:janino:3.0.8:*:*:*:*:*:*:*) : CVE-2023-33546
json-path-2.8.0.jar (pkg:maven/com.jayway.jsonpath/json-path@2.8.0, cpe:2.3:a:json-path:jayway_jsonpath:2.8.0:*:*:*:*:*:*:*) : CVE-2023-51074
logback-core-1.2.11.jar (pkg:maven/ch.qos.logback/logback-core@1.2.11, cpe:2.3:a:qos:logback:1.2.11:*:*:*:*:*:*:*) : CVE-2023-6378
See the dependency-check report for more details.
执行完成后,扫描报告会生成到target路径下的dependency-check-report.html
以上只是一些关键代码,所有代码请参见下面代码仓库
代码仓库
- https://github.com/Harries/Java-demo
5.结论
OWASP Dependency-Check 是一个强大的工具,可以帮助开发团队识别和管理项目中的安全风险。通过定期扫描和及时修复漏洞,团队可以显著提高软件的安全性,降低潜在的安全威胁。无论是个人开发者还是大型企业,使用 OWASP Dependency-Check 都是确保软件安全的重要一步。
- 上一篇: maven 私服
- 下一篇: 推荐一款代码依赖包安全漏洞检查插件
猜你喜欢
- 2025-01-09 精通Spring Boot 3 : 13. Spring Cloud 与 Spring Boot (4)
- 2025-01-09 Spring Boot集成Redis Search快速入门Demo
- 2025-01-09 Spring Boot 3.x嵌入MongoDB 进行测试
- 2025-01-09 java安全之fastjson链分析
- 2025-01-09 MyBatis初级实战之五:一对一关联查询
- 2025-01-09 精通Spring Boot 3 : 8. Spring Boot 测试 (2)
- 2025-01-09 DevSecOps 管道: 使用Jenkins实现安全的多语言应用程序
- 2025-01-09 Liquibase+Spring+Maven: 管理数据库轻松搞定
- 2025-01-09 比较一下JSON与XML两种数据格式?
- 2025-01-09 Java批量导入时,如何去除重复数据并返回结果?
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)