
main() { if (getchar() == '1') abort(); }Fuzzing, także fuzz testing – automatyczna lub półautomatyczna metoda testowania oprogramowania, służąca m.in. do wykrywania w nim błędów i luk w zabezpieczeniach, które mogłyby zostać wykorzystane przez hakerów. Polega na automatycznym przekazywaniu do programu nieoczekiwanych lub losowych danych wejściowych i rejestrowaniu niepożądanych zdarzeń, takich jak awarie programu (ang. crash), wycieki pamięci czy nieautoryzowany dostęp. Dane mogą być wprowadzane:
Termin wprowadził Barton Miller z Uniwersytetu Wisconsin-Madison ok. 1989 roku, choć samo podejście było stosowane już wcześniej.
Fuzzing jest mniej skuteczny w wykrywaniu problemów bezpieczeństwa, które nie powodują awarii programu. Choć jest prosty, oferuje wysoki stosunek korzyści do kosztów i może ujawnić poważne defekty, które są pomijane, gdy oprogramowanie jest pisane i debugowane w klasyczny sposób. Nie daje jednak pełnego obrazu bezpieczeństwa, jakości ani skuteczności programu i jest najbardziej skuteczny w połączeniu z testami czarnej skrzynki (ang. black box testing), testami beta i innymi metodami testowania.
Za pomocą wolnego i otwartego fuzzera AFL autorstwa Michała „lcamtufa” Zalewskiego wykryto nieznane wcześniej podatności bezpieczeństwa i błędy w dziesiątkach programów i platform, takich jak PuTTY, PHP, OpenSSL, LibreOffice, Firefox, GnuPG, nginx, BIND, curl, Tor, jądrach iOS i OpenBSD, filtrze pakietów NetBSD czy Apache httpd.
Polega na losowym modyfikowaniu poprawnych danych wejściowych, np. plików (tworzeniu ich mutacji). Tą metodą Mateusz Jurczyk i Gynvael Coldwind z zespołu bezpieczeństwa Google znaleźli w 2012 roku kilkadziesiąt błędów powodujących awarie programu Adobe Reader w wersjach 9.5.1 i 10.1.3. Modyfikowali w tym celu publicznie dostępne pliki PDF prostymi algorytmami, takimi jak odwracanie pojedynczych bitów.