软件漏洞分析技术第11章基于模式的漏洞分析。

  • 基于模式的漏洞分析
    • 基本原理
    • 方法实现
      • 反汇编分析
      • 逆向中间表示
      • 漏洞模式建模
      • 漏洞模式检测
    • 实例分析
    • 典型工具
      • BinNavi
      • BAP

基本原理

基于模式的漏洞分析基本步骤:

  1. 建立漏洞模式
  2. 对二进制程序进行反汇编,获得汇编代码
  3. 将汇编代码转化为中间表示
  4. 中间表示的漏洞模式匹配

二进制文件结构,根据平台不同有不同的文件格式:

  1. Windows 下的 PE(portable executable)
  2. UNIX 下的 ELF(Executable and Linkable Format)
  3. iOS 与 Mac OS 的 Mach-O(Mach object)

方法实现

由于x86指令集非常复杂,难以建立漏洞模式,所以需要对汇编代码进一步抽象,转化为中间表示建立漏洞模式。
反汇编的基本算法:

  1. 确定反汇编代码区域
  2. 确定指令的起始地址
  3. 读取初始地址的值,执行一次表查找,对应二进制操作码的值和汇编语言助记符
  4. 获取指令与操作数,等价转化成汇编语言
  5. 下一条指令,并重复3-5

当前最主要的反汇编策略:

  1. 线性扫描策略,不能区分数据和代码
  2. 控制流递归扫描,不能处理间接代码路径,如指针寻址跳转等

反汇编的不足之处:

  1. 代码与数据的区分
  2. 静态反汇编工具不能得到动态信息
  3. 指令长度可变

漏洞建模一般从两个层面考虑:

  1. 特定漏洞的模式
  2. 通用漏洞的模式

漏洞模式检测
在模式抽取的基础上,才能进行后续的漏洞模式的检测,抽取的内容有:

  1. 抽取可控变量
  2. 抽取约束条件

典型工具

BinNavi:能够分析输入数据流在程序中的传播路径,将程序控制流图形化表示,辅助分析人员。
BAP:基于中间语言进行漏洞分析。