一、背景
本文研究了基于覆盖率的模糊测试中的历史驱动变异技术。之前的研究主要采用自适应变异策略或集成约束求解技术来探索触发独特路径和崩溃的测试用例,但它们缺乏对模糊测试历史的细粒度重用,即它们在不同的模糊测试试验之间很大程度上未能正确利用模糊测试历史。
本文提出了一种轻量级且高效的 概 率 字 节 定 向 模 型(PBOM-Probabilistic Byte Orientation Model),以捕获来自试验历史的字节级变异策略,并因此有效地触发独特路径和崩溃。
本文还提出了一种新的历史驱动变异框架EMS,用于加速基于覆盖率的模糊测试中的路径和漏洞发现。它将PBOM作为变异算子之一(包括 intra-PBOM和inter-PBOM),根据输入字节值概率性地提供所需的变异字节值【在论文中,EMS 在执行过程中根据选定的长度 L 读取输入字节值。这里的选择长度 L 指的是从所有可能的测试用例位置中随机选择一个位置,并读取该位置开始的连续 L 个字节作为输入。EMS接着在哈希映射中查找匹配索引节点,以便在索引节点中匹配到输入字节值 in 和长度 L。接着,EMS根据选择概率 P,在索引节点的链表中选择一种输出策略 (out, type, F, P),并根据选定的位置和输出策略进行变异。】即EMS将PBOM作为附加变异操作符,根据输入字节值和长度概率性地提供所需变异字节值和类型。
PBOM是为了实现下面的目的:
「从 内 部 和 内 部 历 史 中 捕 获 触 发 独 特 路 径 和 崩 溃 的 突 变 策 略 。 换 句 话 说 , 给 定 来 自 种 子 测 试 用 例 的 输 入 字 节 值 , 学 习 到 的 突 变 策 略 模 型 应 该 能 够 输 出 相 应 的 突 变 值 和 导 致 测 试 用 例 触 发 今天唯 一 路 径 或 崩 溃 的 突 变 类 型 。」
实验结果表明,EMS在9个真实世界程序上比AFL、QSYM、MO PT、MO PT-dict、EcoFuzz和AFL++等最先进的模糊测试工具发现了多达4.91倍的独特漏洞,并在大多数程序上发现了更多的覆盖。
本文的创新动机在于:利用模糊测试历史来加速发现新的路径和崩溃。
二. INTRODUCTION
A. Mutation-based Fuzzing
变异测试的流程包括:1)准备初始种子集并构建队列;2)从队列中选择种子测试用例并随机变异;3)使用变异后的测试用例测试目标程序,并将触发新执行路径或异常行为的有趣测试用例添加到种子队列中;4)回到步骤2)继续模糊测试。
大多数变异测试工具使用简单的逻辑来变异测试用例,如AFL使用三个阶段的变异操作:
- 确定性阶段:AFL利 用 位 或 字 节 级 突 变 操 作 符 , 例 如 位 翻 转 、 字 节 翻 转 和 字 节 插 入 , 来 改 变 种 子 测 试 用 例 的 每 个 位 或 字 节
- 混沌阶段:AFL多