Dependency-check

article/2025/8/26 18:01:55

文章目录

    • 前言
    • 工具简介
    • 工具原理
      • 原理
      • 检测过程
      • NVD
      • CVSS
    • 工具安装
      • 工具地址
      • 环境依赖
      • 工具安装
        • Jenkins Plugin
        • Command Line
          • On *nix
          • On Windows
          • On Mac (rec)
        • Maven Plugin
        • Ant Task
    • 使用示例
      • 命令行方式(Mac)
      • 插件方式
    • 报告解读
      • CSV格式报告
      • HTML格式报告
    • 工具对比
    • 参考

前言

公司客户使用的是该工具扫描,与我们内部使用的工具snyk的测试结果无法对齐,为了便于和客户扫描对齐也采用该工具扫描本公司的产品。本文主要记录一下工具原理简介、使用方式、报告解读及与其他工具对比等内容。本文内容来源于网络也服务于网络,起主要目的是把自己使用的一些心得体会记录一下便于自己日后使用,也能够为他人提供一点有效参考。

工具简介

  • Dependency-Check 是OWASP(Open WebApplication Security Project) g的一个实用开源程序,用于识别项目依赖项并检查是否存在任何已知的,公开披露的漏洞;
  • Dependency-Check 常用于扫描java和.NET程序,相对比较准确;
  • Dependency-Check还可用户python、ruby、php以及nodejs等程序的扫描,这些作为实验性研究因为有较高的高误报率。

工具原理

原理

  • Dependency-Check 依赖性检查可用于扫描应用程序(及其依赖库)

  • Dependency-Check工作的方式是通过分析器对文件进行扫描搜集信息,搜集到的信息被叫做迹象。

  • 共搜集3种迹象,分时是vendor(供应商),product(产品)和version(版本)。例如,jarAnalyzer将从jar文件包中的Mainfest、pom.xml和包名进行信息搜集,然后把各种搜集到的源放到一个或者多个迹象表里。

  • 通过搜集到的迹象和CPE条目(NVD、CVE数据索引)进行匹配,分析器匹配到了就会给个标志发送到报告。

  • Dependency-Check 目前不使用hash识别文件,因为第三方依赖从源码中的hash值构建通常不会匹配官方发布版本的hash。后续版本中可能会增加一些hash来匹配一些常用的第三方库,例如Spring, Struts等。

检测过程

  1. 执行检查时会将 Common Platform Enumeration (CPE)国家漏洞数据库及NPM Public Advisories库下载到本地,
  2. 再通过核心引擎中的一系列分析器检查项目依赖性,收集有关依赖项的信息,
  3. 然后根据收集的依赖项信息与本地的CPE&NPM库数据进行对比,
  4. 如果检查发现扫描的组件存在已知的易受攻击的漏洞则标识,最后生成报告进行展示

NVD

  • Dependency-Check依赖NVD漏洞数据库(美国国家通用漏洞数据库)进行依赖漏洞检查
  • 全球信息安全领域著名的漏洞数据库包括中国国家信息安全漏洞库,美国国家信息安全漏洞库NVD,赛门铁克漏洞库等等
  • NVD的更新频率是出现问题实时更新
  • NVD官网及其实时漏洞看板

CVSS

  • NVD评级依赖CVSS(CommonVulnerability Scoring System),即“通用漏洞评分系统”,是一个“行业公开标准,其被设计用来评测漏洞的严重程度,并帮助确定所需反应的紧急度和重要度”;
  • CVSS是安全内容自动化协议(SCAP)的一部分,通常CVSS同CVE一同由美国国家漏洞库(NVD)发布并保持数据的更新
  • CVSS官网:https://www.first.org/
  • 目前主要参考cvss v3.0,具体标准如下所示:
SeverityBase Score Range
Critical9.0~10.0
High7.0~8.9
Medium4.0~6.9
Low0.1~3.9
None0.0

工具安装

工具地址

  • https://github.com/jeremylong/DependencyCheck

