Psyzkaller: Learning from Historical and On-the-Fly Execution Data for Smarter Seed Generation in OS kernel Fuzzing
Liu, Zhang, Cheng et al.
Fuzzing has become a cornerstone technique for uncovering vulnerabilities and enhancing the security of OS kernels. However, state-of-the-art kernel fuzzers, including the de facto standard Syzkaller, struggle to generate valid syscall sequences that respect implicit Syscall Dependency Relations (SDRs). Consequently, many generated seeds either fail kernel validation or cannot penetrate deep execution paths, resulting in significant inefficiency.
We hypothesize that SDRs can be effectively learned from both historic and present kernel execution data, and that incorporating these learned relations into fuzzing can substantially improve seed validity and diversity. To validate this, we propose an approach that utilizes the N-gram model to mine SDRs from the Dongting dataset-one of the largest Linux kernel execution datasets available-as well as from execution traces collected on the fly during fuzzing. The resulting model is used to continuously augment the Choice Table of Syzkaller to improve its seed generation and demonstrably increases the Shannon Entropy of the Choice Table throughout fuzzing, reflecting more empirically-grounded choices in expanding syscall sequences into valid and diverse seeds. In addition, we introduce a Random Walk strategy that instructs Syzkaller to construct seeds in a bidirectional manner to further diversify the generated seeds.
We implement our approach in a prototype, Psyzkaller, built on top of Syzkaller. Experiments on three representative Linux kernel versions show that Psyzkaller improves Syzkaller's code coverage by 4.6%-7.0% in 48-hour fuzzing, while triggering 110.4%-187.2% more crashes. Moreover, our investigation shows that Psyzkaller discovered eight previously unknown kernel vulnerabilities, compared to only one found by Syzkaller.
academic
Psyzkaller: Learning from Historical and On-the-Fly Execution Data for Smarter Seed Generation in OS kernel Fuzzing
Fuzzing hat sich als Grundlagentechnologie zur Entdeckung von Betriebssystem-Kernel-Schwachstellen und zur Verbesserung der Sicherheit etabliert. Allerdings haben hochmoderne Kernel-Fuzzer, einschließlich des De-facto-Standards Syzkaller, Schwierigkeiten bei der Generierung effektiver Systemaufrufssequenzen, die implizite Systemaufrufs-Abhängigkeitsbeziehungen (SDRs) respektieren. Folglich schlagen viele generierte Seeds entweder bei der Kernel-Validierung fehl oder können Ausführungspfade nicht tiefgreifend durchdringen, was zu erheblicher Ineffizienz führt. Dieses Papier geht davon aus, dass SDRs effektiv aus historischen und aktuellen Kernel-Ausführungsdaten gelernt werden können und dass die Einbeziehung dieser gelernten Beziehungen in das Fuzzing die Seed-Validität und -Vielfalt erheblich verbessern kann. Um dies zu überprüfen, schlagen die Autoren eine Methode vor, die N-gram-Modelle nutzt, um SDRs aus dem DongTing-Datensatz (einem der größten Linux-Kernel-Ausführungsdatensätze) sowie aus während des Fuzzing-Prozesses in Echtzeit erfassten Ausführungsspuren zu extrahieren.
Der Betriebssystem-Kernel ist eine kritische Komponente moderner Computersysteme, und eine Sicherheitskompromittierung auf Kernel-Ebene ermöglicht es Angreifern, die vollständige Kontrolle über das System zu erlangen. Die Kernprobleme, mit denen aktuelle Kernel-Fuzzer konfrontiert sind, sind:
Schwierigkeiten bei der Identifizierung von Systemaufrufs-Abhängigkeitsbeziehungen (SDRs): Viele generierte Systemaufrufssequenzen (SCSs) sind ungültig, da sie SDRs verletzen
Ineffiziente Seed-Generierung: Ungültige Testfälle schlagen frühzeitig fehl und tragen wenig zur Code-Exploration bei
Schwer erreichbare tiefe Ausführungspfade: Mangelndes Verständnis für semantische Einschränkungen zwischen Systemaufrufen
Die Autoren schlagen eine neue Perspektive vor, SDRs direkt aus Kernel-Ausführungsspuren zu lernen und dabei die umfassende Abdeckung historischer Daten mit der Adaptivität des Online-Lernens zu verbinden.
Vorschlag einer neuen Strategie zur Kombination historischer und Echtzeit-Kernel-Ausführungsdaten zum Lernen von SDRs, die sowohl umfassende Abdeckung als auch Kernel-Versions-Adaptivität bietet
Entwicklung des Psyzkaller-Prototyps, der auf Bigram basierende SDR-Lernvorgänge und RandomWalk-Strategien in den Syzkaller-Workflow integriert
Vortraining des Bigram-Modells mit dem größten historischen Linux-Kernel-Ausführungsdatensatz (DongTing)
Validierung der Wirksamkeit auf drei repräsentativen Linux-Kernel-Versionen, die Überlegenheit bei Branch-Abdeckung und Schwachstellenerkennung demonstriert
Eingabe: Historischer Kernel-Ausführungsdatensatz C und Echtzeit-Fuzzing-Ergebnisse
Ausgabe: Erweiterte Choice Table zur Anleitung effektiverer Systemaufrufssequenz-Generierung
Ziel: Verbesserung der Seed-Validität, -Vielfalt und Schwachstellenerkennungsfähigkeit
Methoden zur Extraktion von Systemaufrufs-Abhängigkeitsbeziehungen
Gesamtbewertung: Dies ist ein hochqualitatives Forschungspapier im Bereich Systemsicherheit, das eine innovative datengesteuerte Methode zur Lösung kritischer Probleme beim Kernel-Fuzzing vorschlägt. Das Experimentdesign ist rigoros, die Ergebnisse sind überzeugend und das Papier hat bedeutende akademische und praktische Relevanz.