Nautilus:一款基于语法的反馈式模糊测试工具
字数 973 2025-08-15 21:31:44

Nautilus模糊测试工具详细教学文档

1. Nautilus概述

Nautilus是一款基于覆盖指引和语法的反馈式模糊测试工具,旨在通过指定半有效的输入语法来提升测试覆盖率,从而发现更多安全漏洞。

主要特点

  • 结合覆盖引导和语法引导的模糊测试方法
  • 支持构建复杂的树状结构变异操作
  • 100%支持AFL++
  • 支持Python格式语法定义
  • 支持结构化输入生成
  • 避免生成相似的短输入

版本演进

  • 原型版本:基础功能
  • 2.0版本:重大功能升级,完全支持AFL++

2. 核心工作机制

语法规则系统

Nautilus使用类似BNF的语法规则定义输入结构:

EXPR -> EXPR + EXPR
EXPR -> NUM
NUM -> 1

树状结构构建

  1. 根据语法规则构建抽象语法树
  2. 执行复杂变异操作
  3. 将树结构转换为实际测试用例(拼接叶子节点)

Python脚本扩展

允许使用Python脚本解析树状结构,支持更复杂的操作和变异。

3. 安装与配置

基础安装

git clone 'git@github.com:nautilus-fuzz/nautilus.git'
cd nautilus
/path/to/AFLplusplus/afl-clang-fast test.c -o test

配置文件

编辑config.ron设置参数:

cargo run --release -- -g grammars/grammar_py_example.py -o /tmp/workdir -- ./test @@

QEMU模式支持

cargo run /path/to/AFLplusplus/afl-qemu-trace -- ./test_bin @@

4. 语法定义详解

基础语法规则

使用Python脚本定义语法结构:

# 添加规则 NONTERM->RHS,可使用{NONTERM}实现递归
ctx.rule("START","<document>{XML_CONTENT}</document>")
ctx.rule("XML_CONTENT","{XML}{XML_CONTENT}")
ctx.rule("XML_CONTENT","")  # 空规则

脚本规则

ctx.script("XML",["TAG","ATTR","XML_CONTENT"], 
    lambda tag,attr,body: b"<%s %s>%s</%s>"%(tag,attr,body,tag))

属性与标签定义

ctx.rule("ATTR","foo=bar")
ctx.rule("TAG","some_tag")
ctx.rule("TAG","other_tag")

正则表达式终端

ctx.regex("TAG","[a-z]+")  # 用于不需要增量探索的场景

5. 使用示例

生成测试用例

cargo run --bin generator -- -g grammars/grammar_py_exmaple.py -t 100

示例输出:

<document>
  <some_tag foo=bar>
    <other_tag foo=bar>
      <other_tag foo=bar>
        <some_tag foo=bar></some_tag>
      </other_tag>
      <some_tag foo=bar>
        <other_tag foo=bar></other_tag>
      </some_tag>
      <other_tag foo=bar></other_tag>
      <some_tag foo=bar></some_tag>
    </other_tag>
    <other_tag foo=bar></other_tag>
    <some_tag foo=bar></some_tag>
  </some_tag>
</document>

与AFL集成

终端1(AFL):

./afl-fuzz -Safl -i /tmp/seeds -o /tmp/workdir/ ./test @@

终端2(Nautilus):

cargo run --release -- -o /tmp/workdir -- ./test @@

6. 实际应用案例

Nautilus已发现多个重要漏洞:

  • ChakraCore问题 #5503
  • mruby多个CVE:
    • CVE-2018-10191
    • CVE-2018-10199
    • CVE-2018-12248
    • CVE-2018-11743
    • CVE-2018-12247
    • CVE-2018-12249

7. 项目资源

GitHub仓库: Nautilus

8. 高级技巧

性能优化

  • 对不需要深入探索的部分使用正则表达式终端
  • 合理设计语法规则避免过度递归
  • 结合AFL的覆盖引导提高效率

复杂结构处理

  • 使用脚本规则处理嵌套结构
  • 为不同协议/格式设计专用语法
  • 利用Python的灵活性处理边界情况

9. 故障排除

常见问题

  1. 构建失败:确保AFL++路径正确
  2. QEMU模式问题:检查目标二进制兼容性
  3. 语法无效:验证Python脚本语法规则
  4. 变异效率低:优化语法规则设计

调试建议

  • 使用--release标志提高性能
  • 检查/tmp/workdir中的日志文件
  • 从简单语法开始逐步增加复杂度
Nautilus模糊测试工具详细教学文档 1. Nautilus概述 Nautilus是一款基于覆盖指引和语法的反馈式模糊测试工具,旨在通过指定半有效的输入语法来提升测试覆盖率,从而发现更多安全漏洞。 主要特点 结合覆盖引导和语法引导的模糊测试方法 支持构建复杂的树状结构变异操作 100%支持AFL++ 支持Python格式语法定义 支持结构化输入生成 避免生成相似的短输入 版本演进 原型版本:基础功能 2.0版本:重大功能升级,完全支持AFL++ 2. 核心工作机制 语法规则系统 Nautilus使用类似BNF的语法规则定义输入结构: 树状结构构建 根据语法规则构建抽象语法树 执行复杂变异操作 将树结构转换为实际测试用例(拼接叶子节点) Python脚本扩展 允许使用Python脚本解析树状结构,支持更复杂的操作和变异。 3. 安装与配置 基础安装 配置文件 编辑 config.ron 设置参数: QEMU模式支持 4. 语法定义详解 基础语法规则 使用Python脚本定义语法结构: 脚本规则 属性与标签定义 正则表达式终端 5. 使用示例 生成测试用例 示例输出: 与AFL集成 终端1(AFL): 终端2(Nautilus): 6. 实际应用案例 Nautilus已发现多个重要漏洞: ChakraCore问题 #5503 mruby多个CVE: CVE-2018-10191 CVE-2018-10199 CVE-2018-12248 CVE-2018-11743 CVE-2018-12247 CVE-2018-12249 7. 项目资源 GitHub仓库: Nautilus 8. 高级技巧 性能优化 对不需要深入探索的部分使用正则表达式终端 合理设计语法规则避免过度递归 结合AFL的覆盖引导提高效率 复杂结构处理 使用脚本规则处理嵌套结构 为不同协议/格式设计专用语法 利用Python的灵活性处理边界情况 9. 故障排除 常见问题 构建失败 :确保AFL++路径正确 QEMU模式问题 :检查目标二进制兼容性 语法无效 :验证Python脚本语法规则 变异效率低 :优化语法规则设计 调试建议 使用 --release 标志提高性能 检查 /tmp/workdir 中的日志文件 从简单语法开始逐步增加复杂度