Refactoring of Security Antipatterns in Distributed Java Components
Total Page:16
File Type:pdf, Size:1020Kb
Schriften aus der Fakultät Wirtschaftsinformatik und 5 Angewandte Informatik der Otto-Friedrich-Universität Bamberg Refactoring of Security Antipatterns in Distributed Java Components von Marc Schönefeld UNIVERSITY OF BAMBERG PRESS Schriften aus der Fakultät Wirtschaftsinformatik und Angewandte Informatik der Otto-Friedrich-Universität Bamberg Schriften aus der Fakultät Wirtschaftsinformatik und Angewandte Informatik der Otto-Friedrich-Universität Bamberg Band 5 University of Bamberg Press 2010 Refactoring of Security Antipatterns in Distributed Java Components von Marc Schönefeld University of Bamberg Press 2010 Bibliographische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliographie; detaillierte bibliographische Informationen sind im Internet über http://dnb.ddb.de/ abrufbar Diese Arbeit hat der Fakultät Wirtschaftsinformatik und Angewandte Informatik der Otto-Friedrich-Universität als Dissertation vorgelegen 1. Gutachter: Prof. Dr. Guido Wirtz 2. Gutachter: Prof. Dr. Wolfgang Golubski Tag der mündlichen Prüfung: 29. Januar 2010 Dieses Werk ist als freie Onlineversion über den Hochschulschriften- Server (OPUS; http://www.opus-bayern.de/uni-bamberg/) der Uni- versitätsbibliothek Bamberg erreichbar. Kopien und Ausdrucke dür- fen nur zum privaten und sonstigen eigenen Gebrauch angefertigt werden. Herstellung und Druck: docupoint GmbH, Magdeburg Umschlaggestaltung: Dezernat Kommunikation und Alumni © University of Bamberg Press Bamberg 2010 http://www.uni-bamberg.de/ubp/ ISSN: 1867-7401 ISBN: 978-3-923507-67-2 (Druckausgabe) eISBN: 978-3-923507-68-9 (Online-Ausgabe) URN: urn:nbn:de:bvb:473-opus-2403 To my parents Regina and Roger Acknowledgments I specially thank my doctoral adviser Prof. Dr. Guido Wirtz for his valuable guidance, patience and support throughout the entire dissertation project. Thanks go to Prof. Michael Mendler, PhD, and Prof. Dr. Andreas Henrich for their support as members of the thesis committee. A special “thank you” goes to my proofreaders Len DiMaggio, Andrew Dinn, Oliver Koen, Mark Stevens, Jim Manico, Adam Gowdiak and An- toine Rios. I also thank Frank Boldewin and Levin Hiltrop for their con- structive and motivational feedback in our daily 13:37 coffee break. Further I thank Jeff Moss, Dhillon Andrew Kannabhiran, Dragos Ruiu, Marc Heuse, Dr. Ulrich Flegel and the XFocus team for giving me the opportunity to present various parts of this research to an international audience. I owe my deepest gratitude to my late grandparents, my parents Regina and Roger, my brother Malte and my best friends Minh, Kira and Tadeuz. Their understanding and encouragement provided me with an ideal envi- ronment to complete the project. Zusammenfassung Die Bedeutung der Programmiersprache JAVA als Baustein für Software- entwicklungs- und Produktionsinfrastrukturen ist im letzten Jahrzehnt stetig gestiegen. JAVA hat sich als bedeutender Baustein für die Pro- grammierung von Middleware-Lösungen etabliert. Ebenfalls evident ist die Verwendung von JAVA-Technologien zur Migration von existierenden Arbeitsplatz-Anwendungen hin zu webbasierten Einsatzszenarien. Parallel zu dieser Entwicklung hat sich die Rolle der IT-Sicherheit nicht zuletzt aufgrund der Verdrängung von mainframe-basierten Systemen hin zu verteilten Umgebungen verstärkt. Der Schutz von Vertraulichkeit, Integrität und Verfügbarkeit ist seit einigen Jahren ein kritisches Allein- stellungsmerkmal für den Markterfolg von Produkten. Verwundbarkeiten in Produkten wirken mittlerweile indirekt über kundenseitigen Vertrau- ensverlust negativ auf den wirtschaftlichen Erfolg der Softwarehersteller, zumal der Sicherheitsgrad eines Systems durch die verwundbarste Kom- ponente bestimmt wird. Ein zentrales Ziel dieser Arbeit ist die Erkenntnis zu vermitteln, dass die alleinige Nutzung einer als „sicher“ eingestuften Programmiersprache nicht als alleinige Grundlage zur Erstellung von sicheren und vertrauens- würdigen Anwendungen ausreicht. Vielmehr führt die Einbeziehung des Bedrohungsmodells der Programmiersprache zu einer verbesserten Risi- kobetrachtung, da die Angriffsfläche einer Anwendung detaillierter be- schreibbar wird. Die Entwicklung und fortschreitende Akzeptanz einer Programmier- sprache führt zu einer Verbreitung von allgemein anerkannten Lösungs- mustern zur Erfüllung wiederkehrender Qualitätsanforderungen. x Im Bereich der Dienstqualitäten fördern „Gegenmuster“, d.h. nicht- optimale Lösungen, die Entstehung von Strukturschwächen, welche in der Domäne der IT-Sicherheit „Verwundbarkeiten“ genannt werden. Des Weiteren ist die Einsatzumgebung einer Anwendung eine wichtige Ken- ngrö¨se, um eine Bedrohungsanalyse durchzuführen, denn je nach Be- schaffenheit der Bedrohungen im Zielszenario kann eine bestimmte Be- nutzeraktion eine Bedrohung darstellen, aber auch einen erwarteten An- wendungsfall charakterisieren. Während auf der Modellierungsebene ein breites Angebot von Beispie- len zur Umsetzung von Sicherheitsmustern besteht, fehlt es den Pro- grammierern auf der Implementierungsebene häufig an ganzheitlichem Verständnis. Dieses kann durch Beispiele, welche die Auswirkungen der Verwendung von „Gegenmustern“ illustrieren, vermittelt werden. Unsere Kernannahme besteht darin, dass fehlende Erfahrung der Pro- grammierer bzgl. der Sicherheitsrelevanz bei der Wahl von Implemen- tierungsmustern zur Entstehung von Verwundbarkeiten führt. Bei der Vermittlung herkömmlicher Software-Entwicklungsmodelle wird die In- tegration von praktischen Ansätzen zur Umsetzung von Sicherheitsan- forderungen zumeist nur in Meta-Modellen adressiert. Zur Erweiterung des Wirkungsgrades auf die praktische Ebene wird ein dreistufiger Ansatz präsentiert. Im ersten Teil stellen wir typische Sicherheitsprobleme von JAVA-An- wendungen in den Mittelpunkt der Betrachtung, und entwickeln einen standardisierten Katalog dieser „Gegenmuster“. Die Relevanz der einzel- nen Muster wird durch die Untersuchung des Auftretens dieser in Stan- dardprodukten verifiziert. Der zweite Untersuchungsbereich widmet sich der Integration von Vor- gehensweisen zur Identifikation und Vermeidung der „Sicherheits-Ge- genmuster“ innerhalb des Software-Entwicklungsprozesses. Hierfür wer- den zum einen Ansätze für die Analyse und Verbesserung von Imple- mentierungsergebnissen zur Verfügung gestellt. Zum anderen wird, in- xi duziert durch die verbreitete Nutzung von Fremdkomponenten, die ar- beitsintensive Auslieferungsphase mit einem Ansatz zur Erstellung ganz- heitlicher Sicherheitsrichtlinien versorgt. Da bei dieser Arbeit die praktische Verwendbarkeit der Ergebnisse eine zentrale Anforderung darstellt, wird diese durch prototypische Werkzeuge und nachvollziehbare Beispiele in einer dritten Perspektive unterstützt. Die Relevanz der Anwendung der entwickelten Methoden und Werk- zeuge auf Standardprodukte zeigt sich durch die im Laufe der Forschungs- arbeit entdeckten Sicherheitsdefizite. Die Rückmeldung bei führenden Middleware-Herstellern (Sun Microsystems, JBoss) hat durch gegensei- tigen Erfahrungsaustausch im Laufe dieser Forschungsarbeit zu einer messbaren Verringerung der Verwundbarkeit ihrer Middleware-Produkte geführt. Neben den erreichten positiven Auswirkungen bei den Herstellern der Basiskomponenten sollen Erfahrungen auch an die Architekten und Ent- wickler von Endprodukten, welche Standardkomponenten direkt oder in- direkt nutzen, weitergereicht werden. Um auch dem praktisch inter- essierten Leser einen möglichst einfachen Einstieg zu bieten, stehen die Werkzeuge mit Hilfe von Fallstudien in einem praktischen Gesamtzu- sammenhang. Die für das Tiefenverständnis notwendigen Theoriebe- standteile bieten dem Software-Architekten die Möglichkeit sicherheit- srelevante Auswirkungen einer Komponentenauswahl frühzeitig zu er- kennen und bei der Systemgestaltung zu nutzen. Abstract The importance of JAVA as a programming and execution environment has grown steadily over the past decade. Furthermore the IT industry has adapted JAVA as a major building block for the creation of new middle- ware as well as enabling technology to facilitate the migration of existing applications towards web-driven environments. Parallel in time the role of security in distributed environments has gained attention, after a large amount of middleware applications replaced enterprise-level mainframe systems. The perspectives on security Confi- dentiality, Integrity and Availability are therefore critical for the success of competiting in the market. The vulnerability level of every product is determined by the weakest embedded component, and selling vulnerable products can cause enormous economic damage to software vendors. An important goal of this work is to create the awareness that usage of a programming language, which is designed as being secure, is not suffi- cient to create secure and trustworthy distributed applications. Moreover, the incorporation of the threat model of the programming language im- proves the risk analysis by allowing a better definition of the attack surface of the application. The evolution of a programming language leads towards common pat- terns to provide reoccurring quality aspects. Suboptimal solutions, also known as "antipatterns", are typical causes that create quality weaknesses such as security vulnerabilities. Moreover, the exposure to a specific envi- ronment is an important parameter for threat analysis, as code considered secure in a specific scenario can cause unexpected risks when switching the environment. xiv Antipatterns