Šta je Fuzing?

Šta je fuzzing

Uvod: Šta je Fuzing?

2014. kineski hakeri hakovan u Community Health Systems, profitni američki bolnički lanac, i ukrao podatke o 4.5 miliona pacijenata. Hakeri su iskoristili grešku pod nazivom Heartbleed koja je otkrivena u biblioteci kriptografije OpenSSL nekoliko mjeseci prije hakovanja.

Heartbleed je primjer klase vektora napada koji omogućavaju napadačima da pristupe meti slanjem neispravnih zahtjeva koji su dovoljno validni da prođu preliminarne provjere. Dok profesionalci koji rade na različitim dijelovima aplikacije daju sve od sebe da osiguraju njenu sigurnost, nemoguće je zamisliti sve kutne slučajeve koji bi mogli pokvariti aplikaciju ili je učiniti ranjivom tijekom razvoja.

Ovdje dolazi 'fuzzing'.

Šta je fuzzing napad?

Fuzzing, fuzz testiranje ili fuzzing napad je automatizirana tehnika testiranja softvera koja se koristi za unos nasumičnih, neočekivanih ili nevažećih podataka (nazvanih fuzz) u program. Program se prati zbog neobičnih ili neočekivanih ponašanja kao što su prekoračenje međuspremnika, rušenja, curenje memorije, visi niti i kršenja pristupa čitanju/pisanju. Alat za rasplinjavanje ili fuzzer se zatim koristi za otkrivanje uzroka neobičnog ponašanja.

Fuzzing se zasniva na pretpostavci da svi sistemi sadrže greške koje čekaju da budu otkrivene i da im se može dati dovoljno vremena i resursa da to urade. Većina sistema ima veoma dobre parsere ili sprečavanje validacije unosa cybercriminals od iskorištavanja bilo kakvih hipotetičkih grešaka u programu. Međutim, kao što smo već spomenuli, teško je pokriti sve kutne slučajeve tokom razvoja.

Fuzzeri se koriste na programima koji primaju strukturirani unos ili imaju neku vrstu granice povjerenja. Na primjer, program koji prihvaća PDF datoteke imao bi određenu validaciju kako bi osigurao da datoteka ima ekstenziju .pdf i parser za obradu PDF datoteke.

Efikasan fuzzer može da generiše inpute koji su dovoljno validni da pređu ove granice, ali i dovoljno nevažeći da izazovu neočekivano ponašanje niže u programu. Ovo je važno jer samo sposobnost proći validacije ne znači mnogo ako se ne prouzrokuje daljnja šteta.

Fuzzeri otkrivaju vektore napada koji su vrlo slični i uključuju poput SQL injekcije, skriptiranja na više lokacija, prekoračenja bafera i napada uskraćivanja usluge. Svi ovi napadi su rezultat unosa neočekivanih, nevažećih ili nasumičnih podataka u sistem. 

 

Vrste fuzzera

Fuzeri se mogu klasificirati na osnovu nekih karakteristika:

  1. Napadajte mete
  2. Metoda fuzz kreiranja
  3. Svijest o strukturi ulaza
  4. Svijest o strukturi programa

1. Ciljevi napada

Ova klasifikacija je zasnovana na vrsti platforme koju fuzzer koristi za testiranje. Fuzzeri se obično koriste sa mrežnim protokolima i softverskim aplikacijama. Svaka platforma ima određenu vrstu ulaza koje prima, i stoga zahtijeva različite vrste fuzzera.

Na primjer, kada se radi o aplikacijama, svi pokušaji fuzzinga se dešavaju na različitim ulaznim kanalima aplikacije, kao što su korisnički interfejs, terminal komandne linije, obrasci/unosi teksta i učitavanje datoteka. Dakle, svi ulazi koje generiše fuzzer moraju odgovarati ovim kanalima.

Fuzzeri koji se bave komunikacijskim protokolima moraju se baviti paketima. Fuzzeri koji ciljaju ovu platformu mogu generirati krivotvorene pakete, ili čak djelovati kao proksiji da modificiraju presretnute pakete i reproduciraju ih.

2. Metoda stvaranja fuzza

Fuzzeri se takođe mogu klasifikovati na osnovu načina na koji kreiraju podatke za fuzz. Istorijski gledano, fuzzeri su stvarali fuzz generisanjem nasumičnih podataka od nule. Tako je to u početku radio profesor Barton Miller, inicijator ove tehnike. Ovaj tip fuzzera naziva se a generacijski baziran fuzzer.

