FuzzCoder Einsatz großer Sprachmodelle zur Optimierung von Fuzzing Tests

Kategorien:
No items found.
Freigegeben:
September 9, 2024
FuzzCoder: Byte-level Fuzzing Test via Large Language Model

FuzzCoder: Byte-Level Fuzzing-Test mittels großer Sprachmodelle

Einleitung

Fuzzing ist eine wichtige dynamische Programmanalysetechnik, die entwickelt wurde, um Schwachstellen in komplexer Software zu finden. Dabei wird ein Zielprogramm mit sorgfältig erstellten Eingaben konfrontiert, um Abstürze, Speicherüberläufe, Speicherfehler und Ausnahmen zu provozieren. Die effiziente Generierung wirksamer bösartiger Eingaben bleibt jedoch eine herausfordernde offene Frage, da die besten Ansätze oft auf gleichmäßigen zufälligen Mutationen bereits bestehender gültiger Eingaben beruhen.

FuzzCoder: Ein neuartiger Ansatz

In dieser Arbeit wird FuzzCoder vorgestellt, ein neuer Ansatz, der große, feinabgestimmte Sprachmodelle (LLMs) nutzt, um die Effizienz des Fuzzings zu verbessern. Dieser Ansatz lernt Muster aus erfolgreichen Angriffsinputs, um zukünftige Fuzzing-Explorationen zu leiten. Ein Rahmenwerk wurde entwickelt, das Code-LLMs nutzt, um den Mutationsprozess von Eingaben beim Fuzzing zu steuern und diesen als Sequenz-zu-Sequenz-Modellierungsaufgabe zu formulieren, bei der das LLM eine Byte-Sequenz erhält und eine mutierte Version ausgibt.

Feinabstimmung auf Fuzz-Instruct

FuzzCoder wurde auf Fuzz-Instruct, einem benutzerdefinierten Instruktionsdatensatz, der aus erfolgreichen Fuzzing-Historien mit heuristischen Fuzzing-Tools gesammelt wurde, feinabgestimmt. Dies ermöglicht FuzzCoder, optimale Mutationsorte und -strategien innerhalb von Eingabedateien vorherzusagen, wodurch die Wahrscheinlichkeit erhöht wird, anormales Programmverhalten auszulösen.

Integration mit AFL

FuzzCoder wurde in AFL (American Fuzzy Lop) integriert und seine Leistung wurde über verschiedene Eingabeformate hinweg bewertet, darunter ELF, JPG, MP3 und XML. Die experimentellen Ergebnisse zeigen signifikante Verbesserungen in zwei Schlüsselmetriken: dem effektiven Anteil der Mutation (EPM) und der Anzahl der erkannten Abstürze (NC).

Methodik

Die Methodik hinter FuzzCoder umfasst:

- Die Formulierung des Fuzzing-Tests als Sequenz-zu-Sequenz-Paradigma, bei dem das Generierungsmodell anfällige Positionen durch die Auswahl geeigneter Mutationspositionen und -strategien angreift. - Die Konstruktion eines vollständigen Rahmens zur Feinabstimmung der Code-LLMs mit Hilfe des gesammelten Instruktionskorpus Fuzz-Instruct. - Die Evaluation der Leistung verschiedener Modelle auf einem Fuzzing-Test-Benchmark Fuzz-Bench, der aus 8 Programmen besteht, die verschiedene Datenformate akzeptieren (z.B. ELF, JPG, MP3, und XML).

Ergebnisse

Die experimentellen Ergebnisse auf dem erstellten Benchmark Fuzz-Bench (Simulation mit AFL) zeigen, dass der feinabgestimmte FuzzCoder den effektiven Anteil der Mutation (EPM) signifikant verbessert und mehr Programmabstürze im Vergleich zu den bisherigen Baselines auslöst.

Fuzzing-Test: Eine Vorstudie

