在文章【干货】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
网友评论