软件漏洞分析技术:基于模式的漏洞分析
软件漏洞分析技术第11章基于模式的漏洞分析。
- 基于模式的漏洞分析
- 基本原理
- 方法实现
- 反汇编分析
- 逆向中间表示
- 漏洞模式建模
- 漏洞模式检测
- 实例分析
- 典型工具
- BinNavi
- BAP
基本原理
基于模式的漏洞分析基本步骤:
- 建立漏洞模式
- 对二进制程序进行反汇编,获得汇编代码
- 将汇编代码转化为中间表示
- 中间表示的漏洞模式匹配
二进制文件结构,根据平台不同有不同的文件格式:
- Windows 下的 PE(portable executable)
- UNIX 下的 ELF(Executable and Linkable Format)
- iOS 与 Mac OS 的 Mach-O(Mach object)
方法实现
由于x86指令集非常复杂,难以建立漏洞模式,所以需要对汇编代码进一步抽象,转化为中间表示建立漏洞模式。
反汇编的基本算法:
- 确定反汇编代码区域
- 确定指令的起始地址
- 读取初始地址的值,执行一次表查找,对应二进制操作码的值和汇编语言助记符
- 获取指令与操作数,等价转化成汇编语言
- 下一条指令,并重复3-5
当前最主要的反汇编策略:
- 线性扫描策略,不能区分数据和代码
- 控制流递归扫描,不能处理间接代码路径,如指针寻址跳转等
反汇编的不足之处:
- 代码与数据的区分
- 静态反汇编工具不能得到动态信息
- 指令长度可变
漏洞建模一般从两个层面考虑:
- 特定漏洞的模式
- 通用漏洞的模式
漏洞模式检测
在模式抽取的基础上,才能进行后续的漏洞模式的检测,抽取的内容有:
- 抽取可控变量
- 抽取约束条件
典型工具
BinNavi:能够分析输入数据流在程序中的传播路径,将程序控制流图形化表示,辅助分析人员。
BAP:基于中间语言进行漏洞分析。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.