Međutim, iako bi se teoretski mogli generirati podaci koji će zaobići granicu povjerenja, za to bi bilo potrebno dosta vremena i resursa. Stoga se ova metoda obično koristi za sisteme sa jednostavnim ulaznim strukturama.

Rješenje ovog problema je mutiranje podataka za koje se zna da su valjani kako bi se generirali podaci koji su dovoljno valjani da prođu granicu povjerenja, ali dovoljno nevažeći da izazovu probleme. Dobar primjer za to je a DNS fuzzer koji uzima ime domene, a zatim generiše veliku listu imena domena za otkrivanje potencijalno zlonamernih domena koji ciljaju na vlasnika navedenog domena.

Ovaj pristup je pametniji od prethodnog i značajno sužava moguće permutacije. Pozivaju se fuzzeri koji koriste ovu metodu fuzzeri zasnovani na mutaciji

Postoji treća novija metoda koja koristi genetske algoritme za konvergiranje na optimalnim fuzz podacima potrebnim za iskorijenjivanje ranjivosti. Funkcioniše tako što kontinuirano pročišćava svoje fuzz podatke, uzimajući u obzir performanse svakog test podataka kada se unose u program. 

Skupovi podataka s najlošijim performansama uklanjaju se iz baze podataka, dok se najbolji mijenjaju i/ili kombinuju. Nova generacija podataka se zatim koristi za ponovno ispitivanje fuzz. Ovi fuzzeri se nazivaju fuzzeri zasnovani na evolucijskim mutacijama.

3. Svijest o strukturi ulaza

Ova klasifikacija se zasniva na tome da li je fuzzer svestan i aktivno koristi ulaznu strukturu programa u generisanju fuzz podataka. A dumb fuzzer (fuzzer koji nije svjestan ulazne strukture programa) generiše fuzz na uglavnom nasumičan način. Ovo bi moglo uključivati ​​fuzzere zasnovane na generiranju i mutaciji. 


Ako fuzzer dobije ulazni model programa, fuzzer onda može pokušati da generiše ili mutira podatke tako da se poklapaju sa datim ulaznim modelom. Ovaj pristup dodatno smanjuje količinu resursa utrošenih na generiranje nevažećih podataka. Takav fuzzer se naziva a smart fuzzer.

4. Svijest o strukturi programa

Fazeri se takođe mogu klasifikovati na osnovu toga da li su svjesni internog rada programa koji fuzzuju i koriste tu svijest da pomognu u generiranju fuzz podataka. Kada se fuzzeri koriste za testiranje programa bez razumijevanja njegove interne strukture, to se naziva testiranje crne kutije. 

Fuzz podaci generirani tokom testiranja crne kutije obično su nasumični osim ako je fuzzer fuzzer zasnovan na evolucijskim mutacijama, gdje 'uči' praćenjem efekta njegovog rasplinjavanja i korištenjem toga informacija da precizira svoj skup fuzz podataka.

S druge strane, testiranje bijele kutije koristi model interne strukture programa za generiranje fuzz podataka. Ovaj pristup omogućava fuzzeru da dođe do kritičnih lokacija u programu i testira ga. 

Popularni fuzzing alati

Postoji mnogo fuzzinga alat vani koriste testeri olovke. Neki od najpopularnijih su:

Ograničenja fuzzinga

Iako je Fuzzing zaista korisna tehnika testiranja olovkom, nije bez svojih nedostataka. Neki od njih su:

  • Potrebno je dosta vremena da se pokrene.
  • Padovi i druga neočekivana ponašanja pronađena tokom testiranja programa u crnoj kutiji mogu biti teška, ako ne i nemoguće analizirati ili otkloniti greške.
  • Kreiranje šablona mutacija za pametne fuzzere zasnovane na mutaciji može biti dugotrajno. Ponekad to možda čak i nije moguće zbog toga što je model unosa vlasnički ili nepoznat.

 

Ipak, to je prilično koristan i neophodan alat za svakoga ko želi otkriti greške prije loših momaka.

zaključak

Fuzzing je moćna tehnika testiranja olovkom koja se može koristiti za otkrivanje ranjivosti u softveru. Postoji mnogo različitih tipova fuzera, a novi fuzzeri se stalno razvijaju. Iako je fuzzing nevjerovatno koristan alat, ono ima svoja ograničenja. Na primjer, fuzzeri mogu pronaći samo toliko ranjivosti i mogu biti prilično intenzivni. Međutim, ako želite i sami da isprobate ovu nevjerovatnu tehniku, imamo besplatni DNS Fuzzer API koji možete koristiti na našoj platformi. 

Šta čekate? 

Počnite fuzzing danas!