Kaj je Fuzzing?

Kaj je fuzzing

Uvod: Kaj je fuzzing?

Leta 2014 so kitajski hekerji vdrl v zdravstvene sisteme skupnosti, profitno verigo ameriških bolnišnic, in ukradel 4.5 milijona podatkov bolnikov. Hekerji so izkoristili hrošč, imenovan Heartbleed, ki je bil odkrit v kriptografski knjižnici OpenSSL nekaj mesecev pred vdorom.

Heartbleed je primer razreda napadalnih vektorjev, ki napadalcem omogočajo dostop do cilja s pošiljanjem napačno oblikovanih zahtev, ki so dovolj veljavne, da prestanejo predhodna preverjanja. Medtem ko se strokovnjaki, ki delajo na različnih delih aplikacije, po najboljših močeh trudijo zagotoviti njeno varnost, je nemogoče razmišljati o vseh kotnih primerih, ki bi lahko pokvarili aplikacijo ali jo naredili ranljivo med razvojem.

Tukaj nastopi "fuzzing".

Kaj je Fuzzing Attack?

Fuzzing, fuzz testiranje ali napad fuzzing je avtomatizirana tehnika testiranja programske opreme, ki se uporablja za vnašanje naključnih, nepričakovanih ali neveljavnih podatkov (imenovanih fuzz) v program. Program se spremlja glede neobičajnega ali nepričakovanega vedenja, kot so prekoračitve medpomnilnika, zrušitve, uhajanje pomnilnika, prekinitve niti in kršitve dostopa za branje/pisanje. Orodje za fuzzing ali fuzzer se nato uporabi za odkrivanje vzroka nenavadnega vedenja.

Fuzzing temelji na predpostavki, da vsi sistemi vsebujejo hrošče, ki čakajo, da jih odkrijemo, in jim je za to mogoče dati dovolj časa in virov. Večina sistemov ima zelo dobre razčlenjevalnike ali preprečevanje preverjanja vnosa cybercriminals pred izkoriščanjem hipotetičnih napak v programu. Vendar, kot smo omenili zgoraj, je med razvojem težko pokriti vse kotne primere.

Fuzzerji se uporabljajo v programih, ki sprejemajo strukturirane vnose ali imajo nekakšno mejo zaupanja. Na primer, program, ki sprejema datoteke PDF, bi imel nekaj preverjanja, da bi zagotovil, da ima datoteka pripono .pdf in razčlenjevalnik za obdelavo datoteke PDF.

Učinkovit fuzzer lahko ustvari vnose, ki so dovolj veljavni, da presežejo te meje, vendar dovolj neveljavni, da povzročijo nepričakovano vedenje nižje v programu. To je pomembno, ker samo to, da lahko preskočite validacije, ne pomeni veliko, če ne povzročite dodatne škode.

Fuzzerji odkrijejo vektorje napadov, ki so zelo podobni in vključujejo vbrizgavanje SQL, skriptno izvajanje med spletnimi mesti, prekoračitev medpomnilnika in napade z zavrnitvijo storitve. Vsi ti napadi so posledica vnosa nepričakovanih, neveljavnih ali naključnih podatkov v sistem. 

 

Vrste fuzzerjev

Fuzzers lahko razvrstimo glede na nekatere značilnosti:

  1. Napadajte tarče
  2. Metoda ustvarjanja fuzzov
  3. Zavedanje vhodne strukture
  4. Zavedanje strukture programa

1. Napadajte tarče

Ta razvrstitev temelji na vrsti platforme, ki jo uporablja fuzzer za testiranje. Fuzzerji se pogosto uporabljajo z omrežnimi protokoli in programskimi aplikacijami. Vsaka platforma ima določeno vrsto vhodnih podatkov, ki jih prejme, in zato zahteva različne vrste fuzzerjev.

Na primer, ko imate opravka z aplikacijami, se vsi poskusi fuzzinga zgodijo na različnih vhodnih kanalih aplikacije, kot so uporabniški vmesnik, terminal ukazne vrstice, vnosi obrazcev/besedila in nalaganje datotek. Zato se morajo vsi vhodi, ki jih ustvari fuzzer, ujemati s temi kanali.

Fuzzerji, ki se ukvarjajo s komunikacijskimi protokoli, se morajo ukvarjati s paketi. Fuzzerji, ki ciljajo na to platformo, lahko ustvarijo ponarejene pakete ali celo delujejo kot posredniki za spreminjanje prestreženih paketov in njihovo ponovno predvajanje.

2. Metoda ustvarjanja fuzzov

Fuzzerje je mogoče razvrstiti tudi glede na to, kako ustvarjajo podatke za fuzzing. Zgodovinsko gledano so fuzzerji ustvarili fuzz z generiranjem naključnih podatkov iz nič. Tako je sprva počel profesor Barton Miller, pobudnik te tehnike. Ta vrsta fuzzerja se imenuje a generacijski fuzzer.

Čeprav bi teoretično lahko ustvarili podatke, ki bi zaobšli mejo zaupanja, bi za to potrebovali precej časa in sredstev. Zato se ta metoda običajno uporablja za sisteme s preprostimi vhodnimi strukturami.

