Čo je to Fuzzing?

Čo je fuzzing

Úvod: Čo je to Fuzzing?

V roku 2014 čínski hackeri nabúrali do komunitných zdravotných systémov, ziskový americký nemocničný reťazec, a ukradol údaje o 4.5 miliónoch pacientov. Hackeri zneužili chybu s názvom Heartbleed, ktorá bola objavená v kryptografickej knižnici OpenSSL niekoľko mesiacov pred hacknutím.

Heartbleed je príkladom triedy útočných vektorov, ktoré umožňujú útočníkom prístup k cieľu odosielaním chybných požiadaviek dostatočne platných na to, aby prešli predbežnými kontrolami. Zatiaľ čo profesionáli, ktorí pracujú na rôznych častiach aplikácie, robia všetko, čo je v ich silách, aby zabezpečili jej bezpečnosť, nie je možné myslieť na všetky rohové prípady, ktoré by mohli aplikáciu zlomiť alebo ju počas vývoja urobiť zraniteľnou.

Tu prichádza na scénu 'fuzzing'.

Čo je to Fuzzing Attack?

Fuzzing, fuzz testovanie alebo fuzzing attack, je automatizovaná technika testovania softvéru používaná na pridávanie náhodných, neočakávaných alebo neplatných údajov (nazývaných fuzz) do programu. Program je monitorovaný na nezvyčajné alebo neočakávané správanie, ako je pretečenie vyrovnávacej pamäte, pády, úniky pamäte, zamrznutie vlákna a narušenie prístupu na čítanie/zápis. Na odhalenie príčiny neobvyklého správania sa potom použije fuzzovací nástroj alebo fuzzer.

Fuzzing je založený na predpoklade, že všetky systémy obsahujú chyby, ktoré čakajú na odhalenie, a na to môže dostať dostatok času a zdrojov. Väčšina systémov má veľmi dobré analyzátory alebo zabraňujúce validácii vstupu zločinci pred zneužitím akýchkoľvek hypotetických chýb v programe. Ako sme však spomenuli vyššie, pokrytie všetkých rohových puzdier počas vývoja je náročné.

Fuzzery sa používajú v programoch, ktoré prijímajú štruktúrovaný vstup alebo majú nejaký druh hranice dôvery. Napríklad program, ktorý akceptuje súbory PDF, bude mať určité overenie, aby sa zabezpečilo, že súbor má príponu .pdf a syntaktický analyzátor na spracovanie súboru PDF.

Efektívny fuzzer môže generovať vstupy dostatočne platné na to, aby prekročili tieto hranice, no zároveň dostatočne neplatné na to, aby spôsobili neočakávané správanie ďalej v programe. Je to dôležité, pretože len to, že dokážete prejsť cez overenia, veľa neznamená, ak nespôsobí žiadnu ďalšiu škodu.

Fuzzery objavujú vektory útokov, ktoré sú veľmi podobné a zahŕňajú napríklad SQL injection, cross-site skriptovanie, pretečenie vyrovnávacej pamäte a útoky denial-of-service. Všetky tieto útoky sú výsledkom dodávania neočakávaných, neplatných alebo náhodných údajov do systému. 

 

Typy fuzzerov

Fuzzery možno klasifikovať na základe niektorých charakteristík:

  1. Útočné ciele
  2. Metóda tvorby fuzzu
  3. Uvedomenie si štruktúry vstupu
  4. Uvedomenie si štruktúry programu

1. Útočte na ciele

Táto klasifikácia je založená na druhu platformy, ktorú fuzzer používa na testovanie. Fuzzery sa bežne používajú so sieťovými protokolmi a softvérovými aplikáciami. Každá platforma má konkrétny typ vstupu, ktorý prijíma, a preto si vyžaduje rôzne typy fuzzerov.

Napríklad pri práci s aplikáciami sa všetky pokusy o fuzzing vyskytujú na rôznych vstupných kanáloch aplikácie, ako je používateľské rozhranie, terminál príkazového riadka, formuláre/textové vstupy a nahrávanie súborov. Takže všetky vstupy generované fuzzerom musia zodpovedať týmto kanálom.

Fuzzery zaoberajúce sa komunikačnými protokolmi sa musia zaoberať paketmi. Fuzzery zamerané na túto platformu môžu generovať falošné pakety alebo dokonca pôsobiť ako proxy na úpravu zachytených paketov a ich prehrávanie.

2. Metóda tvorby Fuzz

Fuzzery možno klasifikovať aj podľa toho, ako vytvárajú údaje, s ktorými sa dajú fuzzovať. Historicky fuzzeri vytvárali fuzz generovaním náhodných údajov od začiatku. Takto to spočiatku robil profesor Barton Miller, iniciátor tejto techniky. Tento typ fuzzera sa nazýva a generačný fuzzer.

Aj keď by sa teoreticky dali generovať údaje, ktoré obídu hranicu dôvery, bude to vyžadovať značný čas a zdroje. Preto sa táto metóda zvyčajne používa pre systémy s jednoduchými vstupnými štruktúrami.

