Files
Sec-Interview/Chapter26/26-8.md
T
2025-09-25 04:04:35 +08:00

23 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### fuzzing 主要是用来干嘛
**1. 探索代码路径(Code Coverage**
Fuzzing 的一个核心目标是最大化代码覆盖率。传统的测试可能只会测试程序的“阳光大道”,而 fuzzing 则会试图探索那些不寻常的、可能存在漏洞的角落
例如,一个**覆盖率引导的 fuzzer**(如 AFL 或 LibFuzzer)会记录下每个输入所执行的代码路径。如果一个新的输入能够触发一条未曾被执行过的代码路径,fuzzer 就会将这个输入保留下来,并对其进行变异,以期能更深入地探索该路径。这种方法使得 fuzzer 能够自动绕过复杂的逻辑检查,深入到程序的核心功能中去
**2. 内存安全漏洞检测**
许多安全漏洞都与内存操作有关,比如:
- **缓冲区溢出**:向一个固定大小的缓冲区写入了超过其容量的数据,导致相邻的内存区域被覆盖
- **空指针解引用**:程序试图访问一个空指针指向的内存
- **整数溢出**:在进行算术运算时,结果超出了变量类型的最大值,导致意外的结果
Fuzzing 工具通过监控程序的**内存访问行为**来检测这些漏洞。例如,fuzzer 可以使用 Sanitizer 工具(如 AddressSanitizer、MemorySanitizer)来在运行时追踪内存读写,一旦发现非法访问,就会立即报告
**3. 绕过输入验证**
攻击者通常需要绕过程序的输入验证逻辑才能触发漏洞。从二进制角度来看,fuzzing 能够通过**变异输入的字节**来绕过这些验证
例如,一个网络协议解析器可能期望数据包的某个字段是一个特定的值。Fuzzer 会随机改变这个字段的字节,并观察解析器的行为。如果变异后的数据包导致程序进入一个异常状态,fuzzer 就找到了一个潜在的漏洞