Kompleksowy przewodnik po testach fuzz

Opublikowany: 2021-05-17

Testy bezpieczeństwa to jeden z najważniejszych kroków zapewniających, że oprogramowanie jest gotowe do oficjalnego wydania, zarówno do celów biznesowych, jak i komercyjnych. Pozwala wykryć wszelkie luki w zabezpieczeniach oprogramowania i opracować dla nich środki zaradcze, jeśli haker wykorzysta taką lukę.

Jeśli interesujesz się testowaniem bezpieczeństwa, możesz poznać fakty tutaj teraz, ale jedną rzeczą, którą musisz wiedzieć, jest to, że istnieje wiele sposobów przeprowadzania testów bezpieczeństwa, takich jak ocena ryzyka, testy penetracyjne i skanowanie podatności. A jeśli jesteś już trochę zaznajomiony z testowaniem bezpieczeństwa, prawdopodobnie słyszałeś o terminie „testowanie rozmyte”.

Testowanie rozmyte jest obecnie stosunkowo powszechną techniką testowania w branży, zwłaszcza że korporacyjni giganci, tacy jak Microsoft i Google, używają jej od ponad dekady. Zaskakujące jest jednak to, że mimo iż jest to standardowa technika, niewiele osób o niej wie. To powiedziawszy, ten przewodnik ma na celu wyjaśnienie, czym jest testowanie fuzz, zaczynając od jego definicji.

Co to jest testowanie Fuzz?

Testowanie rozmyte lub to, co inni nazywają „fuzzingiem”, polega na wprowadzaniu do programu nieprawidłowych lub losowych danych w celu wykrycia wszelkich luk, które mogą prowadzić do możliwych do wykorzystania błędów. Te dane wejściowe mogą mieć postać pliku lub bezpośrednie dane wejściowe od użytkownika. Na przykład, jeśli budujesz jakiś program liczący, zwykle musisz wprowadzać liczby lub operacje matematyczne. Ale jeśli przeprowadzasz testy rozmycia, musisz wprowadzić nieprawidłowe dane wejściowe, takie jak litery lub nawet znaki specjalne.

Jeśli to spowoduje awarię programu lub spowoduje jakikolwiek inny rodzaj błędu, programista zakłada, że ​​istnieje luka w zabezpieczeniach i dlatego może pracować nad modyfikacją kodowania w nadziei na naprawienie problemu. Na pierwszy rzut oka można by pomyśleć, że testy rozmyte są takie same jak inne techniki, takie jak skanowanie podatności lub testy penetracyjne, ale jest powód jego popularności.

Dlaczego firmy stosują testy Fuzz?

Nie ma jednego uniwersalnego rozwiązania, jeśli chodzi o testowanie bezpieczeństwa. Każda metoda może wykryć problemy, których inne nie mogą; niektóre wymagają niższych kosztów operacyjnych, podczas gdy inne są łatwiejsze do wykonania. Podobnie jak każda technika testowania bezpieczeństwa, testowanie rozmyte jest wyjątkowe na swój sposób. Poniżej znajduje się kilka zalet, które skłaniają firmy do korzystania z testów rozmytych.

  • Prostota: Wiesz już, jak działa testowanie rozmyte — to kwestia wprowadzenia błędnych danych wejściowych do programu. Ogólnie rzecz biorąc, prostota procesu stanowi wielką zaletę dla osób lub organizacji, które nie mają umiejętności i doświadczenia w zakresie testowania bezpieczeństwa.
  • Automatyzacja: Testowanie bezpieczeństwa może być kluczowym krokiem w rozwoju oprogramowania i aplikacji, ale często oprócz ciągłego testowania programu są inne rzeczy do zrobienia. Jednak z testowaniem fuzz to zupełnie inna historia, ponieważ możesz zautomatyzować cały proces za pomocą fuzzerów.

Fuzzery to narzędzia odpowiedzialne za automatyczne wprowadzanie danych do programu po wydaniu niezbędnych poleceń i warunków. Fakt, że testy fuzz umożliwiają automatyzację biznesu, sprawia, że ​​jest to idealna technika testowania dla firm.

  • Wygoda: Zwykle podczas testowania należy użyć jak największej liczby narzędzi, aby zmniejszyć prawdopodobieństwo błędów i zmaksymalizować bezpieczeństwo programu. Ponieważ testowanie fuzz jest zautomatyzowane i proste, jest to wygodny sposób na zwiększenie bezpieczeństwa oprogramowania.

