Fuzz 测试(模糊测试)全套专业名词详解
目录
一、基础核心术语
1. Fuzz Testing / Fuzzing 模糊测试
2. Fuzzer 模糊器
3. Target / SUT(System Under Test)被测目标
二、用例生成相关名词(Fuzz 核心)
1. Mutator 变异器
2. Seed / Corpus 种子语料 / 语料库
3. Generational Fuzz 生成式模糊
4. Mutation-based Fuzz 变异式模糊
三、覆盖率与引导优化名词(智能 Fuzz)
1. Code Coverage 代码覆盖率
2. Feedback-driven Fuzz 反馈引导式模糊
3. Path 代码路径
四、异常捕获、漏洞判定名词
1. Crash 程序崩溃
2. Sanitizer 内存检查消毒器
3. Hang / Timeout 卡死 / 超时
4. Unique Crash 唯一崩溃样本
5. Stack Trace / Backtrace 调用堆栈
五、高级 Fuzz 工程术语
1. Instrumentation 插桩
2. Binary-only Fuzz 无源码模糊测试
3. Harness / Fuzz Harness 测试驱动桩
4. Dictionary 变异字典
5. Deterministic Mutation 确定性变异
6. Crossover / Splicing 样本拼接
六、漏洞类型专属名词(Fuzz 高频挖出)
七、工具生态通用名词
一、基础核心术语
1. Fuzz Testing / Fuzzing 模糊测试
定义:一种自动化软件漏洞挖掘技术,通过向程序接口、文件解析器、网络协议、API 等输入大量非预期、畸形、随机、半随机构造的数据,迫使程序出现崩溃、内存越界、死锁、逻辑异常、权限绕过等漏洞。 核心逻辑:正常输入不会暴露缺陷,异常脏数据才能触发边界缺陷。
2. Fuzzer 模糊器
定义:执行模糊测试的自动化工具程序,负责生成畸形用例、投喂目标程序、监控程序异常、保存崩溃样本。 分类:文件 Fuzzer、网络协议 Fuzzer、API Fuzzer、内核 Fuzzer、Web Fuzzer。
3. Target / SUT(System Under Test)被测目标
定义:被模糊测试的程序、组件、接口、驱动、固件。 例:图片解析库 libpng、HTTP 服务、Windows 驱动、移动端 APP、数据库。
二、用例生成相关名词(Fuzz 核心)
1. Mutator 变异器
定义:对种子用例做修改、篡改,生成畸形新用例的算法 / 模块,是 Fuzz 核心模块。 常见变异方式:
- 位翻转(Bit Flip):随机修改二进制单个 bit
- 字节替换:把正常字节替换成 0x00、0xFF、特殊控制字符
- 增删数据:超长字符串、空数据、截断文件
- 数值溢出:超大整数、负数、零值
2. Seed / Corpus 种子语料 / 语料库
Seed 种子:格式合法、结构完整的正常样本(如一张正常 png、标准 http 请求),作为变异的原始素材。Corpus 语料库:全部种子 + 变异后有效覆盖新代码路径的优质用例集合。 作用:无种子纯随机生成数据效率极低,基于真实样本变异更容易命中程序解析逻辑。
3. Generational Fuzz 生成式模糊
定义:不依赖种子,根据协议 / 文件格式语法规则,从零生成合法 + 畸形混合用例。 适用场景:已知完整协议规范(如 HTTP、TCP、protobuf)。
4. Mutation-based Fuzz 变异式模糊
定义:行业最主流方案,基于现有种子样本随机篡改生成脏数据,AFL、libFuzzer 均为此类。
三、覆盖率与引导优化名词(智能 Fuzz)
1. Code Coverage 代码覆盖率
定义:衡量 Fuzzer 是否走到程序全部代码分支的指标。 模糊测试核心目标:最大化代码覆盖率,覆盖罕用分支、异常处理逻辑。 细分:行覆盖率、分支覆盖率、边覆盖率(AFL 使用边覆盖)。
2. Feedback-driven Fuzz 反馈引导式模糊
定义:现代高性能 Fuzz 核心机制,工具每次运行用例后,收集代码覆盖率反馈:
- 若新用例走到了之前未覆盖的代码 → 判定为优质用例,存入语料库持续变异;
- 若重复旧代码路径 → 丢弃,不再重点变异。 代表工具:AFL++、libFuzzer。
3. Path 代码路径
定义:程序执行时经过的一串代码分支组合,不同输入会触发不同路径。Fuzzer 持续探索全新路径以挖掘深层漏洞。
四、异常捕获、漏洞判定名词
1. Crash 程序崩溃
定义:Fuzz 最直观的缺陷现象,程序异常终止。 常见崩溃根源:缓冲区溢出、空指针解引用、释放后使用 UAF、数组越界、除零错误。
2. Sanitizer 内存检查消毒器
定义:编译器插桩工具,在程序运行时实时检测内存违规行为,放大漏洞触发概率,精准定位缺陷。 主流类型:
- ASAN(AddressSanitizer):检测缓冲区溢出、UAF、空指针、堆破坏(Fuzz 标配)
- UBSAN(UndefinedBehaviorSanitizer):捕获整数溢出、未定义运算
- MSAN(MemorySanitizer):检测读取未初始化内存
- TSAN(ThreadSanitizer):多线程竞争、数据竞态漏洞
3. Hang / Timeout 卡死 / 超时
定义:输入畸形数据后程序进入死循环、无限等待、阻塞,无正常返回,属于高危逻辑漏洞。Fuzzer 通过计时器判定超时卡死。
4. Unique Crash 唯一崩溃样本
定义:去重后的崩溃用例。大量畸形输入可能触发同一处代码漏洞,工具通过崩溃堆栈哈希去重,避免重复分析同一漏洞。
5. Stack Trace / Backtrace 调用堆栈
定义:程序崩溃时记录的函数调用链路,用于定位漏洞发生的具体代码行,是漏洞复现与修复的关键依据。
五、高级 Fuzz 工程术语
1. Instrumentation 插桩
定义:编译阶段或运行时向目标程序插入检测代码(探针),实现两大功能:
- 收集代码覆盖率,实现反馈引导;
- 配合 Sanitizer 监控内存异常。 分类:编译期插桩(AFL、libFuzzer)、二进制插桩(QEMU、Frida,无源码 Fuzz)。
2. Binary-only Fuzz 无源码模糊测试
定义:没有目标程序源代码,直接对编译后的二进制 exe/dll/elf 进行模糊测试,依靠 QEMU、Frida、Radamsa 等二进制插桩方案。 对比:源码 Fuzz(有源码,编译插桩,效率更高)。
3. Harness / Fuzz Harness 测试驱动桩
定义:一段简短封装代码,作为 Fuzzer 和被测函数之间的桥梁。 作用:Fuzzer 生成二进制字节流,Harness 把字节流传入目标待测试函数,隔离环境、简化测试入口。 示例 libFuzzer 标准 Harness 函数LLVMFuzzerTestOneInput。
4. Dictionary 变异字典
定义:人工预设特殊关键词、控制字符、协议标记、危险字符串的文本库,变异器优先使用字典内容替换种子数据,大幅提升命中解析漏洞概率。 例:XML 标签、SQL 特殊字符、超长分隔符、空字节 0x00。
5. Deterministic Mutation 确定性变异
定义:对种子执行一套固定、完整的基础变异操作(逐位翻转、字节替换),确保基础畸形场景全覆盖;与之相对:随机变异(随机篡改,速度更快)。
6. Crossover / Splicing 样本拼接
高级变异策略:将两个不同种子样本的二进制片段拼接融合,生成全新混合样本,用于破解复杂多字段文件 / 协议解析逻辑。
六、漏洞类型专属名词(Fuzz 高频挖出)
- Buffer Overflow 缓冲区溢出:写入数据超出内存缓冲区长度,覆盖相邻内存,可执行任意代码。
- Use-After-Free (UAF) 释放后重用:堆内存释放后,程序仍保留指针并读写该内存,高危内存破坏漏洞。
- Null Pointer Dereference 空指针解引用:程序调用地址为 0 的指针,直接触发程序崩溃。
- Heap Corruption 堆破坏:堆内存管理结构被篡改,引发崩溃、权限逃逸。
- Integer Overflow 整数溢出:数值运算超出变量存储上限,数值反转,引发缓冲区分配过小漏洞。
- Divide-by-Zero 除零错误:除数为 0 触发程序异常终止。
七、工具生态通用名词
- AFL++:当下最流行的开源反馈式模糊测试工具,基于 QEMU 二进制插桩,支持源码 / 无源码 Fuzz。
- libFuzzer:LLVM 内置轻量级 Fuzzer,集成 Clang 编译器,适合单元函数模糊测试。
- Radamsa:独立通用变异器,常搭配脚本实现简易协议 / 文件 Fuzz。
- QEMU Mode QEMU 模式:AFL 的二进制模拟器模式,无需源码即可对闭源程序插桩模糊。
- Minimization 样本最小化:对触发崩溃的超长畸形用例自动删减无关字节,得到最小可复现样本,方便开发定位漏洞。