环境依赖

  • 安装依赖
    - Java: java -version 1.8
    - Maven: mvn -version 3.5.0 and higher
  • 测试依赖
    - dotnet core version 6.0
    - Go: go version 1.12 and higher
    - Ruby bundler-audit
    - Yarn
    - pnpm

工具安装

Jenkins Plugin

  • For instructions on the use of the Jenkins plugin please see the OWASP Dependency-Check Plugin page.

Command Line

  • More detailed instructions can be found on the dependency-check github pages. The latest CLI can be downloaded from github in the releases section.
On *nix
$ ./bin/dependency-check.sh -h
$ ./bin/dependency-check.sh --out . --scan [path to jar files to be scanned]
On Windows
> .\bin\dependency-check.bat -h
> .\bin\dependency-check.bat --out . --scan [path to jar files to be scanned]
On Mac (rec)
  • with Homebrew Note - homebrew users upgrading from 5.x to 6.0.0 will need to run dependency-check.sh --purge.
$ brew update && brew install dependency-check
$ dependency-check -h
$ dependency-check --out . --scan [path to jar files to be scanned]

Maven Plugin

More detailed instructions can be found on the dependency-check-maven github pages. By default, the plugin is tied to the verify phase (i.e. mvn verify). Alternatively, one can directly invoke the plugin via mvn org.owasp:dependency-check-maven:check.

The dependency-check plugin can be configured using the following:

<project><build><plugins>...<plugin><groupId>org.owasp</groupId><artifactId>dependency-check-maven</artifactId><executions><execution><goals><goal>check</goal></goals></execution></executions></plugin>...</plugins>...</build>...
</project>

Ant Task

For instructions on the use of the Ant Task, please see the dependency-check-ant github page.

使用示例

命令行方式(Mac)

  • 若是测试环境 建议以命令行的方式使用
# 步骤1: 更新CPE数据库    
> dependency-check --updateonly
# 步骤2: 下载项目的安装包到本地  
> wget xxxxxx.tar.gz
# 步骤3: 解压缩本地的安装包,并进入安装包,执行如下命令扫描
> tar -xzvf xxxxxx.tar.gz         # 解压缩
> cd  xxxxxx                      # 进入项目
> pwd        # /ssssss/xxxxxx     # 查看项目的绝对路径
> # 在项目顶层执行,扫描整个项目
> dependency-check -n -o ./ -f CSV  -s /ssssss/xxxxxx/
> # scan路径指定某个jars包,扫描整个jars包
> dependency-check -n -o ./ -f CSV  -s /ssssss/xxxxxx/jars> # scan路径指定某个jar,扫描单个jar包
> dependency-check -n -o ./ -f CSV  -s /ssssss/xxxxxx/jars/xxxx.jar# 常用命令参数如下:
# -h  --help    # 输入帮助信息
#  --project <name>   # 被扫描项目名称,可以随意命名 建议test 该名称会展示在报告中若确实报告部分展示空白
# -n  --noupdate     # 禁止自动更新CPE数据,默认4h自动拉取 建议添加,若无CPE本地库由于网络原因会频繁造成扫描失败
#  -o  --out <path>  # 报告输出路径
#  -f  --formate <formate> # 报告输出格式 默认HTML 建议 CSV
#  -s  --scan <path> # 待扫描路径的,建议写绝对路径。可以扫目录,也可以直接扫压缩文件,zip,war,tgz等
#  -l  --log <file>  # 输出扫描过程中的日志到文件

插件方式

  • 若是开发环境 建议以插件的使用
  • https://blog.csdn.net/weixin_34117211/article/details/89565029

报告解读

CSV格式报告

在这里插入图片描述

  • DependencyName # 被扫描的第三依赖库名字及版本
  • DependencyPath # 被扫描的第三依赖库名在项目中的路径
  • CPE # 所有被识别出来的CPE
  • CVE # 安全漏洞编号
  • Source # 关联漏洞来源库
  • CVSSv3_BaseSeverity # 漏洞等级以v3版本为准
  • CVSSv3_BaseScore # 漏洞等级以v3版本为准

HTML格式报告

在这里插入图片描述

  • Dependency # 被扫描的第三依赖库机器版本
  • Highest Severity # 所有关联的CVE的最高漏洞等级
  • CVE Count # 关联的CVE个数
  • Confidence # 正确识别CPE的程度
  • Evidence Count # 识别CPE的数据个数

工具对比

  • https://blog.csdn.net/weixin_42176112/article/details/122988352

参考

  • https://blog.csdn.net/liwenxiang629/article/details/109453335
  • https://github.com/jeremylong/DependencyCheck
  • https://blog.csdn.net/m0_37268841/article/details/109066786
  • https://blog.csdn.net/weixin_34117211/article/details/89565029

http://chatgpt.dhexx.cn/article/g54lXimo.shtml

相关文章

maven中dependency的属性(依赖)配置

groupId&#xff0c;artfactId&#xff0c;version&#xff0c;type&#xff0c;classifier&#xff0c;scope&#xff0c;systemPath&#xff0c;exclusions&#xff0c;optional 是 maven的9种依赖属性&#xff0c; 其中groupId&#xff0c;artfactId&#xff0c;version是三…

Maven -- dependency详解

PS&#xff1a;部分来源官网文档&#xff0c;翻译不到位&#xff0c;请移步官网 一 &#xff1a;type&#xff1a;个人理解&#xff1a;依赖<dependency>通过其子标签 定位了某个特定的唯一构件&#xff0c;所以type--依赖类型&#xff0c;更准确的说应该是依赖的构件…

MySQL中“full outer join“的实现

一: 先创建两个表 二: 使用【left join】 union 【right join】 select t1.dim_a, t1.qty qty_a, t2.dim_a dim_b, t2.qty qty_b from ta t1 left join tb t2 on t1.dim_at2.dim_a union select t1.dim_a, t1.qty qty_a, t2.dim_a dim_b, t2.qty qty_b from ta t1 right join…

left join 和 left outer join 的区别

通俗的讲&#xff1a; A left join B 的连接的记录数与A表的记录数同 A right join B 的连接的记录数与B表的记录数同 A left join B 等价B right join A table A: Field_K, Field_A 1 a 3 b 4 c table B: …

SQL中inner join、outer join和cross join的区别

缺省情况下是inner join,开发中使用的left join和right join属于outer join,另外outer join还包括full join.下面我通过图标让大家认识它们的区别。 现有两张表&#xff0c;Table A 是左边的表。Table B 是右边的表。其各有四条记录&#xff0c;其中有两条记录name是相同的&…

SQL Server中CROSS APPLY和OUTER APPLY应用

1.Cross Apply和Outer Apply的理解 新增的APPLY表运算符把右表表达式应用到左表表达式中的每一行。 它不像JOIN那样先计算哪个表表达式都可以&#xff0c;APPLY必选先逻辑地计算左表达式。这种计算输入的逻辑顺序允许把右表达式关联到左表表达式。 APPLY有两种形式&#xff0…

深夜学习:有关Inner、Outer等相关词汇的理解

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈引流关键词: 内存屏障, DSB,DMB,ISB,inner,outer,memory barrier,Non-cacheable,Cacheable, non-shareable,inner…

外连接(OUTER JOIN)

9.3.4 外连接&#xff08;OUTER JOIN&#xff09; 不管是内连接还是带WHERE子句的多表查询&#xff0c;都组合自多个表&#xff0c;并生成结果表。换句话说&#xff0c;如果任何一个源表中的行在另一个源表中没有匹配&#xff0c;DBMS将不把该行放在最后的结果表中。 而外连…

CROSS APPLY和OUTER APPLY的区别

CROSS APPLY和OUTER APPLY的区别 APPLY语法 在SQL中&#xff0c;有这样的一种查询方式&#xff0c;APPLY语法&#xff1a;微软添加了这个新的运算符用于关联一个带有函数的结果集&#xff0c;并把函数应用于表/视图中的每一个限定行中。这个运算符就是APPLY&#xff0c;APPLY的…

