Abstract
Uncontrolled memory consumption可能导致拒绝服务攻击
本文贡献: MemLock
特点: 1. 生成能够占用大量内存的输入
2. 触发不受控制的内存消耗异常
效果: 无需领域知识
实验: 优于AFL, AFLfast, PerfFuzz, FairFuzz, Angora, QSYM
Intro
针对时间复杂度测试: SlowFuzz, PerfFuzz, ReSue
针对内存损坏漏洞的若干研究
本文着重内存消耗bug:
- 不受控制的递归消耗堆栈内存 uncontrolled-recursion
- 不受控制的内存分配,常常是用不受信任且没有验证大小范围的值来分配内存 uncontrolled memory allocation
- 内存泄漏 没有跟踪和释放内存memory leak
现有的测内存消耗bug的多基于启发式方法,如Radmin等人学习并且执行了多个概率有限自动机,然后规定目标程序的资源使用情况在习得的automata中,这样可以在早期就检测到resource usage anomalies。
现有的灰盒测试过于偏重coverage,要想测出内存bug,不但需要避免内存分配失败的场景,还需要为内存大小设置较大值以超过对内存的最大值。
本文MemLock的主要步骤是: - 静态分析
- 确定与内存消耗相关的语句操作
- 对调用图进行定性分析,确定堆栈使用情况
- 对内存使用情况做定量分析,确定堆内存的使用情况
- 分析程序控制流图
- 动态执行
- 使用分支覆盖情况来指导新路径的覆盖,使用内存消耗信息来尽可能消耗内存
- 如果一个输入能使程序路径消耗越来越多的内存,认为这个输入值得关注。
实验: 优于AFL, AFLfast, PerfFuzz, FairFuzz, Angora, QSYM
指标:
- 找到+40.5%的unique crashes
- 找到+17.9%的vunerablities
- 找到特定memory consumption的速度比其他fuzzer快至少2倍
- 比其他工具的内存消耗至少多150倍
Overview
Motivating Examples
Bug示例
代码来源,行号,原理,造成的问题
Approach Overview
先介绍两大部分,每个部分的输入输出,两个部分之间的分工和彼此的数据依赖关系。按照时序描述程序。用之前的bug示例来重新说明程序的运行机制。
Proj THUDBFuzz Paper Reading: MemLock: Memory Usage Guided Fuzzing