TU Darmstadt / ULB / TUprints

Efficient Dependability Assessment of Systems Software

Coppik, Nicolas (2020)
Efficient Dependability Assessment of Systems Software.
Technische Universität Darmstadt
doi: 10.25534/tuprints-00011829
Ph.D. Thesis, Primary publication

[img]
Preview
Text
thesis-coppik.pdf
Copyright Information: In Copyright.

Download (1MB) | Preview
Item Type: Ph.D. Thesis
Type of entry: Primary publication
Title: Efficient Dependability Assessment of Systems Software
Language: English
Referees: Hollick, Prof. Dr. Matthias ; Suri, Prof. Neeraj ; Katzenbeisser, Prof. Dr. Stefan
Date: 2020
Place of Publication: Darmstadt
Date of oral examination: 28 May 2020
DOI: 10.25534/tuprints-00011829
Abstract:

Computing systems and the various services and applications they enable have become pervasive in our daily lives. We increasingly rely on these complex systems, including many systems built on general purpose hardware and software, to consistently provide important functionality. As we grow more and more dependent on such systems, we need to ensure that they are, in fact, dependable and that we can trust their ability to consistently provide the functionality we expect from them. Therefore, we need techniques for assessing and improving the dependability of such systems. To be practical, such techniques must not only be applicable to complex software systems, they need to scale with their increasing sizes. Common approaches to improve the dependability of software systems include testing techniques to find faults and dependability issues as well as techniques intended to predict the impact of residual software faults. Software Fault Injection (SFI) is an approach that can be useful in both contexts, for finding dependability shortcomings and estimating the impact of residual faults, whereas most other testing techniques, such as fuzzing, are primarily used to find faults. Many approaches to improve software dependability suffer from scalability issues and are difficult to apply to large, complex software systems, and particularly to systems software, such as operating system kernels. With this general background in mind, this thesis aims to improve the efficiency and precision of SFI techniques for systems software, as well as to develop novel guidance mechanisms for feedback-driven fuzzing. We develop a technique to trace error propagation in monolithic operating system kernels, apply it to modules from the widely used Linux kernel, and show that conventional oracles for SFI tests can misclassify a substantial fraction of seemingly successful executions. We then focus on accelerating SFI experiments since, due to increasing software complexity, comprehensive SFI testing requires an increasing amount of test executions, which in turn leads to long test latencies. Starting with user mode software, we develop a novel execution model that uses static and dynamic analysis to avoid redundant code re-execution and facilitates parallelization. Since long SFI test latencies are particularly problematic for systems which may require additional instrumentation to trace error propagation, we then develop a related approach to accelerate SFI experiments for kernel code, and apply it to the Linux kernel using error propagation analysis instrumentation and achieve substantial speedups. Finally, we develop a novel guidance mechanism for feedback-driven fuzzing that makes use of input-dependent memory accesses in the target program.

Alternative Abstract:
Alternative AbstractLanguage

Die vielfältigen Dienste und Anwendungen, die durch moderne Computersysteme ermöglicht werden, sind in unserem Alltag allgegenwärtig. Wir verlassen uns zunehmend auf komplexe Computersysteme um wichtige alltägliche Funktionen bereitzustellen. Dabei handelt es sich oft um Systeme, deren Soft- und Hardware nicht spezialisiert, sondern aus Standardkomponenten konstruiert ist. Da wir uns mehr und mehr auf solche Systeme verlassen, müssen wir sicherstellen, dass sie zuverlässig sind und die von ihnen erwartete Funktionalität durchgehend bereitstellen können. Folglich benötigen wir Techniken, die geeignet sind, die Zuverlässigkeit solcher Systeme zu überprüfen und zu verbessern. Praxistaugliche Techniken müssen sowohl auf komplexe Softwaresysteme anwendbar sein als auch mit deren zunehmender Größe skalieren. Verbreitete Ansätze zur Verbesserung der Zuverlässigkeit von Softwaresystemen sind Testverfahren, mit denen Fehler und Zuverlässigkeitsmängel gefunden werden können, sowie Verfahren zur Vorhersage der möglichen Auswirkungen im System verbleibender Fehler. Softwarefehlerinjektionstechniken (SFI-Techniken) können in beiden Kontexten genutzt werden, sowohl um Zuverlässigkeitsmängel zu finden als auch um die Auswirkungen verbleibender Fehler abzuschätzen. Andere Techniken, wie Fuzzing, dienen in erster Linie dazu, Fehler zu finden. Viele Verfahren zur Verbesserung der Softwarezuverlässigkeit leiden unter Skalierbarkeitsproblemen und sind schwer auf große, komplexe Softwaresysteme, insbesondere auf Systemsoftware wie den Betriebssystemkernel, anwendbar. Vor diesem Hintergrund zielt diese Dissertation darauf ab, die Effizienz und Präzision von SFI-Techniken für Systemsoftware zu verbessern sowie neue Steuerungsmechanismen für feedbackbasierte Fuzzing-Verfahren zu entwickeln. Wir entwicklen ein Verfahren zur Nachverfolgung der Ausbreitung von Fehlerauswirkungen in monolithischen Betriebssystemen, wenden es auf Module aus dem weit verbreiteten Linux-Kernel an und zeigen, dass konventionelle Verfahren einen beträchtlichen Anteil der anscheinend erfolgreichen SFI-Testausführungen falsch klassifizieren. Da mit zunehmender Softwarekomplexität gerade auch SFI-Techniken unter Skalierbarkeitsproblemen leiden, wenden wir uns dann der Beschleunigung von SFI-Tests zu. Zunächst entwickeln wir ein neuartiges Ausführungsmodell für im Benutzer-Modus laufende Software, welches, unter Verwendung von statischer und dynamischer Analyse, die wiederholte, redundante Ausführung von Programmcode vermeidet und Parallelisierung begünstigt.

Da lange SFI-Tests für Systeme, welche zusätzliche Instrumentierung zur Nachverfolgung der Auswirkungen von Fehlern benötigen, ein besonders großes Problem sind, entwickeln wir einen Ansatz, der auch SFI-Tests für Betriebssysteme beschleunigen kann. Wir wenden diesen Ansatz auf instrumentierten Code aus dem Linux-Kernel an und erreichen eine erhebliche Verkürzung der SFI-Testdauer. Zuletzt entwickeln wir einen neuartigen Mechanismus zur Steuerung von feedbackbasierten Fuzzing-Verfahren, welcher eingabeabhängige Speicherzugriffe im getesteten Programm nutzt.

German
URN: urn:nbn:de:tuda-tuprints-118290
Classification DDC: 000 Generalities, computers, information > 004 Computer science
Divisions: 20 Department of Computer Science > Dependable Embedded Systems & Software
Date Deposited: 01 Jul 2020 08:21
Last Modified: 09 Jul 2020 06:35
URI: https://tuprints.ulb.tu-darmstadt.de/id/eprint/11829
PPN: 467603537
Export:
Actions (login required)
View Item View Item