图解inner join和outer join的区别

一张图可以完美诠释区别&#xff1a;

lateral view 和 lateral view outer的区别

lateral view 为侧视图&#xff0c;一般用于行转列的处理中 通常会与explode 搭配使用 1、explode 可以拆分map or array 示例 select explode(split("1,2,3",,)) 结果 123 explode 不适用于多个字段 其中一个字段需要炸开的场景&#xff0c;此时需要搭配late…

left join和left outer join 有什么区别?这样解释通俗易懂

作为一名java程序员&#xff0c;求职面试时也会遇到mysql问题&#xff0c;有次我到一家软件面试&#xff0c;就遇到有一道笔试题是考核关于sql 的。 left join和left outer join 有什么区别&#xff1f; 关于left join我平时编写sql表关联时用得比较多&#xff0c;但对于left o…

Oracle 数据库中 FULL OUTER JOIN 的作用 ?

当需要同时显示两个表中所有记录时&#xff0c;FULL OUTER JOIN 就非常有用。 FULL OUTER JOIN 返回左表&#xff08;Table A&#xff09;和右表&#xff08;Table B&#xff09;的所有行&#xff0c;并且如果左表或右表中没有匹配的行&#xff0c;则使用 NULL 值填充缺失的部分…

四种连接类型:inner(内连接),left[outer](左外连接),right[outer](右外连接),full[outer](完全外连接)

在from子句中表示连接操作有四种&#xff1a;inner&#xff08;内连接&#xff09;&#xff0c;left[outer]&#xff08;左外连接&#xff09;&#xff0c;right[outer]&#xff08;右外连接&#xff09;&#xff0c;full[outer]&#xff08;完全外连接&#xff09;。 一、理论…

内连接(inner join)与外连接(outer join)小结

转载自 : 内连接&#xff08;inner join&#xff09;与外连接(outer join)小结_蝉 沐 风的博客-CSDN博客_inner join mySQL包含两种联接&#xff0c;分别是内连接(inner join)和外连接(out join),但我们又同时听说过左连接&#xff0c;交叉连接等术语&#xff0c;本文旨在总结这…

np.dot、np.outer、np.matmul、np.multipy、np.inner、np.outer与np.cross几个函数之间的区别

np.dot、np.outer、np.matmul、np.multipy、np.inner、np.outer与np.cross几个函数之间的区别 一、数学上关于【内积】、【外积】的定义和计算1.1 数学上关于【内积/数量积】的定义和计算1.2 数学上关于【外积/叉积】的定义和计算 二、numpy中关于np.dot、np.outer、np.matmul、…

R语言 作图 outer()函数

outer()函数&#xff1a; outer(x,y,func):数组x与y的outer()函数会产生一个二维数组A&#xff0c;它的形状是 c(dim(x),dim(y)).A中对应元素A[x.index,y.index] func(x.index,y.index) outer(x,y):默认为两向量外积,即outer(x,y,x*y) x (x1,x2,x3),y (y1,y2,y3) #绘制曲…

[SPI]SPI协议详解

1.SPI协议简介 1.1.SPI协议概括 SPI&#xff0c;是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM&#xff0c;FLASH&#xff0c;实时时钟&#xff0c;AD转换器&a…

【FPGA】SPI协议

1.SPI简介 SPI(Serial Perripheral Interface, 串行外围设备接口)是 Motorola 公司推出的一种同步串行接口技术。SPI 总线在物理上是通过接在外围设备微控制器(PICmicro) 上面的微处理控制单元 (MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它…

SPI接口协议详解

一、SPI总线简介 SPI总线是摩托罗拉公司开发的一种高速、全双工、同步的通信总线&#xff0c;它通常由四条线组成&#xff1a; CS 片选信号SCLK 时钟信号MOSI 主机输出从机输入接口MISO 主机输入从机输出接口 SPI分为主机和从机&#xff0c;主机提供通信所需的时钟信号。 二…