Co to jest fuzzing?

Co to jest fuj

Wprowadzenie: Co to jest fuzzing?

W 2014 roku chińscy hakerzy włamał się do wspólnotowych systemów opieki zdrowotnej, amerykańską sieć szpitali nastawionych na zysk, i ukradł dane 4.5 miliona pacjentów. Hakerzy wykorzystali błąd o nazwie Heartbleed, który został wykryty w bibliotece kryptograficznej OpenSSL kilka miesięcy przed włamaniem.

Heartbleed to przykład klasy wektorów ataku, które umożliwiają atakującym dostęp do celu poprzez wysyłanie zniekształconych żądań, które są wystarczająco ważne, aby przejść wstępne testy. Podczas gdy profesjonaliści, którzy pracują nad różnymi częściami aplikacji, robią wszystko, co w ich mocy, aby zapewnić jej bezpieczeństwo, nie sposób pomyśleć o wszystkich przypadkach narożnych, które mogłyby uszkodzić aplikację lub narazić ją na ataki podczas tworzenia.

I tu pojawia się „fuzzing”.

Co to jest atak fuzzingowy?

Fuzzing, fuzz testing lub fuzzing attack, to zautomatyzowana technika testowania oprogramowania używana do wprowadzania losowych, nieoczekiwanych lub nieprawidłowych danych (zwanych fuzz) do programu. Program jest monitorowany pod kątem nietypowych lub nieoczekiwanych zachowań, takich jak przepełnienie bufora, awarie, wycieki pamięci, zawieszanie się wątków i naruszenia dostępu do odczytu/zapisu. Narzędzie fuzzing lub fuzzer jest następnie używane do odkrycia przyczyny nietypowego zachowania.

Fuzzing opiera się na założeniu, że wszystkie systemy zawierają błędy czekające na wykrycie i że można im dać wystarczająco dużo czasu i zasobów, aby to zrobić. Większość systemów ma bardzo dobre parsery lub zapobieganie sprawdzaniu poprawności danych wejściowych cyberprzestępcy od wykorzystywania jakichkolwiek hipotetycznych błędów w programie. Jednak, jak wspomnieliśmy powyżej, uwzględnienie wszystkich przypadków narożnych podczas opracowywania jest trudne.

Fuzzery są używane w programach, które pobierają ustrukturyzowane dane wejściowe lub mają jakąś granicę zaufania. Na przykład program, który akceptuje pliki PDF, miałby pewne sprawdzanie poprawności, aby upewnić się, że plik ma rozszerzenie .pdf i parser do przetwarzania pliku PDF.

Skuteczny fuzzer może generować dane wejściowe wystarczająco ważne, aby przekroczyć te granice, ale wystarczająco nieprawidłowe, aby spowodować nieoczekiwane zachowanie w dalszej części programu. Jest to ważne, ponieważ samo przejście przez walidacje nie ma większego znaczenia, jeśli nie spowoduje to dalszych szkód.

Fuzzery wykrywają wektory ataków bardzo podobne do iniekcji SQL, cross-site scripting, przepełnienia bufora i ataków typu „odmowa usługi” (ang. denial-of-service). Wszystkie te ataki są wynikiem wprowadzenia do systemu nieoczekiwanych, nieprawidłowych lub losowych danych. 

 

Rodzaje Fuzzerów

Fuzzery można sklasyfikować na podstawie pewnych cech:

  1. Atakuj cele
  2. Metoda tworzenia fuzza
  3. Świadomość struktury danych wejściowych
  4. Świadomość struktury programu

1. Atakuj cele

Ta klasyfikacja opiera się na rodzaju platformy, do której testowany jest fuzzer. Fuzzery są powszechnie używane w protokołach sieciowych i aplikacjach. Każda platforma ma określony rodzaj danych wejściowych, które otrzymuje, a zatem wymaga różnych typów fuzzerów.

Na przykład, gdy mamy do czynienia z aplikacjami, wszystkie próby fuzzingu mają miejsce w różnych kanałach wejściowych aplikacji, takich jak interfejs użytkownika, terminal wiersza poleceń, wprowadzanie formularzy/tekstu i przesyłanie plików. Więc wszystkie wejścia generowane przez fuzzera muszą pasować do tych kanałów.

Fuzzery zajmujące się protokołami komunikacyjnymi muszą radzić sobie z pakietami. Fuzzery atakujące tę platformę mogą generować sfałszowane pakiety, a nawet działać jako serwery proxy do modyfikowania przechwyconych pakietów i odtwarzania ich.

2. Metoda tworzenia rozmycia

Fuzzery można również klasyfikować na podstawie sposobu, w jaki tworzą dane do fuzzowania. Historycznie rzecz biorąc, fuzzery tworzyły fuzz, generując losowe dane od zera. Tak na początku robił to profesor Barton Miller, inicjator tej techniki. Ten typ fuzzera nazywa się a fuzzer oparty na generacji.

Jednakże, chociaż teoretycznie można wygenerować dane, które ominą granicę zaufania, wymagałoby to znacznego czasu i zasobów. Dlatego ta metoda jest zwykle stosowana w systemach o prostych strukturach wejściowych.

