Static Detection of Complex Vulnerabilities in Modern PHP Applications
Total Page:16
File Type:pdf, Size:1020Kb
Static Detection of Complex Vulnerabilities in Modern PHP Applications Dissertation zur Erlangung des Grades eines Doktor-Ingenieurs der Fakultät für Elektrotechnik und Informationstechnik an der Ruhr-Universität Bochum vorgelegt von Johannes Dahse aus Jena Bochum, 02.02.2016 Gutachter: Prof. Dr. Thorsten Holz (Ruhr-Universität Bochum) Zweitgutachter: Prof. Dr. Andrei Sabelfeld (Chalmers University of Technology) Tag der mündlichen Prüfung: 11. März 2016 Abstract Modern websites evolved to interactive applications which process confidential user data, such as credit card numbers, passwords, and private messages, on a daily basis. This sensitive data requires reliable protection from cyber criminals who exploit vulnerabilities in the applications’ source code. Particularly web applications developed in PHP, the most popular server-side scripting language on the Web, are prone to security vulnerabilities. Although the developers’ awareness is rising for the traditional types of vulnerabilities, such as cross-site scripting and SQL injection, they still persist due to faulty security mechanisms or intricate language features. Besides, more complex vulnerability types, such as second-order vulnerabilities or PHP object injections, are comparatively unknown and actively exploited by attackers. Manual detection of complex vulnerabilities in modern PHP applications with hundreds of thousands lines of code is expensive, time-consuming, and requires deep security knowl- edge. With the help of static code analysis, security vulnerabilities can be detected in an automated fashion and subsequently remediated. However, previous work in this area focused only on the detection of a few traditional vulnerability types and dismissed more complex occurrences or types of vulnerabilities. Additionally, these approaches do not scale to large code bases or do not support major language features. In this thesis, we present novel techniques designed for the efficient and precise static analysis of PHP code in order to automatically detect traditional and complex security vulnerabilities. A comprehensive configuration and simulation of over 1 200 PHP built- in features allows us to precisely model the highly dynamic PHP language. By creating block and function summaries, we are able to efficiently perform a backwards-directed taint analysis for 36 different types of vulnerabilities. More specifically, our string analysis is the first to evaluate the interaction between different types of security mechanisms, encodings, sources, sinks, markup contexts, and PHP settings. Furthermore, we are the first to detect second-order vulnerabilities and related multi-step exploits. Based on our novel forwards-directed object analysis, we are the first to automatically generate attack sequences used against PHP object injection vulnerabilities. We implemented a prototype based on our approach. Our evaluation shows that it is capable of finding severe and complex vulnerabilities in modern real-world applications, previously missed by other approaches: in total, we detected 321 previously unknown vulnerabilities in 23 popular PHP applications, for example in Joomla, phpBB, and os- Commerce. Finally, we used our prototype to study prevalent practices of developers and attackers. We first studied how developers utilize security mechanisms in practice regarding different markup contexts, and which common pitfalls exist. Then, we analyzed features and backdoors in popular PHP shells used by attackers. i Zusammenfassung Moderne Webseiten haben sich zu interaktiven Applikationen entwickelt, die täglich ver- trauliche Benutzerdaten (z. B. Kreditkartendaten und Passwörter) verarbeiten. Diese sen- siblen Daten erfordern verlässlichen Schutz vor Angreifern, die Sicherheitsschwachstellen im Programmcode der Applikation ausnutzen. Vor allem Webapplikationen, die in der po- pulärsten serverseitigen Skriptsprache PHP entwickelt wurden, sind anfällig für Schwach- stellen. Trotz einer erhöhten Sensibilisierung der Entwickler für traditionelle Schwachstel- lentypen, wie z. B. Cross-Site Scripting und SQL Injection, treten diese weiterhin durch fehleranfällige Sicherheitsmechanismen oder missverständliche Spracheigenschaften auf. Zudem sind komplexere Schwachstellentypen, wie z. B. Second-Order oder PHP Object Injection Schwachstellen, vergleichsweise unbekannt und werden aktiv ausgenutzt. Eine manuelle Suche nach komplexen Schwachstellen in modernen PHP-Applikationen mit mehreren hunderttausend Zeilen Code ist teuer, zeitaufwändig und erfordert Spezial- wissen. Mit Hilfe von statischer Codeanalyse können Schwachstellen automatisiert erkannt werden, um sie anschließend zu beseitigen. Bisherige Ansätze in diesem Bereich konzentrie- ren sich jedoch nur auf die Erkennung von einigen traditionellen Schwachstellentypen und verfehlen kompliziertere Ausprägungen oder Typen von Schwachstellen. Außerdem sind die Ansätze nicht für größere Anwendungen skalierbar und wichtige Spracheigenschaften werden nicht unterstützt. In dieser Dissertation werden neuartige Methoden für die effiziente und präzise Analy- se von PHP-Code präsentiert, die es ermöglichen, sowohl traditionelle als auch komplexe Sicherheitsschwachstellen automatisiert zu erkennen. Eine umfassende Konfiguration und Simulation von über 1.200 PHP-Eigenschaften erlaubt es, die hochdynamische Sprache PHP präzise zu modellieren. Durch die Erstellung von Block- und Funktionssummari- en, kann eine effiziente Taint-Analyse für 36 verschiedene Schwachstellentypen durchge- führt werden. Dabei wird mit Hilfe einer String-Analyse erstmalig das Zusammenspiel von Sicherheitsmechanismen, Kodierungen, Eingaben, Operationen, Markup-Kontexten und PHP-Einstellungen berücksichtigt. Weiterhin werden bisher unauffindbare Second-Order Schwachstellen und verwandte Multi-Step Exploits detektiert. Durch eine neuartige vor- wärts gerichtete Objektanalyse können auch erstmalig mögliche Angriffsvektoren für PHP Object Injection Schwachstellen automatisch generiert werden. Die neuen Analysetechniken wurden in einem Prototypen implementiert. Eine Evaluie- rung zeigt, dass dieser in der Lage ist, kritische und komplexe Schwachstellen in modernen Applikationen aufzuspüren, die von bisherigen Ansätzen nicht erkannt werden: insgesamt wurden 321 bisher unbekannte Schwachstellen in 23 weitverbreiteten PHP-Applikationen detektiert, u. a. in Joomla, phpBB und osCommerce. Abschließend wurden mit Hilfe des Prototypen gängige Vorgehensweisen von Entwicklern und Angreifern studiert. Zum einen wurde analysiert, welche Sicherheitsmechanismen von Entwicklern für welche Markup- Kontexte in der Praxis eingesetzt werden, und welche Fallstricke existieren. Zum anderen wurde untersucht, welche Funktionalitäten und Hintertüren Angreifer in populären PHP- Shells nutzen. iii Acknowledgments First and foremost, I would like to thank my supervisor Prof. Dr. Thorsten Holz for his guidance, support, and scientific insight throughout the last three years. I feel greatly privileged for receiving the opportunity to freely work on a topic of my choice in an amiable atmosphere. Likewise, my deep appreciation goes to Professor Andrei Sabelfeld for his valuable time and review. I was blessed with a great research environment at the Chair for Systems Security and with wonderful and talented colleagues. In particular, I would like to thank Felix Schuster, Jannik Pewny, Behrad Garmany, Robert Gawlik, Thomas Hupperich, and Johannes Hoffmann for an unforgettable, grandiose time! Furthermore, I am largely indebted to Martin Bednorz, Hendrik Buchwald, Nicolas Golubovic, Nikolai Krein, and Dario Weißer for their hard work and excellent contribution to the project. For the continuous advice and assistance, I would like to extend my sincerest thanks and appreciation to Carsten Willems and Mario Heiderich. These fine gentlemen are truly inspiring and keep me motivated. Moreover, I wholeheartedly express my gratitude to my family for their blessing, en- couragement, and participation at all times. Finally, the greatest and deepest gratitude goes to Emina. Her love, understanding, help, and patience made this thesis possible. v Contents 1 Introduction1 1.1 Motivation....................................1 1.2 Topic of this Work................................2 1.3 Contributions...................................4 1.4 List of Publications................................5 1.5 Outline......................................7 2 Background on Vulnerabilities in PHP Applications9 2.1 Intricacies of the PHP language......................... 10 2.2 Taint-style Vulnerabilities............................ 14 2.2.1 Cross-Site Scripting........................... 14 2.2.2 SQL Injection............................... 15 2.2.3 File Inclusion............................... 15 2.2.4 Other Vulnerability Types........................ 16 2.3 Security Mechanisms............................... 16 2.3.1 Generic Input Sanitization........................ 17 2.3.2 Context-Sensitive Input Sanitization.................. 18 2.3.3 Generic Input Validation........................ 20 2.3.4 Context-Sensitive Input Validation................... 22 2.3.5 Path Sensitivity............................. 23 2.4 Second-order Vulnerabilities and Multi-step Exploits............. 25 2.4.1 Persistent Data Stores.......................... 25 2.4.2 Second-order Vulnerabilities....................... 27 2.4.3 Multi-Step Exploits........................... 29 2.5 PHP Object Injection.............................. 30 2.5.1 Magic Methods in PHP........................