Kas ir Fuzzing?

Kas ir neskaidrs

Ievads: Kas ir izplūdums?

2014. gadā ķīniešu hakeri uzlauzts Kopienas veselības sistēmās, peļņas gūšanas ASV slimnīcu ķēde, un nozaga 4.5 miljonus pacientu datus. Hakeri izmantoja kļūdu ar nosaukumu Heartbleed, kas tika atklāta OpenSSL kriptogrāfijas bibliotēkā dažus mēnešus pirms uzlaušanas.

Heartbleed ir uzbrukuma vektoru klases piemērs, kas ļauj uzbrucējiem piekļūt mērķim, nosūtot nepareizi veidotus pieprasījumus, kas ir pietiekami derīgi, lai izturētu sākotnējās pārbaudes. Lai gan profesionāļi, kas strādā pie dažādām lietotnes daļām, dara visu iespējamo, lai nodrošinātu tās drošību, nav iespējams iedomāties visus stūra gadījumus, kas varētu sabojāt lietotni vai padarīt to neaizsargātu izstrādes laikā.

Šeit parādās “izplūdināšana”.

Kas ir izplūdušais uzbrukums?

Izplūdes testēšana vai izplūdes uzbrukums ir automatizēta programmatūras testēšanas metode, ko izmanto, lai programmā ievadītu nejaušus, negaidītus vai nederīgus datus (sauktu par fuzz). Programma tiek pārraudzīta, lai atklātu neparastas vai negaidītas darbības, piemēram, bufera pārpildes, avārijas, atmiņas noplūdes, pavedienu pārtraukšanu un lasīšanas/rakstīšanas piekļuves pārkāpumus. Pēc tam izplūdes rīks vai izplūdes rīks tiek izmantots, lai atklātu neparastās uzvedības cēloni.

Izplūdes pamatā ir pieņēmums, ka visās sistēmās ir kļūdas, kas gaida atklāšanu, un tām var dot pietiekami daudz laika un resursu, lai to izdarītu. Lielākajai daļai sistēmu ir ļoti labi parsētāji vai ievades validācijas novēršana kibernoziedznieki no jebkādu hipotētisku kļūdu izmantošanas programmā. Tomēr, kā minēts iepriekš, izstrādes laikā ir grūti aptvert visus stūra gadījumus.

Fuzzers tiek izmantots programmās, kas saņem strukturētu ievadi vai kurām ir kāda veida uzticamības robeža. Piemēram, programmai, kas pieņem PDF failus, būtu jāveic pārbaude, lai nodrošinātu, ka failam ir .pdf paplašinājums un parsētājs PDF faila apstrādei.

Efektīvs fuzeris var ģenerēt ievades datus, kas ir pietiekami derīgi, lai pārsniegtu šīs robežas, taču pietiekami nederīgi, lai izraisītu neparedzētu darbību tālāk programmā. Tas ir svarīgi, jo tikai iespēja tikt galā ar apstiprinājumiem neko daudz nenozīmē, ja netiek nodarīts turpmāks kaitējums.

Fuzzers atklāj uzbrukuma vektorus, kas ir ļoti līdzīgi SQL injekcijām, starpvietņu skriptu veidošanai, bufera pārpildei un pakalpojumu atteikuma uzbrukumiem. Visi šie uzbrukumi ir neparedzētu, nederīgu vai nejaušu datu ievadīšanas rezultātā sistēmā. 

 

Fuzzeru veidi

Fuzerus var klasificēt pēc dažām pazīmēm:

  1. Uzbrukt mērķiem
  2. Fuzz izveides metode
  3. Ievades struktūras apzināšanās
  4. Programmas struktūras izpratne

1. Uzbrukuma mērķi

Šī klasifikācija ir balstīta uz platformas veidu, kas tiek izmantots, lai pārbaudītu fuzeru. Fuzzers parasti tiek izmantots ar tīkla protokoliem un programmatūras lietojumprogrammām. Katrai platformai ir noteikta veida ievade, ko tā saņem, un tāpēc tai ir nepieciešami dažāda veida fuzeri.

Piemēram, strādājot ar lietojumprogrammām, visi izplūdes mēģinājumi notiek dažādos lietojumprogrammas ievades kanālos, piemēram, lietotāja saskarnē, komandrindas terminālī, veidlapu/teksta ievadē un failu augšupielādē. Tātad visiem fuzera ģenerētajiem ievadiem ir jāatbilst šiem kanāliem.

Fuzzers, kas nodarbojas ar sakaru protokoliem, ir jārisina ar paketēm. Fuzzers, kas mērķētas uz šo platformu, var ģenerēt viltotas paketes vai pat darboties kā starpniekserveri, lai pārveidotu pārtvertās paketes un tās atkārtoti atskaņotu.

2. Fuzz izveides metode

Fuzzers var arī klasificēt, pamatojoties uz to, kā tie veido datus, ar kuriem izplūst. Vēsturiski fuzeri radīja fuzz, ģenerējot nejaušus datus no nulles. Tā sākotnēji to darīja profesors Bārtons Millers, šīs tehnikas aizsācējs. Šāda veida fuzeri sauc par a paaudzes fuzeris.