Ogólnie rzecz biorąc, fuzzing jest prosty i łatwy do wdrożenia, ale warto zauważyć, że istnieją różne podejścia do testowania fuzzowego. W zależności od tego, jakiego typu używasz, trudność i złożoność procesu testowania może się różnić. W związku z tym może to być dobry moment, aby porozmawiać o różnych rodzajach testów rozmytych.

Różne podejścia do testowania Fuzz

Chociaż istnieje kilka rodzajów testów fuzz, są one w większości podobne do siebie, z wyjątkiem tego, że generują dane wejściowe w inny sposób. Niezależnie od tego istnieją cztery podejścia do testowania rozmytego:

  • Dumb Fuzzing: Kiedy ktoś chce wygenerować dane wejściowe całkowicie losowo, zwykle używa głupiego fuzzera. Głupi fuzzer to narzędzie, które generuje dane wejściowe bez wcześniejszej wiedzy lub inteligencji programu, stąd nazwa.

Na przykład, jeśli budujesz program do sprawdzania gramatyki, głupi fuzzer może wygenerować obraz, co jest dalekie od tego, czego oczekuje program. Fuzzing głupi jest najłatwiejszym podejściem do testowania fuzz.

  • Smart Fuzzing: Po drugiej stronie medalu jest inteligentne fuzzing. W przeciwieństwie do głupiego fuzzingu, inteligentne fuzzing generuje dane wejściowe, wiedząc, czego oczekuje program. Co więcej, inteligentny fuzzer nie wygeneruje danych wejściowych, które nieuchronnie spowodują awarię programu. Zamiast tego przedstawi dane wejściowe, które mogą spowodować nieoczekiwane zachowanie.

Tak więc we wcześniejszym przykładzie inteligentny fuzzer może generować znaki specjalne, ale nigdy obraz lub inne nieodpowiednie dane wejściowe. Chociaż inteligentne fuzzery są trudniejsze do wdrożenia niż głupie fuzzery, przez większość czasu są dokładniejsze.

  • Fuzzing mutacyjny: Fuzzing mutacyjny polega na generowaniu danych wejściowych poprzez modyfikację, a dokładniej „mutowanie” istniejących prawidłowych danych wejściowych. W naszym przykładzie z programem kalkulatora fuzzer mutacyjny może wybrać istniejące prawidłowe dane wejściowe.

Załóżmy, że wybrane dane wejściowe to „10+9”. Fuzzer mutacyjny spróbuje zmodyfikować te dane wejściowe, dodając, usuwając lub zmieniając część tych danych wejściowych, na przykład zwiększając wartość i zmieniając ją na „180+129” lub zmieniając operację na „10/9”.

  • Fuzzing pokoleniowy: Wreszcie fuzzing pokoleniowy generuje dane wejściowe od zera, co jest przeciwieństwem fuzzingu mutacyjnego, który generuje dane wejściowe z już istniejących. Ponieważ nie ma żadnych odniesień, fuzzery generacyjne są znacznie trudniejsze do wdrożenia niż fuzzery mutacyjne, ale mogą prowadzić do większej ilości danych dla testera.

To, co sprawia, że ​​testowanie fuzz jest nieco bardziej interesujące niż inne techniki, to możliwość łączenia różnych typów w celu ulepszenia narzędzia testowego. Na przykład możesz utworzyć fuzzer inteligentnej mutacji lub fuzzer generacji głupiej, w zależności od potrzeb programu. Być może niezliczone kombinacje, które możesz wykonać za pomocą testów rozmytych, to kolejny powód, dla którego firmy wolą testowanie rozmyte od innych metod.

Zawijanie

Gdy dowiesz się więcej o testowaniu fuzz, łatwo zrozumiesz, dlaczego stało się ono tak popularne, jak jest teraz. Warto jednak zauważyć, że podobnie jak każda inna technika, testowanie rozmyte ma pewne wady. Dlatego ważne jest, aby określić, czy testy rozmyte mogą przynieść więcej korzyści niż szkody dla aplikacji lub oprogramowania. Jak wcześniej wspomniano, nie ma jednego uniwersalnego rozwiązania do testowania bezpieczeństwa oprogramowania, a testowanie rozmyte z pewnością nie będzie takim rozwiązaniem.

Masz jakieś przemyślenia na ten temat? Daj nam znać poniżej w komentarzach lub przenieś dyskusję na naszego Twittera lub Facebooka.

Rekomendacje redaktorów: