项目持续迭代后,扫描结果中往往同时存在历史遗留问题、反复出现的问题和本次修改引入的问题。如果没有稳定的参照扫描,只比较两次结果总数,很容易把规则调整、扫描范围扩大或文件路径变化误认为代码新增风险。了解Checkmarx扫描基线怎么建立Checkmarx基线更新后新增问题怎么识别,可以帮助团队明确比较起点,让后续修复和版本评审更有依据。
一、Checkmarx扫描基线怎么建立
Checkmarx中的扫描基线,通常是同一项目、同一分支上成功完成的一次完整SAST扫描。后续的增量扫描和结果比较,会以已有扫描结果作为参照,因此第一次建立基线时不能只扫描临时修改的文件。
1、确定基线对应的代码版本
建立基线前,需要选择代码相对稳定的主分支、发布分支或已经完成测试的版本节点。
①确认需要建立基线的项目和代码仓库。
②选择主分支或准备发布的分支。
③记录当前代码提交编号。
④确认源码目录已经完整提交。
⑤清理构建产物、临时文件和无关测试数据。
⑥记录当前使用的查询预设、排除规则和语言模式。
不要在代码分支、查询预设和扫描目录同时变化的情况下建立基线。后续结果发生波动时,将很难判断变化到底来自代码还是扫描配置。
2、执行一次完整SAST扫描
①登录Checkmarx One。
②进入【工作区】→【项目】。
③找到目标项目,点击【扫描】。
④在【扫描源】中选择代码仓库或上传压缩文件。
⑤确认仓库地址、分支名称或上传文件无误。
⑥在扫描器列表中开启【SAST】。
⑦关闭【增量扫描】。
⑧核对查询预设、文件筛选和语言设置。
⑨点击【开始扫描】。
第一次扫描应覆盖项目的完整源码。扫描失败、结果不完整或只包含部分目录的任务,不适合作为后续比较基线。
3、确认基线扫描有效
①打开目标项目。
②进入【扫描历史】。
③找到刚刚完成的扫描。
④确认扫描状态为成功完成。
⑤检查【扫描类型】是否为完整扫描。
⑥核对分支、文件数量、代码行数和查询预设。
⑦记录扫描编号和完成时间。
如果扫描文件数量明显少于项目实际文件,或者预设与项目原有规则不一致,应修正配置后重新执行完整扫描。基线一旦确定,相关信息需要保留,不能只记住扫描日期。
4、配置后续增量扫描
①在项目列表中点击目标项目右侧的更多操作按钮。
②进入【项目设置】→【规则】。
③点击【添加规则】。
④在扫描器中选择【SAST】。
⑤选择与增量扫描相关的参数。
⑥设置是否允许单次扫描覆盖该规则。
⑦根据项目规模调整增量变化阈值。
⑧点击【保存】。
后续手动发起扫描时,也可以在扫描页面勾选【增量扫描】。如果代码变化超过设定阈值,平台会改为执行完整扫描,避免只分析局部文件造成结果缺失。
二、Checkmarx基线更新后新增问题怎么识别
基线更新后,不能简单地用“当前问题总数减去原问题总数”计算新增问题。旧问题可能被修复,也可能因路径变化重新匹配;查询预设增加规则后,历史代码中的问题也可能第一次被检测出来。
1、直接比较两次SAST扫描
①进入【工作区】→【项目】。
②打开目标项目。
③点击【扫描历史】。
④勾选原基线扫描和更新后的扫描。
⑤点击【比较SAST结果】。
⑥展开对应的语言和漏洞类型。
⑦点击具体结果查看代码路径。
用于比较的两次扫描应来自同一个项目、同一个仓库分支或同一种压缩包结构。扫描对象不同,即使页面可以进行比较,结果也可能缺少实际判断价值。
2、区分新增、重复和已修复问题
比较结果中,【新增】表示新扫描中出现、旧扫描中没有匹配记录的问题;【重复】表示两次扫描中都存在的问题;【已修复】表示旧扫描存在,但新扫描已经无法检测到的问题。
查看新增结果时,还要继续打开问题详情,核对查询名称、文件路径、源节点、目标节点和完整攻击路径。仅凭严重程度和漏洞名称相同,不能确认两条结果属于同一个问题。
3、确认新增问题是否由代码引入
①打开新增问题的详情。
②记录问题所在文件和代码位置。
③回到代码仓库查看基线提交与当前提交之间的差异。
④确认相关文件是否在本次版本中新增或修改。
⑤检查危险数据来源、传播过程和目标调用是否由本次修改形成。
⑥将确认后的问题分配给对应开发人员。
如果问题出现在本次新增文件或修改方法中,并且攻击路径与代码变化一致,通常可以判断为本次版本引入的问题。
4、排除扫描配置造成的新增结果
①分别打开两次扫描的详细信息。
②对比查询预设名称。
③检查文件排除规则是否变化。
④核对扫描目录、代码行数和文件数量。
⑤确认两次扫描使用相同的语言模式。
⑥检查是否新增了自定义查询。
⑦确认查询版本或严重程度规则是否发生调整。
新的查询预设可能在原有代码中发现过去未检测的问题。这类结果会显示为新增,但不代表漏洞一定是在本次代码提交中产生。评审时应标记为“规则变化发现”,不要直接计入版本新增缺陷。
三、基线更新后怎么保证新增问题判断连续
基线更新并不是把旧扫描简单替换掉。更新前后如果没有保留清晰的交接关系,后续看到的“新增问题”就可能混入规则变化、扫描范围调整和文件结构变化。比较稳妥的做法,是先完成新旧基线核对,再正式切换后续扫描的参照点。
1、更新前先完成一次固定条件的完整扫描
①确认主分支已经合并本阶段准备纳入基线的代码。
②检查查询预设、语言模式和文件排除规则是否已经确定。
③进入【工作区】→【项目】,打开目标项目。
④点击【扫描】,选择当前主分支或完整源码包。
⑤开启【SAST】,关闭【增量扫描】。
⑥确认扫描范围后启动完整扫描。
⑦扫描结束后进入【扫描历史】,核对分支、提交编号、文件数量和代码行数。
这次完整扫描应当代表当前阶段真实、稳定的代码状态。临时关闭部分查询、源码上传不完整或扫描中途失败的结果,都不适合直接作为新基线。
2、在切换基线前完成新旧结果交接
①进入【扫描历史】。
②勾选旧基线扫描和准备作为新基线的完整扫描。
③点击【比较SAST结果】。
④分别查看【新增】【重复】和【已修复】结果。
⑤对新增问题逐条核对代码提交和扫描配置。
⑥确认问题来自代码变化还是查询范围变化。
⑦完成问题归类后,再确定新扫描为下一阶段参照。
对于查询预设新增后检测出来的问题,可以单独标记为规则调整发现;对于本次代码提交直接形成的新攻击路径,则应归入版本新增问题。两类结果都可能显示为新增,但修复责任和评审口径并不相同。
3、保留能够追溯基线变化的记录
基线更新后,应同步记录旧基线扫描编号、新基线扫描编号、代码提交、分支名称、查询预设、排除规则和更新时间。
如果项目使用缺陷管理平台,还可以把基线变更记录关联到发布任务或安全评审任务中。后续发现新增问题数量异常时,团队可以快速判断是代码发生了集中变化,还是扫描配置改变了检测范围。
旧基线不宜在新基线建立后立即清理。至少保留一个完整版本周期,便于重新比较问题路径、状态继承和修复结果。等新基线经过后续扫描验证,结果连续性没有异常,再进行历史数据整理会更稳妥。
总结
扫描基线真正解决的是“以哪一次代码和哪一套规则作为比较起点”的问题。处理Checkmarx扫描基线怎么建立Checkmarx基线更新后新增问题怎么识别时,既要用完整扫描建立稳定参照,也要在更新基线前完成新旧结果比较,并区分代码变更、查询调整和扫描范围变化带来的新增结果。把基线信息和变更原因保留下来,后续的漏洞修复、版本评审和结果追溯才不会因为参照点变化而失去连续性。如有相关使用需求,欢迎联系咨询。