Atheris, zestaw narzędzi do testowania kodu w języku Python

Google zaprezentował niedawno wydano Projekt Atheris, który jest rozwinięciem zestaw narzędzi open source specjalistyczny do fuzzowania testów kodu Pythona i rozszerzenia dla CPythona napisane w C / C ++.

Projekt używa silnika opartego na libFuzzer i może być używany w połączeniu z narzędziami Address Sanitizer i Undefined Behavior Sanitizer w celu wykrycia dodatkowych błędów. Kod jest otwarty na licencji Apache 2.0.

O Google Atheris

Mówiąc słowami Google Atheris, jest to zestaw narzędzi, który można wykorzystać do automatycznego wyszukiwania błędów w kodzie Pythona i rozszerzeniach natywnych. Atheris to fuzzer „sterowany relacjami”, co oznacza, że ​​Atheris będzie wielokrotnie próbować różnych wejść do twojego programu, oglądając go w biegu i starając się znaleźć interesujące ścieżki.

Obsługiwany jest przegląd kodu dla języków Python 2.7 i Python 3.3+, ale dla pełnego pokrycia z przewodnikiem, zaleca się używanie gałęzi Python 3.8 i 3.9, które teraz obsługują statystyki opcode według opcode.

W trakcie, Atheris wymienia możliwe kombinacje danych wejściowych i generuje raport na wszystkich wykrytych błędach i niewykrytych wyjątkach.

Na przykład podczas sprawdzania biblioteki analizującej YAML w Atheris stwierdzono, że niektóre konstrukcje YAML, takie jak określenie „-_” zamiast wartości całkowitej lub użycie listy zamiast klucza, generują nieoczekiwany wyjątek zamiast YAMLE wyświetla błąd standardowy.

Test Fuzz to dobrze znana technika wykrywania błędów programistycznych. Wiele z tych wykrywalnych błędów ma poważne konsekwencje dla bezpieczeństwa. Google znalazł tysiące luk w zabezpieczeniach i innych błędów podczas korzystania z tej techniki. Fuzzing jest tradycyjnie używany w językach rodzimych, takich jak C lub C ++, ale w zeszłym roku stworzyliśmy nowy silnik fuzzingu Pythona. Dzisiaj udostępniliśmy silnik fuzzingu Atheris jako oprogramowanie typu open source.

Atheris może również służyć do identyfikacji różnic w zachowaniu bibliotek, które obsługują identyczne zadania. Na przykład podsumowujące sprawdzenie pakietu Pythona „idna” i biblioteki „libidn2”, które wykonują zadanie dekodowania umiędzynarodowionych nazw domen, wykazało, że nie zawsze dają one ten sam wynik.

Jednym z najlepszych zastosowań Atheris są dyfuzory różnicowe. Są to fuzzery, które szukają różnic w zachowaniu dwóch bibliotek, które mają robić to samo. Jeden z przykładów fuzzerów dołączonych do Atheris robi dokładnie to, aby porównać pakiet „idna” Pythona z pakietem C „libidn2”.

W szczególności, jeśli domena używała sekwencji Unicode, wówczas „idna” i „libidn2” konwertowały umiędzynarodowioną nazwę domeny na różne hosty.

Ogólnie rzecz biorąc, Atheris jest przydatny w czystym kodzie Pythona, o ile ma sposób wyrażenia „prawidłowego” zachowania lub przynajmniej określenia, które zachowania są zdecydowanie nieprawidłowe. Może to być tak złożone, jak niestandardowy kod w fuzzerze, który ocenia dokładność danych wyjściowych biblioteki, lub tak proste, jak sprawdzenie, czy nie są zgłaszane nieoczekiwane wyjątki.

Należy to wziąć pod uwagę testy fuzzingowe generują strumień wszelkiego rodzaju losowych kombinacji danych wejściowych, zbliżone do rzeczywistych danych (np. strony html z losowymi parametrami tagów, pliki lub obrazy z nieprawidłowymi nagłówkami itp.) i napraw ewentualne usterki w procesie.

Jeśli jakakolwiek sekwencja powoduje wyjątek lub nie odpowiada oczekiwanej odpowiedzi, to zachowanie najprawdopodobniej wskazuje na błąd lub lukę w zabezpieczeniach.

Wreszcie, jak wspomniano Atheris współpracuje z kodem Pythona w wersji 2.7 i 3.3+, chociaż Google zdecydowanie zaleca używanie 3.8+ i natywnych rozszerzeń napisanych dla CPythona.

Windows nie znajduje się jeszcze wśród obsługiwanych systemów operacyjnych, więc silnik jest na razie interesujący tylko dla użytkowników Linuksa i Mac OS X.

Aby używać go na tych platformach, programiści muszą mieć zainstalowaną aktualną wersję nakładki kompilatora Clang.

Jeśli chcesz dowiedzieć się więcej na ten temat, możesz sprawdzić oryginalną notatkę w następujący link.


Treść artykułu jest zgodna z naszymi zasadami etyka redakcyjna. Aby zgłosić błąd, kliknij tutaj.

Bądź pierwszym który skomentuje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.