TU Darmstadt / ULB / TUbiblio

On the Scalability of Static Program Analysis to Detect Vulnerabilities in the Java Platform

Lerch, Johannes (2016)
On the Scalability of Static Program Analysis to Detect Vulnerabilities in the Java Platform.
Technische Universität Darmstadt
Dissertation, Erstveröffentlichung

Kurzbeschreibung (Abstract)

Java has been a target for many zero-day exploits in the past years. We investigate one category of vulnerabilities used by many of these exploits. Attackers make use of so called unguarded caller-sensitive methods. While these methods provide features that can be dangerous if used in malicious ways, they perform only limited permission checks to restrict access by untrusted code. We derive a taint-analysis problem expressing how vulnerabilities regarding these methods can be detected automatically in the Java Class Library before its code is being released to the public.

Unfortunately, while describing the analysis problem is relatively simple, it is challenging to actually implement the analysis. The goal of analyzing a library of the size as the Java Class Library raises scalability problems. Moreover, analyzing a library while assuming attackers can write arbitrary untrusted code results in mostly all parts of the library being accessible. Most existing approaches target the analysis of an application, which is less of a problem, because usually only small parts of the library are used by applications. Besides the fact that existing algorithms run into scalability problems we found that many of them are also not sound when applied to the problem. For example, standard call-graph algorithms produce unsound call graphs when only applied to a library. While the algorithms provide correct results for applications, they are also used when only a library is analyzed---the incompleteness of the results is then usually ignored. The requirements for this work do not allow to ignore that, as otherwise security-critical vulnerabilities may remain undetected.

In this work we propose novel algorithms addressing the soundness and scalability problems. We discuss and solve practical challenges: we show a software design for the analysis such that it is still maintainable with growing complexity, and extend an existing algorithm to enrich results with exact data-flow information enabling comprehensible reporting.

In experiments we show that designing the analysis to work forward and backward from inner layers to outer layers of the program results in better scalability. We investigate the challenge to track fields in a flow-sensitive and context-sensitive analysis and discuss several threats to scalability arising with field-based and field-sensitive data-flow models. In experiments comparing these against each other and against a novel approach proposed in this work, we show that our new approach successfully solves most of the scalability problems.

Typ des Eintrags: Dissertation
Erschienen: 2016
Autor(en): Lerch, Johannes
Art des Eintrags: Erstveröffentlichung
Titel: On the Scalability of Static Program Analysis to Detect Vulnerabilities in the Java Platform
Sprache: Englisch
Referenten: Mezini, Prof. Dr. Mira ; Zeller, Prof. Dr. Andreas ; Bodden, Prof. PhD. Eric
Publikationsjahr: 24 Mai 2016
Ort: Darmstadt
Datum der mündlichen Prüfung: 11 Juli 2016
URL / URN: http://tuprints.ulb.tu-darmstadt.de/5580
Kurzbeschreibung (Abstract):

Java has been a target for many zero-day exploits in the past years. We investigate one category of vulnerabilities used by many of these exploits. Attackers make use of so called unguarded caller-sensitive methods. While these methods provide features that can be dangerous if used in malicious ways, they perform only limited permission checks to restrict access by untrusted code. We derive a taint-analysis problem expressing how vulnerabilities regarding these methods can be detected automatically in the Java Class Library before its code is being released to the public.

Unfortunately, while describing the analysis problem is relatively simple, it is challenging to actually implement the analysis. The goal of analyzing a library of the size as the Java Class Library raises scalability problems. Moreover, analyzing a library while assuming attackers can write arbitrary untrusted code results in mostly all parts of the library being accessible. Most existing approaches target the analysis of an application, which is less of a problem, because usually only small parts of the library are used by applications. Besides the fact that existing algorithms run into scalability problems we found that many of them are also not sound when applied to the problem. For example, standard call-graph algorithms produce unsound call graphs when only applied to a library. While the algorithms provide correct results for applications, they are also used when only a library is analyzed---the incompleteness of the results is then usually ignored. The requirements for this work do not allow to ignore that, as otherwise security-critical vulnerabilities may remain undetected.

In this work we propose novel algorithms addressing the soundness and scalability problems. We discuss and solve practical challenges: we show a software design for the analysis such that it is still maintainable with growing complexity, and extend an existing algorithm to enrich results with exact data-flow information enabling comprehensible reporting.

In experiments we show that designing the analysis to work forward and backward from inner layers to outer layers of the program results in better scalability. We investigate the challenge to track fields in a flow-sensitive and context-sensitive analysis and discuss several threats to scalability arising with field-based and field-sensitive data-flow models. In experiments comparing these against each other and against a novel approach proposed in this work, we show that our new approach successfully solves most of the scalability problems.

