KernelGPT: Kernel-Fuzzing mit Sprachmodellen vorantreiben
KernelGPT automatisiert die Erstellung von Syscall-Spezifikationen, um Kernel-Fuzzing und Fehlersuche zu verbessern.
― 5 min Lesedauer
Inhaltsverzeichnis
Bugs im Betriebssystemkern können ernsthafte Probleme für Milliarden von Geräten und Nutzern weltweit verursachen. Deswegen wird viel Forschung in Kernel-Fuzzing investiert, also dem Prozess, automatisch Systemaufrufsequenzen zu erzeugen, um Bugs oder Schwächen im Kernel zu finden. Eine beliebte Methode beim Kernel-Fuzzing zielt darauf ab, gültige Systemaufrufsequenzen basierend auf speziellen Regeln, die in einer speziellen Sprache definiert sind, zu erstellen. Obwohl es Bemühungen gab, diese Regelgenerierung einfacher zu machen, wird der Grossteil der Arbeit immer noch manuell erledigt und viele wichtige Systemaufrufe bleiben unentdeckt.
Dieser Artikel stellt KernelGPT vor, einen neuen Weg, automatisch Spezifikationen für Kernel-Fuzzing mithilfe von grossen Sprachmodellen (LLMs) zu generieren. Die Hauptidee ist, dass diese Modelle, die auf einer Menge von Kernel-Code, Dokumentationen und Beispielen trainiert sind, die notwendigen Details extrahieren können, um gültige Systemaufrufe zu erstellen. KernelGPT arbeitet iterativ, um alle Teile zu finden, die für die Spezifikationen nötig sind, und nutzt Feedback, um diese Spezifikationen zu verbessern.
Unsere ersten Ergebnisse zeigen, dass KernelGPT die Abdeckung erheblich erhöht und mehrere neue Bugs aufgedeckt hat, die zuvor unbekannt waren. Das Forschungsteam hat auch Interesse bekundet, diese Spezifikationen in ihre Hauptprojekte zu integrieren.
Die Bedeutung von Betriebssystemkernen
Betriebssystemkerne sind kritische Systeme, weil alle anderen Softwaretypen von ihnen abhängen. Ein Bug im Kernel, wie ein Absturz oder ein Speicherfehler, kann von böswilligen Nutzern ausgenutzt werden, was erhebliche Probleme für alle verursachen kann, die das betroffene Betriebssystem verwenden. Um die Korrektheit und Sicherheit dieser wichtigen Systeme zu gewährleisten, wird seit vielen Jahren Fuzzing eingesetzt. Diese Technik erstellt automatisch zahlreiche Systemaufrufe, um mögliche Kernel-Bugs zu testen.
Kernel-Fuzzing ist eine der effektivsten Methoden zur Identifizierung von Schwachstellen. Es wurden viele Fortschritte in diesem Bereich erzielt, mit einem Fokus auf Aspekte wie Seed-Generierung, geführte Mutation und die Erstellung von syscall-Spezifikationen. Die Spezifikationen für Systemaufrufe spielen eine entscheidende Rolle, da sie die Arten von Systemaufrufen und deren Beziehungen definieren. Das ermöglicht die Generierung von gültigen Systemaufrufsequenzen, die tiefer in die Logik des Kernels eintauchen.
Herausforderungen bei der Erstellung von Spezifikationen
Allerdings ist die Erstellung von syscall-Spezifikationen meist ein manueller Prozess, der tiefes Wissen über den Kernel erfordert. Einige neuere Forschungen haben versucht, die Generierung dieser Spezifikationen zu automatisieren, insbesondere für Gerätetreiber. Aktuelle fortgeschrittene Generatoren hängen typischerweise von menschlich definierten Regeln ab, was den Prozess herausfordernd und zeitaufwendig macht. Ausserdem werden diese Regeln oft veraltet, wenn sich der Kernel ändert.
Fortgeschrittene Spezifikationen erfordern nicht nur das Extrahieren von Parametertypen und erwarteten Werten, sondern auch das Verständnis, wie Systemaufrufe voneinander abhängen. Wenn diese Herausforderungen nicht angegangen werden, könnten die generierten Spezifikationen ungenau sein und den Fuzzing-Prozess behindern.
Die Rolle grosser Sprachmodelle
Neueste Fortschritte bei grossen Sprachmodellen haben gezeigt, dass sie bei Aufgaben wie Codeverständnis und Dokumentation hervorragend abschneiden können. Diese Modelle werden auf riesigen Datensätzen trainiert, die verschiedene Programmiersprachen umfassen, was ihnen ermöglicht, eine breite Palette von Aufgaben zu bewältigen, ohne spezielle Schulung zu benötigen. Es gibt ein wachsendes Interesse daran, diese Modelle für Softwaretests zu verwenden, einschliesslich der Generierung von Unit-Tests und Fuzzing.
KernelGPT nutzt diese Fähigkeiten, indem es die Regeln automatisiert, die nötig sind, um syscall-Spezifikationen zu erstellen. Durch die Nutzung der Stärken von Sprachmodellen kann KernelGPT den Kernel-Code effektiver analysieren und bessere Spezifikationen für Fuzzing erstellen.
So funktioniert KernelGPT
KernelGPT arbeitet in mehreren Phasen, um automatisch Treiberspezifikationen zu generieren. Der Arbeitsablauf besteht aus drei Hauptschritten: Erkennung von Treibern, Generierung von Spezifikationen und Validierung sowie Reparatur dieser Spezifikationen.
Treibersuche
Der Prozess beginnt mit der Erkennung von Treibern im Kernel-Code. KernelGPT sucht nach Verweisen auf Operationshandler in Gerätetreibern und schliesst aus diesen Informationen auf Gerätenamen und Initialisierungsbeschreibungen. Durch den Einsatz von Few-Shot-Lerntechniken kann KernelGPT seine Genauigkeit bei der Identifizierung von Gerätenamen verbessern.
Spezifikationsgenerierung
Als nächstes generiert KernelGPT Beschreibungen für die ioctl-Funktionen, die in Treibern verwendet werden. Das geschieht strukturiert: Zuerst werden die Befehlswerte bestimmt, dann die Argumenttypen identifiziert und schliesslich diese Typen definiert. Ein iterativer Ansatz wird verwendet, der es KernelGPT ermöglicht, den Code in kleineren Teilen zu analysieren, um den Fokus und die Effektivität zu verbessern.
Spezifikationsvalidierung und -reparatur
In der letzten Phase validiert KernelGPT die generierten Spezifikationen. Wenn es Probleme findet, konsultiert es das Sprachmodell, um diese basierend auf Fehlermeldungen von einem Validierungstool zu reparieren. Dieser Prozess stellt sicher, dass die Spezifikationen genau sind und bereit für effektives Fuzzing.
Ergebnisse von KernelGPT
Vorläufige Bewertungen von KernelGPT haben vielversprechende Ergebnisse in verschiedenen Aspekten gezeigt, wie der Anzahl der für Treiber generierten Spezifikationen, die zuvor keine hatten, und der Qualität dieser Spezifikationen im Vergleich zu bestehenden Basismethoden. KernelGPT konnte mehr Zeilen des Kernels mit seinen generierten Spezifikationen abdecken und ausserdem mehrere neue Bugs entdecken, die von standardmässigen Fuzzern nicht erkannt wurden.
Fazit
KernelGPT stellt einen bedeutenden Fortschritt im Einsatz von grossen Sprachmodellen für Kernel-Fuzzing dar. Durch die Automatisierung der Erstellung von syscall-Spezifikationen hat es das Potenzial, die Erkennung von Kernel-Bugs und -Schwachstellen zu verbessern. Die ersten Ergebnisse deuten darauf hin, dass dieser Ansatz für zukünftige Forschung und Anwendungen im Bereich Kernel-Tests und Sicherheit von Vorteil sein könnte. Das Team hinter KernelGPT freut sich darauf, die generierten Spezifikationen in bestehende Projekte zu integrieren, was die Bedeutung und Effektivität dieser neuen Methode hervorhebt.
Zukünftige Arbeiten
Während der aktuelle Fokus auf der Verbesserung von Spezifikationen für Treiber liegt, gibt es grosses Potenzial für weitere Anwendungen von KernelGPT. Zukünftige Forschungen könnten sich mit zusätzlichen Gerätetypen befassen, das Verständnis des Modells für komplexe Szenarien verbessern und den Prozess der Spezifikationsgenerierung weiter verfeinern. Es könnte auch zur Entwicklung fortschrittlicherer Fuzzing-Tools führen, die diese Spezifikationen für bessere Testergebnisse nutzen. Die Erforschung des Kernel-Fuzzings mit grossen Sprachmodellen hat das Potenzial, Betriebssysteme sicherer und zuverlässiger für alle zu machen.
Titel: KernelGPT: Enhanced Kernel Fuzzing via Large Language Models
Zusammenfassung: Bugs in operating system kernels can affect billions of devices and users all over the world. As a result, a large body of research has been focused on kernel fuzzing, i.e., automatically generating syscall (system call) sequences to detect potential kernel bugs or vulnerabilities. Kernel fuzzing aims to generate valid syscall sequences guided by syscall specifications that define both the syntax and semantics of syscalls. While there has been existing work trying to automate syscall specification generation, this remains largely manual work, and a large number of important syscalls are still uncovered. In this paper, we propose KernelGPT, the first approach to automatically synthesizing syscall specifications via Large Language Models (LLMs) for enhanced kernel fuzzing. Our key insight is that LLMs have seen massive kernel code, documentation, and use cases during pre-training, and thus can automatically distill the necessary information for making valid syscalls. More specifically, KernelGPT leverages an iterative approach to automatically infer the specifications, and further debug and repair them based on the validation feedback. Our results demonstrate that KernelGPT can generate more new and valid specifications and achieve higher coverage than state-of-the-art techniques. So far, by using newly generated specifications, KernelGPT has already detected 24 new unique bugs in Linux kernel, with 12 fixed and 11 assigned with CVE numbers. Moreover, a number of specifications generated by KernelGPT have already been merged into the kernel fuzzer Syzkaller, following the request from its development team.
Autoren: Chenyuan Yang, Zijie Zhao, Lingming Zhang
Letzte Aktualisierung: 2024-11-24 00:00:00
Sprache: English
Quell-URL: https://arxiv.org/abs/2401.00563
Quell-PDF: https://arxiv.org/pdf/2401.00563
Lizenz: https://creativecommons.org/licenses/by/4.0/
Änderungen: Diese Zusammenfassung wurde mit Unterstützung von AI erstellt und kann Ungenauigkeiten enthalten. Genaue Informationen entnehmen Sie bitte den hier verlinkten Originaldokumenten.
Vielen Dank an arxiv für die Nutzung seiner Open-Access-Interoperabilität.