콘텐츠로 이동

honggfuzz - 보안 지향 커버리지 기반 퍼저 치트시트

honggfuzz - 보안 지향 커버리지 기반 퍼저 치트시트

honggfuzz는 Google의 보안 지향, 피드백 기반 퍼저입니다. 이는 대상을 곧바로 가리키기가 간단하고, 즉시 멀티 프로세스 및 멀티 스레드 퍼징이 가능하며, 소프트웨어 계측하드웨어 기반 커버리지 피드백 (Intel BTS/PT) 모두를 지원하는 것으로 알려져 있습니다 — 후자는 재컴파일할 수 없는 바이너리를 퍼징할 수 있습니다. 광범위하게 사용되는 소프트웨어에서 실제 취약점을 찾는 오랜 기록이 있습니다.

퍼징은 CPU와 디스크를 많이 소비할 수 있습니다. 전용 용량에서 실행하고 격리된 환경에서 실행합니다.

설치

플랫폼명령어
Debian/Ubuntusudo apt install honggfuzz
소스에서git clone https://github.com/google/honggfuzz && make
macOSbrew install honggfuzz
확인honggfuzz --help

두 가지 모드

모드사용
파일 기반대상이 파일/stdin을 읽음; honggfuzz가 입력을 변경
영구대상이 퍼즈 엔트리 포인트를 노출; 훨씬 더 빠름

파일 기반 퍼징

# 파일 인수를 취하는 프로그램을 퍼징
honggfuzz -i ./input_corpus -W ./workspace -- ./target ___FILE___
플래그목적
-i DIR입력 코퍼스 디렉터리
-W DIR작업 공간 (충돌, 통계)
-o DIR출력 코퍼스
___FILE___입력 파일로 대체된 플레이스홀더
-sstdin을 통해 입력 공급
-t SECS실행당 타임아웃
-n N동시 퍼징 스레드 수

영구 모드 (빠름)

#include <stdint.h>
#include <stddef.h>

int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    parse_input(data, size);   // 대상 함수
    return 0;
}
# honggfuzz의 clang 래퍼로 컴파일, 그 후 퍼징
hfuzz-clang -fsanitize=address fuzz_target.c -o fuzz_target
honggfuzz -i corpus -P -- ./fuzz_target
요소참고
LLVMFuzzerTestOneInputlibFuzzer와 같은 엔트리 포인트 — 대상은 휴대용
-P영구 모드 활성화
hfuzz-clang / hfuzz-gcc계측을 추가하는 컴파일러 래퍼

영구 모드는 입력당 프로세스 시작을 회피하며, 종종 초당 10-100배 더 많은 실행을 제공합니다.

커버리지 피드백 옵션

메커니즘플래그 / 요구사항
소프트웨어 계측hfuzz-clang으로 컴파일 (기본값, 최선)
Intel BTS--linux_perf_bts_edge (재컴파일 안 함)
Intel PT--linux_perf_ipt_block (재컴파일 안 함)
명령어/분기 개수--linux_perf_instr, --linux_perf_branch

하드웨어 피드백은 폐쇄 소스 바이너리를 위한 탈출구입니다 — 소스 접근 없이 커버리지 안내를 얻습니다.

살균기

# ASan + UBSan으로 더 나은 충돌 감지를 위해 빌드
hfuzz-clang -fsanitize=address,undefined target.c -o target
살균기캐치
ASan버퍼 오버플로우, use-after-free
UBSan정의되지 않은 동작
MSan초기화되지 않은 읽기
LeakSanitizer메모리 누수

모니터링 및 출력

항목
라이브 통계터미널 UI (실행/초, 커버리지, 충돌)
충돌WORKSPACE/*.fuzz 파일
보고서HONGGFUZZ.REPORT.TXT
충돌 이름신호 및 결함 주소 포함
플래그효과
-N NN 반복 후 중지
--exit_upon_crash첫 충돌에서 중지
-v상세
-Q조용히

심사 워크플로우

# 1) 충돌 재현
./target < WORKSPACE/SIGSEGV.PC.*.fuzz

# 2) 디버거 아래에서 스택 추적 받기
gdb --args ./target WORKSPACE/SIGSEGV.PC.*.fuzz

# 3) 입력을 최소화한 후 재현기와 함께 버그를 파일

honggfuzz vs 다른 퍼저

측면honggfuzzAFL++libFuzzerLibAFL
설정매우 쉬움쉬움쉬움 (프로세스 내)직접 구축
폐쇄 소스 대상예 (Intel PT/BTS)QEMU 모드아니오
영구 모드네이티브
최적 대상빠른 시작, 하드웨어 피드백광범위한 에코시스템라이브러리 API사용자 정의 퍼저

AFL++와 비교하여 가장 광범위한 에코시스템, LibAFL 사용자 정의 퍼저 필요.

리소스