Otázka:
Jak zjistím pokrytí kódu při fuzzing
mrduclaw
2013-03-31 00:58:10 UTC
view on stackexchange narkive permalink

Řekněme, že bych chtěl začít fuzzovat čtečku PDF Acme Corp. Chtěl bych zkusit sledovat, co Miller udělal stažením spousty neškodných souborů PDF a jejich mutací.

Miller začal snížením svého souboru vzorků PDF na minimum prořezáním vzorků, které měly podobné pokrytí kódu.

Jak je tento konkrétní krok proveden? To znamená, jak určil, jaké bylo podobné pokrytí kódu?

Dokážu si představit nástroj, který sleduje provádění a zaznamenává JMP / CALL, aby získal graf provádění, a předpokládám, že byste tyto grafy mohli odlišovat. Ale co kód JIT? Nebyly by tyto grafy velmi odlišné, protože by se JIT pravděpodobně nacházel na různých místech v paměti?

Dva odpovědi:
mncoppola
2013-03-31 01:17:45 UTC
view on stackexchange narkive permalink

Přestože je projekt gcov silně spjat s GCC, je populární jako nástroj pro pokrytí kódu Linux. Vyžaduje však kompilaci vašeho programu s příznaky -fprofile-arcs -ftest-coverage , což nemusí být možnost, pokud cílíte na software s uzavřeným zdrojem. Další informace naleznete zde: http://gcc.gnu.org/onlinedocs/gcc/Gcov.html

To je skvělý návrh, ale doufal jsem v návrhy pro software s uzavřeným zdrojem.
0xea
2013-03-31 01:50:00 UTC
view on stackexchange narkive permalink

Nejste si jisti, jak to jde proti aplikaci s kompilovaným kódem JIT, ale broskev má nástroj minset pro vytvoření minimální sady souborů s nejvyšším pokrytím kódu:

Tento nástroj spustí každý ukázkový soubor prostřednictvím cílového programu a určí pokrytí kódu. Poté najde nejmenší počet souborů potřebných k pokrytí největšího množství kódu. Toto bude minimální sada souborů, která by měla být použita při fuzzování.

Pokud však vidím, používá metodu, kterou jste navrhli, monitorování zásahů všech základních bloků aplikace. K tomu používá pintool.



Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...