Proj EULibHarn Paper Reading: APICraft: Fuzz Driver Generation for Closed-source SDK Libraries

Abstract

P1: 介绍fuzz driver
目前方法:静态code analysis,在闭源上有问题

  1. 信息有限
  2. API之间的语义关系复杂(Q: the semantic relations among API functions are complex yet their correctness needs to be ensured.)
    P2:
    本文: APICraft
    collect-combine
    利用静态-动态消息(headers, binaries, traces)来获取控制、数据依赖
    实验:
  3. 5 attack surfaces from the macOS SDK
    效果:
    +64% code coverage
    142 vulnerabilitues, 54 assigned CVE

1. Intro


关键:answer the questions of what information to extract and how to utilize it
自下而上合成fuzz驱动,collect-combine策略
这里collect指收集目标SDK消费者程序的执行轨迹,只收集API函数间的数据,并不是收集全部数据
combine指组合这些trace,考虑到所需属性可能相互冲突,基于多目标遗传算法的策略优化,满足一组预定义的指标

2. Roadmap

2.1

用例子展示了trace合并的基本策略和为何需要多个目标

3. Methodology






4. Implementation

  1. 写了tracing tool,能处理GUI
  2. 使用typeII hook,因为直接在二进制上识别退出比较难,不能只识别ret
  3. 轻量hook:function interposition,将hook代码包装为一个和hook target具有相同原型的函数

5. Evaluation

要回答的问题

  1. 能否为商业化SDK target生成fuzz driver
  2. 被生成的driver的效率
  3. 每个组件的贡献
  4. 能否找到新的vulnerabilities
    数据集: five attack surfaces in macOS SDK as the targets, which are Image, Font, PDF, Audio, and RTF
    工具:
    我们使用patched honggfuzz [5, 20],收集目标二进制库的基本块覆盖率
    从开放的互联网资源 [21-29] 中随机收集从中选择种子进行实验。
    使用 honggfuzz 内置的语料库最小化功能 [30]。
    用libgmalloc [17]而非ASan检测内存损坏问题。
    重复: 24hr * 10
    Fuzzer选择: APICRAFT 可能会生成多个模糊驱动候选(第一帕累托边界的所有模糊驱动),此时选择在更多目标中得分更高的一项。 如果没有人能在所有三个目标上都做得更好,我们遵循优先顺序 DIV > EFF > COMP。

5.1 Fuzzer Generation

被追踪的每个攻击面的Consumer都是内置的 macOS 应用程序。
准备了手动的trace,保证这些trace覆盖了所有基本功能

5.2 Comparison with Manually Written Fuzz Driver

5.3 Effectiveness of Each Component

5.4 Fuzzing Campaign

6. Discussion & Future Work

posted @ 2021-12-26 04:05  雪溯  阅读(189)  评论(0编辑  收藏  举报