Fuzz-Testing ist eine Methode zur Identifizierung bisher nicht-erkannter Schwachstellen und Sicherheitslücken in Software (stand-alone oder embedded), die die Schnittstellen der Systeme automatisiert mit korrekten oder falschen Werten testet.
Fuzz-Testing: Was es ist
Das Fuzz-Testing zählt zu den Testverfahren, bei denen ein lauffähiges und laufendes (→ Dynamic Testing) computerisiertes System mit falschen, richtigen, zufälligen oder unerwarteten Eingabewerten v.a. auf Robustheit und IT-Sicherheit geprüft wird. Die anderen Qualitätseigenschaften von Software gemäß ISO 25010 stehen meist nicht im Fokus dieser Prüfung.
Im Gegensatz zu klassischen Penetrationstests versuchen die Fuzz-Tests, Fehlverhalten zu provozieren und so neue und bisher unbekannte Fehler bzw. Schwachstellen und Sicherheitslücken zu identifizieren.
Herleiten von Testfällen
Die Testfälle werden automatisiert erzeugt und ausgeführt.
- Entwickler oder Tester erzeugen Eingabewerte mit Hilfe selbst-entwickelter Skripts.
- (Fuzz-Testing-)Werkzeuge generieren Eingabewerte. Diese Tools werden als „Fuzzer“ bezeichnet.
- In der Praxis beobachtete Eingabewerte werden modifiziert (mutation fuzzing).
Die Testfälle (d.h. die Eingabewerte) werden auch erzeugt, ohne den inneren Aufbau des getesteten Systems zu kennen oder zu berücksichtigen. Daher zählt das Fuzz-Testing zu den Blackbox-Testverfahren.
Beispiele für Testfälle und deren Herleitung finden Sie auf der Webseite von OWASP.
Pass-Fail-Kriterien
Erfolgskriterien definieren viele Firmen nicht direkt, sondern indirekt als das Nichtauftreten von (Fehl-)Verhalten des getesteten Systems wie:
- Offenbaren vertraulicher Informationen
- Anstieg der genutzten Ressourcen (erhöhte CPU-Last, erhöhter Speicherverbrauch, stärkere I/O (Netzwerk, Festplatte), mehr Threads, steigender Stromverbrauch, Erwärmung usw.)
- Absturz des ganzen Systems oder von Teilen (z.B. ein Prozess hängt)
- Verlangsamte Reaktion
- Fehlermeldungen
- Verfälschte Daten
- Abbruch der Verbindung
- Nicht-spezifikationsgemäßes Verhalten an anderen Schnittstellen (z.B. Datenschnittstellen, UI (inkl. Alarme), Anwendungsteil)
Monitoring-Tools helfen, dieses Verhalten zu überwachen, zu dokumentieren und Fehler zu melden.
Getestete Schnittstellen
Beim Fuzz-Testing sollten alle externen Schnittstellen geprüft werden wie:
- Kommandozeile
- Benutzerschnittstelle
- URL
- APIs
- Datei-Input
- TCP/IP basierte Schnittstellen wie Webservices, Sockets und RPC
- Bus-Systeme z.B. CAN-Bus
- Serielle Schnittstellen inkl. USB
Vorteile des Fuzz-Testings
a) Regulatorische Anforderungen
Es gibt kein Gesetz, das den Einsatz des Fuzz-Testings verlangt. Aber die Gesetze wie die Medizinprodukteverordnung MDR verlangen explizit ein „State-of-the-art“ IT-Security-Management.
Diesen Stand der Technik repräsentieren Normen wie die UL 2900-1, die wiederum das Fuzz-Testing fordern. Die UL 2900-1 gibt sogar an, wie viele Testfälle die Hersteller durchführen müssen bzw. wie lange die Tests zu dauern haben.
b) Fuzz-Tests finden (weitere) Fehler
Beim methodischen Herleiten von Testfällen z.B. mit Hilfe der Blackbox-Verfahren (z.B. äquivalenzklassenbasiertes Testen) besteht die Gefahr, dass Fehler übersehen werden. Zufällig erzeugte Testfälle mit einem Fokus auf fehlerbasiertem Testen sind eine wichtige Ergänzung.
Ein weiterer Vorteil besteht, darin, dass Fuzz-Tests in jeder Lebenszyklusphase durchgeführt werden können:
- Nach der Entwicklung erster Komponenten
- Bei der Auswahl von SOUP bzw. OTS
- Bei Systemtests
- Nach der Auslieferung (von eigenen und fremden Produkten)
- Nach Änderungen am Produkt (eigener Code bzw. SOUP/OTS)
c) Tests sind automatisierbar, es gibt Werkzeuge
Der Aufwand zum Erstellen und Ausführen der Testfälle ist vergleichsweise gering. Werkzeuge unterstützen beides und helfen auch teilweise beim Dokumentieren.
Der hohe Automatisierungsgrad macht dieses Testverfahren auch für Regressionstest attraktiv.
d) Keine Kenntnis des Innenlebens notwendig (→ Blackbox-Testing)
Nicht immer ist das Innenleben der Produkte bekannt. Dann bietet sich das Fuzz-Testing an, da die Testfälle automatisiert und ohne Kenntnis des inneren Aufbaus des Produkts hergeleitet werden können.
Limitierungen, Nachteile und notwendige Voraussetzungen
a) Pass-fail-Kriterien
So einfach es ist, Testfälle automatisiert zu erstellen, so aufwendig kann es sein, die Kriterien zu bestimmen, ob der Fuzz-Test einen Fehler entdeckt hat oder nicht – es sei denn, dieser ist offensichtlich wie beim Absturz des Systems.
b) Kein Korrektheitsbeweis
Wie alle Tests können auch Fuzz-Tests nur die Existenz von Fehlern beweisen, nicht die Fehlerfreiheit. Daher ist es unumgänglich, nicht nur weitere Methoden zur Verifizierung und Validierung der Systeme, sondern auch konstruktive Verfahren der Qualitätssicherung anzuwenden wie z.B. das Threat-Modeling, Coding-Guidelines usw.
c) Ressourcen
Ein profundes technisches Wissen und ein Verständnis von Schnittstellen, Protokollen, Rechner-Architekturen sind wichtige Voraussetzungen für ein erfolgreiches Fuzz-Testing.
Ein IT-Security-Lab sollte neben den personellen Ressourcen auch über möglichst viele Fuzz-Testing-Tools verfügen und diese auch beherrschen. Nur somit wird es gelingen, Fehler mit ausreichender Wahrscheinlichkeit in der meist sehr begrenzten, zur Verfügung stehenden Zeit zu identifizieren.
Werkzeuge für das Fuzz-Testing
Es gibt mehrere hundert Tools, die das Generieren von Testdaten und/oder das Ausführen der Tests mit diesen Daten ganz oder teilweise automatisieren – entscheidend ist die Auswahl der für die jeweilige Aufgabe relevanten Tools.
Fazit
Bei der Analyse der IT-Security, insbesondere von einem vernetzbaren Medizinprodukt, darf das Fuzz-Testing nicht fehlen. Das ist Stand der Technik.
Das Fuzz-Testing stellt eine wichtige Ergänzung zu systematischen Ansätzen zur Ableitung von Testfällen dar. Es erlaubt eine Überprüfung mit vergleichsweise wenig Aufwand u.a. durch Automatisierung.
Der Einsatz von Werkzeugen ist ein Muss. Verschiedene Werkzeuge erzeugen verschiedene Testdaten, die sich nur teilweise überlappen. Daher sollten mehrere Tools zum Einsatz kommen.
PS: Das Johner Institut unterstützt Sie beim Fuzz-Testing Ihrer Medizinprodukte. Es hat sich dazu mit der Firma softScheck zusammengetan.