如何加速CI中OWASP Dependency-Check Maven插件的漏洞检测?
问题背景
在CI拉取请求的每次提交中,使用搭载OWASP插件的Maven项目进行漏洞检测,插件配置如下:
<plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>${version.dependency-check-maven}</version> <executions> <execution> <goals> <goal>aggregate</goal> </goals> <phase>verify</phase> </execution> </executions> <configuration> <showSummary>true</showSummary> <!-- this will work only in the top-level maven module --> <suppressionFile>${user.dir}/owasp-suppressions.xml</suppressionFile> <format>ALL</format> <failBuildOnAnyVulnerability>true</failBuildOnAnyVulnerability> <!-- alternative: fail on level (High starts at 7, Critical at 9) --> <!-- <failBuildOnCVSS>4</failBuildOnCVSS> --> <assemblyAnalyzerEnabled>false</assemblyAnalyzerEnabled> <cveUrlModified>address of the NVD local mirror</cveUrlModified> <cveUrlBase>address of the NVD local mirror</cveUrlBase> <cveWaitTime>1</cveWaitTime> <!--value in milliseconds, default is 4000--> </configuration> </plugin>
CI构建使用Prow,已配置NVD本地镜像,但从本地镜像下载CVE及数据库维护仍耗时约3分钟,日志显示大部分时间消耗在CVE下载处理和数据库维护环节:
[INFO] Download Started for NVD CVE - 2003 [INFO] Download Complete for NVD CVE - 2003 (5 ms) [INFO] Processing Started for NVD CVE - 2003 [INFO] Processing Complete for NVD CVE - 2002 (4608 ms) [INFO] Processing Complete for NVD CVE - 2003 (1131 ms) ...
[INFO] Begin database maintenance [INFO] Updated the CPE ecosystem on 128773 NVD records [INFO] Removed the CPE ecosystem on 3604 NVD records [INFO] End database maintenance (13482 ms) [INFO] Begin database defrag [INFO] End database defrag (3765 ms) [INFO] Check for updates complete (112132 ms)
加速OWASP漏洞检测的实用技巧
一、复用数据库缓存,避免重复更新
- CI节点共享缓存目录:在Prow中为构建节点挂载持久化存储卷,将OWASP Dependency-Check的默认数据库目录(
~/.m2/repository/org/owasp/dependency-check-data)映射到共享存储,让所有PR构建复用同一份已下载处理好的CVE数据库,无需每次重新拉取和解析。 - 调整更新策略:
- 添加
<updateOnlyIfMissing>true</updateOnlyIfMissing>配置,仅当本地数据库完全缺失时才触发更新; - 配合
<autoUpdate>false</autoUpdate>,在日常PR构建中禁用自动更新,仅通过每日定时构建任务执行全量更新,PR构建直接复用已维护好的缓存数据。
- 添加
二、跳过不必要的数据库操作
- 禁用常规维护任务:在PR构建的插件配置中添加
<skipDbMaintenance>true</skipDbMaintenance>和<skipDefrag>true</skipDefrag>,跳过数据库维护与碎片整理环节(需确保定时构建任务中保留这些操作,保证数据库的完整性)。 - 缩小CVE数据范围:
- 设置
<cveStartYear>2018</cveStartYear>,只下载指定年份后的CVE数据(可根据项目依赖的实际年代调整,比如只关注近5年的漏洞),减少需要处理的记录量; - 启用
<enableExperimental>true</enableExperimental>后,通过<excludeVulnerabilityIds>配置排除已知不影响项目的CVE编号,进一步降低处理负载。
- 设置
三、优化插件执行逻辑
- 减少报告格式输出:将
<format>ALL</format>改为只生成需要的格式(如<format>HTML</format>或<format>JSON</format>),避免生成冗余报告浪费时间。 - 开启并行分析:添加
<parallelAnalysis>true</parallelAnalysis>配置,利用CI节点的多核资源并行处理依赖,提升检测速度。 - 跳过无依赖模块:对于多模块Maven项目,给无依赖的子模块添加
<skip>true</skip>配置,跳过不必要的检测步骤。
四、优化本地NVD镜像
- 使用压缩数据源:确保NVD本地镜像提供
.gz压缩格式的CVE数据文件,OWASP插件会自动识别并下载压缩文件,大幅减少传输和解压耗时。 - 调整镜像同步频率:将NVD镜像的同步频率设置为每日一次,在保证数据时效性的同时,避免频繁同步对镜像服务器和构建流程造成的负载。
内容的提问来源于stack exchange,提问作者user2105282
相关产品推荐
相关产品推荐

