CTF-All-In-One

5.9 基于模式的漏洞分析

基本原理

基于模式的漏洞分析能够比较精确地通过形式化描述证明软件系统的执行,并能够以自动机的形式化语言对软件程序进行形式化建模,从而合理地描述模式中各个模块的不同属性和属性之间的依赖关系,方便分析人员对软件系统的检测和分析。

在对软件程序进行模式分析之前,需要进行不同漏洞模式的构建,以待后续进行基于模式的匹配分析。根据不同漏洞模式触发原理和触发机制,分析各个软件模块的不同属性和依赖关系,从中抽象出漏洞触发的核心条件,并建立基于形式化语言或描述性语言的漏洞模式。漏洞模式建立后,下一步将针对二进制抽象进行基于漏洞模式的分析检测,首先将程序反汇编,并将反汇编代码转化为中间表示。针对二进制程序的中间表示进一步分析出其相关属性信息描述,并针对其属性信息进行模式匹配和检测分析。

方法实现

反汇编分析

利用反汇编技术可以将二进制代码转化为可理解程度更高的汇编级代码。

将程序反汇编后,可以得到许多程序分析的重要信息:

反汇编的不足:

逆向中间表示

目前常用的中间表示有:REIL、VEX、Vine 等。

漏洞模式建模和检测

缓冲区溢出类漏洞模式:

整数溢出类漏洞模式:

内存地址对象破坏性调用漏洞模式:如 use-after-free。

  1. 需要分析函数的功能,检测是否存在内存地址释放型函数以及内存地址调用型函数
  2. 检测函数调用的顺序是否正常
  3. 检测函数调用过程中,是否针对特定对象发生内存地址破坏性调用的异常情况,如果存在,则说明存在漏洞