Testing

Security Testing: The Power of Fuzzing

Fuzzing ist ein leistungsstarkes Testverfahren, um die Robustheit einer Software und eines Systems zu überprüfen. Mittels eines Fuzzers wird dabei die Reaktion des Zielsystems auf zufällig generierte ungültige oder unerwartete Eingaben getestet. ESCRYPT hat dank dieses Verfahren bereits in zahlreichen Kundenprojekten Schwachstellen und Implementierungsfehler aufgedeckt - bis hin zum plötzlichen Absturz Safety-relevanter ECUs.

Generierung von Eingabedaten und Monitoring

Ein Fuzzer besteht aus zwei Hauptkomponenten: Dem Testdatengenerator und dem Monitoring-Tool. Die Qualität dieser Komponenten entscheidet letztlich über Qualität und Aussagekraft des Testergebnisses. Der Testdatengenerator generiert Eingabedaten, die für die zu testende Anwendung untypisch sind. Ziel ist dabei, unerwartete Fehler und Anomalien hervorzurufen. Gute Generatoren stellen sich dabei auf das vom Zielsystem verwendete Protokoll ein und modifizieren nur einzelne Aspekte des Protokolls (z.B. einzelne Datenfelder oder Komponenten des Datenflusses). Auf diese Weise wird eine feine Linie zwischen ungültiger und gültiger Eingabe gezogen – dies bezeichnet man als „Smart Fuzzing“.

Gleichzeitig kommt es darauf an, mittels Monitoring das Fehlverhalten des Zielsystems zu erkennen. Dafür wird es idealerweise auf mehrere Arten überwacht – zum Beispiel per Kameraaufzeichnung, falls das System über einen Bildschirm verfügt, aber auch durch Überwachung seiner Ampereentnahme, unter Verwendung der guten alten "ping"-Nachricht, auf die das Ziel immer reagieren sollte, oder durch Nutzung von Debuggern, die das interne Verhalten detektieren. Die Bandbreite möglicher Fehler reicht dabei vom Komplettabsturz des Systems bis hin zu subtilen Bugs wie abweichendem Zeitverhalten oder Speicherlecks.

Bild 1: Fuzzing betrachtet die feine Linie zwischen ungültiger und gültiger Eingabe.

Blackbox und Whitebox Fuzzing

Fuzzing kann als Blackbox und als Whitebox-Test eingesetzt werden. Beim Blackbox-Fuzzing hat der Tester keinerlei Einblick in das zu testende Endgerät. Das heißt, er sendet Zufallsdaten als Eingabe ins System und beobachtet, ob es darauf in irgendeiner Weise sichtbar reagiert.

Beim Whitebox-Fuzzing dagegen geht das Monitoring deutlich tiefer, ist aber auch ungleich komplexer. Mittels Untersuchung von Binärdateien, die auf dem Zielgerät laufen, der Installation von Überwachungsdiensten oder sogar der Neukompilierung der Zielsoftware lassen sich per Whitebox-Fuzzing auch subtile Fehler finden. Im Gegensatz zum Blackbox-Fuzzing, das als reiner Labortest durchgeführt wird, erfordert Whitebox-Fuzzing Einblicke in die Entwicklungsprozesse des Kunden.

Effizientes und vielseitiges Testing-Tool

Fuzz-Testing gilt als äußerst effektives Werkzeug, das die verschiedensten Schwachstellen aufdecken kann. So haben die ESCRYPT-Tester einst sogar durch Fuzzing des CAN-Protokolls eines eingebetteten Steuergerätes die gesamte ECU zum Absturz gebracht. Das Team informierte den Entwickler und der Fehler konnte gepatcht werden.

ESCRYPT konzentriert sich derzeit auf das protokollgerechte Blackbox-Fuzzing verschiedener Embedded-Protokolle. Dazu nutzen die ESCRYPT-Security-Tester eine Kombination aus kommerziellem, kostenfrei verfügbarem und eigenentwickeltem Fuzzer. Auf diese Weise lassen sich nahezu alle Automotive-relevanten Protokolle abdecken: CAN, ISO-TP, UDS, USB, Bluetooth, WiFi und viele Ethernet-basierte Protokolle (IP, TCP, UDP, FTP, TLS etc). Daneben betreibt ESCRYPT derzeit verschiedene Whitebox-Fuzzing-Projekte, um die Integration von Fuzz-Tests in verschiedene Entwicklungsumgebungen zu bewerten, und hat ein eigenes, speziell auf USB- und CAN-Protokolle ausgerichtetes Fuzzing-Tool entwickelt.

SHARE THIS

Language:
ISO 9001:2015 Home