Alternatives oder übersetztes Abstract:
Alternatives AbstractSprache

In den vergangenen Jahren ist Java zu einem beliebten Ziel für Angreifer geworden, insbesondere durch den Einsatz von Zero-Day Exploits. In dieser Arbeit betrachten wir eine spezielle Art von Sicherheitslücken, die in vielen dieser Angriffe ausgenutzt wurde: sogenannte Unguarded Caller-Sensitive Methods. Diese Methoden bieten sicherheitsrelevante Funktionalitäten an, sichern die Verwendung dieser aber zugleich nur eingeschränkt ab. Im Verlauf dieser Arbeit leiten wir eine Problemstellung für statische Programmanalysen ab, um Sicherheitslücken dieser Art in der Java Klassenbibliothek automatisiert erkennen zu können.

Die Implementierung einer statischen Analyse für diese Problemstellung stellt eine große Herausforderung dar. Das Ziel eine Bibliothek in Größenordnungen wie der Java Klassenbibliothek zu analysieren, führt zu Problemen bezüglich der Skalierbarkeit naiver Implementierungen. Insbesondere die notwendige Annahme, dass ein Angreifer beliebigen Code schreiben kann, führt zur Erreichbarkeit nahezu aller Teile einer Bibliothek. Analysiert man hingegen eine Applikation, so ist in der Regel nur ein kleiner Teil der Bibliothek erreichbar, da häufig nur wenige der zur Verfügung gestellten Funktionalitäten verwendet werden. Neben diesen Problemen stellten wir außerdem fest, dass die meisten Algorithmen für den gegebenen Anwendungsfall unvollständige Ergebnisse liefern. Dies betrifft zum Beispiel Call-Graph Algorithmen. Beim Einsatz für Applikationen liefern diese korrekte Ergebnisse, jedoch werden diese auch eingesetzt, wenn ausschließlich eine Bibliothek analysiert werden soll---die Unvollständigkeit der Ergebnisse wird dann häufig ignoriert. Die Anforderungen in dieser Arbeit erlauben es allerdings nicht diese zu ignorieren, da sonst sicherheitskritische Lücken übersehen werden könnten.

Wir stellen neue Algorithmen vor, um sowohl die Vollständigkeit als auch Skalierbarkeit statischer Programmanalysen zu erreichen. Dabei werden Herausforderungen, die sich bei der praktischen Umsetzung ergeben, diskutiert und gelöst: Wir zeigen ein Softwaredesign, welches die Wartbarkeit der Analyse auch mit zunehmender Komplexität sichert, und erweitern einen bestehenden Algorithmus so, dass Ergebnisse alle Informationen enthalten die nötig sind, um Datenflüsse nachvollziehbar darzustellen.

In Experimenten zeigen wir, dass die Aufteilung der Analyse in einen vorwärts und einen rückwärts gerichteten Teil, die jeweils in der Mitte eines Programmablaufs starten, Vorteile bezüglich Skalierbarkeit bietet. Wir untersuchen im Detail, welche Herausforderungen sich durch die Berücksichtigung von Feldzugriffen ergeben, wenn die Analyse gleichzeitig flow-sensitive und context-sensitive aufgebaut wird. Wir betrachten hierzu field-based und field-sensitive Modelle und vergleichen Ansätze beider Modelle miteinander, sowie mit einem neuen Ansatz, den wir in dieser Arbeit vorstellen. Die Ergebnisse der Experimente zeigen, dass dieser neue Ansatz viele Skalierbarkeitsprobleme der bestehenden Ansätze erfolgreich lösen kann.

Deutsch
URN: urn:nbn:de:tuda-tuprints-55808
Sachgruppe der Dewey Dezimalklassifikatin (DDC): 000 Allgemeines, Informatik, Informationswissenschaft > 004 Informatik
Fachbereich(e)/-gebiet(e): 20 Fachbereich Informatik
20 Fachbereich Informatik > Softwaretechnik
20 Fachbereich Informatik > EC SPRIDE
Hinterlegungsdatum: 28 Aug 2016 19:55
Letzte Änderung: 28 Aug 2016 19:55
PPN:
Referenten: Mezini, Prof. Dr. Mira ; Zeller, Prof. Dr. Andreas ; Bodden, Prof. PhD. Eric
Datum der mündlichen Prüfung / Verteidigung / mdl. Prüfung: 11 Juli 2016
Export:
Suche nach Titel in: TUfind oder in Google
Frage zum Eintrag Frage zum Eintrag

Optionen (nur für Redakteure)
Redaktionelle Details anzeigen Redaktionelle Details anzeigen