harness-writing
Naucz się pisać efektywne harneesy do fuzzingu w dowolnym języku programowania
Instalacja
Wybierz klienta i sklonuj repozytorium do odpowiedniego katalogu skilli.
Instalacja
O skillu
Umiejętności pisania harnesów fuzzingowych, które rzeczywiście znajdują błędy. Dowiedz się, jak budować funkcje wejściowe łączące losowe dane z kodem testowanym, strukturyzować złożone dane wejściowe i unikać pułapek powodujących niskie pokrycie kodu. Technika obejmuje kluczowe koncepcje: punkt wejścia, FuzzedDataProvider, determinizm i fuzzing przeplatany. Zastosuj ją przy tworzeniu nowych celów fuzzingu, poprawie istniejących harnesów lub debugowaniu niepowtarzalnych awarii.
Jak używać
Zainstaluj umiejętność harness-writing z repozytorium Trail of Bits w swoim środowisku agenta Claude lub Copilota. Umiejętność zawiera dokumentację technik pisania harnesów dla różnych języków programowania.
Zidentyfikuj kod, który chcesz poddać fuzzingowi (System Under Test, SUT) i określ jego interfejs API. Ustal, jakie funkcje będą celem testów i jakie typy danych przyjmują.
Zaprojektuj funkcję harnesu zgodnie z wymaganiami fuzera (np. LLVMFuzzerTestOneInput dla libFuzzer). Harnes musi przyjmować losowe bajty, konwertować je na sensowne dane wejściowe i wywoływać funkcje testowane.
Użyj FuzzedDataProvider lub podobnej klasy pomocniczej do strukturalnego wyodrębniania typowanych danych z surowych bajtów. Pozwoli to fuzzerowi efektywnie eksplorować ścieżki kodu zamiast generować losowy szum.
Obsłuż przypadki brzegowe i błędy w harnesie — upewnij się, że awarie są powtarzalne i że kod nie zawiesza się na nieprawidłowych danych. Przetestuj harnes z kilkoma ręcznym wejściami przed uruchomieniem pełnej kampanii fuzzingu.
Monitoruj pokrycie kodu podczas fuzzingu. Jeśli pokrycie jest niskie lub fuzzer nie znajduje błędów, przejrzyj harnes — może wymagać lepszej strukturyzacji danych wejściowych, testowania wielu operacji (fuzzing przeplatany) lub zmian w logice parsowania.