返回首页

sa-tests-db:静态分析中的数据流

本文描述了静态分析器在 sa-tests-db 语料库上的演进:从基于模式的搜索到带有过程间和控制流分析的混合数据流。讨论了模式的局限性、数据流的优势,以及按照俄罗斯国家标准 R 71207-2024 的外部基准的作用。

从模式到数据流:sa-tests-db 和俄罗斯国家标准
Advertisement 728x90

静态分析的演进:从模式匹配到数据流分析在sa-tests-db中的应用

静态分析器通过使用sa-tests-db语料库对六种语言(C、C#、Go、Java、JavaScript、Python)进行分析,符合GOST R 71207-2024标准。这得益于从基于模式的搜索转向数据流分析,该方法考虑了过程间调用、控制流和结构中的字段敏感性,从而最小化各类错误类型的误报和漏报。

基于模式搜索的局限性

基于模式的分析在几行代码的上下文中查找危险调用,如sprintfsystemSPI_execute。它适用于快速初步扫描,但存在局限性:

  • 不考虑数据在定义点和使用点之间的流动。
  • 误报源于可疑代码的偶然邻近,而无实际关联。
  • 会遗漏通过函数或文件传递的长链。

在外部sa-tests-db语料库上,这些局限性迅速显现,促使转向数据流分析。

Google AdInline article slot

数据流分析

转向数据流分析回答了这个问题:来自源(如getenvrecvfgets)的数据能否到达危险接收点?这构建了值定义和使用之间连接的关系图。

优势:

  • 通过验证实际路径减少误报。
  • 发现函数间路径。

在实现中,分析器跟踪污点传播,排除无关值。

Google AdInline article slot

过程间分析

函数内数据流不足以应对通过调用链传递的真实漏洞。过程间层连接参数与参数:

  • 跟踪返回值。
  • 分析调用中的参数。
  • 构建跨文件路径的调用图。

没有这一层,模式仅能看到局部块,失去系统上下文。

考虑控制流

数据路径的存在并不保证漏洞。路径可能被以下因素阻断:

Google AdInline article slot
  • 验证。
  • 错误处理。
  • 权限检查。
  • 逻辑上不可达的分支。

集成控制流分析对路径进行分类:

  • 无条件(高优先级)。
  • 有条件(需要手动审查)。

这过滤了噪声,提高了报告准确性。

结构中的字段敏感性

在结构中,一个字段的污点不应传播到整个结构。区分字段可减少误报:

  • 为每个字段单独跟踪污点
  • 在到达接收点时排除安全字段。

这些细节对于具有复杂数据的生产代码至关重要。

混合分析器架构

最优方法结合了多个阶段:

  • 基于模式的预扫描以筛选候选。
  • 过滤明显安全的情况。
  • 对剩余部分进行完整数据流分析。
  • 基于确认路径进行优先级排序。
  • 降低未确认路径的等级。

这平衡了速度和准确性。

sa-tests-db在开发中的作用

sa-tests-db集合作为外部基准,用于检测符合GOST R 71207-2024的错误类型。它在变更期间检测回归:

  • 指标:按语言划分的误报和漏报。
  • 不是聚合平均值,而是按类别细分。

2026年3月23日的一次运行确认了C、C#、Go、Java、JS、Python的资格。

关键要点

  • 模式仅适用于快速过滤;数据流对于准确性至关重要。
  • 过程间+控制流分析可发现80%的真实路径。
  • 字段敏感性在结构中减少30–50%的噪声。
  • sa-tests-db是回归测试,而非一次性演示。
  • GOST要求按错误类型提供指标,而非总体数据。

— Editorial Team

Advertisement 728x90

继续阅读