关于Checkmarx增量扫描的开启方法,还有出现漏报问题时的排查思路,不能简单把增量扫描理解成扫描速度变快;增量扫描的核心作用是缩小扫描的范围,一般只扫描和上一次基准扫描相比发生改动的代码,还有和改动代码存在关联的部分内容。根据Checkmarx官方文档的说明,SAST增量扫描会对上次扫描之后出现的代码改动进行检测,以此缩短扫描的时长,降低资源的消耗;同时文档也提到,全量扫描的结果会更完整,但是花费的时间也会更长。
一、Checkmarx增量扫描怎么开启
在开启增量扫描之前,要先确认当前项目已经有可以使用的基准扫描结果;不少人第一次做扫描就想直接用增量模式,这种做法并不合适,增量扫描需要明确对比的基准,没有稳定的历史扫描结果作为参照,工具就没办法准确判断哪些文件是真正发生了改动的。
1、先完成一次全量扫描
项目第一次接入Checkmarx工具的时候,建议先运行一次完整的全量扫描,把代码内容、规则集合、分支信息、项目配置还有扫描范围都固定下来;Checkmarx的官方文档里也有说明,增量扫描一般需要项目至少有一次已经完成的全量扫描,来作为后续扫描的基础。
2、在项目扫描配置中开启增量
进入项目的扫描配置页面后,找到和SAST相关的扫描选项,把增量扫描的开关打开。
如果是通过CLI命令或者配置文件来设置,可以留意【--sast-incremental】或者【scan.config.sast.incremental】这一类的配置项;官方的参数说明里提到,当这个选项设置为true时,SAST扫描就只会检测上次扫描之后的代码改动,设置为false的时候,就会执行全量扫描。
3、确认扫描器类型
不同扫描器的增量扫描功能并不完全一致;从当前Checkmarx One的文档内容来看,SAST是支持增量扫描的,也有运行扫描的相关说明提到,SAST和API Security都支持增量扫描,如果选择了其他类型的扫描器,扫描过程可能会自动切换成全量模式。实际操作的时候要结合平台的版本,还有已经启用的扫描器来确认,不能默认SAST、SCA、KICS、Secret Detection这些扫描器都遵循一样的增量运行逻辑。
二、Checkmarx增量扫描漏报时该怎么排查
遇到增量扫描出现漏报的情况时,不要只怀疑规则库存在问题;增量扫描本来就不能完全替代全量扫描,如果基准设置、分支选择、提交范围或者依赖关系的处理有偏差,就可能出现关键代码没有被纳入本次扫描的情况。
1、检查基准扫描是否正确
首先要确认增量扫描引用的基准,是不是来自同一个项目、同一个分支、同一套规则集,还有同一类扫描配置;如果上一次全量扫描运行的是main分支,这一次增量扫描针对的是feature分支,但是项目映射或者分支的设置没有对应清楚,最终的扫描结果就可能对不上。
2、检查代码变化是否被识别
增量扫描的运行依赖工具对代码改动的识别;旧版本CxSAST的文档里提到,增量扫描会通过对比文件的哈希值,来判断哪些文件出现了改动,也就是说,如果代码打包的方式、文件的路径、分支的名称或者上传的方式出现异常,工具可能就没法按照预期识别出真实的代码改动。
3、检查变化比例和自动转全量
还有一些特殊情况,就算手动选择了增量模式,系统也可能自动切换成全量扫描;Checkmarx的文档里提到,系统默认设置了7%的阈值,当代码改动比例超过这个阈值时,扫描就会自动转换为全量模式,旧版的文档也有相关说明,如果新增的源代码占比超过7%,就算勾选了增量选项,最终也会运行全量扫描。
4、检查规则和排除配置
漏报问题也有可能和规则集、Preset、排除路径、语言识别或者文件过滤的设置有关;比如新增的代码处在被排除的目录当中,或者某一类文件没有被工具正确识别,增量扫描自然就不会输出预期的检测结果。排查的时候要查看扫描日志、文件统计信息、语言识别结果还有排除规则,不能只盯着最终的漏洞列表来判断问题。
三、增量扫描和全量扫描怎么配合使用
增量扫描适合用在日常开发和流水线的快速反馈场景里,但不应该完全替代全量扫描;尤其是在设置安全基线、版本发布、规则升级,还有进行大范围代码重构之后,最好重新运行一次全量扫描。
1、日常提交用增量
在开发分支提交代码,或者处理合并请求的阶段,可以使用增量扫描来提升反馈的速度;这样开发人员能更快看到新增代码带来的安全问题,不用每次都等待完整的项目扫描结束。
2、关键节点跑全量
在版本发布之前、主分支合并完成后、规则集调整之后、依赖结构出现变化之后,都要安排全量扫描;因为有些安全问题不只是出现在新增的文件里,还和跨文件调用、公共函数、数据流路径有关,只依靠增量扫描可能没法完整检测出这些问题。
3、保留扫描记录
每次发现漏报问题,都要记录下扫描的类型、对应的分支、提交编号、规则集、排除配置、是否开启增量、是否自动转为全量这些信息;这样后续才能判断问题是出在配置上,还是工具本身的能力边界,又或者是规则本身需要进行调整。
总结
总的来说,关于Checkmarx增量扫描的开启和漏报排查,可以按照先运行全量扫描建立基准、再开启增量相关参数、确认扫描器的支持情况、检查分支设置和代码改动识别、必要时切换回全量扫描的思路来处理;增量扫描可以提升日常的扫描效率,但它的运行效果依赖基准结果的准确性和配置的一致性。遇到疑似漏报的情况,不要只查看漏洞列表,要同时核对基准扫描情况、代码改动情况、排除规则、扫描日志还有规则集,这样才能把问题的原因定位清楚。