Frage:
Wie bestimme ich die Codeabdeckung beim Fuzzing?
mrduclaw
2013-03-31 00:58:10 UTC
view on stackexchange narkive permalink

Nehmen wir an, ich möchte den PDF-Reader von Acme Corp fuzzeln. Ich möchte versuchen, dem zu folgen, was Miller getan hat, indem ich eine Reihe gutartiger PDFs herunterlade und sie mutiere.

Miller begann damit, sein Korpus an PDF-Beispielen auf ein Minimum zu reduzieren, indem er Beispiele mit ähnlicher Codeabdeckung beschnitt.

Wie wird dieser bestimmte Schritt ausgeführt? Das heißt, wie hat er festgestellt, was eine ähnliche Codeabdeckung war?

Ich kann mir ein Tool vorstellen, das die Ausführung verfolgt und JMP / CALLs aufzeichnet, um ein Ausführungsdiagramm zu erhalten, und ich nehme an, Sie könnten diese Diagramme unterscheiden. Aber was ist mit JIT-Code? Wären diese Diagramme nicht sehr unterschiedlich, da sich die JIT wahrscheinlich an verschiedenen Stellen im Speicher befindet?

Zwei antworten:
#1
+5
mncoppola
2013-03-31 01:17:45 UTC
view on stackexchange narkive permalink

Obwohl es stark mit GCC gekoppelt ist, ist das Projekt gcov als Linux-Tool zur Codeabdeckung beliebt. Es ist jedoch erforderlich, Ihr Programm mit den Flags -fprofile-arcs -ftest-Coverage zu kompilieren. Dies ist möglicherweise keine Option, wenn Sie auf Closed-Source-Software abzielen. Weitere Informationen finden Sie hier: http://gcc.gnu.org/onlinedocs/gcc/Gcov.html

Dies ist ein großartiger Vorschlag, aber ich hatte auf Vorschläge für Closed-Source-Software gehofft.
#2
+5
0xea
2013-03-31 01:50:00 UTC
view on stackexchange narkive permalink

Ich bin mir nicht sicher, wie es mit JIT-kompiliertem Code gegen Anwendungen abschneidet, aber peach verfügt über ein Dienstprogramm minset, mit dem eine minimale Anzahl von Dateien mit der höchsten Codeabdeckung erstellt werden kann:

Dieses Tool führt jede Beispieldatei über ein Zielprogramm aus und ermittelt die Codeabdeckung. Es wird dann die geringste Anzahl von Dateien gefunden, die benötigt werden, um den meisten Code abzudecken. Dies ist die Mindestmenge an Dateien, die beim Fuzzing verwendet werden sollte.

Soweit ich jedoch sehen kann, wird die von Ihnen vorgeschlagene Methode verwendet, um die Treffer aller grundlegenden Blöcke der Anwendung zu überwachen. Dazu wird ein Pintool verwendet.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...