新增了一个接口文件,流水线扫描正常结束,报告里却没有它的相关信息。遇到这种情况,应先确认文件是否进入翻译阶段,再检查扫描和结果展示。Fortify静态分析扫描的是翻译后形成的中间数据,源码目录里有文件,并不代表本次任务已经分析了它。另外,旧版增量分析与新版结果对比不同,配置前需要先确认产品和版本。
一、Fortify如何配置增量扫描
这里讨论Fortify SAST源码扫描。官方20.2.0发布说明已明确移除Static Code Analyzer的Incremental Analysis支持,不能直接将旧教程中的增量参数用于新版。WebInspect的增量爬取属于另一类功能,也不适用于检查新增源文件。
1、核对现有任务采用的方式
有些流水线把“只上传修改文件”“复用build ID”或“只显示新增漏洞”称为增量扫描,但这些设置并不代表引擎执行了旧版增量分析。
①查看sourceanalyzer版本和实际执行命令,检查是否仍使用-incremental-base、-incremental等旧参数。
②核对任务是本地翻译、本地扫描,还是通过ScanCentral提交源码包或已翻译项目。
③检查报告是否仅筛选新增问题,避免将结果展示方式误认为扫描范围。
2、维护支持增量分析的旧版任务
以18.20官方流程为例,初次完整扫描使用-incremental-base建立基线,后续使用-incremental。即使扫描阶段采用增量方式,源码修改后仍要求重新翻译整个项目,不能只翻译差异文件。
①完成项目翻译后,在初次扫描命令中配置-incremental-base,保留对应build ID、分析数据和FPR。
②代码更新后重新翻译整个项目,再使用-incremental执行后续扫描。
③按该版本要求管理输出FPR和结果合并,确认基线、项目及后续任务对应一致。
3、在新版任务中更新翻译后复扫
使用Audit Workbench本地复扫时,也要先更新翻译。反复扫描旧中间数据,即使每次任务都成功,也无法检查新加入的源码。
①打开本地项目的FPR,点击【Tools】→【Rescan Project】,核对build ID与源码路径。
②源码已经变化时,点击【Update Project Translation】;此入口不可用时,回到原构建或翻译流程更新数据。
③核对扫描选项后点击【Scan】。该复扫方式要求在原扫描机器上执行。
二、Fortify增量扫描遗漏新增文件是什么原因
定位时可以把新增文件路径列成清单,与上传内容、翻译文件列表逐层比较。在哪一步消失,就先检查那一步;不要仅凭漏洞数量没有增加,就认定新增文件被遗漏。
1、文件没有进入翻译或源码包
常见情况包括:流水线检出了旧提交,新文件尚未纳入构建,打包脚本只收集了部分目录,或者差异文件列表漏掉新增项。构建缓存也可能使需要捕获的编译过程没有实际发生。
①检查流水线检出的提交,以及新增文件在工作目录中的实际路径。
②使用ScanCentral时,查看提交包内容,确认目录、扩展名和过滤规则没有排除该文件。
③本地翻译后,运行sourceanalyzer-b项目标识-show-files,查找目标路径。
④文件不在列表中时,检查构建目标、翻译输入及执行日志,必要时用干净工作目录重新构建。
2、沿用旧build ID却未正确更新文件范围
build ID用于关联翻译数据,不会自动监视目录变化。不同语言的翻译要求也有差别。例如22.1文档要求JavaScript、TypeScript、PHP、Python和Ruby的全部源文件在一次调用中共同指定,不支持后续调用继续追加新文件。
①对照所用版本的语言章节,确认翻译命令符合要求。
②检查翻译阶段与扫描阶段是否使用同一build ID,以及数据是否位于实际扫描环境。
③排查旧数据干扰时,在独立工作目录使用新的build ID重新翻译,先核对文件列表再扫描。
3、翻译异常或结果条件造成误判
文件已进入列表,也可能出现解析、依赖或版本支持方面的异常。另一方面,没有漏洞并不等于没有扫描,正常文件本来就可能不产生安全问题。
①运行sourceanalyzer-b项目标识-show-build-warnings,检查翻译警告和错误。
②在Audit Workbench中查看【Certification】,核对相关异常,再检查扫描日志是否完整。
③核对规则包、严重度及审计过滤条件,区分“未分析”“分析异常”和“已分析但未发现问题”。
三、Fortify补扫后如何确认新增文件已覆盖
修正配置后,先验证文件范围,再比较漏洞结果。这样即使补扫前后数量相同,也能说明新增文件是否已经纳入分析。
1、留下可回查的覆盖依据
①保存本次提交编号、build ID、翻译文件列表及扫描日志,逐项确认新增路径。
②打开新FPR,检查【Certification】中的异常是否解决,并核对对应扫描任务。
③对关键新增接口补充人工代码评审,记录扫描范围及必要的验证结论。
2、查看新旧问题变化
复扫结果合并后,可以查看新增、持续存在和移除的问题。不过,这些分组用于比较发现结果,不能代替源码覆盖检查。
①在【All】页签中,将【Group By】设为【New Issue】,展开【Issue New】查看新增问题。
②展开【Issue Updated】检查持续存在的问题;需要查看移除项时,选择【Options】→【Show Removed Issues】。
总结
新增文件是否被扫描,最好能从翻译清单和任务记录中直接确认。把这一步放到流水线里,后续即使目录调整、模块拆分,也容易及时发现范围变化。对于旧版增量任务,还可以整理一份版本与参数记录,避免升级后继续沿用失效配置。希望这些检查方法能帮助大家减少盲目重跑,让每次补扫都有明确依据。后续开展Fortify相关工作时,如有需要,欢迎联系我们交流。