目前各个企业对于应用的安全越来越重视,而解决应用漏洞的本质是从代码安全抓起。通常关于代码的安全问题有两类:代码本身的安全问题和代码依赖包存在的安全问题。对于代码本身的安全问题,我们可以通过静态代码分析工具解决,可以参考文章:
而对于代码依赖包的安全问题是我们这篇文章重点解决的事情,业界通常使用 Dependency-Check 来检查代码中是否存在任何已知的,公开披露的安全漏洞。他检查依赖项中是否存在漏洞的原理也跟我们熟知的病毒查杀软件一样,预先定义好目前已知的安全漏洞库,检查依赖包时,发现这些漏洞就会报错,最后定期更新安全漏洞库即可!
工具介绍:
========
Dependency-Check
Dependency-Check 是 OWASP(Open WebApplication Security Project)的一个实用开源程序,用于识别项目依赖项并检查是否存在任何已知的,公开披露的漏洞。目前,已支持 Java、.NET、Ruby、Node.js、Python 等语言编写的程序,并为 C/C++ 构建系统(autoconf 和 cmake)提供了有限的支持。而且该工具还是 OWASP Top 10 的解决方案的一部分。
NVD
Dependency-Check 依赖 NVD 漏洞数据库(美国国家通用漏洞数据库)进行依赖漏洞检查(全球信息安全领域著名的漏洞数据库包括中国国家信息安全漏洞库,美国国家信息安全漏洞库 NVD,赛门铁克漏洞库等等)官网:https://nvd.nist.gov/
NVD 的更新频率是出现问题实时更新,具体链接: https://nvd.nist.gov/general/nvd-dashboard
CVSS
NVD 评级依赖 CVSS(CommonVulnerability Scoring System),即 “通用漏洞评分系统”,是一个 “行业公开标准,其被设计用来评测漏洞的严重程度,并帮助确定所需反应的紧急度和重要度,具体评分标准如下:
目前主要参考 cvss v3.0,具体级别的漏洞数目如下图所示:
使用方法
命令行方式
命令行方式建议测试人员使用,可以在没有源码的情况下进行代码安全检测。
Dependency-Check 工具下载地址 https://owasp.org/www-project-dependency-check/,在右侧选择 command line,如下图:
默认方式
下载解压后进入 bin 文件夹,在 windows 系统下执行命令:
dependency-check.bat --disableRetireJS --disableNodeJS --project test -s D:\checkjar\-o D:\report\
其中:
-project 代表工程名
–s 代表检查的 jar 包文件夹,把需要检查的 jar 包放到该目录下即可
–o 代表报表输出的路径
--disableRetireJS 不检查 js,
--disableNodeJS 不检查 nodejs
本地 NVD 库方式
我们可以在本地搭建一个 NVD 库来提高更新效率,
具体可以参考 https://jeremylong.github.io/DependencyCheck/data/mirrornvd.html
使用本地 nvd 库,具体命令如下:
dependency-check.bat
--cveUrlModified 本地 nvd 库的 url/nvdcve-1.1-modified.json.gz
--cveUrlBase 本地 nvd 库的 url/nvdcve-1.1-2020.json.gz
--project test -s D:\checkjar\ -oD:\report\
其中–cveUrlModified 和–cveUrlModified 指定本地 NVD 库
注意,如果执行命令失败,重新执行一次就 OK!
报告分析
生成的报表文件如下图,一般只需关注 HighestSeverity 列中的 CRITICAL 和 HIGH 级别漏洞,可以看到检测出 2 个 jar 包存在高危漏洞。
点击具体 jar 包,可以看到具体的修复方案,如下所示:
报告中的含义是 jackson-xc-1.8.3jar 是有安全问题的,这个问题在 2.8.10 和 2.9.1 版本之前是存在的,所以我们只要把 jar 包升级到 2.9.1 版本以上即可修复这个问题!
配置 Maven 插件方式
该方式建议开发人员使用,通过 maven 方式检测依赖包中是否存在安全问题则需要修改较多 pom 中的内容。
https://search.maven.org/artifact/org.owasp/dependency-check-maven/5.3.2/maven-plugin
总结
一般来说对于代码依赖包的安全问题是由开发自己测试的,如果我们测试想要介入的话使用命令行方式即可,把需要检查的 jar 包放到指定的目录中,然后对所有 jar 包进行整体扫描。原创不易,如果文章帮到了你,欢迎转发点赞,让更多的朋友受益!
原文地址 www.jianshu.com