Modern technology gives us many things.

Testing: Mit Jazzer erscheint ein Open-Source-Fuzzer für JVM-Anwendungen

0 0

Das vom deutschen Start-up Code Intelligence veröffentlichte Projekt nutzt Fuzzing zum Auffinden von Schwachstellen in Anwendungen auf der Java Virtual Machine.


    Testing: Mit Jazzer erscheint  ein Open-Source-Fuzzer für JVM-Anwendungen

(Bild: ROMAN NOGIN / Shutterstock.com)

Developer Von

  • Rainald Menge-Sonnentag

Das deutsche Unternehmen Code Intelligence hat mit Jazzer ein Tool veröffentlicht, das das Fuzz-Testing von Anwendungen ermöglicht, die auf der Java Virtual Machine (JVM) laufen. Es baut auf libFuzzer auf, der im Rahmen der Compilerarchitektur LLVM verfügbar ist.

Fuzzer untersuchen anders als Tools zur statischen Codeanalyse nicht den Sourcecode, um Bugs und Schwachstellen aufzuspüren. Stattdessen füttern sie die zu testenden Anwendungen mit Eingabedaten, die zufällig oder bewusst unvollständig beziehungsweise fehlerhaft sind. Damit können die Fuzzer Fehler aufspüren, die unter anderem durchrutschen, wenn menschliche Tester lediglich plausible Daten an die APIs über- oder in Eingabefelder eingeben.

Ein bekannter Vertreter der Fuzz-Testing-Tools ist das 2016 von Google veröffentlichte OSS Fuzz, das die Grundlage zum Aufspüren von Schwachstellen für die vor Kurzem gestartete Datenbank Open Source Vulnerabilites ist. Code Intelligence ist ein deutsches Start-up, das sich auf Fuzzing spezialisiert hat.

Jazzer führt den Bytecode innerhalb des Fuzzer-Prozeses aus, um eine möglichst hohe Performance zu erreichen. Er benötigt eine JVM-Klassse, die eine Methode enthält, über die der Fuzzer die Anwendung mit Eingaben füttert. Die Klasse muss entweder die Methode

public static boolean fuzzerTestOneInput(byte[] input)

für die Übergabe von Rohdaten als Byte-Array oder die folgende Methode:

public static boolean fuzzerTestOneInput(com.code_intelligence.api.FuzzedDataProvider data)

die die Eingabe über das Interface FuzzedDataProvider erhält, einbinden. Das Interface ermöglicht die Vorverarbeitung der Rohdaten.

Wenn die von Jazzer übergebenen Eingabedaten eine nicht abgefangene Exception oder eine fehlgeschlagene Assertion auslösen, erstellt das Tool neben einem Java-Stack-Trace zwei Dateien, die Informationen über die Eingabedaten und die verantwortliche Java-Klasse zum Reproduzieren des Problems enthalten.


    Testing: Mit Jazzer erscheint  ein Open-Source-Fuzzer für JVM-Anwendungen

(Bild: Code Intelligence)

Wie das Vorbild libFuzzer ermöglicht Jazzer grundsätzlich paralleles Fuzzing. Allerdings verwaltet er derzeit alle Coverage-Informationen in einer globalen Variable, die sich alle Threads teilen. Das kann bei Multithreading-Anwendungen zu irreführenden Coverage-Daten führen.

Der Fuzzer kann auch native Libraries untersuchen, die JVM-Anwendungen beispielsweise über System.load() einbinden. Jazzer unterstützt dabei das Zusammenspiel mit dem Sanitizer-Werkzeug AddressSanitizer, das bei der Suche nach Speicherfehlern in C- und C++-Code hilft.

Weitere Details zu Jazzer lassen dem GitHub-Repository entnehmen. Zum Start ist das Tool nur für x64-Linux verfügbar. Entwicklerinnen und Entwickler können Jazzer mit dem Build-Tool Bazel erstellen. Jazzer nutzt Bazelisk, um Bazel automatisch herunterzuladen und zu installieren, sofern es noch nicht auf dem System vorhanden ist. Einen tieferen technischen Einblick bietet ein Beitrag im Code-Intelligence-Blog.

(rme)

Quelle: www.heise.de

Hinterlasse eine Antwort

Deine Email-Adresse wird nicht veröffentlicht.