美文网首页
Dependency check增量更新cve的实现方案

Dependency check增量更新cve的实现方案

作者: 测试开发Kevin | 来源:发表于2022-05-05 11:31 被阅读0次

在文章【干货】Dependency check配置Mysql数据库存储nvd数据 中

介绍了如何把nvd库中的cve信息保存到数据库中的方法!但这仍然不是最优的方案,客户端执行脚本后,仍然需要更新cve数据到数据库中,虽然稳定性会得到保障,但是依然会浪费一定时间!那么我们的终极方案是什么呢?

实现思路其实也非常简单,只需两步

步骤一、定时更新最新的cve信息到数据库

步骤二、客户端执行dependency-check时,设置较长的校验时间使其无须检测更新,直接从数据库中读取数据

这里注意,步骤一和步骤二是分开进行的,先执行cve信息的更新,然后客户端执行dependency-check,这样就能保证dependency-check执行时数据库中cve数据的即时性了!

定时更新cve

定时更新最新的cve信息到数据库

dependency-check.bat --cveStartYear 2022 --updateonly --dbDriverName com.mysql.cj.jdbc.Driver --connectionString jdbc:mysql://127.0.0.1:3306/dependencycheck --dbUser dcuser --propertyfile d:\dependency\pwd.properties

这条语句需要注意的参数有:

cveStartYear 2022 表示只更新2022年的nvd种子数据,因为我们数据库中已经有以前年份的数据了,所以通过这种形式则实现了迭代更新,会大量的缩短更新时间!注意:在dependencycheck 7.1才开始有该参数。

updateonly 表示只更新数据,不进行扫描

dbDriverName 表示数据库的dirver名称

connectionString 表示连接数据库的字符串,执行初始化脚本后创建的数据库叫dependencycheck

dbUser 是用户名,初始化的用户名叫 dcuser

propertyfile 这个参数是表示dcuser 的密码,需要在properties文件中存储,形式是:data.password=DC-Pass1337! 这个密码是执行初始化脚本后的默认密码

如果我们不需要对某种指定类型的文件进行检测分析,可以使用参数—disable*** 放弃对指定的文件类型进行分析进而提升检测效率。例如:disableRetireJS、disableNodeJS、disableNodeAudit、disableAssembly等等。

详细参数使用可以参考官方文档:

https://jeremylong.github.io/DependencyCheck/dependency-check-cli/arguments.html

详细的分析器参数含义如下图所示:

文档链接,https://jeremylong.github.io/DependencyCheck/analyzers/index.html

定时任务更新CVE

最后我们就可以写一条定时任务,在指定的时间对cve数据库进行及时更新了!

思路一:脚本编写定时任务,具体实现方式这里不再赘述,自行百度即可。也可以参考文档https://jeremylong.github.io/DependencyCheck/data/cachenvd.html)

思路二:通过jenkins 创建一个定时任务执行dependency-check

设置较长的cve有效检测时间

dependency-check.bat --scan ${scanProject} --format HTML --out ${project_path} --dbDriverName com.mysql.cj.jdbc.Driver --connectionString jdbc:mysql://127.0.0.1:3306/dependencycheck --dbUser dcuser --propertyfile /opt/scripts/config/pwd.properties --cveValidForHours 8800 --disableRetireJS --disableNodeJS --disableNodeAudit –disableAssembly

注意这里使用了参数--cveValidForHours 8800 ,它的定义是每8800 小时(即一年)才更新nvd数据库中的cve信息(默认是4小时)。因为我们已经实现了从数据库中读取cve信息,而数据库里的cve信息是每天都进行增量更新的,因此在客户端我们就不需要再重新发起检测cve信息的请求了,这样也就避免了客户端与定时任务更新nvd库的重复操作!

总结

最后总结一下定时稳定更新cve数据的实现的思路!

1.在jenkins 中每天执行更新cve的操作

dependency-check.bat --cveStartYear 2022 --updateonly --dbDriverName com.mysql.cj.jdbc.Driver --connectionString jdbc:mysql://127.0.0.1:3306/dependencycheck --dbUser dcuser --propertyfile d:\dependency\pwd.properties

2.客户端执行时,设置较长的cve有效检测时间

dependency-check.bat --scan ${scanProject} --format HTML --out ${project_path} --dbDriverName com.mysql.cj.jdbc.Driver --connectionString jdbc:mysql://127.0.0.1:3306/dependencycheck --dbUser dcuser --propertyfile /opt/scripts/config/pwd.properties --cveValidForHours 8800 --disableRetireJS --disableNodeJS --disableNodeAudit –disableAssembly

相关文章

网友评论

      本文标题:Dependency check增量更新cve的实现方案

      本文链接:https://www.haomeiwen.com/subject/yvmnyrtx.html