Rozwiązaniem tego problemu jest mutacja danych, o których wiadomo, że są prawidłowe, w celu wygenerowania danych wystarczająco ważnych, aby przekroczyć granicę zaufania, ale na tyle niepoprawnych, aby powodować problemy. Dobrym tego przykładem jest A Fuzzer DNS który pobiera nazwę domeny, a następnie generuje dużą listę nazw domen w celu wykrycia potencjalnie złośliwych domen atakujących właściciela określonej domeny.

To podejście jest inteligentniejsze niż poprzednie i znacznie zawęża możliwe permutacje. Fuzzery używające tej metody są nazywane fuzzery oparte na mutacjach

Istnieje trzecia, nowsza metoda, która wykorzystuje algorytmy genetyczne do zbierania optymalnych danych rozmytych potrzebnych do wyeliminowania luk w zabezpieczeniach. Działa poprzez ciągłe udoskonalanie swoich danych fuzz, biorąc pod uwagę wydajność każdego danych testowych po wprowadzeniu do programu. 

Najgorsze zestawy danych są usuwane z puli danych, podczas gdy najlepsze są mutowane i/lub łączone. Nowa generacja danych jest następnie ponownie wykorzystywana do testu rozmytego. Te fuzzery są określane jako fuzzery oparte na mutacjach ewolucyjnych.

3. Świadomość struktury wejściowej

Ta klasyfikacja opiera się na tym, czy fuzzer jest świadomy i aktywnie wykorzystuje strukturę wejściową programu do generowania danych rozmytych. A głupi frajer (fuzzer, który nie jest świadomy struktury wejściowej programu) generuje fuzz w przeważnie losowy sposób. Może to obejmować fuzzery oparte na generacji i mutacjach. 


Jeśli fuzzer zostanie dostarczony z modelem wejściowym programu, fuzzer może następnie spróbować wygenerować lub zmutować dane tak, aby pasowały do ​​​​dostarczonego modelu wejściowego. Takie podejście dodatkowo zmniejsza ilość zasobów zużywanych na generowanie nieprawidłowych danych. Taki fuzzer nazywa się a sprytny frajer.

4. Świadomość struktury programu

Fuzzery można również klasyfikować na podstawie tego, czy są świadome wewnętrznego działania programu, który rozmywają, i wykorzystują tę świadomość do wspomagania generowania danych rozmytych. Kiedy fuzzery są używane do testowania programu bez zrozumienia jego wewnętrznej struktury, nazywa się to testowaniem czarnej skrzynki. 

Dane rozmyte generowane podczas testów czarnej skrzynki są zwykle losowe, chyba że fuzzer jest fuzzerem opartym na mutacjach ewolucyjnych, gdzie „uczy się” poprzez monitorowanie efektu rozmycia i wykorzystanie tego Informacja aby udoskonalić swój zestaw danych fuzz.

Z drugiej strony testowanie białoskrzynkowe wykorzystuje model wewnętrznej struktury programu do generowania danych rozmytych. Takie podejście pozwala fuzzerowi dostać się do krytycznych miejsc w programie i przetestować go. 

Popularne narzędzia do fuzzingu

Istnieje wiele fuzzów narzędzia używany przez testerów pióra. Niektóre z najbardziej popularnych to:

Ograniczenia fuzzingu

Chociaż Fuzzing jest naprawdę użyteczną techniką testowania piórem, nie jest pozbawiony wad. Niektóre z nich to:

  • Bieganie zajmuje dość dużo czasu.
  • Awarie i inne nieoczekiwane zachowania wykryte podczas testowania programu metodą czarnej skrzynki mogą być trudne, jeśli nie niemożliwe do przeanalizowania lub debugowania.
  • Tworzenie szablonów mutacji dla inteligentnych fuzzerów opartych na mutacjach może być czasochłonne. Czasami może to nawet nie być możliwe, ponieważ model wejściowy jest zastrzeżony lub nieznany.

 

Niemniej jednak jest to całkiem przydatne i niezbędne narzędzie dla każdego, kto chce odkryć błędy przed złoczyńcami.

Wnioski

Fuzzing to potężna technika testowania piórem, której można użyć do wykrycia luk w oprogramowaniu. Istnieje wiele różnych rodzajów fuzzerów i cały czas powstają nowe fuzzery. Chociaż fuzzing jest niezwykle użytecznym narzędziem, ma swoje ograniczenia. Na przykład fuzzery mogą znaleźć tylko określoną liczbę luk i mogą wymagać dużych zasobów. Jeśli jednak chcesz sam wypróbować tę niesamowitą technikę, mamy dla Ciebie darmowe DNS Fuzzer API, z którego możesz korzystać na naszej platformie. 

Więc na co czekasz? 

Zacznij fuzzować już dziś!

Google i mit incognito

Google i mit incognito

Google i mit incognito 1 kwietnia 2024 roku Google zgodził się na rozstrzygnięcie pozwu poprzez zniszczenie miliardów rekordów danych zebranych w trybie incognito.

Czytaj więcej »