fuzzing
Megjelenés
Főnév
fuzzing (tsz. fuzzings)
- (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?
- A fuzzer (fuzzing eszköz) generál bemeneteket.
- Ezeket megeteti a programmal.
- A fuzzer figyeli a program viselkedését:
- lefagyás,
- kivétel,
- hibakód,
- memóriaszivárgás,
- CPU/memória túlhasználat.
- 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)
- Program fordítása:
clang -fsanitize=address,fuzzer test.c - Elindítás:
./a.out corpus/ - Bemenetek automatikus generálása
- 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.