Checkmarx One的SAST增量扫描主要用于缩短频繁代码提交后的安全检测时间。它并不是只扫描本次修改的几个文件,而是以最近一次全量扫描为基线,分析累计发生变化的文件以及与这些文件存在关联的Closure代码。因此,增量任务比Git变更文件多并不一定异常。处理“Checkmarx怎么配置扫描增量阈值,Checkmarx增量扫描范围异常如何调整”时,重点是判断阈值、全量基线和当前分支是否处于同一套扫描链路中。
一、Checkmarx怎么配置扫描增量阈值
当前Checkmarx One允许在租户级和项目级配置SAST增量阈值,可调范围为0.5%~10%,调整步长为0.5%,默认值为7%。项目单独配置后,会覆盖租户默认值。
1、设置租户默认增量阈值
如果多个项目的代码规模和提交方式相近,可以先设置统一的默认值。
①进入【Global Settings】,打开账户级SAST配置。
②找到【Incremental threshold】,查看当前增量阈值。
③日常提交规模较小时,可先保持【7%】作为基准,不需要为了缩短扫描时间直接调到最高值。
④如果大量正常提交都会超过当前比例,可按照【0.5%】步长逐级调整。
⑤保存后,再通过实际扫描历史观察增量任务和全量任务的变化。
当代码变化超过配置的增量阈值时,Checkmarx会将任务转换为全量扫描,因此这个数值控制的是“什么时候不再适合继续做增量扫描”,而不是要求工具只扫描固定百分比的代码。
2、给特殊项目设置独立阈值
大型项目、Monorepo或提交规模明显不同的项目,可以单独设置。
①打开目标项目的【Project Settings】。
②进入【Rules】,点击【Add Rule】。
③将扫描器设置为【SAST】。
④参数选择【Incremental threshold】,再填写项目需要的比例。
⑤保存后发起新的增量任务,并在扫描历史中确认最终执行的是增量还是全量扫描。
如果全局阈值已经修改,但某个项目表现没有变化,应优先检查【项目级规则】。项目设置具有更高优先级。
3、确认增量扫描已经真正启用
增量扫描需要已经存在一份成功的全量扫描结果,没有完整基线时不能直接建立正常的SAST增量分析。
①手动发起任务时启用【Incremental scan】。
②使用Checkmarx One CLI时,可加入:
--sast-incremental=true
③通过API触发时,将SAST扫描配置中的incremental设置为true。
④第一次扫描或重新建立基线时执行【全量扫描】,后续再进入增量流程。
二、Checkmarx增量扫描范围异常如何调整
增量范围异常通常有三种表现:扫描文件明显比本次提交多、修改文件没有被正确识别,或者明明要求增量却最终执行了全量扫描。排查时不要只比较Git本次提交文件数。
1、扫描范围比修改文件多很多
Checkmarx会扫描Changed Files以及与其相关的Closure Files,同时增量变化会相对于最近一次全量扫描持续累积。因此连续多次修改后,分析范围逐渐扩大属于正常机制。
①查看【Scan History】,找到当前分支最近一次【Full Scan】。
②判断全量扫描以后是否已经连续进行了大量增量扫描。
③主动执行一次【全量扫描】,重新建立分析基线。
④全量完成后只做一次小范围代码修改,再重新执行增量扫描进行对照。
⑤如果此时范围明显缩小,说明原问题主要来自累计变化,而不是阈值失效。
2、部分修改没有进入预期扫描范围
①确认扫描使用的是正确【项目】和【分支】。
②检查当前分支是否已经建立有效的全量基线。
③检查流水线上传的源码目录,确认目标文件确实进入扫描包。
④查看【文件排除规则】,排除目录、扩展名或路径过滤造成的遗漏。
⑤分支长期开发时,先同步最新基准代码,再重新执行扫描,避免分支内容与既有基线差异过大。
Checkmarx项目页面的结果与分支关联,因此检查异常扫描时,应始终在同一Project和Branch下比较对应Scan History。
3、增量扫描自动变成全量扫描
①查看当前【增量阈值】究竟来自租户设置还是项目规则。
②检查累计代码变化是否已经超过该比例。
③确认项目至少有一次成功的【全量扫描】。
④如果变化量确实超过阈值,不要把自动全量扫描判断成配置失败。
⑤项目经常自动回退全量时,再分析是阈值过低,还是全量基线维护间隔过长。
Checkmarx明确规定,SAST增量变化超过阈值后会转换为全量扫描;默认阈值为7%,自定义后则按照当前项目实际配置判断。
三、增量扫描怎么保持稳定
阈值解决的是单次变化规模问题,长期稳定性则取决于全量基线和团队提交方式。如果只不断提高阈值,虽然能减少自动全量任务,却可能让增量分析范围越来越大。
1、建立固定的全量基线
①主分支定期安排【全量扫描】,不要长期只运行增量任务。
②大规模合并、目录重构或依赖关系明显改变后,主动执行【全量扫描】重新校准。
③功能分支开发时间较长时,及时同步主分支,减少与基线之间的长期差异。
④记录每次重新建立基线后的增量扫描耗时和扫描范围,用于比较配置效果。
2、根据扫描历史调整阈值
①统计一段时间内【增量扫描】和【自动全量扫描】的次数。
②如果多数普通提交刚好超过当前阈值,可小幅提高【增量阈值】。
③如果扫描范围已经很大,即使没有超过阈值,也应优先重新执行全量扫描。
④项目经常接近【10%】上限时,应重新规划提交粒度和全量扫描周期,而不是继续依赖阈值解决。当前SAST可配置的增量阈值上限就是10%。
总结
Checkmarx增量扫描是否合理,不能只用本次修改了多少文件来判断,还要结合最近一次全量基线和代码依赖关系观察。稳定的增量扫描策略应兼顾反馈速度与分析覆盖,避免为了减少全量任务而持续放宽阈值。通过扫描历史长期观察范围和耗时变化,更容易判断当前策略是否真正适合项目。如需进一步了解Checkmarx增量扫描阈值配置、扫描范围异常判断与全量基线管理,欢迎联系咨询。