Poradnik dotyczący testowania fuzzowania (fuzzowania).
Co to jest testowanie fuzzowe?
Testowanie Fuzza lub Fuzzing to technika testowania oprogramowania polegająca na umieszczaniu nieprawidłowych lub losowych danych zwanych FUZZ w systemie oprogramowania w celu wykrycia błędów w kodowaniu i luk w zabezpieczeniach. Celem testów rozmytych jest wprowadzanie danych przy użyciu technik zautomatyzowanych lub półautomatycznych i testowanie systemu pod kątem różnych wyjątków, takich jak awaria systemu lub awaria wbudowanego kodu itp.
Testowanie rozmyte zostało pierwotnie opracowane przez Bartona Millera na Uniwersytecie Wisconsin w 1989 r. Testowanie rozmyte, czyli fuzzing, jest techniką testowania oprogramowania i jest rodzajem Testowanie bezpieczeństwa.
Dlaczego warto przeprowadzać testy Fuzz?
- Zwykle testy rozmyte znajdują najpoważniejszy błąd lub defekt bezpieczeństwa.
- Testowanie fuzz daje bardziej efektywne wyniki, gdy jest używane z Czarny Box Testowanie, testy beta i inne metody debugowania.
- Testowanie fuzz służy do sprawdzania podatności oprogramowania. Jest to bardzo opłacalna technika testowania.
- Testowanie rozmyte jest jedną z technik testowania typu black box. Fuzzing jest jedną z najczęstszych metod, których hakerzy używają do znajdowania luk w zabezpieczeniach systemu.
Jak przeprowadzić test Fuzz
Etapy testowania rozmytego obejmują podstawowe kroki testowania:
Krok 1) Zidentyfikuj system docelowy
Krok 2) Zidentyfikuj dane wejściowe
Krok 3) Wygeneruj rozmyte dane
Krok 4) Wykonaj test, korzystając z danych rozmytych
Krok 5) Monitoruj zachowanie systemu
Krok 6) Wady dziennika
Przykłady Fuzzerów
- Fuzzery oparte na mutacjach zmieniać istniejące próbki danych, aby utworzyć nowe dane testowe. Jest to bardzo proste i bezpośrednie podejście, które zaczyna się od prawidłowych próbek protokołu i manipuluje każdym bajtem lub plikiem.
- Fuzzery oparte na generacjach zdefiniować nowe dane na podstawie danych wejściowych modelu. Rozpoczyna generowanie danych wejściowych od podstaw w oparciu o specyfikację.
- Fuzzer oparty na protokolenajskuteczniejszym fuzzerem jest posiadanie szczegółowej wiedzy na temat testowanego formatu protokołu. Zrozumienie zależy od specyfikacji. Polega na zapisaniu tablicy specyfikacji w narzędziu, a następnie przy użyciu techniki generowania testów w oparciu o model, przejrzeniu specyfikacji i dodaniu nieprawidłowości w zawartości danych, sekwencji itp. Nazywa się to również testowaniem składni, testowaniem gramatycznym, testowaniem odporności, itp. Fuzzer może generować przypadki testowe na podstawie istniejących przypadków testowych lub może używać prawidłowych lub nieprawidłowych danych wejściowych.
Istnieją dwa ograniczenia fuzzowania opartego na protokole:
- Testowanie nie może być kontynuowane, dopóki specyfikacja nie będzie dojrzała.
- Wiele przydatnych protokołów jest rozszerzeniem opublikowanych protokołów. Jeśli testy fuzz opierają się na opublikowanych specyfikacjach, Pokrycie testowe dla nowych protokołów będzie ograniczona.
Najprostszą formą techniki fuzzingu jest wysyłanie losowych danych wejściowych do oprogramowania w postaci pakietów protokołu lub jako zdarzenia. Ta technika przekazywania losowych danych wejściowych jest bardzo skuteczna w znajdowaniu błędów w wielu aplikacjach i usługach. Dostępne są również inne techniki, które są bardzo łatwe do wdrożenia. Aby wdrożyć te techniki, wystarczy zmienić istniejące dane wejściowe. Możemy zmienić dane wejściowe, po prostu zamieniając bity danych wejściowych.
Rodzaje błędów wykrytych przez Fuzz Testing
- Błędy asercji i wycieki pamięci Metodologia ta jest szeroko stosowana w dużych aplikacjach, w których błędy wpływają na bezpieczeństwo pamięci, co stanowi poważną lukę.
- Nieprawidłowe dane wejściowe W testach fuzzowych fuzzery służą do generowania nieprawidłowych danych wejściowych, które są wykorzystywane do testowania procedur obsługi błędów, co jest ważne dla oprogramowania, które nie kontroluje danych wejściowych. Proste fuzzowanie może być znane jako sposób na automatyzację testów negatywnych.
- Błędy poprawności Fuzzing można również wykorzystać do wykrycia niektórych typów błędów „poprawności”. Takie jak uszkodzona baza danych, słabe wyniki wyszukiwania itp.
Narzędzia do testowania Fuzza
Narzędzia stosowane w bezpieczeństwie sieciowym mogą być szeroko stosowane w testach rozmytych, takich jak Burp Suite, Peach Fuzzer itp.
- Brzoskwiniowy Fuzzer: Peach Fuzzer zapewnia większą niezawodność i bezpieczeństwo niż skaner. Inne narzędzia testujące mogą wyszukiwać tylko znane wątki, podczas gdy Peach Fuzzer umożliwia użytkownikom znajdowanie znanych i nieznanych wątków.
- Pełnomocnik Spike'a: Jest to profesjonalne narzędzie wyszukujące luki w zabezpieczeniach aplikacji internetowych na poziomie aplikacji. SPIKE Proxy obejmuje podstawy, takie jak SQL Wstrzykiwanie i skrypty między witrynami, ale jest to całkowicie otwarte Python infrastruktura. SPIKE Proxy jest dostępny dla Linux i Windows.
- Webskarab: Webscarab jest zapisany Java w ten sposób przenośny na wiele platform. Do analizy aplikacji wykorzystywany jest framework Webscarab komunikujący się za pomocą protokołów HTTP i HTTPS.ex: Webscarab działa jako przechwytujący serwer proxy, pozwala operatorowi przeglądać i modyfikować żądania utworzone przez przeglądarkę przed ich otrzymaniem przez serwer. Pozwala również przeglądać i aktualizować odpowiedzi generowane przez serwer przed otrzymaniem ich przez przeglądarkę. W ten sposób, jeśli web scarab znajdzie jakąkolwiek lukę, utworzy listę zgłoszonych problemów.
- OWASP WSFuzzer: WSFuzzer to program napisany na licencji GPL Python. GPL'd program obecnie ukierunkowany na usługi sieciowe. W obecnej wersji OWASPWSFuzzer opartej na protokole HTTP Usługi SOAP są głównym celem.
Zalety testów fuzzowych
- Testowanie fuzz ulepsza oprogramowanie Testowanie bezpieczeństwa.
- Błędy znalezione podczas fuzzowania są czasami poważne i najczęściej wykorzystywane przez hakerów, włączając awarie, wycieki pamięci, nieobsługiwany wyjątek itp.
- Jeśli którykolwiek z błędów nie zostanie zauważony przez testerów ze względu na ograniczenie czasu i zasobów, błędy te zostaną znalezione również w testach Fuzz.
Wady testów fuzzowych
- Same testy fuzz nie mogą zapewnić pełnego obrazu ogólnego zagrożenia bezpieczeństwa lub błędów.
- Testowanie rozmyte jest mniej skuteczne w przypadku zagrożeń bezpieczeństwa, które nie powodują awarii programów, takich jak niektóre wirusy, robaki, trojany itp.
- Testowanie rozmyte pozwala wykryć jedynie proste błędy lub zagrożenia.
- Skuteczne działanie będzie wymagało znacznego czasu.
- Ustalenie warunku wartości brzegowej przy użyciu losowych danych wejściowych jest bardzo problematyczne, ale obecnie większość testerów rozwiązuje ten problem, stosując deterministyczne algorytmy bazujące na danych wejściowych użytkowników.
Podsumowanie
W inżynierii oprogramowania testy Fuzz pokazują obecność błędów w aplikacji. Fuzzing nie gwarantuje całkowitego wykrycia błędów w aplikacji. Jednak użycie techniki Fuzz zapewnia, że aplikacja jest solidna i bezpieczna, ponieważ technika ta pomaga ujawnić większość typowych luk w zabezpieczeniach.