Fuzzing ist eine robuste Softwaretesttechnik, die darauf abzielt, Schwachstellen und Fehler in Computerprogrammen aufzudecken, indem sie einer Flut unerwarteter und oft ungültiger Eingaben ausgesetzt werden. Der Fuzzing-Test kann mathematisch wie folgt dargestellt werden:

ℱ(𝑇, 𝑔(𝑥)) = 𝑅

wobei ℱ(⋅,⋅) den Fuzzing-Prozess darstellt, der die Mutation von Eingabetestfällen empfängt. 𝑇 ist die Zielsoftware oder das Programm, das dem Fuzzing-Test unterzogen wird. 𝐼 repräsentiert die Eingabetestfälle, die typischerweise fehlerhafte, unerwartete oder zufällige Daten sind. 𝑔(𝑥) ist das Mutationsformat der ursprünglichen Eingabe 𝑥. 𝑅 steht für die während des Fuzzing-Tests erhaltenen Ergebnisse oder Beobachtungen, zu denen Systemabstürze, Fehlermeldungen oder andere unerwartete Verhaltensweisen in der Zielsoftware gehören können.

American Fuzzy Lop (AFL)

American Fuzzy Lop (AFL) ist ein weit verbreitetes automatisiertes Tool zur Schwachstellenanalyse, das Sicherheitslücken in Softwareprogrammen durch Fuzzy-Testing-Techniken findet. Fuzzy-Testing ist eine Black-Box-Testmethode, die zufällige oder halbzufällige Daten in Programmeingaben injiziert, um anomales Verhalten und potenzielle Schwachstellen im Programm zu erkennen. In AFL bezieht sich die Mutation auf die Generierung neuer Fuzzy-Testeingaben durch Modifikation der Eingabebeispiele, was eine Kernkomponente des AFL-Fuzzy-Tests darstellt. Die Mutationsstrategie verwendet eine Reihe zufälliger und halbzufälliger Mutationstechniken, um eine Vielfalt an Testeingaben zu erstellen.

Evaluierung und Ergebnisse

Unser vorgeschlagener Ansatz wurde auf dem Benchmark Fuzz-Bench, bestehend aus 8 Programmen (NM_ELF, READ_ELF, OBJDUMP_ELF, LINT_XML, MP3GAIN_MP3, IMAGEMAGICK_GIF, SPLIT_TIFF, und TRAN_JPEG) evaluiert. Diese Programme akzeptieren verschiedene Eingabeformate wie ELF, XML, MP3 und GIF. FuzzCoder verbessert die Zeilenabdeckung und die Zweigabdeckung im Vergleich zu den vorherigen starken Baselines signifikant. Darüber hinaus beobachten wir, dass FuzzCoder aufgrund der effektiven Mutationsvorhersage der Code-LLM mehr neue Pfade oder die Häufigkeit von Codeblöcken während des Fuzz-Tests auslöst.

Schlussfolgerung

FuzzCoder stellt einen bedeutenden Fortschritt in der Fuzzing-Technologie dar, indem es die Fähigkeiten großer Sprachmodelle nutzt, um den Mutationsprozess von Eingaben zu optimieren. Durch die Integration mit bestehenden Fuzzing-Frameworks wie AFL zeigt FuzzCoder erhebliches Potenzial zur Verbesserung der Detektion von Schwachstellen und zur Erhöhung der Effizienz des Fuzzing-Prozesses.

Bibliographie

https://arxiv.org/abs/2409.01944 https://arxiv.org/html/2409.01944 https://github.com/wcventure/FuzzingPaper https://twitter.com/gm8xx8/status/1831185428575056325 https://wcventure.github.io/FuzzingPaper/ https://www.researchgate.net/publication/381404448_Exploring_Fuzzing_as_Data_Augmentation_for_Neural_Test_Generation https://www.cs.ru.nl/masters-theses/2023/E_Tamminga___Utilizing_large_language_models_for_fuzzing.pdf https://chatpaper.com/chatpaper/paper/54880 https://abhikrc.com/pdf/NDSS24.pdf
Was bedeutet das?