Featured image of post Beacon&WindRanger

Beacon&WindRanger

WindRanger&BeaconFuzz

WindRanger 是一个基于 BeaconFuzz 算法的定向模糊测试工具,发表于 ICSE 2022,旨在高效引导模糊测试到达目标代码(如漏洞触发点)。其核心创新是 BeaconFuzz 策略,通过动态识别关键代码块(Beacon)来优化路径探索。


1. WindRanger 概述

1.1 是什么?

  • WindRanger 是一个灰盒(Greybox)定向模糊测试工具,基于 AFL++ 改进,专门用于快速触发特定代码位置(如已知漏洞点)。
  • 主要用途:
    • 漏洞复现(如 CVE 测试)
    • 补丁验证(检查修复是否有效)
    • 关键代码覆盖测试

1.2 核心优势

对比对象 传统定向模糊测试(如 AFLGo) WindRanger
引导方式 静态控制流距离(固定优先级) 动态 Beacon 识别(自适应优化)
路径探索 容易陷入局部最优(长路径依赖) 通过 Beacon 发现“捷径”
效率 较慢(需大量变异) 更快收敛到目标

2. BeaconFuzz:WindRanger 的核心算法

2.1 BeaconFuzz 的核心思想

BeaconFuzz 的核心是 Deviation Basic Blocks(偏离基本块,即 Beacon),它通过以下方式优化模糊测试:

  1. 静态分析阶段:
    • 识别程序中能显著缩短到目标代码距离的分支(即 Beacon 块)。
    • 例如:if (x > 100) 的分支比 else 分支更接近目标,则 x > 100 被标记为 Beacon。
  2. 动态执行阶段:
    • 优先变异那些能触发 Beacon 块的输入,快速逼近目标。

2.2 BeaconFuzz 的工作流程

(1)静态分析(由 cbi 工具完成)

  • 输入:
    • 目标程序的 LLVM 字节码(.bc 文件)
    • 用户指定的目标代码行(如 decompile.c:398
  • 步骤:
    1. 构建控制流图(CFG):分析程序的基本块(Basic Block)和跳转关系。
    2. 计算静态距离:对每个基本块,计算其到目标代码的最短路径步数。
    3. 识别 Beacon 块:标记能显著缩短距离的关键分支(如 if-else 中的某个分支)。

(2)动态模糊测试(由改进的 afl-fuzz 执行)

  • 种子调度:
    • 对输入队列中的种子,根据其是否触发 Beacon 动态调整优先级。
    • 奖励机制:触发 Beacon 的种子会被更频繁地变异。
  • 变异策略:
    • 结合 AFL 的变异方式(如位翻转、算术变异),但偏向生成能覆盖 Beacon 的输入

3. WindRanger 和 BeaconFuzz 的关系

3.1 WindRanger = BeaconFuzz + 工具链实现

组件 功能 BeaconFuzz 的作用
cbi 静态分析,插桩 识别 Beacon 块,计算距离
afl-fuzz 动态模糊测试 基于 Beacon 动态调整种子优先级
beacon.txt 记录 Beacon 触发情况 用于调试和优化引导策略
  • BeaconFuzz 是windranger的核心导航算法,负责找到最优路径。
  • 其他组件(如插桩、崩溃检测)是剩余fuzz流程的补全。
Licensed under CC BY-NC-SA 4.0
© 2023-2025 Ch0ser. All Rights Reserved.
使用 Hugo 构建
主题 StackJimmy 设计