Softwaresårbarheder er et væsentligt problem inden for cybersikkerhed. De tillader softwareprodukter at blive angrebet, og når disse produkter er forbundet til ellers sikre netværk, kan de give hackere et indgangspunkt.
Alle professionelle softwareprodukter testes grundigt inden udgivelsen. Desværre er sårbarheder stadig en almindelig begivenhed. En måde at finde yderligere sårbarheder på er at bruge en softwaretestteknik kendt som fuzzing.
Så hvad er fuzzing, og hvordan virker det?
Hvad er fuzzing?
Fuzzing er en automatiseret softwaretestteknik, der forsøger at finde sårbarheder ved hjælp af tilfældige input.
Software opfører sig ofte uforudsigeligt, når brugeren indtaster et andet input end det, der blev anmodet om. Fuzzing er praksis med at indtaste store mængder af uventede input og registrere, hvad der sker. Tanken er, at brugeren derefter kan overvåge softwaren og afgøre, om der er nogen sårbarheder eller ej.
Fuzzing bruges til at teste softwareprodukter og af sikkerhedsprofessionelle for at afgøre, om et netværk er sikkert. Det bruges også af hackere, der øver fuzzing for at finde sårbarheder, som de selv kan bruge.
De sårbarheder, der opdages ved fuzzing, varierer meget. Et uventet input kan få softwaren til at gå ned. Men det kan også returnere private oplysninger eller give brugeren adgang til dele af softwaren, som ellers ville være ude af grænserne.
Hvad er fordelene ved fuzzing?
Fuzzing er blot en af mange måder, hvorpå softwareprodukter kan testes for sårbarheder. Det er populært fordi:
- Fuzzing er fuldstændig automatiseret. Når først et fuzzing-program er sat op, kan det fortsætte med at lede efter sårbarheder uden menneskelig input.
- Fuzzing kan finde sårbarheder, som andre softwaretestteknikker ikke gør. På grund af dette bruges det ofte som supplement til manuelle teknikker.
- Fuzzing bruges ofte af hackere til finde nul-dages sårbarheder. Ved at bruge de samme teknikker som hackere kan udviklere finde nul-dages sårbarheder, før de gør.
Hvordan virker Fuzzing?
Et værktøj, der bruges til fuzzing, har typisk tre komponenter. De omtales ofte som en digter, en kurer og et orakel.
Digteren
Digteren starter processen og er ansvarlig for at generere en testcase. En testcase er en lang liste over potentielle input.
Kureren
Kureren indsætter alle de tilfældige input i den målrettede software. Fuzzers er designet til at gøre dette automatisk, så store mængder input kan testes i bulk.
Oraklet
Oraklet kontrollerer, om nogen af inputtene får softwaren til at gøre noget andet, end det er designet til at gøre. Hvis fuzzing udføres til legitime formål, kan adfærden derefter replikeres og rettes. Eller hvis fuzzing udføres af en hacker, og den uventede adfærd er nyttig, kan den blive brugt til ondsindede formål.
Hvordan bruger angribere Fuzzing?
Fuzzing er en populær teknik blandt hackere, fordi den giver dem mulighed for at finde sårbarheder i software uden adgang til kildekoden. Fordi fuzzing er automatiseret, er det også nemt at udføre. Hvis en hacker opdager en sårbarhed, kan de muligvis udføre følgende angreb.
DDoS-angreb
Hvis fuzzing opdager, at visse input kræver lang tid at behandle, kan disse oplysninger bruges til at starte et DDoS-angreb. Et DDoS-angreb involverer at sende så mange anmodninger til et system, at det holder op med at fungere. Fuzzing gør det muligt at skræddersy anmodninger, så de kræver flest systemressourcer at svare på.
SQL-injektion
Et SQL-injektionsangreb er, når ondsindede SQL-sætninger sendes til en applikation. Hvis disse udsagn ikke er korrekt renset, kan de tillade en angriber at interagere med databasen. Dette kan give dem mulighed for at stjæle data eller ændre dem. Fuzzing er et effektivt værktøj til at forsøge store mængder af SQL-sætninger og afgøre, om nogen giver et positivt svar.
Bufferoverløb
Et bufferoverløbsangreb er, når der tilføjes flere data til et programs buffer, end det kan håndtere. I dette scenarie er det muligt for en hacker at få dette program til at udføre ondsindet kode. Dette kan bruges til at stjæle data eller til at få uautoriseret adgang. Fuzzing bruges til at finde input, som kan forårsage et bufferoverløb.
Typer af fuzzing
Fuzzing-værktøjer kan klassificeres baseret på både hvordan testcases genereres, og hvor meget man ved om systemet.
Dumme vs. Smart
Dumb fuzzing tilføjer simpelthen store mængder af tilfældige input. Den vælger ikke input, som med størst sandsynlighed vil blive accepteret af applikationen. Dette gør det nemmere at implementere uden at vide noget om softwaren; Det er dog også meget ineffektivt, da de fleste input vil blive afvist.
Smart fuzzing genererer input, som applikationen sandsynligvis vil acceptere. Det kræver, at brugeren forstår, hvilket inputformat der er acceptabelt og derefter genererer store mængder input inden for det format. Smart fuzzing kræver mere indsats og produktkendskab at implementere, men det er væsentligt mere effektivt.
Mutation vs. Generationelle
Mutationsfuzzere tager et input, der tidligere var accepteret, og foretager mindre ændringer i det. Dette gør det muligt at generere input, som sandsynligvis vil blive accepteret uden kendskab til det accepterede format.
Generationsfuzzere skaber helt nye input baseret på, hvad der er kendt om det accepterede format.
White Box vs. Sort kasse
Black box fuzzing bruges uden nogen information om den applikation, der testes. Det er mindre effektivt end fuzzing med hvid boks, men kan anvendes til enhver applikation uden adgang til kildekoden. Dette gør det populært blandt hackere.
White box fuzzing bruger information om den applikation, der testes, til at skabe input, der med størst sandsynlighed vil blive accepteret og producere sårbarheder. Det bruges primært af softwareudviklere, fordi det er mere effektivt end black box fuzzing.
Fuzzing er en kraftfuld softwaretestmetode, der bruges af softwareudviklere, sikkerhedseksperter og hackere. Det kræver minimal indsats at implementere og er i stand til at finde sårbarheder, som andre softwaretestteknikker ikke gør.
Det er særligt vigtigt ud fra et sikkerhedssynspunkt, fordi det ofte bruges til at opdage nul-dages sårbarheder. Disse sårbarheder kan enten opdages og rettes af sikkerhedsprofessionelle eller opdages og udnyttes af hackere.