تخطَّ إلى المحتوى

honggfuzz - Fuzzer موجه بالملاحظة والأمان

honggfuzz - Fuzzer موجه بالملاحظة والأمان

honggfuzz هو fuzzer موجه بالملاحظة والأمان من Google. معروف بأنه مباشر في توجيه هدف ففاز وsolid fuzzing متعدد العمليات ومتعدد الخيوط من الصندوق ويدعم كل من البرمجة الآلية و ملاحظة التغطية المادية (Intel BTS/PT) — هذا الأخير يسمح لك fuzzify ثنائيات لا يمكنك إعادة تجميعها. لديها سجل طويل من إيجاد الضعفيات الحقيقية في البرامج المستخدمة على نطاق واسع.

Fuzzing يمكن استهلاك كميات كبيرة من CPU والقرص. تشغيل على قدرة مخصصة وفي بيئة معزولة.

التثبيت

المنصةالأمر
Debian/Ubuntusudo apt install honggfuzz
من المصدرgit clone https://github.com/google/honggfuzz && make
macOSbrew install honggfuzz
التحققhonggfuzz --help

وضعين

الوضعالاستخدام
File-basedالهدف يقرأ ملف/stdin; honggfuzz يحور الإدخالات
Persistentالهدف يكشف فuzz entry point; أسرع بكثير

Fuzzing على أساس الملفات

# fuzz برنامج يأخذ وسيطة ملف
honggfuzz -i ./input_corpus -W ./workspace -- ./target ___FILE___
العلمالغرض
-i DIRدليل input corpus
-W DIRWorkspace (crashes و stats)
-o DIROutput corpus
___FILE___Placeholder يتم استبداله بملف الإدخال
-sتغذية الإدخال عبر stdin بدلاً من ذلك
-t SECStimeout لكل تشغيل
-n Nعدد fuzzing threads المتزامنة

الوضع الدائم (سريع)

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

int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    parse_input(data, size);   // your target function
    return 0;
}
# Compile مع honggfuzz's clang wrapper ثم fuzz
hfuzz-clang -fsanitize=address fuzz_target.c -o fuzz_target
honggfuzz -i corpus -P -- ./fuzz_target
العنصرملاحظة
LLVMFuzzerTestOneInputنفس entry point مثل libFuzzer — الأهداف محمولة
-Pتفعيل الوضع الدائم
hfuzz-clang / hfuzz-gccمغلفات المترجم التي تضيف البرمجة

الوضع الدائم يتجنب بدء العملية لكل إدخال غالباً ما يعطي 10–100x أكثر عمليات في الثانية.

خيارات ملاحظة التغطية

الآليةالعلم / المتطلب
برمجة البرمجياتتجميع مع hfuzz-clang (الافتراضي والأفضل)
Intel BTS--linux_perf_bts_edge (لا إعادة تجميع)
Intel PT--linux_perf_ipt_block (لا إعادة تجميع)
عد التعليمات/الفروع--linux_perf_instr و --linux_perf_branch

ملاحظة الأجهزة هي المخرج للثنائيات الإغلاق المصدر — تحصل على ملاحظة التغطية بدون وصول الكود.

Sanitizers

# بناء مع ASan + UBSan لكشف crash أفضل
hfuzz-clang -fsanitize=address,undefined target.c -o target
Sanitizerيمسك
ASanBuffer overflows و use-after-free
UBSanالسلوك غير المحدد
MSanUninitialized reads
LeakSanitizerMemory leaks

المراقبة والإخراج

البندحيث
Live statsTerminal UI (execs/sec و coverage و crashes)
CrashesWORKSPACE/*.fuzz files
التقريرHONGGFUZZ.REPORT.TXT
Crash namingيتضمن signal وfaulting address
العلمالتأثير
-N Nالتوقف بعد N iterations
--exit_upon_crashالتوقف في أول crash
-vVerbose
-QQuiet

Triage Workflow

# 1) إعادة إنتاج crash
./target < WORKSPACE/SIGSEGV.PC.*.fuzz

# 2) احصل على stack trace تحت debugger
gdb --args ./target WORKSPACE/SIGSEGV.PC.*.fuzz

# 3) قلل الإدخال ثم قدم البلاغ مع reproducer

honggfuzz مقابل Fuzzers الأخرى

الجانبhonggfuzzAFL++libFuzzerLibAFL
الإعدادسهل جداًسهلسهل (في-process)بناء الخاص بك
أهداف الكود المغلقنعم (Intel PT/BTS)QEMU modeلانعم
Persistent modeنعمنعمNativeنعم
الأفضل للـبداية سريعة ملاحظة أجهزةمنطقة العملاء الواسعةLibrary APIsFuzzers مخصص

قارن مع AFL++ للأوسع منطقة و LibAFL عندما تحتاج إلى بناء fuzzer مخصص.

الموارد