软件漏洞分析技术:数据流分析
软件漏洞分析第4章数据流分析读书笔记。
- 数据流分析
- 基本原理
- 基本概念
- 程序路径
- 流不敏感
- 流敏感
- 路径敏感
- 路径范围
- 过程内(函数内)
- 过程间(函数间)
- 检测程序漏洞
- 辅助支持技术
- 方法实现
- 检测
- 作为辅助技术
- 实例分析
- 检测
- 作为辅助技术
- 典型工具
- Fortify SCA
- Coverity Prevent
- FindBugs
基本原理
在应用数据流分析直接进行漏洞检测时,可以通过词法分析、语法分析、控制流分析以及其他程序分析技术对代码进行分析,将程序代码转化为抽象语法树(abstract syntax tree, AST)、三地址码(three address code, TAC)等关键代码中间表示,并且获得程序的控制流图、调用图等数据结构。
方法实现
抽象语法树:抽象语法树是程序抽象语法结构的树状表现形式。
三地址码:三地址码类似汇编指令,有不多于三个的运算分量。
静态单赋值形式:静态单赋值形式是一种程序语句或者指令的表示形式,其代码通常是指静态单赋值形式的三地址码。
控制流图:控制流图通常是指用于描述程序过程内的控制流的有向图。
调用图:调用图是描述程序中函数之间的调用和被调用关系的有向图。
漏洞分析规则
- 规则的状态机模型
- 变量取值相关的检测规则
辅助分析
- 指向分析
- 取值分析
典型工具
Fortify SCA:通过分析应用程序可能会执行的所有路径,从源代码层次识别软件的漏洞,并提供完整的漏洞分析报告。该工具主要有四个部分组成:
- 前端,用于源代码的分析。
- 分析引擎,包括数据流引擎、语义疫情、结构引擎、控制流引擎和配置引擎。
- 分析规则库,不同缺陷类型的分析规则。
- 审计工作台或控制管理界面,驱动整个分析过程。
Coverity Prevent:与 Fortiy SCA 相似,但是 Coverity Prevent 比较重视检测的深度和精度。
FindBugs:该工具倾向于使用简单的、应用范围更广的技术来检测漏洞,而不是使用复杂的、特定的程序缺陷技术。主要分析单线程正确性问题、线程同步正确性问题、性能问题和程序安全问题。该工具的主要检测器有:
- 类结构和类的层级结构的分析。
- 线性扫描代码。
- 程序结构分析。
- 数据流分析。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.