Fortify内置规则覆盖面很广,但企业自研框架、封装接口和内部安全规范,未必都能被准确识别。这时可以补充自定义规则。处理“Fortify自定义规则怎么创建Fortify自定义规则不生效怎么排查”,建议先准备一段最小测试代码,确认规则能命中,再放进正式项目。
一、Fortify自定义规则怎么创建
自定义规则可以描述危险输入、敏感操作、净化函数,也可以检查特定函数调用和代码结构。创建前先说清楚规则想解决什么问题,别把几个检测目标硬塞进一条规则。
1、先确定规则类型
不同场景需要选择不同模板:
(1)识别外部输入,可使用数据流源规则。
(2)识别危险函数,可使用数据流汇规则。
(3)声明校验或转义函数,可使用净化规则。
(4)检查固定API、语句或代码结构,可选择语义、结构等规则。
若目的是让Fortify理解企业封装的校验函数,可以从净化规则入手;若要发现内部危险接口,则更适合从数据流汇规则开始。Fortify的自定义规则工具支持创建和编辑扩展规则,用来补充自研代码及第三方库的行为信息。
2、使用Custom Rules Editor创建规则
①打开【Fortify Custom Rules Editor】。
②新建自定义Rulepack。
③选择规则模板和目标语言。
④填写唯一的规则ID与漏洞分类。
⑤配置包名、类名、函数名或匹配条件。
⑥保存为XML或二进制规则包。
函数、类和命名空间最好按真实代码填写。可以先写得精确一点,确认能命中后再逐步放宽。上来就使用大范围通配符,很容易把正常调用也扫进去。
Custom Rules Editor提供图形化的规则创建与编辑界面。对应的自定义规则资料随SAST安装资源提供,当前工具包仍包含该编辑器。
3、从Audit Workbench生成函数规则
已经有扫描结果时,也可以直接从函数列表生成规则。
①使用Audit Workbench打开FPR。
②切换到【Functions】视图。
③找到需要描述的函数。
④右击并选择【Generate Rule for Function】。
⑤选择合适的规则模板。
⑥按向导填写参数并保存到自定义Rulepack。
例如创建净化规则时,可以指定语言、包、类、函数及被净化的参数。完成后重新导入规则包并扫描,再用【Show Matched Rules】检查函数是否匹配到新规则。
二、怎样让自定义规则参与Fortify扫描
规则文件创建完成,只代表内容已经保存。扫描器没有加载对应Rulepack,结果里当然看不到变化。
1、通过规则目录加载
Fortify默认会从自定义规则目录读取规则文件,常用位置为:
①将XML或BIN规则文件复制到该目录。
②确认运行扫描的账号有读取权限。
③关闭并重新打开相关工具。
④清理旧结果后重新扫描。
⑤查看日志中是否出现规则加载错误。
Visual Studio等集成工具导入自定义安全内容后,也会将规则保存到该目录。支持导入的常见格式为XML和BIN。
2、在命令行中指定规则文件
流水线或多套规则并行测试时,可以在扫描命令中明确传入路径:
-rules既可以指定单个规则包,也可以指定目录。传入目录后,扫描器会加载其中的XML和BIN文件;该参数也可以重复使用,从多个位置加载规则。
3、在Audit Workbench中导入
①打开【Options】→【Options】。
②进入【Security Content Management】。
③点击【Import Custom Security Content】。
④选择自定义规则文件。
⑤确认导入后重新执行扫描。
⑥在函数视图或问题列表中核对结果。
只刷新FPR界面不会重新分析代码。规则导入后,需要再次扫描,新的匹配结果才会写入项目。
三、Fortify自定义规则不生效怎么排查
规则没产生问题,并不一定是规则完全没有加载。它可能已经匹配到函数,只是数据流没有走到对应危险点。排查时要把“加载失败、匹配失败、未形成漏洞路径”分开看。
1、先确认规则是否被加载
①检查规则文件路径和扩展名。
②确认CI节点使用的是同一份规则包。
③查看扫描日志中的XML、Rulepack和解析报错。
④检查规则ID是否重复。
⑤使用绝对路径重新执行一次扫描。
⑥必要时查看Custom Rules Editor日志。
Custom Rules Editor日志通常位于用户目录下的Fortify日志文件夹,Windows中可在AppDataLocalFortify下查找对应版本的CRE日志。
2、检查函数和语言匹配条件
①核对规则选择的编程语言。
②检查包名、命名空间和类名。
③确认函数名及参数数量。
④留意重载函数和静态方法。
⑤减少正则条件后重新测试。
⑥在【Functions】视图执行【Show Matched Rules】。
如果这里能看到自定义规则ID,说明规则已经匹配函数。此时没有生成漏洞,可能是输入没有到达危险函数,或者净化函数已经中断数据流。规则匹配函数和最终产生问题,本来就是两个不同阶段。
3、用最小代码隔离测试
①准备一个明确应当命中的测试文件。
②保留一条输入到危险点的简单路径。
③只加载当前自定义规则。
④加入-no-default-issue-rules减少干扰。
⑤扫描后检查FPR和函数匹配结果。
⑥通过后再放回完整项目。
Fortify提供关闭默认问题规则、源规则或全部默认规则的扫描选项,适合单独验证自定义规则。测试完成后要恢复正常配置,避免正式扫描漏掉内置检测。
总结
“Fortify自定义规则怎么创建Fortify自定义规则不生效怎么排查”的关键,是把规则加载、函数匹配和漏洞路径分开验证。先用小样例跑通,再接入完整工程,定位会轻松很多。希望本文能为大家维护Fortify自定义规则提供参考,如需进一步了解相关内容,欢迎联系咨询。