OWASP Dependency Check

为什么要进行依赖检查

开发过程中不可避免的要引用一些外部的包,而这么包是否安全我不知道,但是大家默认都会认为它是安全的,但是好像并不是的,我注意到一下几个问题

"外部包"安全问题

  • 包被篡改
  • 包本身有安全bug

解决包安全问题

  • 通过md5哈希值比对检查包是否被篡改过
  • 关注开发所使用到的外部包开发组织发布的安全信息,及时更新升级或采取其他防护措施

用什么东西来做依赖检查

OWASP组织开发的Dependency Check就是针对Maven工程的Java项目进行依赖检查,它会统计工程中引用到包,以及各个包的版本,然后到NVD(National Vulnerability Database)国家漏洞数据库、CVE(Common Vulnerabilities and Exposures)通用漏洞与披露这两个库中搜索获取对应包的安全漏洞信息

怎么做依赖安全检查

Java(Maven)

确保是Maven结构的代码,然后在pom.xml里plugins下添加一下内容

<plugin>
    <groupId>org.owasp</groupId>
    <artifactId>dependency-check-maven</artifactId>
    <version>1.4.5</version>
    <executions>
        <execution>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
</plugin>

然后在工程目录下执行

mvn dependency-check:check

接下来它首先会到maven中配置库中下载引用的jar包,然后会下载NVD、CVE库(可能会比较慢),下载完漏洞库后,就会执行依赖检查,最后在工程里的target目录下生成一份名叫dependency-check-report.html的依赖检查报告,里面会记录了工程中所使用到的外部包的安全问题

知道问题了,如何修复安全问题

通常来说出现安全问题都是通过更新升级来解决的,但是也不排除有些时候我们无法更新,例如我们业务所使用到了某些特定版本的特定功能,或者业务系统运行周期已经很久了,担心更新升级后出现问题,像这类情况就只能根据漏洞特点自行解决了,但是大多数情况来说都是升级来解决的

如何升级

根据生成的安全报告,然后获取漏洞包名,然后在pom.xml找到它并复制pom.xml中对包的artifactId中的名称,然后到搜索引擎中搜索包名+maven,例如mysql-connector-java maven,然后新的版本号粘贴到pom.xml中对应包version属性里,然后重新执行检查并阅读报告,确认安全问题是否解决

补充

  • OWASP Dependency Check也支持对Python的依赖包进行检查,详见文档
  • 不仅仅只是后端,前端也有类似的工具支持依赖检查(未完)
  • 抽空把文章分开写吧

results matching ""

    No results matching ""