Hvad er Fuzzing?

Hvad er fuzzing

Intro: Hvad er Fuzzing?

I 2014 kinesiske hackere hacket ind i Community Health Systems, en for-profit amerikansk hospitalskæde, og stjal 4.5 millioner patienters data. Hackerne udnyttede en fejl kaldet Heartbleed, som blev opdaget i OpenSSL kryptografibiblioteket nogle måneder før hacket.

Heartbleed er et eksempel på en klasse af angrebsvektorer, der gør det muligt for angribere at få adgang til et mål ved at sende forkerte anmodninger, der er gyldige nok til at bestå foreløbige kontroller. Mens fagfolk, der arbejder på forskellige dele af en app, gør deres bedste for at sikre dens sikkerhed, er det umuligt at tænke på alle hjørnesager, der kan ødelægge en app eller gøre den sårbar under udvikling.

Det er her 'fuzzing' kommer ind.

Hvad er et fuzzing-angreb?

Fuzzing, fuzz-testning eller et fuzzing-angreb er en automatiseret softwaretestteknik, der bruges til at føre tilfældige, uventede eller ugyldige data (kaldet fuzz) ind i et program. Programmet overvåges for usædvanlig eller uventet adfærd, såsom bufferoverløb, nedbrud, hukommelseslækager, trådstop og overtrædelser af læse-/skriveadgang. Fuzzing-værktøjet eller fuzzeren bruges derefter til at afdække årsagen til den usædvanlige adfærd.

Fuzzing er baseret på den antagelse, at alle systemer indeholder fejl, der venter på at blive opdaget, og at de kan få tid og ressourcer nok til at gøre det. De fleste systemer har meget gode parsere eller forhindrer inputvalidering cyberkriminelle fra at udnytte eventuelle hypotetiske fejl i et program. Men som vi nævnte ovenfor, er det svært at dække alle hjørnesager under udvikling.

Fuzzere bruges på programmer, der tager struktureret input eller har en form for tillidsgrænse. For eksempel vil et program, der accepterer PDF-filer, have en vis validering for at sikre, at filen har en .pdf-udvidelse og parser til at behandle PDF-filen.

En effektiv fuzzer kan generere input, der er gyldige nok til at komme forbi disse grænser, men alligevel ugyldige nok til at forårsage uventet adfærd længere nede i programmet. Dette er vigtigt, fordi bare det at være i stand til at komme forbi valideringerne ikke betyder meget, hvis der ikke forvoldes yderligere skade.

Fuzzere opdager angrebsvektorer, der meget ligner og inkluderer SQL-injektion, cross-site scripting, bufferoverløb og denial-of-service-angreb. Alle disse angreb er et resultat af indføring af uventede, ugyldige eller tilfældige data i et system. 

 

Typer af Fuzzers

Fuzzers kan klassificeres baseret på nogle karakteristika:

  1. Angribe mål
  2. Fuzz skabelsesmetode
  3. Bevidsthed om inputstruktur
  4. Bevidsthed om programstruktur

1. Angrebsmål

Denne klassificering er baseret på den slags platform, fuzzeren bliver brugt til at teste. Fuzzere bruges ofte sammen med netværksprotokoller og softwareapplikationer. Hver platform har en bestemt type input, den modtager, og kræver derfor forskellige typer fuzzers.

For eksempel, når man håndterer applikationer, forekommer alle fuzzing-forsøg på applikationens forskellige inputkanaler, såsom brugergrænsefladen, kommandolinjeterminalen, formularer/tekstinput og filuploads. Så alle input, der genereres af fuzzeren, skal matche disse kanaler.

Fuzzere, der beskæftiger sig med kommunikationsprotokoller, skal håndtere pakker. Fuzzere, der målretter mod denne platform, kan generere forfalskede pakker eller endda fungere som proxyer til at ændre opsnappede pakker og afspille dem igen.

2. Fuzz oprettelsesmetode

Fuzzere kan også klassificeres baseret på, hvordan de skaber data at fuzze med. Historisk set skabte fuzzere fuzz ved at generere tilfældige data fra bunden. Sådan gjorde professor Barton Miller, initiativtageren til denne teknik, det oprindeligt. Denne type fuzzer kaldes en generationsbaseret fuzzer.

Men mens man teoretisk kunne generere data, der vil omgå en tillidsgrænse, ville det tage betydelig tid og ressourcer at gøre det. Derfor bruges denne metode normalt til systemer med simple inputstrukturer.

