google/honggfuzz
GitHub: google/honggfuzz
一款面向安全的反馈驱动型模糊测试工具,利用软件和硬件代码覆盖率来高效发现软件中的安全漏洞。
Stars: 3360 | Forks: 535
# Honggfuzz
**一款面向安全、反馈驱动、进化的 fuzzer。**
Honggfuzz 是一款通用型 fuzzer,它利用代码覆盖率(基于软件和硬件)来发现 bug。它支持多进程、多线程,并支持持久化 fuzzing 以实现极致的速度。
## 主要特性
* **快速**:多进程和多线程引擎,释放 CPU 的全部潜力。
* **持久化 Fuzzing**:直接在进程内测试 API,迭代速度高达 1M/秒。
* **反馈驱动**:利用硬件(Intel BTS/PT)和软件代码覆盖率来进化输入。
* **简单易用**:可以从空的语料库开始,自动构建有效的输入集。
* **深度监控**:利用底层 API(`ptrace`)检测被劫持的信号和隐藏的崩溃。
* **广泛支持**:支持 Linux、macOS、Android、NetBSD、FreeBSD 和 Windows (Cygwin)。
## 安装说明
### 依赖项
**Linux (Ubuntu/Debian)**
```
sudo apt-get install binutils-dev libunwind-dev libblocksruntime-dev clang
```
**macOS**
需要 [Xcode](https://developer.apple.com/xcode/) (10.8+) 和 `libblocksruntime`。
### 构建
```
make
# 编译 wrappers 在 hfuzz_cc/ 中创建
```
## 用法
### 1. 编译目标程序
使用提供的编译器包装器自动添加插桩:
```
# C code
./hfuzz_cc/hfuzz-clang -o my_target my_target.c
# C++ code
./hfuzz_cc/hfuzz-clang++ -o my_target my_target.cpp
```
### 2. 运行 Fuzzer
将其指向输入语料库目录(可以为空)和你的二进制文件:
```
# 基本运行
./honggfuzz -i input_dir/ -- ./my_target ___FILE___
# Persistent mode(更快)
./honggfuzz -P -i input_dir/ -- ./my_target
```
*注意:`___FILE___` 是 honggfuzz 生成的输入文件名的占位符。*
如需高级示例(Apache、OpenSSL、BIND 等),请查看 `examples/` 目录。
有关详细的选项,请参阅 [USAGE.md](docs/USAGE.md)。
## 战利品
Honggfuzz 已经在关键软件中发现了许多重大的安全漏洞。
### HTTP 与服务器
* **Apache HTTPD**:
* CVE-2017-7659(mod_http2 远程崩溃)
* CVE-2017-9789(释放后使用)
* CVE-2018-1301, CVE-2018-1302, CVE-2018-1303
* **OpenSSH**: 认证前远程崩溃(commit 28652bca)
* **BIND**: 多个 bug
* **NGINX Unit**: 死循环
* **ProFTPD**: CVE-2019-18217 (DoS)
* **Samba**: CVE-2019-14907, CVE-2020-10745, CVE-2021-20277
### 密码学与 SSL
* **OpenSSL**:
* **CVE-2016-6309(严重,潜在的 RCE)**
* CVE-2015-1789, CVE-2016-7054, CVE-2017-3731
* **LibreSSL**: 多个崩溃和无效的释放
* **BoringSSL**: 未初始化内存使用
* **Crypto++**: CVE-2016-9939(远程 DoS)
### 编程语言与解释器
* **PHP**: WDDX bug,通用解释器崩溃
* **Python/Ruby**: 解释器 bug
* **Rust**: `regex`、`h2`、`sleep-parser`、`lewton` 中的 panic/安全问题
* **Perl**: 多个解释器崩溃
### 多媒体与文件格式
* **FreeType 2**: CVE-2010-2497 至 CVE-2010-2527(7 个以上 CVE)
* **LibTIFF**: 多个 bug
* **LibJPEG/Turbo**: 多个 bug
* **VLC**: Double-free RCE
* **Adobe Flash**: CVE-2015-0316
* **ImageIO (iOS/macOS)**: 多个安全问题 (Project Zero)
* **LibreOffice**: 内存破坏
### 系统与实用工具
* **Systemd**: 由 honggfuzz 测试
* **fwupd**: 发现 17 个以上 bug
* **TCPDump**: 多个 bug
* **Rsyslog**: 多个 bug
*(查看 [OSS-Fuzz](https://bugs.chromium.org/p/oss-fuzz/issues/list?q=honggfuzz&can=1) 了解数百个更多信息)*
## 使用 Honggfuzz 的项目
* **Google OSS-Fuzz**: 为开源软件提供持续 fuzzing。
* **Android**: 被 Android 安全团队使用。
* **Rust**: `honggfuzz-rs` crate,用于 fuzzing Rust 代码。
* **Bitcoin Core**: Fuzzing 基础设施。
* **Apache HTTP Server**: CI fuzzing。
* **Systemd**: CI fuzzing。
* **Cifasis QuickFuzz**
* **Mozilla FuzzOS**
## 许可证
Apache License 2.0。
__这不是一款官方的 Google 产品__
标签:C/C++, 事务性I/O, 代码覆盖率, 客户端加密