Vad är Fuzz Testing?
Fuzz-testning, eller fuzzing, är en metod för att kontrollera hur ett datorprogram eller system kommer att reagera på olika, ibland slumpmässiga, ingångar och information. Processen innebär att generera någon typ av data, antingen helt slumpmässiga eller slumpmässiga inom vissa begränsningar, och sedan mata in dessa data i programmet för att testa hur det hanterar oväntad information. Den mest grundläggande formen av fuzz-test innebär att skicka en slumpmässig sekvens av knapptryckningar eller tecken till programmet och kontrollera att det bearbetar dem korrekt. En mer komplex version av fuzz-test använder strukturerad data som sedan slumpmässigt manipuleras och skickas till programmet. Data kan nå programmet som systemhändelser, tangentbordsingångar, håna nätverkssignaler eller till och med som filer som ska laddas.
Det finns olika delar av ett datorprogram som kan testas med en fuzzgenerator. Det grafiska användargränssnittet (GUI) kan testas genom att skapa en sekvens av slumpmässiga mus- och tangentbordshändelser och kontrollera att GUI kan hantera ingången utan att krascha, frysa eller utföra en oväntad uppgift. Nätverksprotokoll kan testas genom att låta fuzzgeneratorn slumpmässigt ändra delar av ett giltigt datapaket och sedan säkerställa att protokollet kan fortsätta att fungera efter mottagande av missbildade data. De grundläggande inmatningselementen för nästan vilket program som helst kan kontrolleras med avseende på deras förmåga att motstå fel, till exempel ingång som är alldeles för lång för lagringstyp, ingång som är av en annan typ än väntat och ingång som på något sätt är ofullständig eller felaktig.
Datorsäkerhetsindustrin kan använda fuzz-tester för att säkerställa att inga uppenbara säkerhetshål finns i vissa system. Detta kan göras med hjälp av en fuzzgenerator som är utformad för att testa datasäkerhet. Dessa program kommer att försöka använda systemnyckelord, kända standardadministratörslösenord, funktioner inom biblioteken som programmet använder och slumpmässiga samtal till systemfunktioner för att se hur programmet kommer att reagera.
De olika typerna av fuzz-testning kan anpassas för att ligga inom vissa områden, eller till och med för att testa endast specifika typer av input. Detta betyder att ett program bara kan ha giltiga kommandon skickat till det, men de kan vara i en nonsensisk ordning. Mer komplexa fuzz-testprogram finns som kan ta delar av målprogrammet och manipulera dem för att producera situationer som kan utnyttjas skadligt. Detta kan inkludera att ändra ordningen på processer som skapas, ändringar av behörigheter eller ändring av kärndata och biblioteksfiler.
Slutresultatet av fuzz-test är att se om ett program är säkert och uppträder som det ska när det konfronteras med en oväntad situation. När den används tillsammans med profilerings- och analysprogramvara kan den också upptäcka minnesläckor i områden av programmet, t.ex. felhantering eller prestandaflaskhalsar. Vid datasäkerhet kan farliga problem som överflöd som kan äventyra ett system fångas med rätt installation. Fuzz-testning kan dock inte användas som den enda metoden för mjukvarutestning och måste ingå i en större process för kvalitetssäkring och inspektion av programvara.