前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >依赖安全和风险管理,还可以有免费解决方案?

依赖安全和风险管理,还可以有免费解决方案?

作者头像
DevOps时代
发布2023-08-22 09:13:32
4870
发布2023-08-22 09:13:32
举报

简介

Dependency-Check 是 OWASP(Open Web Application Security Project)的⼀个实⽤开源程序,⽤于识别项⽬依赖项并检查是否存在任何已知的,公开披露的漏洞。

⽬前,已⽀持 Java、.NET、Ruby、Node.js、Python 等语⾔编写的程序,并为 C/C++构建系统 (autoconf 和 cmake)提供了有限的⽀持。⽽且该⼯具还是 OWASP Top 10 的解决⽅案的⼀部分。

实现原理

依赖性检查可⽤于扫描应⽤程序(及其依赖库),执⾏检查时会将 Common Platform Enumeration (CPE)国家漏洞数据库及 NPM Public Advisories 库下载到本地,再通过核⼼引擎中的⼀系列分析器检查项⽬依赖性,收集有关依赖项的信息, 然后根据收集的依赖项信息与本地的 CPE&NPM 库数据进⾏对⽐, 如果检查发现扫描的组件存在已知的易受攻击的漏洞则标识, 最后⽣成报 告进⾏展⽰

集成

与 maven 集成

Dependency-check-maven⾮常易于使⽤,可以作为独⽴插件使⽤,也可以作为 maven site 的⼀部分使⽤。该插件需要使⽤ Maven 3.1 或更⾼版本,第⼀次执⾏时,可能需要 20 分钟或更⻓时间,因为它会从 NIST 托管的国家漏洞数据库下载漏洞数据到本地备份库。

第⼀次批量下载后,只要插件每七天⾄少执⾏⼀次,本地漏洞库就会⾃动更新,更新只需⼏秒钟。

集成很简单,只需要在项⽬的 pom⽂件中增加 maven 配置即可。

⽤法⼀ 在 target ⽬录中创建 dependency-check-report.html

代码语言:javascript
复制
<plugin>
    <groupId>org.owasp</groupId> 
    <artifactId>dependency-check-maven</artifactId> 
    <version>4.0.2</version>
    <configuration>
        <autoUpdate>true</autoUpdate> 
    </configuration>
    <executions>
        <execution> 
        <goals>
            <goal>check</goal> </goals>
        </execution> 
    </executions>
</plugin>

⽤法⼆ 在 maven site 中创建聚合性的报告

代码语言:javascript
复制
<plugin>
    <groupId>org.owasp</groupId> 
    <artifactId>dependency-check-maven</artifactId> 
    <version>4.0.2</version>
    <reportSets>
        <reportSet> 
            <reports>
                <report>aggregate</report>
                </reports> 
            </reportSet>
        </reportSets> 
    </plugin>

⽤法三 设置当⻛险指数(CVSS)⼤于等于 8 时(CVSS 分数为 0-10)则项⽬编译失败

代码语言:javascript
复制
<plugin>
    <groupId>org.owasp</groupId> 
    <artifactId>dependency-check-maven</artifactId> 
    <version>4.0.2</version>
    <configuration>
        <failBuildOnCVSS>8</failBuildOnCVSS> 
    </configuration>
    <executions>
        <execution> 
            <goals>
                <goal>check</goal> 
            </goals>
        </execution> 
    </executions>
</plugin>

⽤法四 仅更新 NVD(漏洞库)数据,⽽不执⾏检查

代码语言:javascript
复制
<plugin>
    <groupId>org.owasp</groupId> 
    <artifactId>dependency-check-maven</artifactId> 
    <version>4.0.2</version>
    <executions>
        <execution> 
            <goals>
                <goal>update-only</goal> 
            </goals>
        </execution> 
    </executions>
</plugin>

以 Jenkins 插件形式运⾏

1)安装 OWASP Dependency-Check 插件

2)全局⼯具配置下配置 dependency 插件路径及版本(可单独下载)

