Hva er Fuzzing?

Hva er uklar

Intro: Hva er fuzzing?

I 2014, kinesiske hackere hacket inn i Community Health Systems, en for-profit amerikansk sykehuskjede, og stjal 4.5 millioner pasientdata. Hackerne utnyttet en feil kalt Heartbleed som ble oppdaget i OpenSSL-krypteringsbiblioteket noen måneder før hacket.

Heartbleed er et eksempel på en klasse med angrepsvektorer som lar angripere få tilgang til et mål ved å sende inn misformede forespørsler som er gyldige nok til å bestå foreløpige kontroller. Mens fagfolk som jobber med forskjellige deler av en app gjør sitt beste for å sikre sikkerheten, er det umulig å tenke på alle hjørnesaker som kan ødelegge en app eller gjøre den sårbar under utvikling.

Det er her "fuzzing" kommer inn.

Hva er et fuzzing-angrep?

Fuzzing, fuzz-testing eller et fuzzing-angrep er en automatisert programvaretestingsteknikk som brukes til å mate tilfeldige, uventede eller ugyldige data (kalt fuzz) inn i et program. Programmet overvåkes for uvanlig eller uventet oppførsel som bufferoverløp, krasjer, minnelekkasjer, trådhengninger og brudd på lese-/skrivetilgang. Fuzzing-verktøyet eller fuzzeren brukes deretter til å avdekke årsaken til den uvanlige oppførselen.

Fuzzing er basert på antakelsen om at alle systemer inneholder feil som venter på å bli oppdaget, og kan gis nok tid og ressurser til å gjøre det. De fleste systemer har svært gode parsere eller forhindrer inndatavalidering nettkriminelle fra å utnytte eventuelle hypotetiske feil i et program. Men som vi nevnte ovenfor, er det vanskelig å dekke alle hjørnesaker under utvikling.

Fuzzere brukes på programmer som tar inn strukturert input eller har en form for tillitsgrense. For eksempel vil et program som godtar PDF-filer ha en viss validering for å sikre at filen har en .pdf-utvidelse og parser for å behandle PDF-filen.

En effektiv fuzzer kan generere innganger som er gyldige nok til å komme forbi disse grensene, men likevel ugyldige nok til å forårsake uventet oppførsel lenger ned i programmet. Dette er viktig fordi bare det å kunne komme forbi valideringene betyr ikke mye hvis det ikke forårsakes ytterligere skade.

Fuzzere oppdager angrepsvektorer som ligner mye på og inkluderer slike som SQL-injeksjon, skripting på tvers av nettsteder, bufferoverløp og tjenestenektangrep. Alle disse angrepene er et resultat av å mate uventede, ugyldige eller tilfeldige data inn i et system. 

 

Typer Fuzzers

Fuzzers kan klassifiseres basert på noen egenskaper:

  1. Angripe mål
  2. Fuzz-opprettingsmetode
  3. Bevissthet om inputstruktur
  4. Bevissthet om programstruktur

1. Angripe mål

Denne klassifiseringen er basert på hva slags plattform fuzzeren brukes til å teste. Fuzzere brukes ofte med nettverksprotokoller og programvareapplikasjoner. Hver plattform har en spesiell type input den mottar, og krever derfor ulike typer fuzzers.

For eksempel, når du arbeider med applikasjoner, skjer alle uklare forsøk på applikasjonens ulike inngangskanaler, som brukergrensesnittet, kommandolinjeterminalen, skjemaer/tekstinndata og filopplastinger. Så alle innganger som genereres av fuzzeren må samsvare med disse kanalene.

Fuzzere som arbeider med kommunikasjonsprotokoller, må håndtere pakker. Fuzzere som retter seg mot denne plattformen kan generere forfalskede pakker, eller til og med fungere som proxyer for å endre oppfangede pakker og spille dem på nytt.

2. Fuzz Creation Method

Fuzzere kan også klassifiseres basert på hvordan de lager data å fuzze med. Historisk har fuzzere skapt fuzz ved å generere tilfeldige data fra bunnen av. Dette var hvordan professor Barton Miller, initiativtakeren til denne teknikken, gjorde det i utgangspunktet. Denne typen fuzzer kalles en generasjonsbasert fuzzer.

Men mens man teoretisk sett kan generere data som vil omgå en tillitsgrense, vil det ta betydelig tid og ressurser å gjøre det. Derfor brukes denne metoden vanligvis for systemer med enkle inputstrukturer.

