变量进入封装函数后,路径里只剩一条调用记录,未必表示分析已经停止。Fortify展示的是与问题有关的证据,不是完整的运行日志。关于“Fortify如何核查污点分析路径Fortify数据流路径中断时如何定位关键调用”,下面以Audit Workbench英文界面为例说明。
一、Fortify如何核查污点分析路径
先确认告警来自数据流分析,再检查输入、处理过程和危险操作。并非每类告警都有完整的源到汇路径。
1、打开结果并对照扫描源码
本地代码已经修改,旧FPR中的行号便可能对不上,核查前要确认扫描对应的提交。
①打开待核查FPR,在【Issues】中选择目标告警,记录类别、文件和问题标识。
②查看【Details】中的说明,在【Source Code】中对照相关代码。
③比较扫描任务与本地源码版本;不一致时,切换到对应提交再查。
2、沿路径检查数据怎样传递
变量改名不等于换了一份数据。函数接收输入后,要继续看参数、字段和返回关系。
①在【Analysis Trace】中依次选择节点,对照源码确认输入源、赋值、调用和危险操作。
②查看参数流向;遇到类似functionA(x:y)的记录,核对数据从哪个参数、返回值或对象字段传到哪里。
③展开节点下的子项及支持性证据,记录关键调用前后的变量和处理逻辑。
④核对过滤函数是否处理了本条路径实际使用的值,以及处理方式是否适用于当前风险。
3、定位关键函数的调用与声明
路径跳到封装函数时,可以从函数视图核查调用位置及匹配规则。
①点击【Options】→【Show View】→【Functions】,找到对应函数。
②右键选择【Find Usages】,在【Search】中点击结果;有源码定义时,使用【Open Declaration】查看实现。
③右键选择【Show Matched Rules】,记录匹配规则及规则包,结合路径判断函数承担的角色。
二、Fortify数据流路径中断时如何定位关键调用
记下最后一个能确认的节点,再列出其后预期出现的调用,围绕这个边界排查。
1、判断是显示跳转还是缺少传播关系
函数内部没有逐行显示,不能单独作为分析遗漏的依据。
①选中边界前后的【Analysis Trace】节点,比较参数、返回值和字段是否已经建立关系。
②在【Functions】中打开实现,检查数据是否原样返回、复制到成员,或写入另一对象。
③若没有对应告警,从源码列出预期的输入源、关键调用和危险操作,作为后续复核对象。
2、检查关键实现是否参与翻译
文件存在于仓库中,不代表它已进入本次分析。依赖解析失败,也可能影响调用关系。
①在扫描机器上执行sourceanalyzer-b build_id-show-files,将build_id换成实际构建标识,检查关键文件是否在列表中。
②执行sourceanalyzer-b build_id-show-build-warnings,查看翻译阶段的错误与警告。
③对照构建命令核对源码范围、排除配置、头文件及依赖库,确认调用对应的实现版本。
④修正输入后重新翻译和扫描,保留原始结果,不仅刷新Workbench的显示。
3、核查动态调用与外部组件
接口、反射、回调和跨进程传递,需要结合语言支持和扫描配置分别判断。
①核对实际实现类、方法重载及参数类型,排除同名但不同签名的函数。
②对回调和函数作为参数传递的代码,检查分析设置及超时记录;支持高阶分析的语言,还要核对该功能是否被关闭。
③数据经过消息队列、文件或数据库后被另一个程序读取时,分别检查两端,不假定一次扫描会自动连接跨进程路径。
④对缺少源码的组件,查明输入输出语义及规则覆盖情况,再决定是否需要补充建模。
4、检查规则是否错误终止污点传播
校验、编码和普通数据转换的作用不同。自定义规则把转换函数当成清洗函数,可能改变分析结果。
①在【Functions】中对目标函数执行【Show Matched Rules】,核对是否匹配了预期之外的规则。
②比较本次与历史扫描使用的工具版本、规则包及自定义规则,检查近期变更。
③在独立测试项目中验证输入到输出的实际关系,再调整对应传播或清洗规则。
④不为补齐路径而把所有函数设成输入源,也不通过添加清洗规则简单消除告警。
三、Fortify路径核查后如何验证结论
补齐文件或修正规则后,要确认变化来自哪项调整,同时保留仍然无法判断的部分。
1、建立可以对照的最小样例
样例保留关键调用方式,删除与数据传递无关的业务代码。
①保留相同输入源、封装函数及危险操作,使用相同工具和规则扫描。
②增加一个按当前风险要求正确处理数据的对照版本,检查两者结果是否符合预期。
③回到完整项目重新扫描,在【Analysis Trace】中复核传播关系,不只比较告警数量。
2、记录关键调用和证据缺口
审计记录应让接手的人知道查过什么,不能只写“路径不完整”。
①记录函数签名、调用位置、扫描版本、匹配规则和相关翻译警告。
②在【Audit】的评论区域写明确认依据;缺少外部组件实现或运行证据时,注明待补内容后保存。
总结
希望这篇关于“Fortify如何核查污点分析路径Fortify数据流路径中断时如何定位关键调用”的内容能帮到大家。安全分析需要工具提供线索,也需要开发与审计人员共同理解业务。面对复杂代码,有时需要多花一些时间核实细节,清楚的依据能让讨论更有效,也方便后续维护。日常经验积累下来,团队对问题的判断会更有把握,修复工作也更容易落实。希望大家在实际项目中有所收获,把安全要求融入持续的开发协作。有Fortify软件版本、授权配置或部署方面的需求,欢迎联系我们进一步了解。