Kas yra Fuzzing?

Kas yra fuzzing

Įvadas: kas yra fuzzing?

2014 m. Kinijos įsilaužėliai įsilaužė į Bendrijos sveikatos sistemas, pelno siekiantis JAV ligoninių tinklas, ir pavogė 4.5 mln. pacientų duomenis. Įsilaužėliai išnaudojo klaidą „Heartbleed“, kuri buvo aptikta OpenSSL kriptografijos bibliotekoje likus keliems mėnesiams iki įsilaužimo.

„Heartbleed“ yra atakos vektorių klasės pavyzdys, leidžiantis užpuolikams pasiekti taikinį siunčiant netinkamai suformuotas užklausas, kurios yra pakankamai tinkamos, kad atitiktų išankstinius patikrinimus. Nors profesionalai, dirbantys su skirtingomis programos dalimis, daro viską, kad užtikrintų jos saugumą, neįmanoma pagalvoti apie visus kampinius atvejus, kurie gali sugadinti programą arba padaryti ją pažeidžiamą kuriant.

Čia atsiranda „nepainiojimas“.

Kas yra neaiški ataka?

„Fuzzing“, „fuzz testing“ arba „fuzzing ataka“ yra automatizuota programinės įrangos testavimo technika, naudojama atsitiktiniams, netikėtiems arba netinkamiems duomenims (vadinamiems fuzz) į programą pateikti. Programa stebima, ar nėra neįprastų ar netikėtų veiksmų, tokių kaip buferio perpildymas, gedimai, atminties nutekėjimai, gijos užstrigimai ir skaitymo / rašymo prieigos pažeidimai. Tada naudojamas purškimo įrankis arba pūslelinė, siekiant atskleisti neįprasto elgesio priežastį.

Apibendrinimas pagrįstas prielaida, kad visose sistemose yra klaidų, kurios laukia, kol bus aptiktos, ir joms gali būti skirta pakankamai laiko ir išteklių tai padaryti. Daugumoje sistemų yra labai geri analizatoriai arba įvesties patvirtinimo apsauga kibernetiniai nusikaltėliai išnaudoti bet kokias hipotetines programos klaidas. Tačiau, kaip minėjome aukščiau, kūrimo metu sunku aprėpti visus kampinius atvejus.

„Fuzzers“ naudojami programose, kurios priima struktūrizuotą įvestį arba turi tam tikrą pasitikėjimo ribą. Pavyzdžiui, programa, kuri priima PDF failus, turėtų patikrinti, ar failas turi .pdf plėtinį ir analizatorių, skirtą PDF failui apdoroti.

Veiksmingas fuzeris gali generuoti pakankamai tinkamus įvestis, kad būtų peržengtos šios ribos, tačiau pakankamai negaliojančios, kad sukeltų netikėtą elgesį tolimesnėje programoje. Tai svarbu, nes vien tik sugebėjimas praeiti patvirtinimus nereiškia daug, jei nebus daroma daugiau žalos.

„Fuzzers“ atranda atakų vektorius, labai panašius į SQL injekciją, scenarijų sudarymą tarp svetainių, buferio perpildymo ir paslaugų atsisakymo atakas. Visos šios atakos yra netikėtų, neteisingų arba atsitiktinių duomenų įvedimo į sistemą rezultatas. 

 

Fuzzerių tipai

Dygliai gali būti klasifikuojami pagal kai kurias charakteristikas:

  1. Atakuoti taikinius
  2. Fuzz kūrimo metodas
  3. Įvesties struktūros suvokimas
  4. Programos struktūros suvokimas

1. Puolimo taikiniai

Ši klasifikacija pagrįsta platformos rūšimi, kuriai tikrinti naudojamas fuzzeris. Fuzzers dažniausiai naudojami su tinklo protokolais ir programine įranga. Kiekviena platforma turi tam tikro tipo įvestį, kurią ji gauna, todėl jai reikia skirtingų tipų fuzerių.

Pavyzdžiui, dirbant su programomis, visi neryškūs bandymai vyksta įvairiuose programos įvesties kanaluose, tokiuose kaip vartotojo sąsaja, komandų eilutės terminalas, formos / teksto įvestis ir failų įkėlimas. Taigi visi fuzzerio generuojami įėjimai turi atitikti šiuos kanalus.

„Fuzzers“, dirbantis su ryšio protokolais, turi dirbti su paketais. Į šią platformą nukreipiantys „fuzzers“ gali generuoti suklastotus paketus arba netgi veikti kaip tarpiniai serveriai, kad pakeistų perimtus paketus ir juos atkurtų.

2. Fuzz kūrimo metodas

„Fuzzers“ taip pat gali būti klasifikuojami pagal tai, kaip jie sukuria duomenis, kuriuos reikia naudoti. Istoriškai „fuzzers“ sukūrė „fuzz“ generuodami atsitiktinius duomenis nuo nulio. Taip iš pradžių padarė profesorius Bartonas Milleris, šios technikos pradininkas. Šio tipo fuzzeris vadinamas a kartos fuzeris.

Tačiau, nors teoriškai galima generuoti duomenis, kurie aplenks pasitikėjimo ribą, tam prireiktų daug laiko ir išteklių. Todėl šis metodas dažniausiai naudojamas sistemoms su paprastomis įvesties struktūromis.

