我们写的程序的安全,除掉代码本身的安全之外,还包括我们代码所依赖的三方jar包的安全,所以我们在日常的质量保障中, 也需要把此纳入检查范围。下面我们主要介绍下使用OWASP Dependency-check进行三方依赖安全检查的基本方法。

与Maven集成

Dependency check与Maven的集成比较简单,我们直接修改pom,增加如下配置:

......org.owasp dependency-check-maven 5.2.1check6......org.owasp dependency-check-maven 5.2.1aggregate

然后直接调用如下命令

mvn dependency-check:check

执行完成之后,会在target目录生成html格式的报告。

注意我们有如下的配置:

6

意思是如果发现的CVS错误有6个或者以上时,构建的结果即为失败。

与Jenkins的集成

  • 首先安装OWASP Dependency Check插件:



sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_Dependency


  • 然后在“全局工具管理”里面新增一个Dependency-check的实例:


sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_jar_02


  • 新建一个自由类型的项目
  • 构建里面先调用Maven进行打包:


sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_jar_03


  • 然后构建里面选择“invoke dependency-check”:


sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_Dependency_04


  • 新增构建后操作


sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_jar_05


  • 点击Risk Gate Thresholds可以设定在整体缺陷个数或者新增缺陷个数是多少的情况下,把构建结果设置为Unstable或者Fail。比如:


sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_sonar 扫描vue目录_06


对于issue总数来说,Critcal的达到2个,或者High的达到2个,就Unstable;Critical的达到10个,或者High的达到10个,就Fail;对于新增issue来说,Critical的达到1个,或者High的达到1个,就Unstable;Critical的达到5个,或者High的达到5个,就Fail。

  • 保存后,点击立即构建。然后就是漫长的构建过程。构建完成之后,我们可以在jenkins的结果页查看其趋势:


sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_Dependency_07


  • 点击某次具体构建之后可以查看此次构建的Dependency check结果详情:


sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_sonar 扫描vue目录_08


  • 点开后可以查看具体的违规原因:


sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_High_09


与Sonar的集成

与sonar的集成主要是依靠插件:https://github.com/dependency-check/dependency-check-sonar-plugin,这里需要特别说明下,本插件并不做Dependency-check的分析,而是依赖已经生成的Dependency-check的结果,然后在sonar上进行展示。

  • 首先我们从https://github.com/dependency-check/dependency-check-sonar-plugin/releases下载最新的jar包,然后上传到sonar的extensions目录下。对应DevOPS | 代码静态扫描工具SonarQube的安装和初步使用 的目录为/sonar/extensions/plugins,并重启sonarqube
  • 然后根据上文的介绍配置运行Dependency-check插件进行检查和输出报告,我们需设置输出所有格式的报告:


sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_High_10


  • 然后根据基于Gitlab、Sonarqube和jenkins的代码静态扫描 介绍的步骤配置进行代码进行代码扫描,并添加如下配置信息:
sonar.dependencyCheck.reportPath=${WORKSPACE}/dependency-check-report.xmlsonar.dependencyCheck.htmlReportPath=${WORKSPACE}/dependency-check-report.htmlsonar.dependencyCheck.summarize=true
  • 构建完成之后,我们即可在sonar里面查到到Dependency-check查出来的问题:


sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_jar_11


  • 同时sonar里面也增加了对Dependency-check报告的链接:


sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_jar_12


sonarqube java取消扫描某个文件夹下所有的类 sonarqube扫描vue_Dependency_13


加速CVE数据下载

上面我们提到,在使用Dependency check进行检查的时候,首先需要花费一定的时间从NVD(NATIONAL VULNERABILITY DATABASE)中下载CVE数据。一个可以优化的方案就是在本地建立NVD的镜像,然后从此镜像下载。

  • 首先我们从https://github.com/stevespringett/nist-data-mirror下载最新的jar
  • 然后上传到服务器,使用如下命令进行镜像:
java -jar nist-data-mirror.jar
  • 为了保证本地镜像数据库的及时性,可以使用crontab添加一个镜像任务
  • 镜像完成之后记得使用apache或者nginx开通web服务以提供http访问镜像功能
  • 然后在jenkins的构建里面指定如下参数即可:
--cveUrlModified http://192.168.10.32:81/nvdcve-1.0-modified.json.gz--cveUrlBase http://192.168.10.32:81/nvdcve-1.0-%d.json.gz