Što je Fuzzing?

Što je fuzzing

Uvod: Što je Fuzzing?

Godine 2014. kineski hakeri upao u zdravstvene sustave zajednice, profitni američki lanac bolnica, i ukrao podatke o 4.5 milijuna pacijenata. Hakeri su iskoristili grešku nazvanu Heartbleed koja je otkrivena u OpenSSL kriptografskoj biblioteci nekoliko mjeseci prije hakiranja.

Heartbleed je primjer klase vektora napada koji napadačima omogućuju pristup meti slanjem neispravnih zahtjeva dovoljno valjanih da prođu preliminarne provjere. Dok profesionalci koji rade na različitim dijelovima aplikacije daju sve od sebe kako bi osigurali njezinu sigurnost, nemoguće je sjetiti se svih kutnih slučajeva koji bi mogli pokvariti aplikaciju ili je učiniti ranjivom tijekom razvoja.

Ovdje dolazi 'fuzzing'.

Što je Fuzzing napad?

Fuzzing, testiranje fuzza ili napad fuzzinga automatizirana je tehnika testiranja softvera koja se koristi za unos nasumičnih, neočekivanih ili nevažećih podataka (zvanih fuzz) u program. Program se prati zbog neuobičajenog ili neočekivanog ponašanja kao što su prekoračenja međuspremnika, rušenja, curenja memorije, zastoja niti i kršenja pristupa za čitanje/pisanje. Fuzzing alat ili fuzzer zatim se koristi za otkrivanje uzroka neobičnog ponašanja.

Fuzzing se temelji na pretpostavci da svi sustavi sadrže greške koje čekaju da budu otkrivene i da im se može dati dovoljno vremena i resursa da to učine. Većina sustava ima vrlo dobre parsere ili sprječavanje provjere valjanosti unosa kriminalci od iskorištavanja hipotetskih grešaka u programu. Međutim, kao što smo gore spomenuli, pokrivanje svih kutnih slučajeva tijekom razvoja je teško.

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 neku provjeru valjanosti kako bi se osiguralo da datoteka ima nastavak .pdf i parser za obradu PDF datoteke.

Učinkoviti fuzzer može generirati unose koji su dovoljno valjani da prijeđu ove granice, a opet dovoljno nevažeći da izazovu neočekivano ponašanje niže u programu. Ovo je važno jer samo prolazak kroz provjere ne znači mnogo ako se ne uzrokuje daljnja šteta.

Fuzzeri otkrivaju vektore napada vrlo slične i uključujući napade poput SQL injekcije, skriptiranja na različitim mjestima, prekoračenja međuspremnika i napada uskraćivanja usluge. Svi ovi napadi rezultat su unosa neočekivanih, nevažećih ili nasumičnih podataka u sustav. 

 

Vrste fuzzera

Fuzzeri se mogu klasificirati na temelju nekih karakteristika:

  1. Napadajte ciljeve
  2. Metoda stvaranja fuzza
  3. Svijest o ulaznoj strukturi
  4. Svijest o strukturi programa

1. Napadajte mete

Ova se klasifikacija temelji na vrsti platforme za testiranje fuzzera. Fuzzeri se obično koriste s mrežnim protokolima i softverskim aplikacijama. Svaka platforma ima određenu vrstu ulaznih podataka koje prima i stoga zahtijeva različite vrste fuzzera.

Na primjer, kada se radi o aplikacijama, svi pokušaji fuzzinga događaju se na različitim ulaznim kanalima aplikacije, kao što su korisničko sučelje, terminal naredbenog retka, obrasci/unosi teksta i učitavanje datoteka. Dakle, svi ulazi koje generira fuzzer moraju odgovarati ovim kanalima.

Fuzzeri koji se bave komunikacijskim protokolima moraju se nositi s paketima. Fuzzeri koji ciljaju ovu platformu mogu generirati krivotvorene pakete ili čak djelovati kao posrednici za izmjenu presretnutih paketa i njihovu reprodukciju.

2. Metoda stvaranja fuzza

