当前位置: 首页 > news >正文

Dependency Check:一款针对应用程序依赖组件的安全检测工具

关于Dependency Check

Dependency-Check 是一款软件组合分析 (SCA) 工具,可尝试检测项目依赖项中包含的公开披露的漏洞。它通过确定给定依赖项是否存在通用平台枚举 (CPE) 标识符来实现此目的。如果找到,它将生成一份链接到相关 CVE 条目的报告。

Dependency-check 有一个命令行界面、一个 Maven 插件、一个 Ant 任务和一个 Jenkins 插件。核心引擎包含一系列分析器,用于检查项目依赖项、收集有关依赖项的信息(在工具中称为证据)。然后使用证据来识别给定依赖项的通用平台枚举 (CPE) 。如果识别出 CPE,则会在报告中列出相关的通用漏洞和暴露 (CVE)条目列表。其他第三方服务和数据源(如 NPM Audit API、OSS Index、RetireJS 和 Bundler Audit)用于特定技术。

Dependency-check 使用 NIST 托管的 NVD 数据源自动更新自身。'''重要提示:''' 初始下载数据可能需要十分钟或更长时间。如果您每七天至少运行一次该工具,则只需下载一个小型 JSON 文件即可使数据的本地副本保持最新。

功能介绍

Dependency-check 的工作方式是收集有关其扫描的文件的信息(使用分析器)。收集的信息称为证据;收集的证据有三种类型:供应商、产品和版本。例如,JarAnalyzer 将从 Manifest、pom.xml 和扫描的 JAR 文件中的包名称中收集信息,并且它有启发式方法将来自各种来源的信息放入一个或多个证据桶中。

在 NVD CVE 数据中每个 CVE 条目都有一个易受攻击的软件列表:

<entry id="CVE-2012-5055">...<vuln:vulnerable-software-list><vuln:product>cpe:/a:vmware:springsource_spring_security:3.1.2</vuln:product><vuln:product>cpe:/a:vmware:springsource_spring_security:2.0.4</vuln:product><vuln:product>cpe:/a:vmware:springsource_spring_security:3.0.1</vuln:product></vuln:vulnerable-software-list>...</entry>

接下来,CPE 数据将被收集并存储在 Lucene 索引中。Dependency-check 然后使用收集到的证据并尝试匹配 Lucene CPE 索引中的条目。如果找到,CPEAnalyzer 将向依赖项添加标识符,然后添加到报告中。一旦识别出 CPE,相关的 CVE 条目就会添加到报告中。

工具配置

导入用于签署所有依赖检查版本的 GPG 密钥:

gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 259A55407DD6C00299E6607EFFDE55BE73A2D1ED

从GitHub Release下载依赖检查命令行工具和相关的 GPG 签名文件,验证下载的加密完整性:

gpg --verify dependency-check-10.0.4-release.zip.asc

将 zip 文件解压到计算机上的某个位置,并将“bin”目录放入路径环境变量中。

工具安装和使用

自制

$ brew install dependency-check

窗户

dependency-check.bat --project "My App Name" --scan "c:\java\application\lib"

*尼克斯

dependency-check.sh --project "My App Name" --scan "/java/application/lib"

Docker使用

Linux的

#!/bin/shDC_VERSION="latest"DC_DIRECTORY=$HOME/OWASP-Dependency-CheckDC_PROJECT="dependency-check scan: $(pwd)"DATA_DIRECTORY="$DC_DIRECTORY/data"CACHE_DIRECTORY="$DC_DIRECTORY/data/cache"if [ ! -d "$DATA_DIRECTORY" ]; thenecho "Initially creating persistent directory: $DATA_DIRECTORY"mkdir -p "$DATA_DIRECTORY"fiif [ ! -d "$CACHE_DIRECTORY" ]; thenecho "Initially creating persistent directory: $CACHE_DIRECTORY"mkdir -p "$CACHE_DIRECTORY"fi# Make sure we are using the latest versiondocker pull owasp/dependency-check:$DC_VERSIONdocker run --rm \-e user=$USER \-u $(id -u ${USER}):$(id -g ${USER}) \--volume $(pwd):/src:z \--volume "$DATA_DIRECTORY":/usr/share/dependency-check/data:z \--volume $(pwd)/odc-reports:/report:z \owasp/dependency-check:$DC_VERSION \--scan /src \--format "ALL" \--project "$DC_PROJECT" \--out /report# Use suppression like this: (where /src == $pwd)# --suppression "/src/security/dependency-check-suppression.xml"

