Proj THUDBFuzz Paper Reading: MemLock: Memory Usage Guided Fuzzing

Abstract

Uncontrolled memory consumption可能导致拒绝服务攻击
本文贡献: MemLock
特点: 1. 生成能够占用大量内存的输入
2. 触发不受控制的内存消耗异常
效果: 无需领域知识
实验: 优于AFL, AFLfast, PerfFuzz, FairFuzz, Angora, QSYM

Intro

针对时间复杂度测试: SlowFuzz, PerfFuzz, ReSue
针对内存损坏漏洞的若干研究
本文着重内存消耗bug:

  1. 不受控制的递归消耗堆栈内存 uncontrolled-recursion
  2. 不受控制的内存分配,常常是用不受信任且没有验证大小范围的值来分配内存 uncontrolled memory allocation
  3. 内存泄漏 没有跟踪和释放内存memory leak
    现有的测内存消耗bug的多基于启发式方法,如Radmin等人学习并且执行了多个概率有限自动机,然后规定目标程序的资源使用情况在习得的automata中,这样可以在早期就检测到resource usage anomalies。
    现有的灰盒测试过于偏重coverage,要想测出内存bug,不但需要避免内存分配失败的场景,还需要为内存大小设置较大值以超过对内存的最大值。
    本文MemLock的主要步骤是:
  4. 静态分析
    1. 确定与内存消耗相关的语句操作
    2. 对调用图进行定性分析,确定堆栈使用情况
    3. 对内存使用情况做定量分析,确定堆内存的使用情况
    4. 分析程序控制流图
  5. 动态执行
    1. 使用分支覆盖情况来指导新路径的覆盖,使用内存消耗信息来尽可能消耗内存
    2. 如果一个输入能使程序路径消耗越来越多的内存,认为这个输入值得关注。

实验: 优于AFL, AFLfast, PerfFuzz, FairFuzz, Angora, QSYM
指标:

  1. 找到+40.5%的unique crashes
  2. 找到+17.9%的vunerablities
  3. 找到特定memory consumption的速度比其他fuzzer快至少2倍
  4. 比其他工具的内存消耗至少多150倍

Overview

Motivating Examples

Bug示例

代码来源,行号,原理,造成的问题

Approach Overview


先介绍两大部分,每个部分的输入输出,两个部分之间的分工和彼此的数据依赖关系。按照时序描述程序。用之前的bug示例来重新说明程序的运行机制,比如种子的保留政策。

Methodology

3.1 Static Analysis

插桩目的是为了获取哪些信息。
Control Flow Graph上,每个程序分支都有一个虚拟的唯一的id。定义: For an executed program path, its trace bits are an 8-bit array with size \(2^K\)(K=16). the value of IDth element is stored in an 8bit counter

posted @ 2020-12-22 19:09  雪溯  阅读(258)  评论(0编辑  收藏  举报