Fuzz-testen offuzzing is een techniek die desoftware van een apparaat test. De techniek dient om programmeerfouten of beveiligingsgaten te vinden door willekeurige data, genaamdfuzz, in het systeem te sturen in een poging om het te doencrashen. Wanneer een kwetsbaarheid is gevonden zal de Fuzz-test de mogelijke oorzaak weergeven[1].
De Fuzz-test is uitgevonden doorBarton Miller aan deuniversiteit van Wisconsin in 1989. Het idee ontstond door een storm in de herfst van 1988. Door de hevige regen merkte Barton Miller op dat het regengeluid voor storingen zorgde bij programma's op zijnUnix systeem en sommigecrashten zelfs. Wetenschappelijke nieuwsgierigheid dreef hem op onderzoek en de term werd bedacht bij het uitwerken van een klasproject dat Barton Miller gaf aan de universiteit. Het project bestond uit het bombarderen van eenUnix systeem met willekeurige data tot het crashte om zo de betrouwbaarheid ervan testen. De termFuzz werd gekozen omdat het een gevoel van toeval gaf. Snel werd ondervonden hoe effectief de fuzz-testen waren. Al de resultaten, programmacodes en gevondenbugs werden openbaar gemaakt waardoor andere programmeurs ook te werk konden gaan met fuzz-testen[2].
In 1991 ontstond een van de eerst fuzz-test programma's die gebruikt kon worden opUnix, namelijkCrashme.[3]
Een fuzz-test gaat als volgt te werk:
Deze willekeurigedata wordt gebruikt om te zien hoe hetprogramma gaat reageren wanneer het in contact komt met een onbekende input. Deze procedure blijft uitgevoerd worden tot het moment dat er een fatale foutmelding wordt gevonden. Het programma kan dangedebugd worden zodat het op een correcte manier fouten kan weergeven en nietcrasht. Hoewel de tests manueel uitgevoerd kunnen worden, gaat het nog altijd het snelst wanneer dit automatisch wordt gedaan[4].
Fuzzing werkt het beste bij het zoeken naar problemen die ervoor zorgen dat een programma crasht, zoalsbuffer overflow,cross-site scripting,denial of service aanval (DoS)... Deze problemen worden vaak veroorzaakt doorhackers die proberen zoveel mogelijk schade aan te richten in zo min mogelijke tijd. Hier kan de fuzz-test de fouten in de code die vaak overkeken worden, onthullen en zo zorgen voor een simpele en goedkope oplossing. Wel moet men rekening houden met het feit dat fuzz-testen niet zeer effectief zijn bij het testen naar andere specifieke fouten in de beveiliging, zoals bugs die er voor zorgen dat een programma niet crasht maar die uit zijn op het stelen vandata zoalsSpyware,Worms,Trojan horse,keyloggers... Ook vinden fuzz-testen vaak alleen maar de grote fouten en zo geeft een fuzz-test niet echt een compleet beeld van hoe goed beveiligd een programma is. Een fuzz-test is dan ook het effectiefst als het in samenwerking met andere tests wordt gebruikt[1][5].