3)pipeline 流⽔线中执⾏ dependency-check 安全扫描

⽅法 1:

代码语言:javascript
复制
dependencyCheck additionalArguments: ‘’, odcInstallation: 'dependency-check’
//可增加参数具体参数参考 https://bloodzer0.github.io/ossa/other-security-branch/devsecops/sdc/
dependencyCheckPublisher pattern: ‘dependency-check-report.xml’

⽅法 2:

代码语言:javascript
复制
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-
check/bin/dependency-check.sh -s $PWD/ -f XML -o $PWD/dependency-check-report.xml’ //⽣成 xml 报告
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-
check/bin/dependency-check.sh -s $PWD/ -f HTML -o $PWD/dependency-check-report.html’ //⽣成 html 报告

3)pipeline 流⽔线中执⾏ dependency-check 安全扫描

⽅法 1:

代码语言:javascript
复制
dependencyCheck additionalArguments: ‘’, odcInstallation: 'dependency-check’
//可增加参数具体参数参考https://bloodzer0.github.io/ossa/other-security-branch/devsecops/sdc/
dependencyCheckPublisher pattern: ‘dependency-check-report.xml’

⽅法 2:

代码语言:javascript
复制
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-
check/bin/dependency-check.sh -s $PWD/ -f XML -o $PWD/dependency-check-report.xml’ //⽣成xml报告
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-
check/bin/dependency-check.sh -s $PWD/ -f HTML -o $PWD/dependency-check-report.html’ //⽣成html报告

结果查看:

以 Sonarqube 插件形式运⾏

与代码质量管理平台 SonarQube 7.x 以上的版本集成

以 Jenkins 插件形式运⾏

1)安装 OWASP Dependency-Check 插件

2)全局⼯具配置下配置 dependency 插件路径及版本(可单独下载)

3)pipeline 流⽔线中执⾏ dependency-check 安全扫描

⽅法 1:

代码语言:javascript
复制
dependencyCheck additionalArguments: ‘’, odcInstallation: 'dependency-check’
//可增加参数具体参数参考 https://bloodzer0.github.io/ossa/other-security-branch/devsecops/sdc/
dependencyCheckPublisher pattern: ‘dependency-check-report.xml’

⽅法 2:

代码语言:javascript
复制
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-
check/bin/dependency-check.sh -s $PWD/ -f XML -o $PWD/dependency-check-report.xml’ //⽣成xml报告
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-
check/bin/dependency-check.sh -s $PWD/ -f HTML -o $PWD/dependency-check-report.html’ //⽣成html报告

结果查看:

4、以 Sonarqube 插件形式运⾏

1)github 上下载插件 jar 包,地址:

https://github.com/dependency-check/dependency-check-sonar-plugin(注意插件版本与 soanr 版本的兼容关系)

2)上传到 %SONAR_HOME%/extensions/plugins ⽬录下

3)重启 sonar

4)验证查看

5)jenkins 流⽔线中执⾏ sonar 扫描和本次内容⽆关,不做赘述

6)结果查看

将插件(jar⽂件)复制到 $SONAR_INSTALL_DIR/extensions/plugins并重新启动 SonarQube。

但需要添加以下配置:

代码语言:javascript
复制
sonar.dependencyCheck.reportPath = ${WORKSPACE}/dependency-check-report.xml
## 以 Jenkins 为例报告 .xml 路径 sonar.dependencyCheck.htmlReportPath = ${WORKSPACE}/dependency-check-report.html 
## 以 Jenkins .html 为例报告 .html 路径

问题严重性分数设定:

代码语言:javascript
复制
sonar.dependencyCheck.severity.blocker = 9.0 
sonar.dependencyCheck.severity.critical = 7.0 
sonar.dependencyCheck.severity.major = 4.0 
sonar.dependencyCheck.severity.minor = 0.0

报告查看

DependencyCheck 离线扫描配置

重点参数解析

autoUpdate

  • 如果为 true, 每次执⾏漏洞检查时都会下载 CVE 漏洞数据
  • 如果为 false, 不会在线更新漏洞数据, 相当于离线扫描

