Kernelsicherheit mit WinkFuzz verbessern
WinkFuzz verbessert das Kernel-Fuzzing, indem es die Abhängigkeiten von Systemaufrufen analysiert, um die Sicherheitstests zu optimieren.
― 7 min Lesedauer
Inhaltsverzeichnis
Schwächen in Software zu finden, ist super wichtig, um Systeme sicher zu halten. Ein Weg, das zu machen, ist Fuzzing, eine Methode, die Software testet, indem sie ihr zufällige Daten schickt, um zu sehen, wie sie reagiert. Diese Technik ist besonders wichtig für Betriebssysteme, wo Bugs zu grossen Problemen wie Abstürzen oder sogar Sicherheitslücken führen können. Windows, ein weit verbreitetes Betriebssystem, hat seinen Kernel, der der Kernteil ist, der alles steuert. Fuzzing des Windows-Kernels kann helfen, ernsthafte Bugs zu finden, die von Angreifern ausgenutzt werden könnten.
Warum den Kernel fuzzen?
Der Kernel eines Betriebssystems ist wichtig, weil er verwaltet, wie die Software mit der Hardware interagiert. Sicherheitsanfälligkeiten im Kernel können zu erheblichen Sicherheitsrisiken führen. Wenn zum Beispiel ein Bug im Kernel unbefugten Zugriff auf Dateien erlaubt, kann das das gesamte System gefährden. Deswegen ist es wichtig, diese Bugs zu finden und zu beheben, um die Systemsicherheit zu gewährleisten.
Den Kernel zu fuzzen, ist nicht so einfach wie das Fuzzing normaler Anwendungen aus ein paar Gründen. Erstens sind viele Kernelsysteme, besonders in Windows, nicht Open Source. Das bedeutet, dass der Quellcode nicht zur Analyse verfügbar ist. Deshalb funktionieren traditionelle Fuzzing-Methoden, die auf dem Verständnis des Codes basieren, möglicherweise nicht so effektiv.
Aktuelle Herausforderungen beim Kernel-Fuzzing
Viele bestehende Fuzzing-Techniken benötigen Zugang zum Quellcode oder spezifische Informationen darüber, wie der Kernel funktioniert. Wenn diese Informationen nicht verfügbar sind, was oft bei geschlossenen Systemen wie Windows der Fall ist, wird es viel schwieriger, effektive Fuzz-Tests durchzuführen. Ausserdem sind die Systemaufrufe (die Methoden, die Programme verwenden, um mit dem Kernel zu kommunizieren) in Windows nicht gut dokumentiert. Dieser Mangel an Dokumentation macht es schwierig zu wissen, welche Aufrufe gemacht werden müssen und wie man sie richtig strukturiert.
Ein weiteres Problem ist der Umgang mit den Abhängigkeiten zwischen Systemaufrufen. Ein Systemaufruf hängt oft von den Ergebnissen vorheriger Aufrufe ab, was bedeutet, dass, wenn ein Aufruf fehlschlägt, nachfolgende Aufrufe ebenfalls fehlschlagen könnten. Diese Kette von Abhängigkeiten kompliziert den Fuzzing-Prozess und macht es notwendig, sie bei der Gestaltung von Tests zu berücksichtigen.
Unser Ansatz für Kernel-Fuzzing
Um die genannten Probleme anzugehen, haben wir einen neuen Ansatz entwickelt, der WinkFuzz heisst. Diese Methode konzentriert sich darauf, die Systemaufrufe von Anwendungen aufzuzeichnen und zu analysieren, wie sie voneinander abhängen. WinkFuzz zielt darauf ab, diese Abhängigkeiten zu lernen und sie zu nutzen, um neue Sequenzen von Systemaufrufen zu erstellen, die gegen den Kernel getestet werden können.
Wie WinkFuzz funktioniert
WinkFuzz besteht aus mehreren Schritten:
Dynamisches Syscall-Tracking: Das ist der erste Schritt, bei dem wir eine Anwendung ausführen und alle Systemaufrufe protokollieren, die sie macht. Wir halten die Eingabewerte, Ausgabeergebnisse und Rückgabewerte jeder Anfrage fest. Das ist wichtig, weil es uns hilft zu verstehen, wie verschiedene Aufrufe zueinander stehen.
Abhängigkeitsanalyse: Sobald wir dieses Protokoll haben, ist der nächste Schritt, die Abhängigkeiten zwischen den Aufrufen zu analysieren. Indem wir die Eingabe- und Ausgabegrössen untersuchen, können wir herausfinden, welche Aufrufe von anderen abhängen. Diese Informationen sind wichtig, um neue Aufrufsequenzen zu erstellen.
Modellskript-Wiederherstellung: Nachdem wir die Abhängigkeiten identifiziert haben, stellen wir ein Modellskript wieder her, das die Reihenfolge und Beziehungen der protokollierten Systemaufrufe darstellt. Dieses Skript dient als Grundlage für die Generierung neuer Aufrufe.
Skript-Synthese: Dann erstellen wir neue Syscall-Skripte, indem wir zusätzliche Aufrufe basierend auf den erlernten Abhängigkeiten einfügen. So können wir neue Zustände innerhalb des Kernels erkunden, die mit den ursprünglichen Aufrufen nicht erreichbar waren.
Fuzzing: Schliesslich führen wir die synthetisierten Skripte aus und verändern die Argumente, um verschiedene Testfälle zu generieren. Jedes Mal, wenn eine neue Sequenz läuft, überprüfen wir auf Abstürze oder unerwartetes Verhalten im Kernel.
Die Vorteile von WinkFuzz
WinkFuzz bietet mehrere Vorteile gegenüber traditionellen Fuzzing-Methoden:
Effektive Nutzung von Abhängigkeiten: Durch das Lernen der Beziehung zwischen Systemaufrufen kann WinkFuzz bedeutungsvollere Sequenzen generieren, die wahrscheinlich versteckte Bugs auslösen.
Dynamisches Tracking: Das dynamische Tracking erlaubt eine Echtzeitbeobachtung, wie Anwendungen mit dem Kernel interagieren, was zu zuverlässigeren Daten für die Generierung neuer Tests führt.
Automatisierung: WinkFuzz automatisiert einen Grossteil des Prozesses und reduziert die Notwendigkeit für manuelle Eingriffe bei der Analyse von Syscall-Abhängigkeiten und der Erstellung neuer Skripte.
Evaluation von WinkFuzz
Um zu bewerten, wie gut WinkFuzz funktioniert, haben wir es an mehreren Anwendungen angewendet und die Ergebnisse beobachtet.
Seed-Anwendungen
Wir haben vier verschiedene Anwendungen als Seed-Programme ausgewählt. Diese Anwendungen wurden gewählt, weil sie verschiedene Systemaufrufe generieren und einen breiten Rahmen für Tests bieten.
Ergebnisse
Als wir WinkFuzz ausführen, stellten wir fest, dass es die Anzahl der während der Tests durchgeführten Systemaufrufe erheblich erhöhen konnte. In einem Fall sahen wir eine Steigerung von 70,8 % bei der Gesamtzahl der ausgeführten Systemaufrufe. Diese Erhöhung bedeutet, dass WinkFuzz mehr Kernel-Zustände erkunden kann, als es mit den ursprünglichen Sequenzen möglich wäre.
Wir haben auch die Effizienz des Systems in Bezug auf die benötigte Zeit für jeden der Schritte beim Tracking und der Erstellung von Syscall-Skripten gemessen. Der zeitaufwendigste Schritt war das Tracking, hauptsächlich aufgrund der Notwendigkeit der Benutzerinteraktion mit den Seed-Anwendungen.
Erfolgsquote und entdeckte Abstürze
Während der Fuzzing-Phase konnte WinkFuzz zahlreiche Abstürze entdecken. In den Tests verzeichneten wir eine Erfolgsquote von über 60 % für die neu eingefügten Systemaufrufe. Das zeigt, dass die Mehrheit der neuen Aufrufe erfolgreich ausgeführt werden konnte und zusätzliche Kernel-Zustände erreicht hat.
Interessanterweise wurden über einen Zeitraum von 24 Stunden beim Fuzzing mehrere Abstürze über verschiedene Anwendungen ausgelöst, was zeigt, dass unser Ansatz effektiv Schwächen im Windows-Kernel identifizieren konnte. Die Abstürze variierten je nach Anwendung, wobei einige deutlich mehr generierten als andere, abhängig von ihrem Design und den Arten von Syscalls, die sie aufriefen.
Einschränkungen und zukünftige Arbeiten
Trotz der Erfolge hat WinkFuzz seine Einschränkungen. Eine Herausforderung liegt in der Genauigkeit der während des Tracking-Prozesses gelernten Syscall-Abhängigkeiten. Die Abhängigkeiten können manchmal irreführend sein, was zu erfolglosen Einfügungen führen kann.
Eine weitere Einschränkung ist die Geschwindigkeit des Fuzzings. Während wir eine hohe Injektionsrate von Syscalls erreicht haben, sank die gesamte Fuzzing-Effizienz, wenn man die zusätzlichen Verarbeitungszeiten berücksichtigt. Unsere zukünftige Arbeit wird sich auf die Verbesserung dieses Aspekts konzentrieren, möglicherweise durch Optimierungstechniken oder die Entwicklung eines effizienteren Skripting-Mechanismus für die Durchführung von Fuzzing-Tests.
Ausserdem wollen wir den Prozess der Abhängigkeitsanalyse verfeinern. Durch den Einsatz fortschrittlicherer Techniken für mehrere Aufzeichnungen und Aggregation von Informationen hoffen wir, die Genauigkeit der gelernten Abhängigkeiten zu verbessern.
Fazit
WinkFuzz stellt einen neuen Ansatz für das Fuzzing des Windows-Kernels dar, indem es Syscall-Abhängigkeiten und dynamisches Tracking nutzt. Die Methode zeigt eine signifikante Fähigkeit, die Syscall-Abdeckung zu erhöhen und kritische Kernel-Sicherheitsanfälligkeiten zu identifizieren. Während wir WinkFuzz weiter verfeinern und seine Einschränkungen angehen, hoffen wir, einen Beitrag zum breiteren Bereich der Cybersicherheit zu leisten, indem wir die Werkzeuge verbessern, die zum Schutz von Systemen vor Schwächen zur Verfügung stehen.
Durch kontinuierliche Entwicklung und Forschung wollen wir Fuzzing zugänglicher und effektiver machen, um letztendlich sicherere Computerumgebungen für alle zu schaffen.
Titel: model-based script synthesis for fuzzing
Zusammenfassung: Kernel fuzzing is important for finding critical kernel vulnerabilities. Close-source (e.g., Windows) operating system kernel fuzzing is even more challenging due to the lack of source code. Existing approaches fuzz the kernel by modeling syscall sequences from traces or static analysis of system codes. However, a common limitation is that they do not learn and mutate the syscall sequences to reach different kernel states, which can potentially result in more bugs or crashes. In this paper, we propose WinkFuzz, an approach to learn and mutate traced syscall sequences in order to reach different kernel states. WinkFuzz learns syscall dependencies from the trace, identifies potential syscalls in the trace that can have dependent subsequent syscalls, and applies the dependencies to insert more syscalls while preserving the dependencies into the trace. Then WinkFuzz fuzzes the synthesized new syscall sequence to find system crashes. We applied WinkFuzz to four seed applications and found a total increase in syscall number of 70.8\%, with a success rate of 61\%, within three insert levels. The average time for tracing, dependency analysis, recovering model script, and synthesizing script was 600, 39, 34, and 129 seconds respectively. The instant fuzzing rate is 3742 syscall executions per second. However, the average fuzz efficiency dropped to 155 syscall executions per second when the initializing time, waiting time, and other factors were taken into account. We fuzzed each seed application for 24 seconds and, on average, obtained 12.25 crashes within that time frame.
Autoren: Zian Liu, Chao Chen, Muhammad Ejaz Ahmed, Jun Zhang, Dongxi Liu
Letzte Aktualisierung: 2023-08-08 00:00:00
Sprache: English
Quell-URL: https://arxiv.org/abs/2308.04115
Quell-PDF: https://arxiv.org/pdf/2308.04115
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.