软件漏洞分析技术:智能灰盒测试
软件漏洞分析技术第13章智能灰盒测试读书笔记。
- 智能灰盒测试
- 基本原理
- 方法实现
- 动态符号执行
- 路径控制与定向遍历
- 路径约束求解
- 漏洞触发数据生成
- 实例分析
- 典型工具
- Dart
- Smart fuzzing
- BitBlaze
基本原理
二进制漏洞分析中应用最普遍的方法是模糊测试(fuzzing),但是存在着明显的缺陷,测试用例的生成存在盲目性。
该盲目性产生与两个方面:
- 没有结合系统具体代码实现(没有系统的先验知识)
- 测试用例独立
针对这些问题,测试方法转向智能模糊测试(smart fuzzing),通过先验知识提高测试用例的有效率。具体的方法有:
- 符号执行,增加覆盖率
- 路径控制,去除冗余无效用例
- …
智能灰盒测试基本步骤:
- 静态分析,将二进制程序反汇编然后转化成为中间语言表示
- 符号执行收集路径条件
- 利用约束求解工具,求解能够执行的路径
- 针对此类路径生成测试用例
方法实现
动态符号执行获取程序可能的执行路径。
路径控制与定向遍历增强漏洞分析的针对性,采用模式匹配等静态分析的方法,识别出漏洞相关路径,并重点对漏洞相关路径进行遍历,提高漏洞分析的准确率。
漏洞触发数据可以分为漏洞触发条件建模、触发条件与路径条件求解和漏洞触发的输入数据三步。
实例分析
智能灰盒测试技术力图避免盲目地对路径进行搜索遍历。
智能灰盒测试的基本步骤为:
- 静态分析技术识别出待测试代码区域
- 动态二进制插桩技术跟踪目标程序执行路径
- 设计动态污点分析方案对路径进行分析,并使用覆盖关键路径的策略进行代码敏感区域逼近
- 约束求解方法计算覆盖敏感区域的执行路径相对应的程序输入
- 自动化测试
典型工具
Dart使用导向性随即测试金属进行漏洞检测。
Smart fuzzing采用动静结合的方式,将程序的执行流程导向最容易触发漏洞的状态空间,提升 fuzzing 效率。
BitBlaze同样采用动静结合的方式对二进制程序进行分析。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.