En løsning på dette problemet er å mutere data som er kjent for å være gyldige for å generere data som er gyldige nok til å passere en tillitsgrense, men likevel ugyldige nok til å forårsake problemer. Et godt eksempel på dette er en DNS fuzzer som tar et domenenavn og deretter genererer en stor liste med domenenavn for å oppdage potensielt skadelige domener som er målrettet mot eieren av det angitte domenet.

Denne tilnærmingen er smartere enn den forrige og begrenser de mulige permutasjonene betydelig. Fuzzere som bruker denne metoden kalles mutasjonsbaserte fuzzere

Det er en tredje nyere metode som bruker genetiske algoritmer for å konvergere på de optimale fuzz-dataene som trengs for å utrydde sårbarheter. Den fungerer ved å kontinuerlig avgrense fuzz-dataene sine, og tar hensyn til ytelsen til hver testdata når den mates inn i et program. 

De dårligste settene med data fjernes fra datapoolen, mens de beste muteres og/eller kombineres. Den nye generasjonen av data brukes deretter til fuzz-testing igjen. Disse fuzzerne er referert til som evolusjonære mutasjonsbaserte fuzzere.

3. Bevissthet om inputstruktur

Denne klassifiseringen er basert på om en fuzzer er klar over og aktivt bruker inputstrukturen til et program for å generere fuzz-data. EN dum fuzzer (en fuzzer som ikke er klar over et programs input-struktur) genererer fuzz på en for det meste tilfeldig måte. Dette kan inkludere både generasjons- og mutasjonsbaserte fuzzere. 


Skulle en fuzzer være utstyrt med inngangsmodellen til et program, kan fuzzer deretter prøve å generere eller mutere data slik at de samsvarer med den angitte inngangsmodellen. Denne tilnærmingen reduserer ytterligere mengden ressurser som brukes på å generere ugyldige data. En slik fuzzer kalles en smart fuzzer.

4. Bevissthet om programstruktur

Fuzzere kan også klassifiseres basert på om de er klar over den interne funksjonen til programmet de fuzzer, og bruker denne bevisstheten til å hjelpe generering av fuzz-data. Når fuzzere brukes til å teste et program uten å forstå dets interne struktur, kalles det black-box-testing. 

Fuzz-data generert under black-box-testing er vanligvis tilfeldig med mindre fuzzeren er en evolusjonær mutasjonsbasert fuzzer, der den "lærer" ved å overvåke effekten av fuzzeren og bruke den informasjon for å avgrense fuzz-datasettet.

White-box-testing bruker derimot en modell av programmets interne struktur for å generere fuzz-data. Denne tilnærmingen lar en fuzzer komme til kritiske steder i et program og teste det. 

Populære fuzzing-verktøy

Det er mange uklare verktøy der ute brukt av pennetestere. Noen av de mest populære er:

Begrensninger for fuzzing

Selv om Fuzzing er en veldig nyttig penn-testingsteknikk, er den ikke uten feil. Noen av disse er:

  • Det tar ganske lang tid å løpe.
  • Krasj og annen uventet atferd funnet under black-box-testing av et program kan være vanskelig, om ikke umulig å analysere eller feilsøke.
  • Å lage mutasjonsmaler for smarte mutasjonsbaserte fuzzere kan være tidkrevende. Noen ganger er det kanskje ikke engang mulig på grunn av at inngangsmodellen er proprietær eller ukjent.

 

Likevel er det et ganske nyttig og nødvendig verktøy for alle som ønsker å oppdage feil før skurkene.

konklusjonen

Fuzzing er en kraftig penn-testingsteknikk som kan brukes til å avdekke sårbarheter i programvare. Det finnes mange forskjellige typer fuzzere, og nye fuzzere utvikles hele tiden. Selv om fuzzing er et utrolig nyttig verktøy, har det sine begrensninger. For eksempel kan fuzzere bare finne så mange sårbarheter, og de kan være ganske ressurskrevende. Men hvis du vil prøve ut denne fantastiske teknikken selv, har vi en gratis DNS Fuzzer API som du kan bruke på plattformen vår. 

Så hva venter du på? 

Begynn å lure i dag!

Google og The Incognito Myth

Google og The Incognito Myth

Google og inkognitomyten 1. april 2024 gikk Google med på å avgjøre et søksmål ved å ødelegge milliarder av dataposter samlet inn fra inkognitomodus.

Les mer »