Improving Mobile-Malware Investigations with Static and Dynamic Code Analysis Techniques
Total Page:16
File Type:pdf, Size:1020Kb
IMPROVING MOBILE-MALWARE INVESTIGATIONS WITH STATIC AND DYNAMIC CODE ANALYSIS TECHNIQUES Vom Fachbereich Informatik (FB 20) der Technischen Universität Darmstadt zur Erlangung des akademischen Grades eines Doktor-Ingenieurs (Dr.-Ing.) genehmigte Dissertation von Siegfried Rasthofer, M.Sc. geboren in Landshut, Deutschland. Referenten: Prof. Dr. Eric Bodden (Referent) Prof. Dr. Andreas Zeller (Korreferent) Prof. Dr. Mira Mezini (Korreferentin) Tag der Einreichung: 7. November 2016 Tag der Disputation: 22. Dezember 2016 Darmstadt 2017 Hochschulkennziffer: D17 Siegfried Rasthofer: Improving Mobile-Malware Investigations with Static and Dynamic Code Analysis Techniques © January 2017 phd referees: Prof. Dr. Eric Bodden Prof. Dr. Andreas Zeller Prof. Dr. Mira Mezini further phd committee members: Prof. Dr. Reiner Hähnle Prof. Dr. Christian Bischof Prof. Dr. Patrick Eugster Darmstadt, Germany January 2017 ABSTRACT Similar to the PC world, the abundance of mobile malware has become a serious threat to smartphone users. Thousands of new apps or app versions are uploaded to popular app stores every day. All of them need to be analyzed against violations of the app store’s content policy. In particular, one wishes to detect whether an application contains malicious behavior. Similarly, antivirus companies check thousands of apps every day to determine whether or not they are malicious. Both app store operators and antivirus vendors face the same problem: it is generally challenging to tell apart malware from benign applications. This is because malware developers aim to hide their applications’ malicious behavior as long as possible from being detected by applying different obfuscation techniques. The raising sophistication with which such measures are implemented pose a serious problem not just to automated malware detection approaches but also to the manual analysis of potential malware by human experts. In this dissertation, we propose a novel reverse engineering framework that includes different approaches for automatically extracting insights of the behavior of an Android application. In particular, we propose a novel approach, based on machine-learning, to automatically identify sensitive source and sink API methods. Furthermore, we propose an approach to automatically extract concrete runtime values, such as SMS messages or URLs, at any code location. The approach combines static and dynamic code analysis techniques in such a way that it is resistant against common obfuscation techniques. A further contribution is an approach that extracts concrete environment conditions that need to be fulfilled in order to reach a certain code location. This approach is based on code fuzzing that gets supported by static and dynamic code analysis techniques. All these approaches provide different insights into the analyzed application, in particular how and under which circumstances the application communicates with its environment. The reliable extraction of these insights requires novel solutions that address fundamen- tal limitations of current static and dynamic code analysis approaches. We, therefore, also contribute new code analysis techniques that reduce well-known limitations of code anal- ysis, such as reflective method calls or inter-component communications, resulting in in- complete callgraphs, or complex path conditions that result in reachability problems. All the insights that are extracted by our proposed approaches help human experts in speeding up their malware investigations. Manual malware investigations benefit from the automatic extraction of precise insights of the behavior of an application, which otherwise requires a time-consuming, manual analysis. On the other hand, existing automated code analysis approaches that are used during malware investigations benefit from our new techniques by reducing well-known limitations. This improves the detection rate of these approaches. iii ZUSAMMENFASSUNG Die Häufigkeit von mobiler Schadsoftware ist, ähnlich zur PC-Welt, ein großes Problem für Smartphone Benutzer geworden. Tausende von neuen Applikationen oder neuen Ver- sionen von Applikationen werden täglich auf bekannte App Stores hochgeladen. All diese Applikationen müssen auf Verletzungen der App Store Richtlinien hin untersucht werden. Speziell werden hierbei Applikationen auf schadhaftes Verhalten untersucht. Ähnliches gilt bei Antiviren-Firmen, die täglich mehrere tausend Anwendungen auf schadhaftes Ver- halten untersuchen müssen. Beide Parteien haben im Prinzip ein ähnliches Problem: es ist generell schwer zwischen gutartigen und schadhaften Applikationen zu unterscheiden. Gründe hierfür sind Entwickler von schadhaften Applikationen, die ihre Applikationen so programmieren, dass das schadhafte Verhalten so lange wie möglich unentdeckt bleibt. Dies wird durch unterschiedliche Verschleierungstechniken erreicht. Die Art der Verfahren wird jedoch immer komplexer und stellt somit nicht nur automatische Verfahren zur Erken- nung von schadhaften Verhalten vor großen Herausforderungen, sondern auch manuelle Untersuchungen durch Experten. In dieser Dissertation stellen wir ein neues Reverse Engineering Framework vor, welches unterschiedliche Verfahren zur automatischen Extraktion von sicherheitsrelevanten Infor- mationen aus Android Applikationen beinhaltet. Konkret stellen wir in dieser Arbeit ein Verfahren zur automatischen Extraktion von sicherheitsrelevanten Quellen- und Senken- APIs vor, welches auf Techniken des maschinellen Lernens beruht. Des Weiteren wird ein Verfahren vorgestellt, welches vollautomatisch Laufzeitwerte an beliebigen Codestellen ex- trahiert. Dies könnten zum Beispiel konkrete SMS Nachrichten oder URLs sein. Das Ver- fahren kombiniert statische und dynamische Codeanalyse-Techniken so miteinander, dass es resistent gegen gängige Verschleierungstechniken ist. Ein weiteres Verfahren extrahiert konkrete Umgebungsbedingungen, die erfüllt sein müssen, um eine bestimmte Codestel- le zu erreichen. Dieses Verfahren basiert auf Code-Fuzzing und verwendet statische und dynamische Codeanalyse Techniken. All diese unterschiedlichen Verfahren extrahieren un- terschiedliche, sicherheitsrelevante Informationen aus einer Applikation, die Aufschluss darüber geben, wie und unter welchen Bedingungen eine Applikation mit der Umgebung interagiert. Das Extrahieren dieser sicherheitsrelevanten Informationen bedurfte neuartiger Lösun- gen, die fundamentale Limitierungen von statischen und dynamischen Analysen lösten. Aus diesem Grund sind in dieser Dissertation neue Techniken beschrieben, die diese fun- damentalen Limitierungen reduzieren. Dies beinhaltet neue Verfahren zur Verbesserung der Konstruktion von Aufrufgraphen, welche durch reflektive Aufrufe oder der Abbildung von Komponenten-Kommunikationen in Android erschwert wurden. Des Weiteren liefert diese Arbeit neue Techniken die sich mit dem Thema der Erreichbarkeit von Codestellen beschäftigt und neue Lösungsvorschläge aufzeigt. Die in dieser Dissertation vorgestellten, neuartigen Verfahren helfen Analysten bei ihrer täglichen Arbeit in der Identifizierung von schadhaften Applikationen. Durch die automati- sche Extraktion von detaillierteren, sicherheitsrelevanten Informationen einer Applikation wird die manuelle Analysezeit einer Applikation essenziell reduziert. Bereits bestehende Werkzeuge, die von Analysten benutzt werden, profitieren ebenfalls von den in dieser Ar- v beit vorgestellten Verfahren. Dies ist auf die Reduzierung von statischen und dynamischen Limitierungen zurückzuführen. Somit können dem Analysten präzisere Ergebnisse vorge- legt werden, welche ebenfalls die Analysezeit reduzieren. vi ACKNOWLEDGMENTS Foremost, I would like to thank my advisor Prof. Eric Bodden for his strong support, feedback and guidance. I am very grateful that Eric supported me as much as possible in all aspects of my academic carrier. He offered me numerous opportunities during my four years, which very positively influenced my personality and my carrier. Besides my advisor Eric, I would also like to thank my colleagues of Eric’s former chair in Darmstadt and my colleagues at Fraunhofer SIT. Especially the reading groups gave new impulses for different research directions, which resulted in publications like SuSi. I would particularly thank Steven Arzt and Stephan Huber. Steven was my office mate during the four years. Our brainstorming sessions, discussions and collaborations contributed to many research papers and also into a new commercial product, CodeInspect. Many thanks also to my Bavarian friend Stephan for our technical discussions about Android security and our hacking sessions. Both positively influenced many design decisions of HARVESTER and FuzzDroid. I have been very lucky to work together with several excellent researchers. In particular, I would like to thank Michael Pradel from TU Darmstadt, who worked with me on the FuzzDroid project. I would also like to say thank you to Ben Livshits from Microsoft Research in Redmond for working with him during a summer internship. Additionally, I would also like to thank - alphabetically ordered - the following list of researchers for our collaborative work: Alessandra Gorla, Alexander Roßnagel, Andreas Zeller, Damien Octeau, Enrico Lovat, Jacques Klein, Konstantin Kuznetsov, Li Li, Mike Papadakis, Nicole Eling, Patrick McDaniel, Peter Buxmann, Philipp Richter, Tegawendé Bissyande, Vitalii Avdiienko, Voker Stolz, Yves le Traon. It was great working with you. I had the privilege to supervise and work with several outstanding students.