Co je to Fuzzing?

Co je fuzzing

Úvod: Co je to Fuzzing?

V roce 2014 čínští hackeři naboural do komunitních zdravotních systémů, ziskový americký řetězec nemocnic, a ukradl data 4.5 milionu pacientů. Hackeři zneužili chybu zvanou Heartbleed, která byla objevena v kryptografické knihovně OpenSSL několik měsíců před hackem.

Heartbleed je příkladem třídy útočných vektorů, které umožňují útočníkům přístup k cíli zasíláním chybných požadavků, které jsou dostatečně platné, aby prošly předběžnými kontrolami. Zatímco profesionálové, kteří pracují na různých částech aplikace, dělají vše pro to, aby zajistili její bezpečnost, je nemožné vymyslet všechny rohové případy, které by mohly aplikaci rozbít nebo ji učinit zranitelnou během vývoje.

Zde přichází na řadu „fuzzing“.

Co je to Fuzzing Attack?

Fuzzing, fuzz testování nebo fuzzing attack, je automatizovaná technika testování softwaru používaná k vkládání náhodných, neočekávaných nebo neplatných dat (tzv. fuzz) do programu. Program je monitorován z hlediska neobvyklého nebo neočekávaného chování, jako je přetečení vyrovnávací paměti, selhání, úniky paměti, zablokování vláken a narušení přístupu pro čtení/zápis. Nástroj fuzzing neboli fuzzer se pak použije k odhalení příčiny neobvyklého chování.

Fuzzing je založen na předpokladu, že všechny systémy obsahují chyby, které čekají na odhalení, a lze jim na to dát dostatek času a prostředků. Většina systémů má velmi dobré analyzátory nebo zabraňující ověření vstupu cybercriminals před zneužitím jakýchkoli hypotetických chyb v programu. Jak jsme však uvedli výše, pokrytí všech rohových pouzder během vývoje je obtížné.

Fuzzery se používají u programů, které přijímají strukturovaný vstup nebo mají nějaký druh hranice důvěry. Například program, který přijímá soubory PDF, by měl nějaké ověření, aby bylo zajištěno, že soubor má příponu .pdf a analyzátor pro zpracování souboru PDF.

Efektivní fuzzer může generovat dostatečně platné vstupy, aby překročily tyto hranice, ale dostatečně neplatné, aby způsobily neočekávané chování dále v programu. To je důležité, protože jen to, že se dokážete dostat přes validace, mnoho neznamená, pokud nedojde k žádné další újmě.

Fuzzery objevují útočné vektory, které jsou velmi podobné útokům typu SQL injection, cross-site scripting, buffer overflow a denial-of-service. Všechny tyto útoky jsou výsledkem dodávání neočekávaných, neplatných nebo náhodných dat do systému. 

 

Typy fuzzerů

Fuzzery lze klasifikovat na základě některých vlastností:

  1. Útočné cíle
  2. Metoda tvorby fuzzu
  3. Povědomí o struktuře vstupu
  4. Povědomí o struktuře programu

1. Útok na cíle

Tato klasifikace je založena na typu platformy, na které se fuzzer používá k testování. Fuzzery se běžně používají se síťovými protokoly a softwarovými aplikacemi. Každá platforma má určitý typ vstupu, který přijímá, a proto vyžaduje různé typy fuzzerů.

Například při práci s aplikacemi dochází ke všem pokusům o fuzzing na různých vstupních kanálech aplikace, jako je uživatelské rozhraní, terminál příkazového řádku, formuláře/textové vstupy a nahrávání souborů. Takže všechny vstupy generované fuzzerem musí odpovídat těmto kanálům.

Fuzzery zabývající se komunikačními protokoly se musí vypořádat s pakety. Fuzzery zacílené na tuto platformu mohou generovat podvržené pakety nebo dokonce fungovat jako proxy pro modifikaci zachycených paketů a jejich přehrávání.

2. Metoda vytváření fuzz

Fuzzery lze také klasifikovat na základě toho, jak vytvářejí data, se kterými lze fuzzovat. Historicky fuzzery vytvářely fuzz generováním náhodných dat od začátku. Tak to zpočátku dělal profesor Barton Miller, iniciátor této techniky. Tento typ fuzzeru se nazývá a generační fuzzer.

