Tutorial för fuzztestning (fuzzing).
Vad är Fuzz-testning?
Fuzz-testning eller Fuzzing är en mjukvarutestteknik för att lägga in ogiltiga eller slumpmässiga data som kallas FUZZ i mjukvarusystemet för att upptäcka kodningsfel och kryphål i säkerheten. Syftet med fuzz-testning är att infoga data med hjälp av automatiserade eller halvautomatiska tekniker och testa systemet för olika undantag som systemkraschar eller fel på inbyggd kod, etc.
Fuzz-testning utvecklades ursprungligen av Barton Miller vid University of Wisconsin 1989. Fuzz-testning eller fuzzing är en mjukvarutestteknik, och det är en typ av Säkerhetstestning.
Varför göra Fuzz Testing?
- Vanligtvis hittar Fuzzy-testning det allvarligaste säkerhetsfelet eller defekten.
- Fuzz-testning ger effektivare resultat när den används med Svart Box Testning, betatestning och andra felsökningsmetoder.
- Fuzz-testning används för att kontrollera sårbarheten hos programvara. Det är mycket kostnadseffektiva testtekniker.
- Fuzz-testning är en av de svarta lådans testtekniker. Fuzzing är en av de vanligaste metoderna som hackare använder för att hitta systemets sårbarhet.
Hur man gör Fuzz Testing
Stegen för fuzzy testning inkluderar de grundläggande teststegen-
Steg 1) Identifiera målsystemet
Steg 2) Identifiera ingångar
Steg 3) Generera fuzzed data
Steg 4) Utför testet med fuzzy data
Steg 5) Övervaka systemets beteende
Steg 6) Loggdefekter
Exempel på Fuzzers
- Mutationsbaserade fuzzers ändra befintliga dataprover för att skapa nya testdata. Detta är det mycket enkla och okomplicerade tillvägagångssättet, detta börjar med giltiga prover av protokoll och fortsätter att mangla varje byte eller fil.
- Generationsbaserade fuzzers definiera nya data baserat på modellens input. Den börjar generera input från början baserat på specifikationen.
- PROTOKOLL-BASERAD-fuzzer, den mest framgångsrika fuzzer är att ha detaljerad kunskap om protokollformat som testas. Förståelsen beror på specifikationen. Det innebär att man skriver in en uppsättning av specifikationen i verktyget och sedan genom att använda modellbaserad testgenereringsteknik gå igenom specifikationen och lägga till oregelbundenheter i datainnehållet, sekvensen etc. Detta är också känt som syntaxtestning, grammatiktestning, robusthetstestning, etc. Fuzzer kan generera testfall från ett befintligt, eller så kan de använda giltiga eller ogiltiga indata.
Det finns två begränsningar för protokollbaserad fuzzing:
- Testning kan inte fortsätta förrän specifikationen är mogen.
- Många användbara protokoll är en förlängning av publicerade protokoll. Om fuzz-testning baseras på publicerade specifikationer, Testtäckning för nya protokoll kommer att begränsas.
Den enklaste formen av fuzzing-teknik är att skicka slumpmässig indata till programvaran antingen som protokollpaket eller som en händelse. Denna teknik att skicka slumpmässig inmatning är mycket kraftfull för att hitta buggar i många applikationer och tjänster. Andra tekniker finns också tillgängliga, och det är mycket lätt att implementera. För att implementera dessa tekniker behöver vi bara ändra de befintliga ingångarna. Vi kan ändra indata bara genom att byta ut bitarna av input.
Typer av buggar som upptäckts av Fuzz-testning
- Påstående misslyckanden och minnesläckor denna metod används ofta för stora applikationer där buggar påverkar minnessäkerheten, vilket är en allvarlig sårbarhet.
- Felaktig input Vid fuzztestning används fuzzers för att generera en ogiltig indata som används för att testa felhanteringsrutiner, och detta är viktigt för programvaran som inte kontrollerar dess inmatning. Enkel fuzzing kan vara känt som ett sätt att automatisera negativa tester.
- Korrekthetsbuggar Fuzzing kan också användas för att upptäcka vissa typer av "korrekthets"-buggar. Som en skadad databas, dåliga sökresultat, etc.
Fuzz-testverktyg
Verktyg som används inom webbsäkerhet kan i stor utsträckning användas i fuzz-testning som t.ex Burp Suite, Peach Fuzzer, etc.
- Peach Fuzzer: Peach Fuzzer ger mer robust och säkerhetstäckning än en skanner. Andra testverktyg kan endast söka efter kända trådar medan Peach Fuzzer gör det möjligt för användare att hitta kända och okända trådar.
- Spike Proxy: Det är ett verktyg av professionell kvalitet som letar efter sårbarheter på applikationsnivå i webbapplikationer. SPIKE Proxy täcker grunderna, som t.ex SQL Injektion och cross-site-scripting, men det är helt öppet Python infrastruktur. SPIKE Proxy är tillgänglig för Linux och Windows.
- Webscarab: Webscarab är skrivet i Java alltså portabel till många plattformar. För att analysera applikationer används Webscarab ramverk som kommunicerar med HTTP- och HTTPS-protokoll.ex: Webscarab fungerar som en avlyssnande proxy, den låter operatören granska och ändra begäran som skapats av webbläsaren innan de tas emot av servern. Och tillåta att granska och uppdatera svar som genererats av servern innan det togs emot av webbläsaren. På detta sätt, om web scarab hittar något kryphål, kommer det att göra listan över de rapporterade problemen.
- OWASP WSFuzzer: WSFuzzer är ett GPL-program som skrivits in Python. GPL har ett program för närvarande inriktat på webbtjänster. I den nuvarande versionen av OWASPWSFuzzer HTTP-baserad SOAP-tjänster är huvudmålet.
Fördelar med Fuzz Testing
- Fuzz-testning förbättrar programvaran Säkerhetstestning.
- Buggar som hittas i fuzzing är ibland allvarliga och används för det mesta av hackare inklusive krascher, minnesläckor, ohanterat undantag, etc.
- Om någon av buggarna misslyckas med att uppmärksammas av testarna på grund av begränsad tid och resurser finns dessa buggar också i Fuzz-testning.
Nackdelar med Fuzz Testing
- Fuzz-testning ensam kan inte ge en fullständig bild av ett övergripande säkerhetshot eller buggar.
- Fuzz-testning är mindre effektivt för att hantera säkerhetshot som inte orsakar programkrascher, som vissa virus, maskar, trojaner, etc.
- Fuzz-testning kan bara upptäcka enkla fel eller hot.
- För att fungera effektivt kommer det att kräva betydande tid.
- Att ställa in ett gränsvärdesvillkor med slumpmässiga inmatningar är mycket problematiskt, men nu löser de flesta testarna detta problem genom att använda deterministiska algoritmer baserade på användarinmatningar.
Sammanfattning
Inom Software Engineering visar Fuzz-testning förekomsten av buggar i en applikation. Fuzzing kan inte garantera detektering av buggar helt i en applikation. Men genom att använda Fuzz-teknik säkerställer det att applikationen är robust och säker, eftersom denna teknik hjälper till att avslöja de flesta av de vanliga sårbarheterna.