Riešením tohto problému je mutácia údajov, o ktorých je známe, že sú platné, aby sa vygenerovali údaje dostatočne platné na to, aby prešli hranicou dôveryhodnosti, ale dostatočne neplatné na to, aby spôsobovali problémy. Dobrým príkladom toho je a DNS fuzzer ktorý vezme názov domény a potom vygeneruje veľký zoznam názvov domén na detekciu potenciálne škodlivých domén zameraných na vlastníka špecifikovanej domény.

Tento prístup je inteligentnejší ako predchádzajúci a výrazne zužuje možné permutácie. Fuzzery, ktoré používajú túto metódu, sa nazývajú fuzzerov na báze mutácií

Existuje tretia novšia metóda, ktorá využíva genetické algoritmy na konvergenciu optimálnych fuzz údajov potrebných na odstránenie zraniteľností. Funguje tak, že neustále spresňuje svoje fuzz dáta, pričom berie do úvahy výkonnosť každého testovacieho dáta pri vkladaní do programu. 

Súbory údajov s najhoršou výkonnosťou sa z oblasti údajov odstránia, zatiaľ čo najlepšie sa zmutujú a/alebo kombinujú. Nová generácia údajov sa potom opäť použije na fuzz test. Tieto fuzzery sa označujú ako fuzzery založené na evolučných mutáciách.

3. Povedomie o vstupnej štruktúre

Táto klasifikácia je založená na tom, či si fuzzer uvedomuje a aktívne používa vstupnú štruktúru programu pri generovaní fuzz údajov. A hlúpy fuzzer (fuzzer, ktorý nepozná vstupnú štruktúru programu) generuje fuzz väčšinou náhodným spôsobom. To by mohlo zahŕňať fuzzery založené na generovaní aj na mutácii. 


Ak je fuzzer poskytnutý so vstupným modelom programu, fuzzer sa potom môže pokúsiť vygenerovať alebo zmutovať dáta tak, aby zodpovedali poskytnutému vstupnému modelu. Tento prístup ďalej znižuje množstvo zdrojov vynaložených na generovanie neplatných údajov. Takýto fuzzer sa nazýva a inteligentný fuzzer.

4. Povedomie o štruktúre programu

Fuzzery môžu byť tiež klasifikované na základe toho, či sú si vedomí vnútorného fungovania programu, ktorý fuzzujú, a používajú toto vedomie na pomoc pri generovaní fuzz dát. Keď sa fuzzery používajú na testovanie programu bez pochopenia jeho vnútornej štruktúry, nazýva sa to testovanie čiernej skrinky. 

Fuzz dáta generované počas testovania čiernej skrinky sú zvyčajne náhodné, pokiaľ fuzzer nie je fuzzer založený na evolučnej mutácii, kde sa „učí“ sledovaním efektu svojho fuzzingu a pomocou toho informácie na spresnenie svojho fuzz súboru údajov.

Na druhej strane testovanie v bielej skrinke používa model vnútornej štruktúry programu na generovanie fuzz údajov. Tento prístup umožňuje fuzzerovi dostať sa na kritické miesta v programe a otestovať ho. 

Populárne nástroje Fuzzing

Existuje veľa fuzzing náradie používajú testeri pier. Niektoré z najpopulárnejších sú:

Obmedzenia Fuzzingu

Zatiaľ čo Fuzzing je skutočne užitočná technika na testovanie pera, nie je bez chýb. Niektoré z nich sú:

  • Beh trvá pomerne dlho.
  • Zlyhania a iné neočakávané správanie zistené počas testovania programu v čiernej skrinke môže byť ťažké, ak nie nemožné, analyzovať alebo ladiť.
  • Vytváranie šablón mutácií pre fuzzery založené na inteligentných mutáciách môže byť časovo náročné. Niekedy to nemusí byť ani možné, pretože vstupný model je proprietárny alebo neznámy.

 

Napriek tomu je to celkom užitočný a potrebný nástroj pre každého, kto chce objaviť chyby skôr, ako tí zlí.

záver

Fuzzing je výkonná technika testovania pera, ktorú možno použiť na odhalenie zraniteľností v softvéri. Existuje mnoho rôznych typov fuzzerov a neustále sa vyvíjajú nové fuzzery. Zatiaľ čo fuzzing je neuveriteľne užitočný nástroj, má svoje obmedzenia. Napríklad fuzzeri môžu nájsť len toľko zraniteľností a môžu byť dosť náročné na zdroje. Ak si však chcete túto úžasnú techniku ​​vyskúšať na vlastnej koži, máme pre vás a bezplatné DNS Fuzzer API, ktoré môžete použiť na našej platforme. 

Na čo čakáte? 

Začnite makať ešte dnes!

Google a mýtus inkognito

Google a mýtus inkognito

Google a mýtus inkognito 1. apríla 2024 spoločnosť Google súhlasila s urovnaním súdneho sporu zničením miliárd údajových záznamov zhromaždených v režime inkognito.

Čítajte viac »