I když by se teoreticky dala generovat data, která obejdou hranici důvěry, zabralo by to značné množství času a zdrojů. Proto se tato metoda obvykle používá pro systémy s jednoduchými vstupními strukturami.

Řešením tohoto problému je mutovat data, o kterých je známo, že jsou platná, aby se vygenerovala data dostatečně platná, aby překročila hranici důvěryhodnosti, ale dostatečně neplatná, aby způsobila problémy. Dobrým příkladem toho je a DNS fuzzer který vezme název domény a poté vygeneruje velký seznam názvů domén pro detekci potenciálně škodlivých domén zaměřených na vlastníka zadané domény.

Tento přístup je chytřejší než ten předchozí a výrazně zužuje možné permutace. Fuzzery, které používají tuto metodu, se nazývají fuzzery založené na mutaci

Existuje třetí novější metoda, která využívá genetické algoritmy ke konvergování optimálních fuzz dat potřebných k odstranění zranitelností. Funguje tak, že neustále zpřesňuje svá fuzz data, přičemž bere v úvahu výkon každého testovacího data při vkládání do programu. 

Soubory dat s nejhorším výkonem jsou z datového fondu odstraněny, zatímco nejlepší jsou mutovány a/nebo kombinovány. Nová generace dat se pak znovu použije k fuzz testu. Tyto fuzzery jsou označovány jako fuzzery založené na evolučních mutacích.

3. Povědomí o vstupní struktuře

Tato klasifikace je založena na tom, zda si fuzzer uvědomuje a aktivně používá vstupní strukturu programu při generování fuzz dat. A hloupý fuzzer (fuzzer, který si není vědom vstupní struktury programu) generuje fuzz většinou náhodným způsobem. To by mohlo zahrnovat jak fuzzery založené na generování, tak na mutaci. 


Pokud je fuzzeru poskytnut vstupní model programu, může se fuzzer pokusit generovat nebo mutovat data tak, aby odpovídala poskytnutému vstupnímu modelu. Tento přístup dále snižuje množství zdrojů vynaložených na generování neplatných dat. Takový fuzzer se nazývá a chytrý fuzzer.

4. Povědomí o struktuře programu

Fuzzery lze také klasifikovat na základě toho, zda si uvědomují vnitřní fungování programu, který fuzzují, a používají toto povědomí k podpoře generování fuzz dat. Když se fuzzery používají k testování programu bez pochopení jeho vnitřní struktury, nazývá se to testování černé skříňky. 

Fuzz data generovaná během testování černé skříňky jsou obvykle náhodná, pokud fuzzer není fuzzer založený na evoluční mutaci, kde se „učí“ sledováním efektu svého fuzzingu a pomocí toho informace zpřesnit svůj soubor fuzz dat.

White-box testování na druhé straně používá model vnitřní struktury programu pro generování fuzz dat. Tento přístup umožňuje fuzzeru dostat se do kritických míst v programu a otestovat jej. 

Populární nástroje Fuzzing

Existuje mnoho fuzzing nástroje používají testeři per. Některé z nejoblíbenějších jsou:

Omezení Fuzzingu

Zatímco Fuzzing je opravdu užitečná technika testování pera, není bez chyb. Některé z nich jsou:

  • Spuštění trvá poměrně dlouho.
  • Zhroucení a další neočekávané chování zjištěné během testování programu pomocí černé skříňky může být obtížné, ne-li nemožné analyzovat nebo ladit.
  • Vytváření šablon mutací pro fuzzery založené na inteligentních mutacích může být časově náročné. Někdy to nemusí být ani možné, protože vstupní model je proprietární nebo neznámý.

 

Nicméně je to docela užitečný a nezbytný nástroj pro každého, kdo chce objevit chyby dříve než padouchy.

Proč investovat do čističky vzduchu?

Fuzzing je výkonná technika testování per, kterou lze použít k odhalení zranitelnosti softwaru. Existuje mnoho různých typů fuzzerů a neustále se vyvíjejí nové fuzzery. I když je fuzzing neuvěřitelně užitečný nástroj, má svá omezení. Například fuzzery mohou najít jen tolik zranitelností a mohou být poměrně náročné na zdroje. Pokud si však chcete tuto úžasnou techniku ​​vyzkoušet na vlastní kůži, máme pro vás a bezplatné DNS Fuzzer API, které můžete použít na naší platformě. 

Tak na co čekáš? 

Začněte makat ještě dnes!