Honggfuzz
보안 중심의 피드백 기반 진화형 퍼저입니다.
Honggfuzz는 소프트웨어 및 하드웨어 기반 코드 커버리지를 사용하여 버그를 찾는 범용 퍼저입니다. 멀티 프로세스, 멀티 스레드를 지원하며 극한의 속도를 위한 지속적 퍼징(persistent fuzzing)을 지원합니다.
주요 기능
- 빠름: 멀티 프로세스 및 멀티 스레드 엔진으로 CPU의 모든 잠재력을 활용합니다.
- 지속적 퍼징(Persistent Fuzzing): 프로세스 내에서 API를 직접 테스트하여 초당 최대 100만 회의 반복 속도를 제공합니다.
- 피드백 기반(Feedback-Driven): 하드웨어(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 (10.8+)와 libblocksruntime이 필요합니다.
빌드
make
# Compilation wrappers are created in hfuzz_cc/
사용법
1. 대상 컴파일
제공된 컴파일러 래퍼를 사용하여 계측(instrumentation)을 자동으로 추가하세요:
# 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. 퍼저 실행
입력 코퍼스 디렉터리(비어 있어도 됨)와 바이너리를 지정하세요:
# Basic run
./honggfuzz -i input_dir/ -- ./my_target ___FILE___
# Persistent mode (faster)
./honggfuzz -P -i input_dir/ -- ./my_target
참고: ___FILE___는 honggfuzz가 생성하는 입력 파일 이름을 위한 자리 표시자입니다.
고급 사용 예제(Apache, OpenSSL, BIND 등)는 examples/ 디렉터리를 확인하세요.
자세한 옵션은 USAGE.md를 참조하세요.
발견된 취약점
Honggfuzz는 주요 소프트웨어에서 중대한 보안 취약점을 발견했습니다.
HTTP 및 서버
- Apache HTTPD:
- CVE-2017-7659 (mod_http2 원격 크래시)
- CVE-2017-9789 (Use-after-free)
- CVE-2018-1301, CVE-2018-1302, CVE-2018-1303
- OpenSSH: 인증 전(pre-auth) 원격 크래시 (commit 28652bca)
- BIND: 다수의 버그
- 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: 다수의 크래시 및 잘못된 free 호출
- BoringSSL: 초기화되지 않은 메모리 사용
- Crypto++: CVE-2016-9939 (원격 DoS)
언어 및 인터프리터
- PHP: WDDX 버그, 일반적인 인터프리터 크래시
- Python/Ruby: 인터프리터 버그
- Rust:
regex, h2, sleep-parser, lewton에서의 패닉/안전성 문제
- Perl: 다수의 인터프리터 크래시
미디어 및 포맷
- FreeType 2: CVE-2010-2497부터 CVE-2010-2527까지 (7개 이상의 CVE)
- LibTIFF: 다수의 버그
- LibJPEG/Turbo: 다수의 버그
- VLC: Double-free RCE
- Adobe Flash: CVE-2015-0316
- ImageIO (iOS/macOS): 다수의 보안 문제 (Project Zero)
- LibreOffice: 메모리 손상
시스템 및 유틸리티
- Systemd: honggfuzz로 테스트됨
- fwupd: 17개 이상의 버그 발견
- TCPDump: 다수의 버그
- Rsyslog: 다수의 버그
(수백 개 이상의 사례는 OSS-Fuzz를 참조하세요)
Honggfuzz를 사용하는 프로젝트
- Google OSS-Fuzz: 오픈소스 소프트웨어를 위한 지속적 퍼징.
- Android: Android 보안 팀에서 사용.
- Rust: Rust 코드 퍼징을 위한
honggfuzz-rs crate.
- Bitcoin Core: 퍼징 인프라.
- Apache HTTP Server: CI 퍼징.
- Systemd: CI 퍼징.
- Cifasis QuickFuzz
- Mozilla FuzzOS
라이선스
Apache License 2.0.
이 제품은 Google의 공식 제품이 아닙니다.