Tomēr, lai gan teorētiski varētu ģenerēt datus, kas apiet uzticamības robežu, tas prasītu ievērojamu laiku un resursus. Tāpēc šo metodi parasti izmanto sistēmām ar vienkāršām ievades struktūrām.

Šīs problēmas risinājums ir mainīt datus, par kuriem zināms, ka tie ir derīgi, lai ģenerētu datus, kas ir pietiekami derīgi, lai pārvarētu uzticamības robežu, tomēr pietiekami nederīgi, lai radītu problēmas. Labs piemērs tam ir a DNS fuzeris kas ņem domēna nosaukumu un pēc tam ģenerē lielu domēna nosaukumu sarakstu, lai atklātu potenciāli ļaunprātīgus domēnus, kuru mērķauditorija ir norādītā domēna īpašnieks.

Šī pieeja ir gudrāka nekā iepriekšējā un ievērojami sašaurina iespējamās permutācijas. Tiek saukti fuzeri, kas izmanto šo metodi uz mutācijām balstīti fuzeri

Ir trešā jaunāka metode, kas izmanto ģenētiskus algoritmus, lai saskaņotu optimālos izplūdes datus, kas nepieciešami, lai izskaustu ievainojamības. Tas darbojas, nepārtraukti uzlabojot izplūdes datus, ņemot vērā katra testa datu veiktspēju, kad tie tiek ievadīti programmā. 

Sliktākās datu kopas tiek noņemtas no datu kopas, bet labākās tiek mutētas un/vai apvienotas. Pēc tam jaunās paaudzes dati tiek izmantoti, lai vēlreiz veiktu izplūdes pārbaudi. Šie fuzeri tiek saukti par uz evolūcijas mutācijām balstīti fuzeri.

3. Ievades struktūras apzināšanās

Šī klasifikācija ir balstīta uz to, vai fuzeris apzinās un aktīvi izmanto programmas ievades struktūru, ģenerējot izplūdes datus. A stulbs fuzeris (fuzzer, kas nezina par programmas ievades struktūru) ģenerē izplūdumu lielākoties nejaušā veidā. Tas varētu ietvert gan ģenerēšanas, gan mutāciju bāzes fuzerus. 


Ja fuzer tiek nodrošināts ar programmas ievades modeli, fuzeris var mēģināt ģenerēt vai mutēt datus, lai tie atbilstu sniegtajam ievades modelim. Šī pieeja vēl vairāk samazina resursu apjomu, kas iztērēts nederīgu datu ģenerēšanai. Šādu fuzeri sauc par a viedais fuzeris.

4. Programmas struktūras izpratne

Izplūdes var arī klasificēt, pamatojoties uz to, vai viņi apzinās izplūstošās programmas iekšējo darbību, un izmanto šo izpratni, lai palīdzētu ģenerēt izplūdušos datus. Ja programmas testēšanai izmanto fuzerus, neizprotot tās iekšējo struktūru, to sauc par melnās kastes testēšanu. 

Izplūdes dati, kas ģenerēti melnās kastes testēšanas laikā, parasti ir nejauši, ja vien fuzeris nav uz evolūcijas mutācijām balstīts izplūdes rīks, kur tas “mācās”, uzraugot izplūdes efektu un izmantojot to. informācija lai precizētu izplūdušo datu kopu.

No otras puses, baltās kastes testēšana izmanto programmas iekšējās struktūras modeli, lai ģenerētu izplūdušos datus. Šī pieeja ļauj fuzerim nokļūt programmas kritiskajās vietās un to pārbaudīt. 

Populāri izplūdes rīki

Izplūdes ierobežojumi

Lai gan izplūdes metode ir patiešām noderīga pildspalvas testēšanas metode, tā nav bez kļūdām. Daži no tiem ir:

  • Skriešana aizņem diezgan ilgu laiku.
  • Programmas melnās kastes testēšanas laikā konstatētās avārijas un citas neparedzētas darbības var būt grūti vai pat neiespējami analizēt vai atkļūdot.
  • Mutāciju veidņu izveide viediem uz mutācijām balstītiem fuzeriem var būt laikietilpīga. Dažreiz tas var nebūt iespējams, jo ievades modelis ir patentēts vai nezināms.

 

Tomēr tas ir diezgan noderīgs un nepieciešams rīks ikvienam, kurš vēlas atklāt kļūdas pirms sliktajiem puišiem.

Secinājumi

Fuzzing ir spēcīgs pildspalvu testēšanas paņēmiens, ko var izmantot, lai atklātu programmatūras ievainojamības. Ir daudz dažādu fuzeru veidu, un visu laiku tiek izstrādāti jauni fuzeri. Lai gan izplūšana ir neticami noderīgs rīks, tai ir savi ierobežojumi. Piemēram, fuzeri var atrast tikai tik daudz ievainojamību, un tās var būt diezgan resursietilpīgas. Tomēr, ja vēlaties pats izmēģināt šo apbrīnojamo tehniku, mums ir a bezmaksas DNS Fuzzer API, ko varat izmantot mūsu platformā. 

Tātad, ko jūs gaida? 

Sāciet izklaidēties jau šodien!