Fuzzeri se također mogu klasificirati na temelju načina na koji stvaraju podatke za fuzz. Povijesno gledano, fuzzeri su stvorili fuzz generiranjem nasumičnih podataka od nule. Tako je to u početku radio profesor Barton Miller, inicijator ove tehnike. Ova vrsta fuzzera naziva se a generacijski 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 sustave s jednostavnim ulaznim strukturama.

Rješenje ovog problema je mutacija podataka za koje se zna da su valjani kako bi se generirali podaci dovoljno valjani da prođu granicu povjerenja, a opet dovoljno nevažeći da uzrokuju probleme. Dobar primjer za to je a DNS fuzzer koji uzima naziv domene i zatim generira veliki popis naziva domena za otkrivanje potencijalno zlonamjernih domena koje ciljaju vlasnika navedene domene.

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

Postoji i treća, novija metoda koja koristi genetske algoritme za konvergaciju na optimalnim fuzz podacima potrebnim za uklanjanje ranjivosti. Radi tako da neprestano usavršava svoje fuzz podatke, uzimajući u obzir izvedbu svakog testnog podatka kada se unese u program. 

Skupovi podataka s najlošijom izvedbom uklanjaju se iz baze podataka, dok se najbolji mijenjaju i/ili kombiniraju. Nova generacija podataka zatim se ponovno koristi za fuzz test. Ovi fuzzeri se nazivaju fuzzeri temeljeni na evolucijskim mutacijama.

3. Svijest o ulaznoj strukturi

Ova se klasifikacija temelji na tome je li fuzzer svjestan i aktivno koristi ulaznu strukturu programa u generiranju fuzz podataka. A glupi fuzzer (fuzzer koji nije svjestan ulazne strukture programa) generira fuzz na uglavnom nasumičan način. To bi moglo uključivati ​​fuzzere koji se temelje na generaciji i mutaciji. 


Ako se fuzzeru dostavi ulazni model programa, fuzzer može pokušati generirati ili izmijeniti podatke tako da odgovaraju dostavljenom ulaznom modelu. Ovaj pristup dodatno smanjuje količinu resursa utrošenih na generiranje nevažećih podataka. Takav fuzzer naziva se a pametni fuzzer.

4. Svijest o strukturi programa

Fuzzeri se također mogu klasificirati na temelju toga jesu li svjesni internog rada programa koji fuzziraju i koriste li tu svijest da pomognu u generiranju fuzz podataka. Kada se fuzzeri koriste za testiranje programa bez razumijevanja njegove unutarnje strukture, to se zove testiranje crne kutije. 

Fuzz podaci generirani tijekom testiranja crne kutije obično su nasumični osim ako je fuzzer fuzzer temeljen na evolucijskim mutacijama, gdje 'uči' praćenjem učinka svog fuzzinga i korištenjem tog informacije kako bi poboljšao svoj skup fuzz podataka.

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

Popularni alati za fuzzing

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

Ograničenja fuzzinga

Iako je Fuzzing stvarno korisna tehnika testiranja olovke, nije bez nedostataka. Neki od njih su:

  • Trčanje traje dosta dugo.
  • Padovi i druga neočekivana ponašanja pronađena tijekom testiranja programa crne kutije mogu biti teška, ako ne i nemoguća za analizu ili otklanjanje pogrešaka.
  • Stvaranje mutacijskih predložaka za pametne fuzzere koji se temelje na mutaciji može biti dugotrajan. Ponekad to čak nije moguće jer je ulazni model vlasnički ili nepoznat.

 

Unatoč tome, prilično je koristan i neophodan alat za svakoga tko želi otkriti bugove prije negativaca.

Zaključak

Fuzzing je moćna tehnika testiranja olovkom koja se može koristiti za otkrivanje ranjivosti u softveru. Postoji mnogo različitih vrsta fuzzera, a novi fuzzeri se stalno razvijaju. Iako je fuzzing nevjerojatno koristan alat, on ima svoja ograničenja. Na primjer, fuzzeri mogu pronaći samo toliko ranjivosti i mogu zahtijevati dosta resursa. Međutim, ako želite i sami isprobati ovu nevjerojatnu tehniku, imamo besplatni DNS Fuzzer API koji možete koristiti na našoj platformi. 

Pa što čekate? 

Počnite s fuzzingom danas!