软件漏洞分析第4章数据流分析读书笔记。

  • 数据流分析
    • 基本原理
      • 基本概念
        • 程序路径
          • 流不敏感
          • 流敏感
          • 路径敏感
        • 路径范围
          • 过程内(函数内)
          • 过程间(函数间)
      • 检测程序漏洞
      • 辅助支持技术
    • 方法实现
      • 检测
      • 作为辅助技术
    • 实例分析
      • 检测
      • 作为辅助技术
    • 典型工具
      • Fortify SCA
      • Coverity Prevent
      • FindBugs

基本原理

在应用数据流分析直接进行漏洞检测时,可以通过词法分析、语法分析、控制流分析以及其他程序分析技术对代码进行分析,将程序代码转化为抽象语法树(abstract syntax tree, AST)、三地址码(three address code, TAC)等关键代码中间表示,并且获得程序的控制流图、调用图等数据结构。

方法实现

抽象语法树:抽象语法树是程序抽象语法结构的树状表现形式。
三地址码:三地址码类似汇编指令,有不多于三个的运算分量。
静态单赋值形式:静态单赋值形式是一种程序语句或者指令的表示形式,其代码通常是指静态单赋值形式的三地址码。
控制流图:控制流图通常是指用于描述程序过程内的控制流的有向图。
调用图:调用图是描述程序中函数之间的调用和被调用关系的有向图。

漏洞分析规则

  1. 规则的状态机模型
  2. 变量取值相关的检测规则

辅助分析

  1. 指向分析
  2. 取值分析

典型工具

Fortify SCA:通过分析应用程序可能会执行的所有路径,从源代码层次识别软件的漏洞,并提供完整的漏洞分析报告。该工具主要有四个部分组成:

  1. 前端,用于源代码的分析。
  2. 分析引擎,包括数据流引擎、语义疫情、结构引擎、控制流引擎和配置引擎。
  3. 分析规则库,不同缺陷类型的分析规则。
  4. 审计工作台或控制管理界面,驱动整个分析过程。

Coverity Prevent:与 Fortiy SCA 相似,但是 Coverity Prevent 比较重视检测的深度和精度。

FindBugs:该工具倾向于使用简单的、应用范围更广的技术来检测漏洞,而不是使用复杂的、特定的程序缺陷技术。主要分析单线程正确性问题、线程同步正确性问题、性能问题和程序安全问题。该工具的主要检测器有:

  1. 类结构和类的层级结构的分析。
  2. 线性扫描代码。
  3. 程序结构分析。
  4. 数据流分析。