Toolverse
Wszystkie skille

libfuzzer

autor: trailofbits

Fuzzer pokrycia dla kodu C/C++ zintegrowany z LLVM – szybka konfiguracja i łatwe użycie

Instalacja

Wybierz klienta i sklonuj repozytorium do odpowiedniego katalogu skilli.

Instalacja

Szybkie info

Kategoria
Testowanie
Wyświetlenia
3

O skillu

libFuzzer to fuzzer wbudowany w LLVM, który automatycznie testuje Twój kod C/C++ w poszukiwaniu błędów i zawieszań. Działa w procesie, kieruje się pokryciem kodu i doskonale integruje się z łańcuchem narzędzi Clang. Wybierz go, gdy potrzebujesz szybkiej konfiguracji do fuzzingu jednego projektu – bez skomplikowanego setup'u. Harnesze napisane dla libFuzzera są kompatybilne z AFL++, więc możesz później przejść na bardziej zaawansowane narzędzie, jeśli będzie potrzebne.

Jak używać

  1. Zainstaluj LLVM i Clang na swoim systemie (na Ubuntu/Debian: apt install clang llvm). libFuzzer jest wbudowany w LLVM, więc nie musisz instalować go osobno.

  2. Napisz harnes fuzzingu – funkcję LLVMFuzzerTestOneInput, która przyjmuje dane z fuzzera i przekazuje je do testowanej funkcji. Harnes powinien zawierać nagłówki stdint.h i stddef.h, a funkcja musi mieć sygnaturę: extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size).

  3. Skompiluj harnes razem z kodem docelowym, używając flag -fsanitize=fuzzer,address -g -O2. Przykład: clang++ -fsanitize=fuzzer,address -g -O2 harness.cc target.cc -o fuzz. Flagi włączają fuzzer, detektor błędów adresów i informacje debugowania.

  4. Utwórz katalog corpus/ na dane wejściowe fuzzera (może być pusty na początek).

  5. Uruchom fuzzer poleceniem ./fuzz corpus/. libFuzzer będzie generować losowe dane, testować Twój kod i zapisywać interesujące przypadki testowe w katalogu corpus/.

  6. Monitoruj wynik – fuzzer wypisze znalezione błędy, zawieszenia lub naruszenia pamięci. Jeśli potrzebujesz bardziej zaawansowanych funkcji, takich jak fuzzing wielordzeniowy, możesz później przejść na AFL++, ponieważ harnesze są kompatybilne.

Podobne skille