libafl
Buduj zaawansowane fuzzery na miarę swoich potrzeb — modułowa biblioteka do testowania bezpieczeństwa
Instalacja
Wybierz klienta i sklonuj repozytorium do odpowiedniego katalogu skilli.
Instalacja
O skillu
LibAFL to modułowa biblioteka do fuzzingu napisana w Rust, która daje ci pełną kontrolę nad procesem testowania. W przeciwieństwie do tradycyjnych fuzzerów, wszystkie komponenty — mutatory, mechanizmy feedback, strategie przeszukiwania — można dostosować do swoich potrzeb. Użyj LibAFL gdy standardowe narzędzia nie wystarczą: potrzebujesz niestandardowych strategii mutacji, twoja architektura nie jest wspierana przez libFuzzer czy AFL++, albo prowadzisz badania nad nowymi technikami fuzzingu. Działa jako zamiennik libFuzzer lub punkt wyjścia do budowy własnego fuzzera od zera.
Jak używać
Zainstaluj wymagane zależności: Clang/LLVM w wersji 15–18, Rust (przez rustup) oraz narzędzia systemowe. Na Linuksie lub macOS zainstaluj Clang poleceniem apt install clang, lub pobierz konkretną wersję ze strony apt.llvm.org (np. wget https://apt.llvm.org/llvm.sh, chmod +x llvm.sh, sudo ./llvm.sh 15).
Sklonuj repozytorium LibAFL i przejdź do katalogu kompatybilności z libFuzzer: git clone https://github.com/AFLplusplus/LibAFL, cd LibAFL/libafl_libfuzzer_runtime, następnie uruchom ./build.sh.
Przygotuj funkcję testową w C++ — utwórz plik harness.cc z funkcją LLVMFuzzerTestOneInput, która przyjmuje dane od fuzzera i przekazuje je do testowanego kodu. Funkcja powinna zwracać 0.
Skonfiguruj zmienne środowiskowe Rust (RUSTFLAGS) zgodnie z dokumentacją, aby włączyć niezbędne flagi kompilacji dla twojej platformy.
Skompiluj fuzzer poleceniem clang++ z flagami -DNO_MAIN -g -O2 -fsanitize=fuzzer-no-link, linkując libFuzzer.a, harness.cc i main.cc, a wynik zapisz jako plik wykonywalny (np. fuzz).
Uruchom fuzzer wskazując katalog z corpus: ./fuzz corpus/. Fuzzer będzie generować i testować dane, szukając błędów w twoim kodzie.