Rešitev te težave je mutacija podatkov, za katere je znano, da so veljavni, da se ustvarijo podatki, ki so dovolj veljavni, da preidejo mejo zaupanja, vendar dovolj neveljavni, da povzročajo težave. Dober primer tega je a DNS fuzzer ki vzame ime domene in nato ustvari velik seznam imen domen za odkrivanje potencialno zlonamernih domen, ki ciljajo na lastnika navedene domene.

Ta pristop je pametnejši od prejšnjega in bistveno zožuje možne permutacije. Fuzzerji, ki uporabljajo to metodo, se imenujejo fuzzerji na osnovi mutacij

Obstaja še tretja novejša metoda, ki uporablja genetske algoritme za konvergenco na optimalnih mehkih podatkih, potrebnih za izkoreninjenje ranljivosti. Deluje tako, da nenehno izpopolnjuje svoje mehke podatke, pri čemer upošteva učinkovitost vsakega testnega podatka, ko se vnese v program. 

Najslabši nizi podatkov so odstranjeni iz zbirke podatkov, medtem ko so najboljši spremenjeni in/ali združeni. Nova generacija podatkov se nato ponovno uporabi za fuzz test. Te fuzzerje imenujemo fuzzerji, ki temeljijo na evolucijski mutaciji.

3. Zavedanje vhodne strukture

Ta razvrstitev temelji na tem, ali se fuzzer zaveda in aktivno uporablja vhodno strukturo programa pri generiranju podatkov fuzz. A neumni fuzzer (fuzzer, ki se ne zaveda vhodne strukture programa) ustvari fuzz na večinoma naključen način. To bi lahko vključevalo generacijske in mutacijske fuzzerje. 


Če se fuzzerju zagotovi vhodni model programa, lahko fuzzer nato poskuša ustvariti ali spremeniti podatke, tako da se ujemajo s predloženim vhodnim modelom. Ta pristop dodatno zmanjša količino virov, porabljenih za ustvarjanje neveljavnih podatkov. Tak fuzzer se imenuje a pametni fuzzer.

4. Zavedanje strukture programa

Fuzzerje je mogoče razvrstiti tudi glede na to, ali se zavedajo notranjega delovanja programa, ki ga fuzzingajo, in to zavest uporabiti za pomoč pri ustvarjanju fuzz podatkov. Ko se fuzzerji uporabljajo za testiranje programa, ne da bi razumeli njegovo notranjo strukturo, se to imenuje testiranje črne skrinjice. 

Fuzz podatki, ustvarjeni med testiranjem črne skrinjice, so običajno naključni, razen če je fuzzer fuzzer, ki temelji na evolucijski mutaciji, kjer se 'uči' s spremljanjem učinka svojega fuzzinga in uporabo tega Podatki izboljšati svoj nabor fuzz podatkov.

Po drugi strani pa testiranje bele škatle uporablja model notranje strukture programa za ustvarjanje mehkih podatkov. Ta pristop omogoča fuzzerju, da pride do kritičnih mest v programu in ga preizkusi. 

Priljubljena orodja za fuzzing

Veliko je fuzzinga orodja tam zunaj, ki ga uporabljajo preizkuševalci peres. Nekateri izmed najbolj priljubljenih so:

Omejitve fuzzinga

Čeprav je Fuzzing res uporabna tehnika testiranja peresa, ni brez napak. Nekateri od teh so:

  • Teče precej dolgo.
  • Zrušitve in druga nepričakovana vedenja, odkrita med testiranjem programa v črni skrinjici, je lahko težko, če ne celo nemogoče analizirati ali odpraviti napake.
  • Ustvarjanje mutacijskih predlog za pametne fuzzerje, ki temeljijo na mutacijah, je lahko zamudno. Včasih morda celo ni mogoče, ker je vhodni model zaščiten ali neznan.

 

Kljub temu je precej uporabno in potrebno orodje za vsakogar, ki želi odkriti hrošče pred negativci.

zaključek

Fuzzing je zmogljiva tehnika testiranja peresa, ki jo je mogoče uporabiti za odkrivanje ranljivosti v programski opremi. Obstaja veliko različnih vrst fuzzerjev in ves čas se razvijajo novi fuzzerji. Čeprav je fuzzing izjemno uporabno orodje, ima svoje omejitve. Na primer, fuzzerji lahko najdejo le toliko ranljivosti in so lahko zelo intenzivni. Vendar, če želite sami preizkusiti to neverjetno tehniko, imamo brezplačen DNS Fuzzer API, ki ga lahko uporabljate na naši platformi. 

Torej, kaj čakaš? 

Začnite fuzzing še danes!

Google in The Incognito Myth

Google in The Incognito Myth

Google in mit o načinu brez beleženja zgodovine 1. aprila 2024 se je Google strinjal s poravnavo tožbe z uničenjem milijard podatkovnih zapisov, zbranih v načinu brez beleženja zgodovine.

Preberite več »