Fuzzing je spôsob testovania, ktorý používa set dát a náhodné vstupy s rôznymi možnosťami mutácie. Táto technika slúži predovšetkým testerom na objavenie rôznych chýb a zraniteľností, na základe skrytých chýb v programe, ktoré môžu spôsobiť jeho nečakané zastavenie. Tento spôsob testovania a hľadania zraniteľností má najväčšie uplatnenie v prípade, že nemáme prístup k zdrojovému kódu programu, ktorý chceme testovať. Vieme ho úspešne uplatniť aj v prípade, že zdrojový kód máme, ale analýza tohto kódu by zabrala veľké množstvo času.
Aká je úspešnosť Fuzzingu?
Keďže neexistuje 100% spôsob ako vykonávať fuzzing efektívne, úspešnosť záleží od veľa faktorov ako napríklad:
- základný korpus dát (tento korpus by mal pokryť čo najviac z funkcionality aplikácie a zabezpečiť svojimi vstupmi čo najväčšie pokrytie kódu)
- spôsob akým dochádza k úprave vstupných súborov z korpusu (náhodná mutácia, sekvenčné mutovanie, skracovanie a predlžovanie súboru a ďalšie)
- stratégia (často najväčšia limitácia fuzzera, pričom je to veľmi kľúčová vec ktorá vie donútiť výskumníka k prechodu na iný či dokonca vlastný nástroj)
- zložitosť cieľového programu (pri komplexných vstupoch môže byť časovo náročné navrhnúť rozumnú stratégiu)
Aké nástroje sa používajú na fuzzing?
Existuje množstvo jednoduchých programov, ktoré slúžia ako automatizačné skripty. Ich úlohou je poväčšine spustiť cieľový program s modifikovaných súborom, sledovať jeho správanie cez debugger a v prípade neočakávaného zastavenia aplikácie vykonať jeho rýchle vyhodnotenie a kategorizáciu.
Medzi najznámejšie programy používané na fuzzing patria:
- American fuzzy lop (AFL) a rôzne modifikácie ako AFL++
- Radamsa
- Jazzer
- Cisco Talos Mutiny
- Honggfuzz
- boofuzz
- Syzkaller
Napriek tomu ako dlho sa fuzzing využíva na objavovanie nových zraniteľností, je to jedna z najúspešnejsích metód, ktorá umožňuje nájsť zraniteľnosti v prehliadačoch, operačných systémoch, aplikáciách, sieťových protokoloch, a ďalších. Je len na výskumnikovi aký spôsob zvolí, či využije jeden zo známych nástrojov, alebo si vytvorí niečo vlastné. Z vlastných skúseností vieme, že zraniteľnosti je možné nájsť takmer vo všetkom, pričom čím menej je o našom cieli známe, tým je väčšia pravdepodobnosť nájdenia exploitovateľnej zraniteľnosti.
V ďalších častiach si predstavíme niektorý z našich výskumov a nájdených zraniteľností práve vďaka fuzzingu.