dataDirectory

这是存放 CVE 漏洞数据的⽬录,如果 autoUpdate 为 true,也会在这个⽬录下更新

搭建本地 NVD Mirror 库实际企业中内⽹环境可能 CI 服务器不会开放对外⽹的访问权限,故需要搭建⼀个本地的 NVDMirror

具体搭建步骤参考:

https://jeremylong.github.io/DependencyCheck/data/mirrornvd.html

实际操作步骤如下:

主要需要变更两个东⻄,⼀个是 nvd 库,还有⼀个是 jsrepository.json

1、搭建 nvd 库:

官⽅提供了对应 jar 包来作为mirror的服务, 具体 github 地址:https://github.com/stevespringett/nist-data-mirror/

1)下载 release jar 包,如需定制请⾃⾏改写代码

2)服务器上执⾏ java -jar nist-data-mirror.jar,改命令会把 2002-最近⼀年的所有 *.json.gz 和 *.meta ⽂件下载下来

3)搭建本地 apache 服务

使⽤官⽅ docker 镜像直接启动即可,具体命令:

代码语言:javascript
复制
docker run -dit --name mirror -p 30006:80 --mount type=bind,source=/data/mirror-repo,target=/usr/local/apache2/htdocs sspringett/nvdmirror:latest

其中 source 为宿主机⽬录

搭建成功后访问:

4、定时任务更新 jsreponsitory.json5、搭建成功后执⾏ dependency check 命令⾏中添加参数应⽤ mirror 地址即可以 pipeline 为例:

代码语言:javascript
复制
dependencyCheck additionalArguments: '–cveUrlModified http://x.x.x.x:8080/nvdcve-1.1-2019.json.gz --cveUrlBase http://x.x.x.x:8080/nvdcve-1.1-2019.json.gz ', odcInstallation: ‘dependency-check’

其他注意事项

运⾏命令

检查单个 maven ⼯程安全漏洞

代码语言:javascript
复制
mvn dependency-check:check

会在 target ⽬录下⽣成⼀个 dependency-check-report.html

检查多个 maven⼦⼯程汇总⼀个报告

代码语言:javascript
复制
mvn dependency-check:aggregate

会在⽗⼯程的 target⽬录下⽣成⼀个 dependency-check-report.html

命令⾏⽅式运⾏

代码语言:javascript
复制
dependency-check.bat --cveUrlModified "file:///D:/ProgramFiles/dependency-check/data/nvdcache/nvdcve-1.1-modified.json.gz" --cveUrlBase "file:///D:/ProgramFiles/dependency-check/data/nvdcache/nvdcve-1.1-modified.json.gz" --disableRetireJS --disableNodeJS --project "demo-project" -s "G:/workspaces/projects/demo-project/target/unification-api/WEB- INF/lib" -o "G:/workspaces/projects/demo-project/target"

Jenkins DependencyCheck 插件扫描 Node.js 程序

执⾏DependencyCheck 之前, 先执⾏ npm install && npm run build在 dependencyCheck 扫描参数中添加配置 --disablePnpmAudit

dependencyCheck 完整的配置如下:

代码语言:javascript
复制
-project $projectName --scan $WORKSPACE --format HTML --format XML --format JUNIT --disableYarnAudit --disablePnpmAudit --disableMSBuild --out $WORKSPACE

SonarQube 插件配置为:

代码语言:javascript
复制
sonar.projectKey=$projectName
sonar.projectName=$projectName
sonar.projectVersion=$branch
sonar.language=js
sonar.sourceEncoding=UTF-8
sonar.sources=./src
sonar.dependencyCheck.htmlReportPath=${WORKSPACE}/dependency-check-report.html

完整参数参考附录

近期好文注意!用 ChatGPT 写代码不小心这些“坑”,你的饭碗可能真保不住了

“DevOps 时代”公众号诚邀广大技术人员投稿

点击阅读原文,更多精彩

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps时代 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档