En løsning på dette problem er at mutere data, der vides at være gyldige til at generere data, der er gyldige nok til at passere en tillidsgrænse, men alligevel ugyldige nok til at forårsage problemer. Et godt eksempel på dette er en DNS fuzzer som tager et domænenavn og derefter genererer en stor liste af domænenavne for at opdage potentielt ondsindede domæner, der er målrettet mod ejeren af ​​det angivne domæne.

Denne tilgang er smartere end den forrige og indsnævrer de mulige permutationer betydeligt. Fuzzers, der bruger denne metode kaldes mutationsbaserede fuzzere

Der er en tredje nyere metode, der gør brug af genetiske algoritmer til at konvergere på de optimale fuzz-data, der er nødvendige for at udrydde sårbarheder. Det fungerer ved løbende at forfine sine fuzz-data, idet der tages højde for ydeevnen af ​​hver testdata, når den føres ind i et program. 

De dårligst ydende datasæt fjernes fra datapuljen, mens de bedste muteres og/eller kombineres. Den nye generation af data bruges derefter til at fuzz-teste igen. Disse fuzzers omtales som evolutionære mutationsbaserede fuzzere.

3. Bevidsthed om inputstruktur

Denne klassifikation er baseret på, om en fuzzer er opmærksom på og aktivt bruger inputstrukturen i et program til at generere fuzz-data. EN stum fuzzer (en fuzzer, der ikke er klar over et programs inputstruktur) genererer fuzz på en for det meste tilfældig måde. Dette kan omfatte både generations- og mutationsbaserede fuzzere. 


Skulle en fuzzer være forsynet med et programs inputmodel, kan fuzzeren derefter forsøge at generere eller mutere data, så de matcher den leverede inputmodel. Denne tilgang reducerer yderligere mængden af ​​ressourcer brugt på at generere ugyldige data. Sådan en fuzzer kaldes en smart fuzzer.

4. Bevidsthed om programstruktur

Fuzzere kan også klassificeres baseret på, om de er bevidste om den interne funktion af det program, de fuzzer, og bruger denne bevidsthed til at hjælpe med at generere fuzz-data. Når fuzzere bruges til at teste et program uden at forstå dets interne struktur, kaldes det black-box-test. 

Fuzz-data genereret under black-box-test er normalt tilfældige, medmindre fuzzeren er en evolutionær mutationsbaseret fuzzer, hvor den 'lærer' ved at overvåge effekten af ​​dens fuzzer og bruge den oplysninger for at forfine sit fuzz-datasæt.

White-box-testning bruger på den anden side en model af programmets interne struktur til at generere fuzz-data. Denne tilgang lader en fuzzer komme til kritiske steder i et program og teste det. 

Populære fuzzing-værktøjer

Der er mange fuzzing værktøjer derude brugt af pennetestere. Nogle af de mest populære er:

Begrænsninger af fuzzing

Selvom Fuzzing er en virkelig nyttig pen-testteknik, er den ikke uden sine fejl. Nogle af disse er:

  • Det tager ret lang tid at køre.
  • Nedbrud og anden uventet adfærd fundet under black-box-test af et program kan være vanskelige, hvis ikke umulige at analysere eller fejlfinde.
  • Det kan være tidskrævende at oprette mutationsskabeloner til smarte mutationsbaserede fuzzere. Nogle gange er det måske ikke engang muligt på grund af, at inputmodellen er proprietær eller ukendt.

 

Ikke desto mindre er det et ret nyttigt og nødvendigt værktøj for alle, der ønsker at opdage fejl før de onde.

Konklusion

Fuzzing er en kraftfuld pen-testteknik, der kan bruges til at afdække sårbarheder i software. Der findes mange forskellige typer fuzzere, og der udvikles hele tiden nye fuzzere. Selvom fuzzing er et utroligt nyttigt værktøj, har det sine begrænsninger. For eksempel kan fuzzere kun finde så mange sårbarheder, og de kan være ret ressourcekrævende. Men hvis du selv vil prøve denne fantastiske teknik, har vi en gratis DNS Fuzzer API, som du kan bruge på vores platform. 

Så hvad venter du på? 

Begynd at fuzze i dag!

Omgåelse af TOR-censur

Omgå internetcensur med TOR

Omgå internetcensur med TOR Introduktion I en verden, hvor adgang til information i stigende grad reguleres, er værktøjer som Tor-netværket blevet afgørende for

Læs mere »