fuzzing

Üdvözlöm, Ön a fuzzing szó jelentését keresi. A DICTIOUS-ban nem csak a fuzzing szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a fuzzing szót egyes és többes számban mondani. Minden, amit a fuzzing szóról tudni kell, itt található. A fuzzing szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. Afuzzing és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.

Főnév

fuzzing (tsz. fuzzings)

  1. (informatika) A fuzzing (vagy fuzz tesztelés) egy automatikus szoftvertesztelési technika, amely során a program bemeneteire nagy mennyiségű véletlenszerű, érvénytelen, váratlan vagy kézzel módosított adatot küldünk, azzal a céllal, hogy hibákat, összeomlásokat, vagy sebezhetőségeket tárjunk fel.



🎯 Fő cél

  • Stabilitás és biztonság tesztelése.
  • Crash-ek, assertion hibák, memóriakezelési hibák és potenciális sebezhetőségek felderítése, pl.:
    • buffer overflow,
    • use-after-free,
    • integer overflow,
    • heap corruption,
    • null pointer dereference.



🔍 Hogyan működik?

  1. A fuzzer (fuzzing eszköz) generál bemeneteket.
  2. Ezeket megeteti a programmal.
  3. A fuzzer figyeli a program viselkedését:
    • lefagyás,
    • kivétel,
    • hibakód,
    • memóriaszivárgás,
    • CPU/memória túlhasználat.
  4. Ha valami „érdekes” történik, a bemenet elmentésre kerül elemzéshez vagy reprodukáláshoz.



🧱 Fuzzing típusai

1. Black-box Fuzzing

  • Nem ismeri a program belső működését.
  • Csak a bemenetek és kimenetek figyelésével dolgozik.
  • Egyszerű, de kevésbé hatékony.

2. White-box Fuzzing

  • Teljes hozzáféréssel dolgozik a forráskódhoz.
  • Elemzi a vezérlésáramlást, lefedettséget.
  • Sokkal okosabb bemenetgenerálás.

3. Grey-box Fuzzing (→ legnépszerűbb!)

  • Középutas megközelítés.
  • A futás során gyűjt információkat (pl. kódfedettség).
  • Példa: AFL (American Fuzzy Lop), libFuzzer, Honggfuzz.



⚙️ Milyen típusú bemenetekkel dolgozik?

  • Szöveg (pl. JSON, XML, HTML)
  • Bináris fájlok (pl. képek, videók, MP3)
  • Protokoll bemenetek (pl. HTTP, FTP)
  • Parancssori argumentumok
  • REST API-k, hálózati csomagok



📈 Mit figyel a fuzzer?

  • Segfault
  • Heap overflow
  • Division by zero
  • Assertion failure
  • Infinite loop / timeout
  • Kivétel dobás (exception)
  • Memory leaks (valgrind / ASan)



🛠️ Népszerű fuzzerek

Eszköz Típus Nyelv / Platform
AFL Grey-box C/C++
libFuzzer In-process C/C++, LLVM
Honggfuzz Grey-box C/C++, Linux
Boofuzz Network Python
zzuf Black-box Fájlalapú
fuzzdb Input repo Fuzzing payloadok



🔐 Fuzzing a biztonságban

A fuzzing kritikus eszköz a szoftverbiztonsági tesztelésben:

  • Zero-day sebezhetőségek felfedezése.
  • Protokoll implementációk (pl. TLS, HTTP) hibáinak felderítése.
  • Jelszóellenőrzők, formátum-elemzők célzott tesztelése.

A fuzzinget használta pl. a:

  • Google (Chrome fuzzing – ClusterFuzz),
  • Microsoft (Windows Defender fuzzing),
  • Mozilla (Firefox fuzzing),
  • OSS-Fuzz (nyílt forráskódú projektekhez).



🧬 Coverage-guided Fuzzing

Ez a technika (pl. AFL, libFuzzer):

  • Méri, hogy melyik utasítások hajtódnak végre a bemenet hatására.
  • Új bemeneteket keres, amelyek új kódrészeket érnek el.
  • Mutációs algoritmusokat használ:
    • bájtok módosítása,
    • törlés, beszúrás, XOR, véletlen értékek,
    • értelmes struktúrák (pl. JSON zárójelezés).



⚠️ Limitációk

  • Bemenetformátum ismerete hiányos → gyorsan elakad.
  • Hamis pozitív hibák (pl. crash nem sebezhetőség).
  • Skálázhatóság: nagy programok fuzzolása költséges.
  • Stateful protokollok fuzzolása nehézkes (pl. SMTP, FTP).
  • Nem determinisztikus viselkedés → nehezen reprodukálható hibák.



🧰 Fuzzing és más technikák

Technika Összehasonlítás
Tesztelés Fuzzing automatikusan keres hibás eseteket
Statikus analízis Forráskódot vizsgál, nem futtat
Symbolic execution Sokkal mélyebb, de lassabb
Formal verification Teljes helyesség, de komplex és időigényes

Fuzzing ezek mellett használható, nem helyettük.



🔎 Fuzzing pipeline példa (libFuzzer + ASan)

  1. Program fordítása: clang -fsanitize=address,fuzzer test.c
  2. Elindítás: ./a.out corpus/
  3. Bemenetek automatikus generálása
  4. Crash esetén: bemenet mentése, stack trace, reprodukció



TL;DR

A fuzzing egy automatikus hibakeresési technika, amely szándékosan rossz vagy véletlenszerű bemeneteket ad a programnak, és figyeli, hogy hogyan reagál. Fő célja a robosztusság tesztelése és sebezhetőségek felfedezése. Használható fájlkezelők, formátumfeldolgozók, hálózati protokollok, és API-k tesztelésére is. A modern fuzzerek (pl. AFL, libFuzzer) okos bemenetgenerálással és futás közbeni megfigyeléssel dolgoznak, így képesek mély hibákat is feltárni.