Google wprowadziło system testowania fuzz ClusterFuzzLite

Google wprowadziło projekt ClusterFuzzLite, który umożliwia organizację fuzzingowych testów kodu w celu wczesnego wykrywania potencjalnych podatności podczas działania systemów ciągłej integracji. Obecnie ClusterFuzz może służyć do automatyzacji testów rozmytych żądań ściągnięcia w GitHub Actions, Google Cloud Build i Prow, ale w przyszłości spodziewana jest obsługa innych systemów CI. Projekt oparty jest na platformie ClusterFuzz, stworzonej w celu koordynowania pracy fuzzingowych klastrów testowych i dystrybuowany jest na licencji Apache 2.0.

Należy zauważyć, że po wprowadzeniu przez Google w 2016 roku usługi OSS-Fuzz, do programu ciągłych testów fuzzingu przyjęto ponad 500 ważnych projektów open source. Na podstawie przeprowadzonych testów wyeliminowano ponad 6500 potwierdzonych podatności i poprawiono ponad 21 tysięcy błędów. ClusterFuzzLite w dalszym ciągu rozwija mechanizmy testów fuzzingowych z możliwością identyfikacji problemów już na etapie przeglądu proponowanych zmian. ClusterFuzzLite został już wdrożony w procesach przeglądu zmian w projektach systemd i curl i pozwolił na identyfikację błędów przeoczonych przez analizatory statyczne i lintery stosowane na początkowym etapie sprawdzania nowego kodu.

ClusterFuzzLite obsługuje przeglądanie projektów w C, C++, Java (i innych językach opartych na JVM), Go, Python, Rust i Swift. Testowanie fuzzingu odbywa się przy użyciu silnika LibFuzer. Narzędzia AddressSanitizer, MemorySanitizer i UBSan (UnknownBehaviorSanitizer) można również wywołać w celu zidentyfikowania błędów i anomalii pamięci.

Kluczowe cechy ClusterFuzzLite: szybkie sprawdzenie proponowanych zmian w celu znalezienia błędów przed akceptacją kodu; pobieranie raportów o warunkach awaryjnych; możliwość przejścia do bardziej zaawansowanych testów fuzzingowych w celu zidentyfikowania głębszych błędów, które nie wyszły na jaw po sprawdzeniu zmian w kodzie; generowanie raportów pokrycia w celu oceny pokrycia kodu podczas testów; modułowa architektura pozwalająca na dobór wymaganej funkcjonalności.

Przypomnijmy, że testowanie fuzzingowe polega na generowaniu strumienia wszelkiego rodzaju losowych kombinacji danych wejściowych, które są zbliżone do danych rzeczywistych (np. strony HTML z losowymi parametrami tagów, archiwa lub obrazy z nietypowymi tytułami itp.) i możliwością nagrywania błędy w procesie ich przetwarzania. Jeśli sekwencja ulega awarii lub nie odpowiada oczekiwanej reakcji, wówczas takie zachowanie z dużym prawdopodobieństwem wskazuje na błąd lub lukę w zabezpieczeniach.

Źródło: opennet.ru

Dodaj komentarz