窗户

@echo offset DC_VERSION="latest"set DC_DIRECTORY=%USERPROFILE%\OWASP-Dependency-CheckSET DC_PROJECT="dependency-check scan: %CD%"set DATA_DIRECTORY="%DC_DIRECTORY%\data"set CACHE_DIRECTORY="%DC_DIRECTORY%\data\cache"IF NOT EXIST %DATA_DIRECTORY% (echo Initially creating persistent directory: %DATA_DIRECTORY%mkdir %DATA_DIRECTORY%)IF NOT EXIST %CACHE_DIRECTORY% (echo Initially creating persistent directory: %CACHE_DIRECTORY%mkdir %CACHE_DIRECTORY%)rem Make sure we are using the latest versiondocker pull owasp/dependency-check:%DC_VERSION%docker run --rm ^--volume %CD%:/src ^--volume %DATA_DIRECTORY%:/usr/share/dependency-check/data ^--volume %CD%/odc-reports:/report ^owasp/dependency-check:%DC_VERSION% ^--scan /src ^--format "ALL" ^--project "%DC_PROJECT%" ^--out /reportrem Use suppression like this: (where /src == %CD%)rem --suppression "/src/security/dependency-check-suppression.xml"

许可证协议

本项目的开发与发布遵循Apache-2.0开源许可协议。

项目地址

Dependency Check:【传送门】

参考资料

GitHub - jeremylong/DependencyCheck: OWASP dependency-check is a software composition analysis utility that detects publicly disclosed vulnerabilities in application dependencies.

OWASP Dependency-Check | OWASP Foundation

http://www.lryc.cn/news/446422.html

相关文章:

  • Python 从入门到实战28(文件的读操作)
  • [leetcode刷题]面试经典150题之7同构字符串(简单)
  • 【Keil5教程及技巧】耗时一周精心整理万字全网最全Keil5(MDK-ARM)功能详细介绍【建议收藏-细细品尝】
  • 【rust】 基于rust编写wasm,实现markdown转换为html文本
  • Java中的反向代理与负载均衡:Nginx与Java服务的集成
  • 高级java每日一道面试题-2024年9月26日-运维篇[分布式篇]-如何保证每个服务器的时间都是同步的?
  • 探索MemGPT:AI界的新宠儿
  • 处理RabbitMQ连接和认证问题
  • FFmpeg中结构释放小函数
  • C语言中的一些小知识(三)
  • 编译win2k3中tools目录下i386mk.inc文件的作用
  • IPSec隧道协议学习(一)
  • 计网作业3
  • 什么是注入攻击???
  • 牛客小白月赛101(A~E)
  • MFC设置特定控件字体大小和背景颜色
  • 专题八_链表_算法专题详细总结
  • Vue3使用vue-quill富文本编辑器实现图片大小调整
  • 感知笔记1:ROS 视觉- 跟随红球
  • JAVA多线程机制
  • Element-plus安装及其基础组件使用
  • [产品管理-38]:创意、市场机会、商业可行性的区别
  • 开源标注工具
  • 数据结构讲解二叉树 【一】
  • MATLAB基础应用精讲-【数模应用】OR值
  • [vulnhub] w1r3s.v1.0
  • c#中的功能优势
  • Windows系统设置定时任务,周期性执行.bat文件
  • xQTLs 共定位分析(XQTLbiolinks包)
  • 网络工程(学习记录)