目前,各家企业对应用安全的关注度越来越高,而解决应用漏洞的本质是从代码安全入手。一般来说,代码的安全问题有两类:代码本身的安全问题和代码依赖包的安全问题。对于代码本身的安全问题,我们可以通过静态代码分析工具来解决。代码依赖的安全问题是本文的重点。业界通常使用Dependency-Check来检查代码中是否存在已知和公开披露的安全漏洞。检查依赖项是否存在漏洞的原理和我们熟悉的杀毒软件是一样的。当前已知的安全漏洞库是预定义的。在检查依赖包的时候,如果发现这些漏洞,就会报错,最后定期更新安全漏洞库。就是这样!工具介绍:Dependency-CheckDependency-Check是OWASP(OpenWebApplicationSecurityProject)的一款实用开源程序,用于识别项目依赖关系,检查任何已知的、公开披露的漏洞。目前支持Java、.NET、Ruby、Node.js、Python等语言编写的程序,对C/C++构建系统(autoconf和cmake)提供有限支持。该工具也是OWASPTop10解决方案的一部分。NVDDependency-Check依赖NVD漏洞数据库(美国国家通用漏洞数据库)进行依赖漏洞检查(全球信息安全领域知名漏洞数据库有中国国家信息安全漏洞数据库、美国国家信息安全漏洞数据库NVD、赛门铁克漏洞数据库等)官网:https://nvd.nist.gov/NVD的更新频率是出现问题时实时更新。具体链接:https://nvd.nist.gov/general/nvd-dashboardCVSSNVD评级依赖于CVSS(CommonVulnerabilityScoringSystem),即“CommonVulnerabilityScoringSystem”,是一个“行业开放标准,旨在评估漏洞的严重程度,帮助确定所需响应的紧迫性和重要性,具体评分标准如下:目前主要参考cvssv3.0,具体级别的漏洞数量如下图所示:命令行模式的使用方法推荐测试人员使用命令行模式进行无源代码的代码安全测试。Dependency-Check工具下载地址为https://owasp.org/www-project-dependency-check/,选择右侧命令行,如下图:默认下载解压后进入bin文件夹,在windows系统下执行命令:dependency-check.bat--disableRetireJS--disableNodeJS--projecttest-sD:\checkjar\-oD:\report\其中:-project代表项目名-s代表检查的jar包文件夹,放需要检查的jar包可以放在这个目录下–o代表报表输出的路径--disableRetireJS不检查js,--disableNodeJS不检查nodejs本地NVD库方法我们可以在本地构建一个NVD库来提高更新效率,具体可以参考https://jeremylong.github.io/DependencyCheck/data/mirrornvd.html使用本地的nvd库,具体命令如下:dependency-check.bat--cveUrl修改的url/nvdcve-1.1-modified.json.gz的localnvdlibrary--cveUrlBase本地nvd库的url/nvdcve-1.1-2020.json.gz--projecttest-sD:\checkjar\-oD:\report\其中–cveUrlModified和–cveUrlModified指定本地NVDlibrary注意,如果命令执行失败,重新执行一次就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包进行整体扫描。原创不易,如果文章对你有帮助,请转发点赞,让更多的朋友受益!
