Loading…
Thumbnail Image

Compiler assisted vulnerability assessment

Shastry, Bhargava

With computer software pervading every aspect of our lives, vulnerabilities pose an active threat. Moreover, with shorter software development cycles and a security-as-an-afterthought mindset, vulnerabilities in shipped code are inevitable. Therefore, recognizing and fixing vulnerabilities has gained in importance. At the same time, there is a demand for methods to diagnose vulnerabilities within the software development process. This dissertation introduces compiler assisted vulnerability assessment, a novel approach that brings together techniques from program analysis and software testing for recognizing vulnerabilities as software is written. The main idea behind our approach is to leverage compile-time analysis to abstract program information that is relevant for vulnerability assessment from source code. Our analysis is targeted at an in-memory code representation that exposes program syntax and semantics, making it both fast and precise. We show that our approach not only enables identification of well-studied vulnerability classes such as buffer overflows but also assists software testing and regression analysis. To this end, we develop three different methods for software vulnerability assessment, namely, a method to identify vulnerabilities spread across multiple source files, a method to infer the input format of parsing applications to test them more effectively, and a method to perform vulnerability template matching from fuzzer crashes. These methods address distinct tasks encountered by security practitioners on a regular basis. In doing so, they show how program-centric analyses and input-centric testing can complement each other towards vulnerability assessment. We evaluate our methods on popular open-source software (OSS), quantifying their benefit in terms of number of new vulnerabilities exposed, time to expose vulnerabilities, and test coverage improvement. Our tools have found tens of zero-day vulnerabilities in production software such as Open vSwitch and tcpdump, and improved test coverage by 10–15%. In controlled settings, they have speeded up the time to vulnerability exposure by an order of magnitude. Our work shows that compiler assisted analysis has the potential to reduce the likelihood of vulnerabilities propagating to production software. More importantly, it shows that static program analysis holds promise for advancing the state-of-the-art in vulnerability assessment.
Computersoftware durchdringt mittlerweile beinahe jeden Aspekt des alltäglichen Lebens. Dies lässt Schwachstellen in Computersoftware zu einer aktiven Bedrohung werden. Darüber hinaus sind Schwachstellen durch kürzere Softwareentwicklungszyklen und durch Entwicklungsprozesse, in denen Sicherheit als nachträgliche und nebensächliche Adjustierung betrachtet wird, unvermeidbar. Daher hat das Erkennen und Beheben von Schwachstellen an Bedeutung gewonnen. Gleichzeitig besteht Bedarf an Methoden zur Diagnose von Schwachstellen innerhalb des Softwareentwicklungsprozesses selbst. Diese Dissertation stellt compilergestützte Schwachstellenanalyse vor einen neuartigen Ansatz, welcher Techniken aus der statischen Programmanalyse und dem Software Testing kombiniert, um Schwachstellen noch während des Entwicklungsprozesses zu erkennen. Die Grundidee des Ansatzes ist hierbei, compile-time Analyse zu nutzen um diejenigen Informationen über das Programm zu extrahieren, die relevant für die Schwachstellenanalyse des Quellcodes sind. Ziel unserer Analyse ist eine in-memory Repräsentation des Codes, welche Syntax und Semantik enthält und dadurch sowohl schnell als auch präzise ist. Wir zeigen auf, dass unser Ansatz nicht nur die Analyse von bereits gut erforschten Schwachstellenarten wie zum Beispiel Pufferüberläufen ermöglicht, sondern auch Software Testing und Regressionsanalyse unterstützt. Hierzu entwickeln wir drei Methoden zur Schwachstellenanalyse: 1) Eine Methode um Schwachstellen, welche über mehrere Quellcode-Dateien verteilt sind, zu finden, 2) eine Methode zur Ermittlung des Eingabeformats von Parser Applikationen, wodurch diese effizienter getestet werden können und 3) eine Methode, um Vulnerability template matching von durch Fuzzing identifizierten Abstürzen durchzuführen. Diese Methoden helfen bei der Lösung von verschiedenartigsten Problemstellungen, welche von Sicherheitsexperten täglich angetroffen werden. Insgesamt zeigen die Methoden so, wie sich programmzentrierte Analysen und eingabezentrierte Tests zum Zweck der Schwachstellenanalyse gegenseitig ergänzen können. Wir evaluieren unsere Methoden anhand von populärer Open-Source-Software (OSS). Dabei quantifizieren wir ihren Nutzen hinsichtlich entdeckter Schwachstellen, der Dauer bis zur Entdeckung der Schwachstelle sowie der Verbesserung der Testabdeckung. Unsere Tools haben in Produktionssoftware, wie z.B. Open vSwitch und tcpdump, Dutzende von Zero-Day-Schwachstellen gefunden und die Testabdeckung um 10-15% verbessert. In kontrollierten Testumgebungen haben sie die Zeit bis zum Aufdecken der Schwachstelle um eine Größenordnung verkürzt. Unsere Arbeit zeigt, dass Compiler-gestützte Analyse das Potenzial hat, die Wahrscheinlichkeit des Verbleibens von Schwachstellen in Produktionssoftware zu verringern. Vor allem zeigt diese Arbeit, auch dass die statische Programmanalyse eine vielversprechende Technik ist, um den aktuellen Stand der Schwachstellenanalyse weiter auszubauen.