Fuzzing

Als Fuzzing wird eine automatisierte Methode des Softwaretests bezeichnet.

Ziel ist es die Robusheit einer Software zu erhöhen, so dass sich die Software immer in einem definierten Zustand befindet und damit z.B. Sicherheitslücken der Software zu identifizieren. [1]


Entsprechende Anwendungen werden als Fuzzer bezeichnet und laufen in der Regel zyklisch in drei Schritten ab:

  1. Als Eingabewert wird eine zufällige Abfolgen von Bits generiert oder eine definierte Abfolge von Bits wird zufällig modifiziert.
  2. Der generierte Wert wird zum Test der Eingabeschnittstelle einer Software verwendet.
  3. Abschließend wird das Verhalten der Software auf die Eingabe überprüft (Monitoring).


Um gefundene unerwünschte Zustände (Bugs) zusammenzufassen, können über die erfolgte Ausgabe des Systems z.B. Hashwerte gebildet werden. Dies vereinfacht die spätere Analyse und die Kategorisierung entsprechend der Kritikalität des jeweiligen Systemzustands. Das Monitoring kann hierzu zum Beispiel mit einem Bugtracker verbunden sein.


Unterschieden werden kann beim Fuzzing zwischen Blackbox- und Whitebox-Test. Bei ersterem, auch als "dump" Fuzzing bezeichnet ist über die zu testende Software dem Fuzzer nichts über deren Struktur bekannt und es werden völlig randomisierte Eingabewerte verwendet (z.B. aus /dev/urandom).


Fuzzern die Whitebox oder auch "smart" Fuzzing betreiben sind Parameter für die Eingabe vorgegeben, z.B. Dateitypen, Protokolle, etc.

Als Beispiel kann hier die Eingabe auf einem Formular zur Erfassung von Adressdaten dienen. Beim Blackbox Fuzzing kann es passieren, dass bestimmte Zustände in bestimmter Zeit nicht erreicht werden und zum Beispiel das Format einer Postleitzahl nicht gewissen Parametern entspricht. In Folge kann die Übermittlungsfunktion niemals aufgerufen werden.


Fuzzing als Methode von Softwaretests gilt als kostengünstig im Einsatz. Mit ihr ist ein hoher zeitlicher Aufwand verbunden. Dieser kann jedoch durch Parallelisierung reduziert werden. Ebenfalls zeitaufwändig kann die Auswertung der Resultate sein, je nach Automatisierungsgrad des Monitorings bzw. Reportings.


Wie alle Testmethoden können auch mit Fuzzing nicht alle Fehler in einer Software gefunden werden

  1. [1]Fuzzing von Embedded Software – Grundlagen und Erfahrungen (Stand: 26.01.2020)