Šios problemos sprendimas yra pakeisti žinomus galiojančius duomenis, kad būtų generuojami pakankamai tinkami duomenys, kad peržengtų pasitikėjimo ribą, tačiau pakankamai negaliojantys, kad sukeltų problemų. Puikus to pavyzdys yra a DNS pūslelinė kuris paima domeno vardą ir sugeneruoja didelį domenų vardų sąrašą, kad aptiktų galimai kenkėjiškus domenus, nukreiptus į nurodyto domeno savininką.

Šis metodas yra protingesnis nei ankstesnis ir žymiai susiaurina galimas permutacijas. Šį metodą naudojantys fuzeriai vadinami mutacijomis pagrįsti fuzeriai

Yra trečias naujesnis metodas, kuris naudoja genetinius algoritmus, kad suartėtų su optimaliais „fuzz“ duomenimis, reikalingais pažeidžiamumui pašalinti. Jis veikia nuolat tobulindamas „fuzz“ duomenis, atsižvelgdamas į kiekvieno bandymo duomenų našumą, kai jie įvedami į programą. 

Blogiausio našumo duomenų rinkiniai pašalinami iš duomenų telkinio, o geriausi yra mutuojami ir (arba) sujungiami. Tada naujos kartos duomenys vėl naudojami „fuzz“ testui atlikti. Šie pūkai yra vadinami evoliucinėmis mutacijomis pagrįsti pūkeliai.

3. Įvesties struktūros suvokimas

Ši klasifikacija grindžiama tuo, ar „fuzzer“ žino ir aktyviai naudoja programos įvesties struktūrą generuodamas „fuzz“ duomenis. A kvailas pūkas (fūzeris, kuris nežino programos įvesties struktūros) generuoja pūką dažniausiai atsitiktinai. Tai gali apimti ir kartomis, ir mutacijomis pagrįstus pūkelius. 


Jei fuzeriui pateikiamas programos įvesties modelis, jis gali bandyti generuoti arba pakeisti duomenis taip, kad jie atitiktų pateiktą įvesties modelį. Šis metodas dar labiau sumažina išteklių, išleistų generuojant netinkamus duomenis, kiekį. Toks fuzeris vadinamas a protingas pūslelinis.

4. Programos struktūros žinojimas

„Fuzzers“ taip pat gali būti klasifikuojami pagal tai, ar jie žino apie vidinį skleidžiamos programos veikimą, ir naudoja tą žinojimą, kad padėtų generuoti „fuzz“ duomenis. Kai fuzeriai naudojami programai išbandyti nesuvokiant jos vidinės struktūros, tai vadinama juodosios dėžės testavimu. 

„Juodosios dėžės“ testavimo metu generuojami „fuzzer“ duomenys paprastai yra atsitiktiniai, nebent „fuzzer“ yra evoliucinėmis mutacijomis pagrįstas „fuzzeris“, kur jis „mokosi“ stebėdamas savo neryškumo poveikį ir naudodamas jį informacija kad patikslintų jo fuzz duomenų rinkinį.

Kita vertus, baltojo langelio testavimas naudoja programos vidinės struktūros modelį, kad generuotų „fuzz“ duomenis. Šis metodas leidžia „fuzzer“ patekti į svarbias programos vietas ir ją išbandyti. 

Populiarūs „fuzzing“ įrankiai

Yra daug miglotų įrankiai ten naudoja rašiklio testeriai. Kai kurie iš populiariausių yra:

Apibrėžimo apribojimai

Nors „Fuzing“ yra tikrai naudinga rašiklio testavimo technika, ji nėra be trūkumų. Kai kurie iš jų yra:

  • Paleisti reikia gana ilgai.
  • Strigtis ir kitas netikėtas elgesys, nustatytas bandant programą juodojoje dėžutėje, gali būti sudėtinga, o gal net neįmanoma išanalizuoti ar derinti.
  • Sukurti mutacijų šablonus išmaniesiems mutacijomis pagrįstiems fuzeriams gali užtrukti. Kartais tai gali būti net neįmanoma, nes įvesties modelis yra patentuotas arba nežinomas.

 

Nepaisant to, tai gana naudingas ir reikalingas įrankis tiems, kurie nori atrasti klaidas prieš blogiukus.

Išvada

Fuzzing yra galingas rašiklio testavimo metodas, kurį galima naudoti programinės įrangos pažeidžiamumui atskleisti. Yra daug įvairių tipų pūkelių ir nuolat kuriami nauji fuzeriai. Nors „fuzzing“ yra neįtikėtinai naudinga priemonė, ji turi savo apribojimų. Pavyzdžiui, fuzeriai gali rasti tik tiek daug pažeidžiamumų ir jiems gali prireikti daug išteklių. Tačiau jei norite patys išbandyti šią nuostabią techniką, turime a nemokama DNS Fuzzer API, kurią galite naudoti mūsų platformoje. 

Taigi, ko jūs laukiate? 

Pradėkite nerimauti šiandien!

Google ir inkognito mitas

Google ir inkognito mitas

„Google“ ir inkognito mitas 1 m. balandžio 2024 d. „Google“ sutiko išspręsti ieškinį, sunaikindama milijardus duomenų įrašų, surinktų naudojant inkognito režimą.

Skaityti daugiau "