Live-Visualisierung von Fuzzing Coverage Daten aus AFL++
Fuzzing ist eine automatisierte Testmethode, bei der Programme mit vielen unterschiedlichen Eingaben ausgeführt werden, um Fehler oder Sicherheitslücken zu finden. Dabei entstehen grosse Mengen an Testdaten und Programmausführungen. Dieses Projekt entwickelt eine Plattform, die diese Ergebnisse visuell darstellt und verständlich macht.

Ausgangslage
Moderne Fuzzer wie AFL++ erzeugen tausende Testinputs und entdecken dadurch neue Programmpfade und mögliche Fehlerstellen. Die entstehenden Daten liegen jedoch meist nur als technische Rohinformationen wie Coverage oder Logs vor. Dadurch ist es schwierig zu erkennen, welche Teile eines Programms tatsächlich getestet wurden und welche Pfade noch unerforscht sind.
Zielsetzung
Ziel dieser Arbeit war die Untersuchung, wie Ergebnisse aus Coverage-guided Fuzzing verständlich analysiert und dargestellt werden können. Dabei wurde insbesondere betrachtet, wie Coverage-Daten aus Fuzzing-Läufen mit AFL++ mit der statischen Struktur eines Programms, insbesondere seinem Kontrollflussgraphen, kombiniert werden können. Zudem sollte der Fortschritt eines Fuzzing-Prozesses fortlaufend und nahezu in Echtzeit sichtbar gemacht werden. Auf dieser Grundlage wurde ein System entwickelt, das diese Informationen visuell aufbereitet und die Analyse von Programmabläufen erleichtert.
Visualisierung von Programmabläufen und Code-Coverage
Kombination aus Control-Flow-Graph und Code-Coverage. Die Visualisierung zeigt, welche Programmteile während des Fuzzings ausgeführt wurden (Grüne Knoten) und welche nicht (Rote Knoten).
Übersicht über den Ablauf des Systems
Übersicht über den Ablauf der Plattform: Ein Fuzzer (AFL++) erzeugt Eingaben und Coverage-Informationen. Diese Daten werden analysiert und mit der Struktur des Programms kombiniert, um sie anschliessend in einer Weboberfläche zu visualisieren.
Analyse eines durch Fuzzing gefundenen Programmfehlers
Darstellung eines durch Fuzzing gefundenen Fehlers. Der Kontrollflussgraph zeigt den tatsächlich ausgeführten Programmpfad, während der Quellcode die betroffene Stelle hervorhebt (Schwarz/Gelb).
Ergebnisse
Im Rahmen des Projekts wurde eine Webplattform entwickelt, die Ergebnisse aus Fuzzing-Kampagnen strukturiert aufbereitet und visuell darstellt. Die Anwendung integriert Control-Flow-Graphen, Code-Coverage-Daten und den zugehörigen Quellcode in einer gemeinsamen Oberfläche. Dadurch können Programmausführungen, neu entdeckte Pfade sowie Fehlerstellen direkt im Kontext des Programms analysiert werden. Die entwickelte Plattform bietet unter anderem:
- Visualisierung von Programmpfaden in Control-Flow-Graphen basierend auf den analysierten Programmen
- Darstellung der Code-Coverage direkt im Quellcode, wodurch ausgeführte und nicht erreichte Bereiche sichtbar werden
- Zuordnung von Fuzzing-Inputs zu Programmausführungen, um nachvollziehen zu können, welche Eingaben neue Programmpfade auslösen
- Markierung von Crash- und Fehlerstellen innerhalb des Kontrollflussgraphen und im Quellcode
- Interaktive Analyse der Fuzzing-Ergebnisse über eine Weboberfläche
Durch diese Visualisierung wird die Analyse von Fuzzing-Kampagnen deutlich erleichtert. Entwickler können schneller erkennen,
- welche Programmteile bereits getestet wurden
- welche Pfade noch unerreicht sind
- und an welchen Stellen Fehler oder Abstürze auftreten.
Die entwickelte Plattform zeigt, dass eine visuelle Darstellung von Fuzzing-Daten ein effektives Mittel ist, um komplexe Programmausführungen verständlich zu analysieren und potenzielle Fehlerstellen schneller zu identifizieren.
Technische Schlüsselbegriffe
- FuzzingAutomatisierte Testmethode, bei der Programme mit vielen zufälligen Eingaben ausgeführt werden, um Fehler zu finden.
- AFL++Ein moderner Fuzzer, der Programme automatisch testet und neue Eingaben generiert, um möglichst viele Codepfade zu erreichen.
- Code CoverageZeigt, welche Teile eines Programms während eines Tests ausgeführt wurden.
- Control Flow Graph (CFG)Graphische Darstellung der möglichen Programmabläufe innerhalb eines Programms.
- LLVMCompiler-Infrastruktur zur Analyse und Instrumentierung von Programmen.
- JoernWerkzeug zur statischen Analyse von Quellcode und zur Erstellung von Programmgraphen.
Kund:in
Institut für Mobile und Verteilte Systeme (IMVS)
Bahnhofstrasse 5
5210 Windisch
www.fhnw.ch
Team
Rinor Shala
Betreuer
Prof. Dr. Christopher Scherb
Luc Heitz