Automated XSS Vulnerability Detection Through Context Aware Fuzzing and Dynamic Analysis
Total Page:16
File Type:pdf, Size:1020Kb
Die approbierte Originalversion dieser Diplom-/ Masterarbeit ist in der Hauptbibliothek der Tech- nischen Universität Wien aufgestellt und zugänglich. http://www.ub.tuwien.ac.at The approved original version of this diploma or master thesis is available at the main library of the Vienna University of Technology. http://www.ub.tuwien.ac.at/eng Automated XSS Vulnerability Detection Through Context Aware Fuzzing and Dynamic Analysis DIPLOMARBEIT zur Erlangung des akademischen Grades Diplom-Ingenieur im Rahmen des Studiums Software Engineering & Internet Computing eingereicht von Tobias Fink, BSc Matrikelnummer 1026737 an der Fakultät für Informatik der Technischen Universität Wien Betreuung: Privatdoz. Mag.rer.soc.oec. Dipl.-Ing. Dr.techn. Edgar Weippl Mitwirkung: Dipl.-Ing. Dr.techn. Georg Merzdovnik, BSc Wien, 21. Juni 2018 Tobias Fink Edgar Weippl Technische Universität Wien A-1040 Wien Karlsplatz 13 Tel. +43-1-58801-0 www.tuwien.ac.at Automated XSS Vulnerability Detection Through Context Aware Fuzzing and Dynamic Analysis DIPLOMA THESIS submitted in partial fulfillment of the requirements for the degree of Diplom-Ingenieur in Software Engineering & Internet Computing by Tobias Fink, BSc Registration Number 1026737 to the Faculty of Informatics at the TU Wien Advisor: Privatdoz. Mag.rer.soc.oec. Dipl.-Ing. Dr.techn. Edgar Weippl Assistance: Dipl.-Ing. Dr.techn. Georg Merzdovnik, BSc Vienna, 21st June, 2018 Tobias Fink Edgar Weippl Technische Universität Wien A-1040 Wien Karlsplatz 13 Tel. +43-1-58801-0 www.tuwien.ac.at Erklärung zur Verfassung der Arbeit Tobias Fink, BSc Windmühlgasse 22/20, 1060 Wien Hiermit erkläre ich, dass ich diese Arbeit selbständig verfasst habe, dass ich die verwen- deten Quellen und Hilfsmittel vollständig angegeben habe und dass ich die Stellen der Arbeit – einschließlich Tabellen, Karten und Abbildungen –, die anderen Werken oder dem Internet im Wortlaut oder dem Sinn nach entnommen sind, auf jeden Fall unter Angabe der Quelle als Entlehnung kenntlich gemacht habe. Wien, 21. Juni 2018 Tobias Fink v Kurzfassung Cross Site Scripting (XSS) Angriffe sind bereits seit langem bekannt und obwohl eine breite Palette an Gegenmaßnahmen vorgestellt wurde, ging das Auftreten von neuen XSS Schwachstellen nur marginal zurück. Auf der anderen Seite erhöht sich die Zahl an Angriffen sowie deren Raffinesse, da immer mehr Anwendungen Code vom Server auf den Client auslagern. Existierende Programme zur Schwachstellenanalyse in diesem Sektor weisen oft nur eine ungenügende Genauigkeit beim Aufspüren solcher Fehler auf. Deshalb beschäftigt sich diese Arbeit mit der Lösung der folgenden Probleme: (i) Unzu- reichende Testumgebungen zur Auswertung bestehender Tools, (ii) Fehlende Vergleiche bereits existierender Black-Box Analysetools, (iii) Entwicklung und Implementierung von Methoden zur effektiven Erkennung von XSS Schwachstellen. Die automatisierte Auswertung von Analyseprogrammen bedarf einer Testumgebung, welche eine möglichst hohe Abdeckung an diversen XSS Schwachstellen bietet. Da existierende Frameworks hier große Mängel aufweisen, wurde eine eigene Anwendung entwickelt um möglichst viele Kombinationen unterschiedlicher Dateneingangs und - ausgangspunkte, sowie Filtermechanismen in Webanwendungen abzubilden, welche zuvor in keinem Testset enthalten waren. Basierend auf dieser Testumgebung wurde eine großangelegte Studie zu frei verfügbaren XSS Scannern durchgeführt. Die Auswertung zeigt, dass existierende Tools nur unzurei- chende Ergebnisse liefern. Speziell bei den Varianten der DOM-basierten und persistenten Schwachstellen konnten die meisten überhaupt keine Testfälle erkennen. Um den Stand von offenen und frei verfügbaren Werkzeugen zu verbessern stellen wir daher eine eigene Black-Box Methodik zum effizienten Erkennen von XSS Schwachstellen in Webanwendungen vor, welche aus zwei wesentlichen Teilen besteht. Zuerst wird eine Analyse der Datenflüsse innerhalb der Anwendung durchgeführt um Informationen zu deren Eingangs- und Ausgangskontext sowie eventuell vorhandene Filter- und Sicherheits- maßnahmen zu erhalten. Anschließend werden diese zuvor identifizierten Datenkanäle durch Fuzzing mit speziell adaptierten Angriffen getestet und dynamisch in einem inte- grierten Browser ausgewertet. Diese dynamische Verifizierung erlaubt es falsch positive Ergebnisse zu vermeiden. Die Evaluierung des entwickelten Prototypen zeigt auf, dass die neu entwickelte Methodik im Vergleich zu existierenden frei verfügbaren Tools in der Lage ist in annähernd der selben Zeit eine signifikant höhere Anzahl an ausnutzbaren Schwachstellen zu identifizieren. vii Abstract Cross Site Scripting (XSS) attacks have been around for a long time and while a multitude of countermeasures and mitigation techniques have been researched, XSS vulnerabilities did not decline much. The number of attacks and their sophistication increases as more and more code is shifted into the client side of web applications. Therefore this thesis deals with the following challenges: (i) Creating and implementing a method for efficient XSS detection, (ii) the lack of coverage of current testbeds regarding types and possibilities of XSS, (iii) the missing comparisons and analysis of existing black-box scanners. A testing environment was created covering a large number of diverse XSS vulnerabilities in 1808 distinct test cases so that black-box scanning tools can be evaluated and compared with regard to their performance. The focus was to maximize combinations of different input and output contexts together with filtering mechanisms and also to minimize the complexity of the web application and test case structure in order to make them easily accessible for automated scanners. The test cases of already existing testbeds, which often only feature a handful of simple XSS test cases, were integrated and many more new and advanced ones implemented. Based on the previous findings an approach to efficiently detect XSS vulnerabilities is presented and implemented in a fully automated scanner prototype. The approach is based on data flow detection together with input and output context analysis. This allows the construction of specialized and environment sensitive attack payloads. The scanner additionally collects information about potential input filters and sanitization mechanisms and evaluates these against several evasion methods. The gathered data flows are then fuzz tested with specifically tailored payloads. Finally, detected vulnerabilities and attack vectors are verified dynamically to ensure a zero false positive rate. Several automated vulnerability scanners that try to detect XSS flaws exist, but no large scale comparison of their performance regarding detection rate is available. Therefore existing free and open source analysis tools were evaluated against the created testbed, uncovering that most of them lack proper detection capabilities especially in the sectors of DOM-based and stored cross site scripting. Many could not even detect a single vulnerability in the test cases of these two categories. The evaluation of the prototype implementation of the new approach shows, that it is able to detect significantly more vulnerabilities than other open source scanners. This is achieved while the time required for the scanning process stays in the range of the best performing open source tools. ix Contents Kurzfassung vii Abstract ix Contents xi 1 Introduction 1 1.1 Approach . 2 1.2 Contributions . 3 1.3 Structure of the Thesis . 4 2 Related Work 5 2.1 XSS Vulnerability Detection . 6 2.2 XSS Execution Prevention . 11 3 Background 17 3.1 Cross-site Scripting . 17 3.2 Cross-site Scripting Types . 19 3.3 Black-box Vulnerability Testing . 23 4 FOXSS 25 4.1 Data Flow Analysis . 27 4.2 Payload Generation . 30 4.3 Exploit Verification . 32 4.4 Scanner Structure . 33 5 Testing Environment 39 5.1 Structure . 41 5.2 Test Cases . 43 6 Evaluation 53 6.1 XSS Vulnerability Scanners . 53 6.2 Analysis Results . 59 6.3 Discussion of Results . 71 xi 7 Conclusion and Future Work 73 List of Figures 77 List of Tables 77 Glossary 79 Acronyms 81 Bibliography 83 Appendices 99 Appendix A: Detection Results . 99 CHAPTER 1 Introduction Cross-Site Scripting (XSS) vulnerabilities have been among the most common vulnerabil- ities in web applications for a very long time, nevertheless the number of attacks is still on the rise [1–5]. Even big, well tested websites that are used by millions of users are continually facing newly discovered exploits in this category [6–12]. When those software bugs are abused, it allows malicious payloads to be executed, which opens the door for adversaries to perform a wide range of attacks against the web applications, their users and owners. This includes among other types of attacks the stealing of user credentials or sensitive information, taking over accounts, performing malicious actions like clickjacking, impersonation or the spreading of malware [13–18]. One of the major challenges of preventing such vulnerabilities is the ever increasing complexity and dynamicity of modern web applications. The ongoing changes in the JavaScript and HTML standards continually introduce new features which enable a more interactive user experience [19–22]. This leads to a shift from mostly static websites that are loaded in a simple HTTP request from a web server, to adaptively changing sites depending on server events and web applications that include rich client-side functionality which also work offline. WebSockets [23], WebRTC [24] and other new JavaScript elements [25–28] allow continuous background