Browser- und Anwendungsforensik - IT
Transcription
Browser- und Anwendungsforensik - IT
Browser- und Anwendungsforensik Autoren: Prof. Dr.-Ing. Felix C. Freiling Dr.-Ing. Andreas Dewald Friedrich-Alexander-Universität Erlangen-Nürnberg Modul 16 Browser- und Anwendungsforensik Studienbrief 1: Einführung in die Browser- und Anwendungsforensik Autoren: Prof. Dr.-Ing. Felix C. Freiling Dr.-Ing. Andreas Dewald 2. Auflage Friedrich-Alexander-Universität Erlangen-Nürnberg © 2015 Friedrich-Alexander-Universität Erlangen-Nürnberg Department Informatik Martensstr. 3 91058 Erlangen 2. Auflage (27.10.2014) Didaktische und redaktionelle Bearbeitung: Romy Rahnfeld Das Werk einschließlich seiner Teile ist urheberrechtlich geschützt. Jede Verwendung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung der Verfasser unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Um die Lesbarkeit zu vereinfachen, wird auf die zusätzliche Formulierung der weiblichen Form bei Personenbezeichnungen verzichtet. Wir weisen deshalb darauf hin, dass die Verwendung der männlichen Form explizit als geschlechtsunabhängig verstanden werden soll. Das diesem Bericht zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung, und Forschung unter dem Förderkennzeichen 160H11068 gefördert. Die Verantwortung für den Inhalt dieser Veröffentlichung liegt beim Autor. Inhaltsverzeichnis Seite 3 Inhaltsverzeichnis Einleitung zu den Studienbriefen I. Abkürzungen der Randsymbole und Farbkodierungen . . . . . . . . . II. Zu den Autoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . III. Modullehrziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik 1.1 Lehrziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Advanced Organizer . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Beispiel 1: Tötung durch Unterlassen . . . . . . . . . . . . . . 1.3.2 Beispiel 2: Die globale Spam-Industrie . . . . . . . . . . . . . 1.3.3 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 Browser- und Anwendungsforensik(BRAP) . . . . . . . . . . . . . . . 1.4.1 Browserforensik . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.2 Anwendungsforensik . . . . . . . . . . . . . . . . . . . . . . 1.4.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . 1.5 Mobilfunkforensik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.1 Zugriff auf Smartphones und Mobiltelefone . . . . . . . . . . 1.5.2 Smartphones: Überblick über die Systeme . . . . . . . . . . . 1.5.3 Root-Zugriff und Datenanalyse bei Android . . . . . . . . . . 1.5.4 Android-Forensik mit ADEL . . . . . . . . . . . . . . . . . . . 1.5.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . 1.6 Verschleierungstechniken . . . . . . . . . . . . . . . . . . . . . . . . 1.6.1 Reverse Engineering . . . . . . . . . . . . . . . . . . . . . . . 1.6.2 Verschleierungstechniken zum Anti Reverse Engineering . . . 1.6.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . 7 Verzeichnisse I. Abbildungen . . II. Beispiele . . . . III. Definitionen . . . IV. Kontrollaufgaben V. Tabellen . . . . . VI. Literatur . . . . . 4 5 6 7 7 7 7 8 13 14 14 18 22 23 24 26 28 29 30 30 31 34 51 53 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 53 54 54 54 54 Seite 4 Einleitung zu den Studienbriefen Einleitung zu den Studienbriefen I. Abkürzungen der Randsymbole und Farbkodierungen Beispiel B Definition D Kontrollaufgabe K Quelltext Q Zu den Autoren Seite 5 II. Zu den Autoren Felix Freiling ist seit Dezember 2010 Inhaber des Lehrstuhls für ITSicherheitsinfrastrukturen an der Friedrich-Alexander-Universität ErlangenNürnberg. Zuvor war er bereits als Professor für Informatik an der RWTH Aachen (2003-2005) und der Universität Mannheim (2005-2010) tätig. Schwerpunkte seiner Arbeitsgruppe in Forschung und Lehre sind offensive Methoden der IT-Sicherheit, technische Aspekte der Cyberkriminalität sowie digitale Forensik. In den Verfahren zur Online-Durchsuchung und zur Vorratsdatenspeicherung vor dem Bundesverfassungsgericht diente Felix Freiling als sachverständige Auskunftsperson. Andreas Dewald studierte Informatik an der Universität Mannheim. Für seine Diplomarbeit “Detection and Prevention of Malicious Websites” erhielt er 2010 den Studienpreis der Gesellschaft für Datenschutz und Datensicherheit. Er promovierte 2012 unter der Betreuung von Felix Freiling an der Friedrich-Alexander-Universität Erlangen-Nürnberg mit einer Dissertation über “Formalisierung digitaler Spuren und ihre Einbettung in die Forensische Informatik”. Er ist wissenschaftlicher Mitarbeiter am Lehrstuhl 1 für Informatik der Friedrich-Alexander-Universität und Autor der Bücher “Client-Honeypots: Exploring Malicious Websites” und “Forensische Informatik”. Seite 6 Einleitung zu den Studienbriefen III. Modullehrziele Was wird Ihnen in diesem Modul vermittelt? Ein Großteil der Systeminteraktion erfolgt heute durch Anwendungsprogramme wie Browser, E-Mail-Clients, oder Office-Software. Die Spuren, die dadurch auf der Festplatte oder im Speicher entstehen, sind für eine Ermittlung in der Regel hochgradig relevant. Die Spuren können aber nur mit einem tiefen Verständnis der Anwendung selbst sicher interpretiert werden. Diese Lehrveranstaltung gibt einen Überblick über Techniken und Werkzeuge für die Analyse von Anwendungsprogrammen. Themen der drei Studienbriefe. Die Inhalte des Moduls sind in drei Studienbriefe gegliedert. Der erste Studienbrief soll Ihnen einen Überblick geben über verschiedene bekannte Erscheinungsformen von Anwendungsspuren, etwa von Browsern oder im Bereich der Mobilfunkforensik. Der zweite Studienbrief gibt Ihnen einen Einblick in die Aussagekraft von Multimediaspuren, also von Digitalkameras, eine zunehmend wichtigere Klasse von Anwendungsspuren. Der dritte Studienbrief schließlich stellt eine umfassende Theorie über die Aussagekraft digitaler Spuren vor. Neben der Einführung einer gemeinsamen Terminologie dient dieser Studienbrief auch dazu, grundsätzliche Zusammenhänge zwischen Spuren und ihrer Bedeutung darzulegen. Was können Sie nach erfolgreichem Abschluss dieses Studienbriefs? Die Veranstaltung vermittelt grundlegende Kenntnisse und Kompetenzen in der Analyse von Spuren, die durch Anwendungsprogramme wie Browser oder E-Mail-Clients entstehen. Nach Abschluss dieses Moduls haben Sie einen Überblick über verschiedene Erscheinungsformen von Anwendungsspuren und können für einfache Fälle angeben, welche Anwendungsspuren für die Ermittlung jeweils relevant sein könnten. Sie besitzen zudem einen Überblick über die Methoden der Multimediaforensik und können für konkrete Ermittlungen angeben, welche Multimediaspuren für Ermittlungsfragen von Interesse sein können. Schließlich können Sie auch Aussagen darüber machen, unter welchen Voraussetzungen aufgefundene Spuren tatsächlich das aussagen, was man ihnen nach herrschender Meinung zusagt. Im Rahmen der praktischen Übung lernen Sie, die Spuren zu benennen, die eine konkrete Anwendung erzeugt. Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Studienbrief 1 Einführung in die Browser- und Anwendungsforensik 1.1 Lehrziele In diesem Studienbrief erhalten Sie zunächst einen Überblick über das Gebiet der Browser- und Anwendungsforensik sowie eine Motivation der Relevanz des Themas. Weiterhin wird Ihnen ein kurzer Einblick in die verwandten Bereiche der Mobilfunkforensik und der generellen Verschleierungstechniken (Obfuscation) gegeben. 1.2 Advanced Organizer Dieses Modul setzt Kenntnisse der Module “Datenträgerforensik” (M12) und “LiveAnalyse” (M13) sowie “Grundlagen digitaler Forensik” (M10) voraus. Während sich Datenträgerforensik mit den Spuren beschäftigt, die durch die Dateisysteme entstehen, betrachten wir in diesem Modul einerseits typische Kombinationen von Dateisystemmetadaten sowie Inhalte von Dateien als Spuren. Hier geht es also grundlegend um die Analyse und Interpretation der durch Festplattenforensik oder Live-Analyse sichergestellten Daten. Dies geschieht im Kontext bekannter oder auch unbekannter Anwendungsprogramme. Bei den Inhalten zu Verschleierungstechniken gibt es leichte Überschneidungen mit dem Modul “Reverse Engineering” (M15). Danksagungen Die Autoren bedanken sich bei den Studierenden des ersten Durchgangs dieses Moduls im “Master Online Digitale Forensik”, insbesondere Felix Ramisch, Martin Rojak, Sven Borchert, Torben Griebe und Daniel Keller, für hilfreiche Hinweise und Verbesserungsvorschläge zum Text der ersten Auflage. Wir bedanken uns weiterhin bei Michael Spreitzenbarth und Tilo Müller für Vorarbeiten zu den Abschnitten 1.5 und 1.6. 1.3 Einführung Ein Großteil der Systeminteraktion erfolgt heute durch Anwendungsprogramme wie Browser, E-Mail-Clients, oder Office-Software. Die Spuren, die dadurch auf der Festplatte oder im Speicher entstehen, sind für eine Ermittlung in der Regel hochgradig relevant. Die Spuren können aber nur mit einem tiefen Verständnis der Anwendung selbst sicher interpretiert werden. Dieser Studienbrief gibt einen Überblick über die verschiedenen, im Bereich der Browser- und Anwendungsforensik anzusiedelnden Themengebiete. Spezielle Bereiche dieser Thematik werden in den folgenden Studienbriefen vertieft. Um das Thema dieses Moduls zu motivieren, wollen wir anfangs zwei Beispiele für die Notwendigkeit der in diesem Modul vorgestellten Techniken geben. 1.3.1 Beispiel 1: Tötung durch Unterlassen Das erste Beispiel für die Wichtigkeit der in diesem Modul behandelten Techniken ist ein Gerichtsfall aus dem Jahr 2009 in Trier [Wientjes, 2011]. Die Anklage lautete hier auf Tötung durch Unterlassen. Seite 7 Seite 8 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Angeklagt war ein junger Mann, der Experte für ein bestimmtes Betäubungsmittel war, das er selbst sporadisch und sehr fein dosiert konsumiert. Seine Ex-Freundin nahm eine größere Menge des Mittels ein, wofür es Zeugen gab. Der Angeklagte erkannte die Überdosis, brachte die junge Frau zum Erbrechen und danach in die stabile Seitenlage. Nachdem er einige Stunden mit ihr allein im Zimmer einer WG war, verließ er das Haus. Eine Mitbewohnerin fand die Frau später nur noch leblos vor. Den Ermittlern stellte sich nun die Frage, was sich in diesen Stunden in dem Zimmer zugetragen hat. Der Angeklagte sagte aus, dass die junge Frau sich selbst umbringen wollte. In dem Prozess musste nun geklärt werden, ob der Angeklagte den Todeskampf bemerkte und warum er nichts unternahm. Der entscheidende Hinweis kam von einem Informatiker, der den Computer untersucht hatte, der in dem WG-Zimmer des Opfers stand. Er konnte nachweisen, dass in den Stunden des Todeskampfes nach den Begriffen „GBL Überdosis“, „blaue Pupillen“, „starre Pupillen“ und „Totenstarre“ gesucht wurde. Dies waren Anwendungsspuren, die ein Browser-Plugin auf der Festplatte abgelegt hatte. Ein medizinischer Gutachter bestätigte, dass sich der Zeitverlauf der Eingabe deckte mit dem zu erwartenden Verlauf des Todeseintritts. Das Gericht kam daraufhin zu der Überzeugung, dass der Angeklagte den Todeskampf in vollem Bewusstsein beigewohnt und nichts unternommen hatte. Er wurde zu 7 Jahren Gefängnis verurteilt. 1.3.2 Beispiel 2: Die globale Spam-Industrie Unter Spam versteht man Massen-E-Mails, die unaufgefordert zugestellt werden und mit Werbung oder bösartiger Software verbunden sind. Trotz Antipathie und einer Multi-Million Dollar Antispam Industrie existiert Spam weiterhin. Täglich werden die Posteingänge mit Milliarden von unerwünschten Nachrichten überflutet [Levchenko et al., 2011]. Jeder, der einen Email-Account besitzt, hat schon einmal eine Spam-Mail mit einem Betreff à la „Excellent hardness is easy!“ bekommen, doch (angeblich) niemand hat schon einmal auf ein solches Angebot reagiert [Kanich et al., 2008]. Das führt uns zu der Frage, warum es dann immer noch Spam gibt. Um das Phänomen Spam durchgreifend bekämpfen zu können, muss man es ganzheitlich behandeln und sich auch mit dem Aufbau der globalen Spam-Industrie auseinandersetzen. Hierzu kommen Methoden der Live-Analyse und der Anwendungsforensik zum Einsatz. Die Emails und deren Versendung sind nämlich nur der offensichtliche Teil des Spams. Im Hintergrund verbirgt sich eine komplexe Verknüpfung von sowohl technischen als auch wirtschaftlichen Komponenten, die aus dem Besuch der (Spam-)Website finanziellen Nutzen ziehen. Diese Wertschöpfungskette besteht aus dem Versenden von Spam i. d. R. durch ein Botnetz, der Registrierung von Domains, dem Hosten von Webserver und ggf. Proxys und der Bezahlung sowie Herstellung der Produkte. Im Folgenden gehen wir auf die Strukturen der Spam-Industrie ein, wie sie in den Artikeln von Levchenko et al. [2011] und Kanich et al. [2008] beschrieben werden. 1.3.2.1 Die Spam-Industrie Die Spam-Industrie ist aufgeteilt in mehrere Bereiche. Die Produkt-Anbieter arbeiten mit ihren Vertriebspartnern — Spam-Botnetze, Bezahlungsdienste, Banken usw. — zusammen und beteiligen diese an den Gewinnen. Dabei findet alles online statt 1.3 Einführung Seite 9 – dank der erfolgreichen Verbreitung von internetbasierten Vertriebsprogrammen wie pay-per-click, pay-per-lead, pay-per-sale usw. Abb. 1.1: Grum-Botnetz Wertschöpfungskette [Levchenko et al., 2011, Fig. 1] Um die Arbeitsweise eines Spam-Netzwerks zu illustrieren, geben wir ein Beispiel für den Ablauf eines „Spam-Geschäfts“, wie es weltweit tausendfach täglich passiert. Die Zusammenhänge sind nochmals in Abbildung 1.1 dargestellt: 1. Über ein Botnetz (hier das Grum-Botnetz) wird eine Spam-Nachricht verschickt. Die Nachricht enthält ein mit URL unterlegtes Bild für verschreibungspflichtige Medikamente inklusive einer Preisliste. 2. Ein Klick auf das Bild sorgt für eine DNS-Auflösungsanfrage nach medicshopnerx.ru. 3. Die Domain wurde bei reg.ru am 18.10. registriert. Der Nameserver steht in China. 4. Die DNS-Auflösung ergibt einen Rechner in Brasilien. 5. Der Browser sendet eine http-Anfrage und liefert die Webseite von Pharmacy Express. Pharmacy Express ist eine Marke, die mit einem Vertriebsprogramm in Russland assoziiert ist. Der Rechner in Brasilien ist möglicherweise nur ein Proxy. 6. Der Einkauf auf der Webseite führt zur Zahlungsaufforderung per Kreditkarte auf der Webseite payquickonline.com. Die IP-Adresse stammt aus der Türkei, der Betrag wandert jedoch zur Azerigazbank in Baku, Aserbaidschan. 7. 10 Tage später trifft das Produkt per Post ein. Die Absenderadresse liegt in Indien. Dieses Beispiel verdeutlicht die Arbeitsteilung: Botnetz, Proxy, Pharmacy ExpressWebseite, (Online-)Bezahlungsdienst, Bank, Pharma Unternehmen und Absender arbeiten zusammen. Das Botnetz verschickt den Spam massenhaft, in dem ein Link zu dem Proxy eingebaut ist. Durch diese Indirektion wird der eigentliche Server der Pharmacy Express Webseite verschleiert. Die Bezahlung wickelt eine weitere Stelle ab, die mit einer Bank zusammenarbeitet. Zum Schluss wird das Produkt von einem Hersteller angefertigt und verschickt. Diese Aufteilung ist zum Teil nötig, da die einzelnen Beteiligten eine spezielle Aufgabe übernehmen (ein Botnetz-Betreiber kann höchstwahrscheinlich keine Pharmazeutika herstellen). Zum anderen dient dies natürlich der Verschleierung. Proxy, Webseite und Bezahlungsdienst könnten zusammengefasst werden, doch wäre dann die Quelle viel leichter zu identifizieren und lokalisieren. Seite 10 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Abb. 1.2: Ablauf der Spam-Analyse [Levchenko et al., 2011, Fig. 2] 1.3.2.2 Analyse Um an die oben genannten Informationen über die Spam-Industrie zu gelangen, haben die Autoren auf mehreren Ebenen Daten gesammelt (siehe Abbildung 1.2). Die Techniken, die dabei angewendet wurden, stammten aus dem Bereich der Live-Analyse und dem Bereich der Anwendungsanalyse. Im Folgenden betrachten wir nun die einzelnen Ebenen im Detail, beginnend mit der Sammlung von Daten bzw. Spam: 1. Ausgangspunkt waren Spam-, URL-Feeds und ein „eigenes“ Botnetz zur Spam-Sammlung. 1.3 Einführung Seite 11 2. Diese Eingaben wurden verarbeitet und dabei die eingebundenen URLs extrahiert. Dies geschah mittels automatischen Parsern, die die HTMLNachrichten nach entsprechenden Marken (Tags) durchsuchten. 3. Neben einem DNS Crawler kamen mehrere Web Crawler zum Einsatz, die die vorher extrahierten Seiten besuchten und HTTP-Interaktionen sowie die endgültige Webseite dokumentierten. 4. Die Webseiten wurden nach deren Inhalt sortiert, indem bestimmte Muster wie beispielsweise Logos und spezifische Begriffe im HTML-Text ausgenutzt wurden. 5. Danach konnten den Links eine bestimmte Kategorie, je nach Art der angebotenen Produkte, zugewiesen werden. Diese Einteilungen wurden stichprobenartig überprüft. 6. Zum Schluss wurden gezielt Produkte gekauft und die Daten für die weitere Auswertung in eine Datenbank aufgenommen. Insgesamt stellten Levchenko et al. [2011] fast eine Milliarde URLs aus 12 Quellen, darunter fünf Botnetzen, sicher und speicherten sie in einer Datenbank. Von der Milliarde an URLs wurden 15 Millionen mit den Web Crawlern besucht, Weiterleitungen, DNS-Namen, HTTP-Header von jedem zwischengeschalteten Server, sowie den endgültigen Server dokumentiert. Außerdem wurde die letzte Seite als DOM und als Screenshot gespeichert. Um diese Masse an Webseitenaufrufen durchzuführen, verwaltete jeder Crawler dabei 100 Firefox-Instanzen. Da in den Daten sehr viel Redundanz enthalten ist, sind die Ergebnisse laut Levchenko et al. [2011] durchaus repräsentativ. Es wurden über 98% der URLs abgedeckt, obwohl nur 20% der 18 Millionen unterschiedlich registrierten Domains durchsucht wurden. Allerdings beschränkten sie sich dabei auf drei Kategorien von Produkten, da diese unter den Top 5 Produkten liegen, die durch die SpamIndustrie vermarktet werden: 1. Pharmazeutika, 2. gefälschte Produkte (Replicas) und 3. raubkopierte Software. Die zwei zu den Top 5 fehlenden Kategorien sind Pornografie und Glücksspiele. Stage URLs Domains Web clusters Programs Pharmacy Software Replicas Total 346,993,046 54,220 968 30 3,071,828 7,252 51 5 15,330,404 7,530 20 10 365,395,278 69,002 1,039 45 Mittelscontent clustering, also der Einteilung in mehrere Kategorien nach bestimmten Kriterien, wie beispielsweise spezielle Schlagwörter im HTML-Text, wurden Seiten mit ähnlichem Inhalt zusammengefasst. Diese konnten dann nach Vertriebsprogrammen und Erscheinungsbild gegliedert werden (siehe Abbildung 1.3). Die Abbildung zeigt die drei oben genannten Kategorien Pharmazeutika, Fälschungen und Software jeweils mit der Anzahl an URLs und den dahinter steckenden Webseiten. Daraus geht hervor, dass Pharmazeutika deutlich vor Fälschungen und Software liegen. Die Vertriebsprogramme wurden ebenfalls eingeteilt und deren Marktanteil bzw. deren Spam-Volumen gemessen. Abbildung 1.4 listet die Programme mit der Anzahl ihrer Domains und URLs sowie deren Spam-Anteil. Die Statistik zeigt Abb. 1.3: Aufteilung der Spam-Produkte [Levchenko et al., 2011, Tab. III] content clustering Seite 12 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik sink feeds Abb. 1.4: Kategorisierung nach Vertriebsprogrammen [Levchenko et al., 2011, Tab. IV] jedoch nur Spam aussink feeds, d. h. Botnetz-Quellen wurden herausgelassen, um normale E-Mail-Konten besser zu repräsentieren. Für die Zuordnung wurden manuelle Filter erstellt, die die Webseiteninhalte der Programme abbilden. Affiliate Program Distinct Domains Received URLs Feed Volume RxPrm Mailn PhEx EDEx ZCashPh DrMax Grow USHC MaxGm VgREX Stud ManXt GlvMd OLPh Eva WldPh PHOL Aptke HrbGr RxPnr Stmul Maxx DrgRev UltPh Green Vrlty RxRev Medi ClFr CanPh RxCsh Staln RX–Promotion Mailien Pharmacy Express ED Express ZedCash (Pharma) Dr. Maxman Viagrow US HealthCare MaxGentleman VigREX Stud Extreme ManXtenz GlavMed Online Pharmacy EvaPharmacy World Pharmacy PH Online Swiss Apotheke HerbalGrowth RX Partners Stimul-cash MAXX Extend DrugRevenue Ultimate Pharmacy Greenline Virility RX Rev Share MediTrust Club-first Canadian Pharmacy RXCash Stallion Total 10,585 14,444 14,381 63 6,976 5,641 382 167 672 39 42 33 2,933 2,894 11,281 691 101 117 17 449 50 23 122 12 1,766 9 299 24 1,270 133 22 2 54,220 160,521,810 69,961,207 69,959,629 1,578 42,282,943 32,184,860 5,210,668 3,196,538 1,144,703 426,873 68,907 50,394 28,313,136 17,226,271 12,795,646 10,412,850 2,971,368 1,586,456 265,131 229,257 157,537 104,201 51,637 44,126 25,021 23,528 9,696 6,156 3,310 1,392 287 80 346,993,046 24.92% 23.49% 23.48% 0.01% 14.54% 10.95% 1.68% 1.31% 0.41% 0.14% 0.03% 0.02% 10.32% 5.16% 8.7% 3.55% 0.96% 0.55% 0.09% 0.21% 0.07% 0.04% 0.04% 0.02% 0.36% 0.01% 0.04% 0.01% 0.07% 0.03% < 0.01% < 0.01% 93.18% Royal EuSft ASR OEM SftSl Royal Software EuroSoft Auth. Soft. Resellers OEM Soft Store Soft Sales Total 572 1,161 4,117 1,367 35 7,252 2,291,571 694,810 65,918 19,436 93 3,071,828 0.79% 0.48% 0.61% 0.24% < 0.01% 2.12% ZCashR UltRp Dstn Exqst DmdRp Prge OneRp Luxry AffAc SwsRp WchSh ZedCash (Replica) Ultimate Replica Distinction Replica Exquisite Replicas Diamond Replicas Prestige Replicas One Replica Luxury Replica Aff. Accessories Swiss Rep. & Co. WatchShop Total 6,984 5,017 127 128 1,307 101 77 25 187 15 546 7,530 13,243,513 10,451,198 1,249,886 620,642 506,486 382,964 20,313 8,279 3,669 76 2,086,891 15,330,404 4.56% 3.55% 0.37% 0.22% 0.27% 0.1% 0.02% 0.01% 0.02% < 0.01% 0.17% 4.73% 69,002 365,395,278 100% Gr and Total Interessant ist die Verteilung der Spam-Infrastruktur: Viele Konzern-Netzwerke arbeiten mit wenig Banken zusammen (siehe Abbildung 1.5, gegliedert nach Banken mit deren Landessitz und zugehörigen Spam-Programmen). 1.3.2.3 Gegenmaßnahmen Als technische Gegenmaßnahme könnte man auf die einschlägigen Registrare einwirken und sie motivieren, nicht mit den Vertriebsprogrammen zusammenzuarbeiten, bzw. man könnte die einschlägigen Autonomen Systeme kontaktieren, 1.3 Einführung Seite 13 Bank Name BIN Country Affiliate Programs Azerigazbank B&N B&S Card Service Borgun Hf Canadian Imperial Bank of Commerce Cartu Bank DnB Nord (Pirma) Latvia Savings Latvijas Pasta Banka St. Kitts & Nevis Anguilla National Bank State Bank of Mauritius Visa Iceland Wells Fargo Wirecard AG 404610 425175 490763 423262 452551 478765 492175 490849 489431 427852 474140 450744 449215 424500 Azerbaijan Russia Germany Iceland Canada Georgia Latvia Latvia Latvia St. Kitts & Nevis Mauritius Iceland USA Germany GlvMd, RxPrm, PhEx, Stmul, RxPnr, WldPh ASR MaxGm Trust WldPh DrgRev Eva, OLPh, USHC EuSft, OEM, WchSh, Royal, SftSl SftSl DmdRp, VgREX, Dstn, Luxry, SwsRp, OneRp DrgRev Staln Green ClFr Abb. 1.5: Verteilung von Vertriebsprogrammen auf Banken [Levchenko et al., 2011, Tab. V] Abb. 1.6: Folgen der Abschaltung bestimmter Elemente der SpamIndustrie [Levchenko et al., 2011, Fig. 5] damit sie die relevanten Hosts vom Netz nehmen. Abbildung 1.6 (links und mitte) zeigt die Auswirkungen eines solchen Vorgehens in Bezug auf die Menge von Spam, die dadurch beeinflusst wird. Die Beeinflussung von 5 Registraren allein würde somit theoretisch eine Reduktion des Spam-Aufkommens von 60% bewirken. Spam-Reduktion durch Abschalten der Registrare oder DNS und Web Hoster ist wesentlich ineffizienter als durch „Ausschalten“ der Banken. Für eine effiziente, langfristige Bekämpfung von Spam könnte man versuchen, die Banken überzeugen, nicht mehr mit den Spam-Anbietern zusammenzuarbeiten. Ein Abkoppeln einer einzigen Bank vom Kreditkartengeschäft, nämlich der Azerigazbank, würde schon 60% des Spams betreffen. Der Erfolg wäre jedoch nur mittelfristig von Bedeutung, da sich die Spam-Industrie neue Banken suchen würde. Trotzdem wäre dies mit einiger Zeit und einigen Kosten für die Spam-Industrie verbunden. Problematisch bei diesem Vorgehen ist jedoch, dass in einigen Ländern der Verkauf der durch Spam beworbenen Produkte nicht komplett illegal ist und dort ansässige Banken bevorzugt von der Spam-Industrie genutzt werden. Würden westliche Banken bestimmte Transaktionen nicht vornehmen, wären die Auswirkungen für die Spam-Konzerne durchaus spürbar. Für einige der Top Spam-Produkte (chemische Medikamente, Fälschungen und illegale Software) gäbe es sogar legale Umsetzungen für einen solchen erzwungenen Grundsatz. Nichtsdestotrotz wären die politischen Auswirkungen eines solchen Eingriffs problematisch. 1.3.3 Ausblick Im Rahmen dieses Studienbriefs geben wir zunächst eine allgemeine Einführung in den Bereich der Browser- und Anwendungsforensik. Anschließend betrachten wir beispielhaft die Rahmenbedingungen der Mobilfunkforensik, eines wichtigen Teilbereichs der Anwendungsforensik. Abschließend geben wir eine kurze Einführung in Verschleierungstechniken, die die Analyse proprietärer Datenformate und Software erschweren sollen. Seite 14 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik 1.4 Browser- und Anwendungsforensik(BRAP) Browser- und Anwendungsforensik (engl. Browser and Application Forensics) ist ein Teilgebiet des Computer Activity Mining (CAM), bei dem Aktionen des Computers durch Spuren auf diesem Computer selbst nachvollzogen werden [Berghel, 2008]. Bei Ermittlungen werden häufig Computer bzw. Festplatten oder FestplattenImages konfisziert, die danach untersucht werden müssen. Während klassische Dateisystemforensik auf die Wiederherstellung und Sicherung von gelöschten oder versteckten Daten abzielt, nutzt CAM eher das Verhalten oder Vorgehen des Nutzers aus. Dies geschieht häufig auf der Basis von lokalen Logdateien. BRAP verbindet beides durch die Analyse der Programme, sogenanntes Application Footbzw. Fingerprinting. D. h. es werden bestimmte möglichst eindeutige Merkmale der Programme betrachtet und diese Merkmale dazu genutzt, Spuren dieser Programme später wiederzuerkennen. Dies ist auch teilweise aus dem Internet möglich, z. B. bei Browsern. Wichtig sind also die Spuren, die eine Anwendung hinterlässt und welche Bedeutung diese haben und welche Informationen darin enthalten sind (siehe auch Studienbrief 3 dieses Moduls). BRAP-Forensik baut eher auf technisch unvermeidbaren Spuren auf, d. h. Spuren, die ohne direkte Einflussmöglichkeit des Benutzers von der Anwendung hinterlassen werden (siehe Modul 10, Grundlagen digitaler Forensik). Diese Spuren sind typischerweise schwerer gänzlich zu vermeiden und meist schwer zu manipulieren. Gerade auch vor Gericht spielt CAM eine wichtige Rolle bei der elektronischen Auswertung. Sehr häufig wird mittels CAM nach Spuren und Beweisen für Straftaten gesucht. Dies wird vor allem bei Fällen angewendet, die Computerbetrug oder -sabotage, sexuelle Belästigung, Kinderpornografie, EULA-Lizenzverstöße oder Identitätsdiebstahl beinhalten. Durch die große Verbreitung des Internets, egal ob Smartphone, Laptop, PC oder sogar Navigationsgeräte und Entertainment-Systeme im Auto, spielt BrowserForensik bei vielen Untersuchungen eine Rolle und kann den entscheidenden Ausschlag geben, wie die Beispiele von oben gezeigt haben. Wir gehen im Folgenden zunächst auf die klassische Browserforensik ein, also die Analyse von Spuren in/von Web-Browsern. Im Anschluss folgt ein Überblick über Themen in der Anwendungsforensik. Beide Abschnitte sollen schlaglichtartig in das Thema einführen. 1.4.1 Browserforensik Der Besuch einer Webseite hinterlässt Spuren in der Browser History und im Browser Cache. Es erfolgen Einträge von Cookies, Veränderungen von Zeitstempeln und den Logdateien des Webservers. Außerdem werden Caches im Netz (HTTP, DNS) verändert. Da HTTP zustandslos ist, verwenden fast alle kommerziellen Seiten Cookies, deren Inhalt mit Parsertools angezeigt werden kann (siehe Abbildung 1.7). Interessant ist bei den Cookies, dass sie teilweise für 10 Jahre gültig sind. Beim Besuch der Website www.microsoft.com werden beispielsweise sieben Cookies von webtrends.com, atdmt.com, indextools.com und dcstest.wtlice.com angelegt [Berghel, 2008]. Auch der Browser-Cache kann mit entsprechenden Tools geparst werden. Im Firefox geht es sogar noch einfacher durch Eingabe von about:cache in der Browserzeile. Im Internet Explorer können diese Informationen nur von Hand gelöscht werden, während in Firefox das Löschen flexibler ist (z. B. bis Anwendung geschlossen wird). 1.4 Browser- und Anwendungsforensik(BRAP) Seite 15 Figure1a. ExampleWebTrends cookie. leAbb. 1.7: Beispiele von tigespeicherten Cookies b[Berghel, 2008] ri p H (I B re a sh co p IE cl d B Seit kurzem gibt es den sogenanntenprivate browsing-Modus in allen gängigen Browsern, der es dem Benutzer ermöglichen soll unerkannt zu surfen. Dieser Modus soll vor allem verhindern, dass ein lokaler Angreifer im Browserverlauf nachvollziehen kann, was der Benutzer gemacht hat. Zu diesem Zweck wird die Ablage von Daten auf dem Computer nach Möglichkeit vermieden. Beispielsweise werden kein Verlauf oder keine Cookies mehr gespeichert. Zudem soll ein Angreifer im Netz keine private und public sessions sowie private sessions untereinander verknüpfen können. D. h. es soll nicht möglich sein, einen Computer im öffentlichen Modus zu identifizieren und ihn im privaten Modus verfolgen zu können. Weiterhin soll ein Browser im privaten Modus nicht über Neustarts hinweg identifizierbar sein. Außerdem soll ein Webserver nicht herausfinden können, ob private browsing überhaupt eingeschaltet ist. Eine Studie von Aggarwal et al. [2010] untersucht den privaten Modus in den vier gängigsten Browsern Firefox, Safari, Chrome und dem Internet Explorer. Wir gehen im Folgenden auf die Ergebnisse dieser Studie näher ein, da sie die Möglichkeiten und Grenzen der Browserforensik deutlich vor Augen führt. In Abbildung 1.8 geht es um den Wechsel vom public Modus in den privaten Modus. Die Blockierung des Zugriffs soll die Verbindung von private sessions mit früheren public sessions vermeiden. Safari ignoriert hier das Szenario „Angreifer im Netz“ und gibt den Zugriff auf History, Cookies und HTML5 lokale Daten frei, im Gegensatz zu den anderen Browsern. Alle Browser erlauben jedoch die Verwendung von SSL Zertifikaten, was inkonsistent mit der Verwendung von Cookies ist. Kritisch ist auch das Ausschalten des privaten Modus, also der Wechsel von private zurück zu public (s. Abbildung 1.9). Dabei sollen möglichst wenige Daten aus der privaten Session übrig bleiben, um einem lokalen Angreifer nicht zu ermöglichen auf diese Session Rückschlüsse ziehen zu können. Bookmarks und Downloads bleiben hier bei allen Browsern erhalten, der Benutzerfreundlichkeit halber. Allerdings lässt sich daraus, bei einer hinreichenden Anzahl an neuen Bookmarks und Downloads, ohne Probleme der Browserverlauf nachvollziehen. Innerhalb einer private session sollen möglichst wenig persistente Spuren auf der Festplatte hinterlassen werden. Inkonsistent ist hier bei allen Browsern der Verlauf. private browsing Seite 16 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Abb. 1.8: Ist ein Zustand aus früheren public Modi im privaten Modus erreichbar? [Aggarwal et al., 2010, Tab. 1] Web Cache Swap-File History Cookies HTML5 local storage Bookmarks Password database Formautocompletion User approved SSL self-signed cert Downloaded items list Downloaded items Search box search terms Browser’s web cache Client certs Customprotocol handlers Per-sitezoomlevel FF no no no yes yes yes yes no yes yes no yes yes no Safari yes yes yes yes yes yes yes yes yes yes no yes n/a n/a Chrome no no no yes yes yes yes yes yes yes no yes n/a yes IE no no no yes yes no yes n/a yes yes no yes n/a n/a Während die History nicht gespeichert wird, bleibt derWeb Cache des Browsers erhalten. Zwar speichert Firefox Cookies und den Web Cache nur temporär im Hauptspeicher, doch können diese Daten bei hoher Hauptspeicherbelastung in das sogenannteSwap-File ausgelagert und somit doch auf Festplatte gespeichert werden. Kontrollaufgabe 1.1 K Überprüfen Sie eine der Erkenntnisse von Aggarwal et al. [2010] aus Abbildung 1.10 in der aktuellen Version Ihres eigenen Browsers. Insgesamt zeigt die Studie von Aggarwal et al. also deutliche Lücken bei den Browsern auf, die vor allem zugunsten der Benutzerfreundlichkeit bestehen bleiben. Z. B. möchte man häufig nicht, dass Downloads nach dem Beenden des Browsers von der Festplatte verschwinden. Nichtsdestotrotz ist anhand dieser Daten ein Zurückverfolgen des Browserverlaufs, sogar in zeitlicher Reihenfolge möglich, wenn man auch noch Dateizeitstempel beachtet. whitelist Fingerprinting Eine weitere Schwachstelle sind die Browser-Addons, die meist ohne Rücksicht auf private browsing entwickelt wurden und trotz eingeschaltetem private browsing Modus Daten auf dem Rechner speichern. Das Security-AddOn NoScript speichert zum Beispiel eine Liste von Webseiten (whitelist) auf der Festplatte, für die Javascript erlaubt ist. Diese Liste ist auch nach dem Browserneustart erreichbar. Surft ein Nutzer im privaten Modus und schaltet eine Webseite in NoScript frei, so ist trotz private browsing ersichtlich, dass er diese Seite besucht hat. Weiterhin können Browser durch Fingerprinting aus dem Netz identifiziert werden, was umso besser funktioniert, je mehr Anonymisierungsfunktionen eingeschalten sind. Der Webserver kann viele Daten aus dem Client abfragen, bzw. bekommt sie teilweise automatisch geschickt. Die meisten Browser senden nämlich ihren Namen, sowie Version, Betriebssystem und Sprache bzw. Zeichensatz automatisch mit jedem HTTP-Header an die Webserver (Variable User Agent). Neben den Cookies sind auch eindeutige Informationen per AJAX übertragbar, wie etwa 1.4 Browser- und Anwendungsforensik(BRAP) History Cookies HTML5 Local storage Bookmarks Password database Formautocompletion User approved SSL self-signed cert Downloaded items list Downloaded items Search box search terms Browser’s web cache Client certs Customprotocol handlers Per-sitezoomlevel FF no no no yes no no no no yes no no yes yes no Seite 17 Safari no no no yes no no yes no yes no no n/a n/a n/a Chrome no no no yes no no yes no yes no no n/a n/a no IE no no no yes no no yes n/a yes no no yes n/a n/a Abb. 1.9: Ist ein Zustand aus früheren privaten Modi im public Modus erreichbar? [Aggarwal et al., 2010, Tab. 2] die Zeitzone, Bildschirmauflösung, Browser Plugins mit Versionsnummer und Systemschriftarten (siehe Abbildung 1.11). . Eckersley [2010] hat dieses Phänomen im Rahmen des Projekts “Panopticlick” untersucht. Dazu brachte er mehr als 400.000 Benutzer dazu, die Webseite http: //panopticlick.eff.org zu besuchen. Von diesen Besuchern wurde der BrowserFingerprint genommen. Das Ergebnis der Untersuchung zeigt Abbildung 1.12. Es ist ein Histogramm der gemessenen Fingerprints: Auf der x-Achse werden die verschiedenen Fingerprints gelistet, auf der y-Achse deren Häufigkeit (die Fingerprints sind nach abnehmender Häufigkeit sortiert). Die Größe der Menge ist jeweils ein Maß für die Anonymität, die man als Besucher hat (Anonymitätsmenge). Gehört man mit dem eigenen Fingerprint also in eine der häufiger auftretenden Fälle (weiter links), so ist man innerhalb dieser großen Menge nicht von anderen zu unterscheiden. Liegt der eigene Fingerprint weiter rechts auf der Skala, wird die Anonymitätsmenge immer kleiner, bis sie irgendwann die Größe 1 erreicht, mit dem Ergebnis, dass der eigene Fingerprint eindeutig ist. Anonymitätsmenge Interessant ist folgende Beobachtung: Je mehr Einstellungen man selbst am Browser vorgenommen hat, also je weiter man von der „Basisversion“ abweicht, umso besser ist man identifizierbar. In der Studie von Eckersley [2010] stellte sich heraus, dass 83,6% aller Fingerprints eindeutig sind und weitere 5,3% einer von Zweien ist. Wenn Flash oder Java installiert ist, sind sogar 94,2% eindeutig identifizierbar. Im Durchschnitt ist nur jeder 286.777 Browser-Fingerprint gleich, weshalb sich die meisten Browser eindeutig identifizieren lassen. Man beachte, dass die Skalen logarithmisch sind. Die im angesprochenen 83,6% eindeutige Fingerprints sind der Abschnitt ganz rechts unten (y = 1, x ab etwa einem Wert von 20.000). Kontrollaufgabe 1.2 Besuchen Sie die Seite http://panopticlick.eff.org und testen Sie die Einzigartigkeit Ihres Browsers. Unter wievielen Browser-Fingerprints ist ihr Browser identifizierbar? K Seite 18 Abb. 1.10: Ist ein Zustand an einem bestimmten Punkt einer privaten Session später wieder erreichbar innerhalb derselben privaten Session? [Aggarwal et al., 2010, Tab. 3] Studienbrief 1 Einführung in die Browser- und Anwendungsforensik History Cookies HTML5 Local storage Bookmarks Password database Formautocompletion User approved SSL self-signed cert Downloaded items list Downloaded items Search box search terms Browser’s web cache Client certs Customprotocol handlers Per-sitezoomlevel FF no no no yes no no no no yes no no yes yes no Safari no no no yes no no yes no yes no no n/a n/a n/a Chrome no no no yes no no yes no yes no no n/a n/a no IE no no no yes no no yes n/a yes no no yes n/a n/a 1.4.2 Anwendungsforensik Browser sind als universelle Anwendungen natürlich besonders interessant. Jedoch hinterlassen viele, wenn nicht sogar alle Anwendungen digitale Spuren. Wir gehen im Folgenden auf ein paar Beispiele ein. 1.4.2.1 Word-Dateien Es ist seit langem bekannt, dass Microsoft Word-Dateien „versteckte“ Daten enthalten [Byers, 2004]. Dazu zählen auch Informationen, die in Word selbst nicht ausgelesen werden können, bis vor einiger Zeit etwa die Änderungshistorie des Dokumentes. Weitere Beispiele für “versteckte” Daten sind der Benutzername des Autors, Informationen über Hardware (Drucker, letzter Zeitpunkt des Druckens) und teilweise sogar gelöschten Text. Mit Tools wie strings oder das Betrachten der Word-Datei in einem Hex-Editor sind häufig schon einige Daten auslesbar. Für die weitere Analyse kommt man nicht umhin, das MS Word-Format selbst zu analysieren. K Kontrollaufgabe 1.3 In manchen Versionen von Microsoft Word kann bei der richtigen Wahl der Einstellungen folgendes passieren: Sie öffnen ein Word-Dokument, drucken es aus und schließen das Dokument. Word fragt Sie anschließend, ob Sie das Dokument speichern möchten, obwohl Sie das Dokument nicht verändert haben. Was ist passiert? Das Irak-Dossier. Um zu verdeutlichen welche kritischen Informationen in solchen versteckten Daten enthalten sein können, folgt nun ein reales Beispiel, bei dem versteckte Daten für öffentlichen Aufruhr sorgten. Im Jahr 2003 wurde von der britischen Regierung ein Dossier über die vom Irak ausgehenden Gefahren erstellt und an den damaligen US-Außenminister Colin Powell übermittelt. Diese Informationen wurden später in einer Anhörung vor den 1.4 Browser- und Anwendungsforensik(BRAP) 5 V ariable User Agent HT T P ACCEPT headers Cookies enabled? Screen resolution T imezone Browser plugins, plugin versions and MIME types System fonts Partial supercookie test Source R emarks Transmitted by HT T P, Contains Browser micro-version, OS logged by server version, language, toolbars and sometimes other info. Transmitted by HT T P, logged by server Inferred in HT T P, logged by server J avaScript AJ AX post J avaScript AJ AX post J avaScript AJ AX post Sorted beforecollection. Microsoft Internet Explorer offers no way to enumerate plugins; we used the PluginDetect J avaScript library to check for 8 common plugins on that platform, plus extra code to estimate the Adobe Acrobat Reader version. Flash applet or J ava Not sorted; see Section 6.4. applet, collected by J avaScript/ AJ AX J avaScript AJ AX post We did not implement tests for Flash LSO cookies, Silverlight cookies, HT ML 5 databases, or DOM globalStorage. Vereinten Nationen dazu benutzt, um einen Angriff auf den Irak zu rechtfertigen. Später wurde das Dokument als Word-Datei online gestellt.1 Wie sich später herausstellte, wurden größere Teile des Textes aus einer Ausarbeitung eines Studenten kopiert, ohne die korrekte Quelle anzugeben. Dies war peinlich genug. Noch peinlicher wurde es allerdings, als Forscher begannen, die versteckten Metadaten des Dokuments zu untersuchen. Diese enthielten, neben anderen Informationen, auch die Benutzerkennungen der Autoren der letzten zehn Änderungen (siehe Abbildung 1.13). Des Weiteren kann man den Daten entnehmen, dass die Word-Datei auf eine Diskette kopiert wurde (A:\). Im Verlauf wurde die Datei offenbar vom Benutzer “cic22” zuletzt editiert. Dieses Kürzel gehörte offenbar zum „Communications Information Centre“, also zum Presseamt der britischen Regierung. Der Verlauf zeigt weiter die Benutzer phamil, jpratt, ablackshaw und MKhan, die später als Mitarbeiter der Regierung identifiziert wurden. Die Kennung phamil gehörte offenbar Paul Hamill, einem Mitarbeiter des Außenministeriums. Die Kennung jpratt konnte John Pratt zugeordnet werden, einem Mitarbeiter des britischen Premierministers Tony Blair, und die Kennung ablackshaw gehörte offensichtlich Alison Blackshaw, der persönlichen Assistentin von Blairs Pressesprecher. Im Verlauf an letzter Stelle stand die Kennung MKahn, die später einem gewissen Murtaza Khan zugeordnet werden konnte. Dieser gehörte offenbar zur Gruppe von Personen, die zuerst die Datei bearbeitet hatten. Brisant an dem Vorgang war nun, dass Murtaza Kahn eine Art „Praktikant“ in der Pressestelle von Blair war. Die Tatsache, dass ein unerfahrener Neuling die erste Version eines so wichtigen Dokumentes erstellte, erklärte einerseits die mangelhafte Qualität der Quellenangaben und setzte andererseits die Gewissenhaftigkeit der Regierung Blair in ein schlechtes Licht. 1 Das Dossier wurde für die Nachwelt online archiviert und war am 26.10.2012 unter http://www.casi. org.uk/discuss/2003/msg00457.html verfügbar. Eine ausführliche Diskussion findet sich auch auf der folgenden Webseite: http://www.computerbytesman.com/privacy/blair.htm (aufgerufen am 26.10.2012). Seite 19 Abb. 1.11: Serverseitig verfügbare Browser-Infos [Eckersley, 2010, Tab. 1] Seite 20 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Abb. 1.12: Eindeutigkeit von Browser-Fingerprints [Eckersley, 2010, Fig. 1] Abhilfe. In neuen Versionen von Microsoft Word hat man auf die Gefahren versteckter Informationen reagiert und bietet Funktionen wie “Für Freigabe vorbereiten” an. K Kontrollaufgabe 1.4 Rufen Sie ein kürzlich von Ihnen erstelltes Word-Dokument auf und betrachten Sie die Dokumentinformationen. Suchen Sie die Funktion “Für Freigabe vorbereiten”. Welche Informationen werden dadurch aus der Datei entfernt? Wiederholen Sie das Experiment mit einem Ihnen zugeschickten Word-Dokument. 1.4.2.2 Geschwärzte PDF-Dokumente Ein weiteres gängiges Format für Texte aller Art sind PDF-Dateien. Das PDFFormat ist in seiner neusten Version sehr komplex geworden und enthält viele Features. In vielen Kontexten werden diese Features falsch angewendet, etwa bei der Unkenntlichmachung (Schwärzung) von Text, etwa in veröffentlichten Gerichtsoder Regierungsakten. Probleme treten auf, wenn etwa eine Schwärzung durch weißen Text auf weißem Hintergrund bzw. schwarzem Text auf schwarzem Grund gelöst wird. Dies kann meist durch einfaches Copy&Paste umgangen werden. Auch wenn im PDF-Dokument eine Schwärzung durch die Überlagerung mit schwarzen Balken realisiert wird, lassen sich die Balken spätestens bei Betrachtung des PDF-Quelltextes entfernen. Wirksames Schwärzen ist also ziemlich schwer und die einzige sichere Variante besteht vermutlich darin, den Text auszudrucken, zu schwärzende Stellen auszuschneiden und den Text wieder einzuscannen. 1.4 Browser- und Anwendungsforensik(BRAP) Seite 21 Abb. 1.13: WordMetadaten des IrakDossiers [Berghel, 2008] 1.4.2.3 Thumbnails in Bildern Thumbnails sind kleinere Versionen von Bildern, die der Windows Explorer anzeigt. Sie werden in der DateiThumbs.db zwischengespeichert und bleiben erhalten, selbst wenn die Original-Dateien gelöscht werden. Gleiches trifft auch auf Vorschaubilder zu, die in den sogenannten EXIF-Daten von Bildern gespeichert werden. Bei EXIFDaten handelt es sich um zusätzliche Metadaten, die einem Bild im Dateiformat zugeordnet werden. Diese werden in der Regel als Name/Wert-Paare gespeichert, d.h. zu einem gegebenen Namen enthält das Format einen Wert. Grafikprogramme verändern die EXIF-Daten derjenigen Einträge, die sie kennen. Die Einträge, die sie nicht kennen, bleiben unverändert. Bildveränderungen (z.B. Zuschneiden) können durch Auslesen dieser Daten also manchmal rekonstruiert werden. Eine Studie von Murdoch and Dornseif [2004] zeigt, dass öffentliche Bilder im Internet häufig manipuliert worden sind. Eine Zusammenfassung einiger Funde zeigt Abbildung 1.14. Das jeweilig größere Bild zeigt die im Netz gefundene Datei, das kleinere den damit verbundenen Thumbnail. Diese Dateien gehören zur Kategorie „abgeschnittene Freunde“, bei denen „unpassende“ Personen entfernt wurden. Besonders kritisch sind die versteckten Daten jedoch, wenn die Bildveränderung eigentlich ein Akt der Anonymisierung sein sollte. Die Abbildungen 1.15 und 1.16 bzw. 1.15 und 1.16 zeigen, welche Informationen Thumbs.db Seite 22 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Abb. 1.14: Beispiele für rekonstruierte Bilder [Murdoch and Dornseif, 2004] in einem vermeintlich anonymisierten Bild stecken können. Obwohl das restliche Bild unscharf ist (aufgrund der geringen Auflösung des Thumbnails), lässt sich trotzdem noch die Person erkennen. Abb. 1.15: Beispiel für ein vermeintlich anonymes Bild im Internet (Kategorie „Ausschneiden zum Identitätsschutz“) Murdoch and Dornseif [2004] 1.4.3 Zusammenfassung Die vorgestellten Beispiele sollen die Mächtigkeit der Browser- und Anwendungsforensik verdeutlichen. In Anwendungsdaten stecken in der Regel sehr viele Informationen, zumal zu Anwendungsformaten häufig keine (öffentliche) Dokumentation existiert. Als universelle Standardanwendungen sind Browser natürlich besonders interessant und werden darum auch im Titel dieses Moduls hervorgehoben. Wer die Spuren des Browsers entschlüsseln kann, der kann auch viel über die OnlineAktivitäten des Benutzers aussagen. Anwendungsdaten stecken aber auch im Betriebssystem selbst. Ein Beispiel sind die Daten, die im Windows-Papierkorb vorgehalten werden, denn diese enthalten nicht nur den ursprünglichen Speicherort sondern auch den Löschzeitpunkt [Berghel, 2008]. Der Schlüssel zum Verständnis von Anwendungsdaten liegt in der Analyse der Datenformate selbst. Für viele Standardfälle gibt es dazu bereits Werkzeuge. Jedoch wird man in der Praxis auch häufig vor bisher wenig untersuchten Dateiformaten stehen. Darum ist es wichtig, Techniken zu erlernen, wie man unbekannte 1.5 Mobilfunkforensik Seite 23 Abb. 1.16: Bild aus Abbildung 1.15 nach Wiederherstellung mittels Thumbnail [Murdoch and Dornseif, 2004] Abb. 1.17: Weiteres Beispiel aus der Kategorie „Ausschneiden zum Identitätsschutz“ [Murdoch and Dornseif, 2004] Dateiformate untersuchen kann. Diese Techniken werden insbesondere in Studienbrief 3 im Mittelpunkt des Interesses stehen. Insgesamt wird Anwendungsforensik auch in Zukunft aktuell bleiben, weil davon auszugehen ist, dass immer neue Anwendungen entstehen werden. 1.5 Mobilfunkforensik Als Spezialfall der Anwendungsforensik betrachten wir im Folgenden die Analyse von Mobiltelefonen. Die Zahl der Mobiltelefone hat sich von 1996 bis 2007 versechsfacht –– Tendenz steigend (siehe Abbildungen 1.19 und 1.20). Gleichzeitig hat der Funktionsumfang sehr stark zugenommen, während man früher „nur“ telefonieren konnte, surft man heute mit seinem Smartphone auf Facebook, checkt seine E-Mails und fragt Siri nach dem Wetter morgen. Das Handy wird immer mehr zum mobilen Computer und Laptop-Ersatz. Man unterscheidet heute zwischen klassischen Mobiltelefonen (so genannten feature phones) und Smartphones. Eigentlich sind beides auch nur “normale” Computer, die unter anderem auch telefonieren können. Aus forensischer Sicht gibt es allerdings deutliche Unterschiede zum PC, da meist proprietäre Betriebssysteme und wenig-untersuchte Dateisysteme verwendet werden. Standardisierte Strukturen, wie sie aus der Dateisystem- und Speicheranalyse im Desktop-Bereich lange bekannt sind, sind bisher wenig erforscht. Standardtools aus dem Desktop-Bereich (wie etwa dd) sind zumeist auch nicht einsetzbar. Problematisch ist vor allem die Tatsache, dass Mobiltelefone den Zugang zum internen Speicher mit speziellen Hardware-Schutzmechanismen versperren. Man kann bei Mobiltelefonen in der Regel also nicht “einfach so” die Festplatte (sprich: den Speicherchip) ausbauen oder von einer Live-CD booten. Aufgrund der wachsenden Bedeutung der Mobilfunkforensik wollten wir uns Seite 24 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Abb. 1.18: Bild aus Abbildung 1.17 nach Wiederherstellung mittels Thumbnail [Murdoch and Dornseif, 2004] nun mit diesem Thema auseinandersetzen. Zu Beginn werden die Zugriffsmöglichkeiten dargestellt. Danach folgen kursorische Abschnitte zu den SmartphoneBetriebssystemen und deren Analyse. Abschließend wird noch das Analysetool ADEL vorgestellt, welches am Lehrstuhl für IT-Sicherheitsinfrastrukturen der FAU entwickelt wurde. Abb. 1.19: Überwachungsmaßnahmen der Telekommunikation (Bundesnetzagentur, zitiert nach Spreitzenbarth [2009]) 1.5.1 Zugriff auf Smartphones und Mobiltelefone Bei Smartphones gibt es trotz aller Schwierigkeiten verschiedene Möglichkeiten, Zugriff auf die gespeicherten Daten zu bekommen. Die besten Ergebnisse werden durch das Auslöten des Flash-Speicherbbausteins erzielt. Diese Methode ist allerdings aufwendig und teuer (die dazu benötigte Spezialhardware kostet schätzungs- 1.5 Mobilfunkforensik Seite 25 Abb. 1.20: Anzahl sichergestellte Mobiltelefone beim BKA, Abteilung TESIT-6 (BKA, zitiert nach Spreitzenbarth [2009]) weise 20.000€). Das Auslöten des Speichers hat den Vorteil, dass keine (unbekannte) Software (Betriebssystem oder App) zwischen Flashspeicher und Ausgabe agiert. So können in diesem Fall Manipulationen zur Laufzeit ausgeschlossen werden. Verhältnismäßig sicher ist auch der Zugriff über die so genannte JTAG-Schnittstelle.2 Die Abkürzung JTAG steht für “Joint Test Action Group” und stellt eine HardwareDebug-Schnittstelle zur Verfügung, die jedoch nicht auf allen Telefonen vorhanden ist. Zum Auslesen ist außerdem wieder Spezialhardware (ca. 200€) erforderlich. Die Ergebnisse sind entsprechend gut zu verwenden. Eine billigere Variante sind sogenannte Software Agents, also Apps, die auf dem Gerät installiert werden. Sie greifen auf die Systemdatenbanken auf Basis ihrer Berechtigungen zu. Hierzu sind jedoch Veränderungen auf dem Gerät notwendig und die Ergebnisse könnten durch Shadow-Datenbanken gefälscht sein. Eine ShadowDatenbank ist eine zweite, gefälschte Datenbank, die unautorisierten Nutzern angezeigt wird. Herkömmliche Software-Lösungen werden auf dem PC installiert und greifen über ein Datenkabel auf das Telefon zu. Dazu werden allerdings die Treiber des Smartphones verwendet, deren Konsistenz aus forensischer Sicht fragwürdig sein kann. Dieser Fall ist ähnlich zur Benutzung des Betriebssystems des Beschuldigten in der Live-Analyse (siehe Modul 13). Außerdem ist der Zugriff über Treiber bzw. Betriebssystem eingeschränkt (siehe auch Kapitel 1.5.3). Bei Android-Smartphones gibt es noch eine Speziallösung, die Entwicklerschnittstelle adb (Android Debug Bridge), die ähnlich wie herkömmliche SoftwareLösungen arbeitet, jedoch nicht auf den Treibern des Smartphones aufsetzt.3 Diese Schnittstelle kann über einen mit dem Smartphone verbundenen Computer angesprochen werden. Hierdurch können Logfiles ausgelesen werden, Daten hochund heruntergeladen werden usw. Im Gegensatz zu Smartphones sind die Zugriffsmöglichkeiten bei herkömmlichen Mobiltelefonen etwas eingeschränkter. Tabelle 1.1 vergleicht einige Aspekte beider 2 3 Mehr Informationen zu JTAG sind unter http://www.mikrocontroller.net/articles/JTAG zu finden. Mehr Informationen zu adb finden Sie unter http://developer.android.com/guide/developing/ tools/adb.html. JTAG-Schnittstelle Software Agents Seite 26 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Geräteklassen. Bemerkenswert ist, dass bei Mobiltelefonen in der Regel der Zugriff auf den internen Speicher nur durch Auslöten oder über JTAG funktioniert. Tabelle 1.1: Vergleich Mobiltelefon vs. Smartphone Mobiltelefone proprietäres Dateisystem closed source ohne Dokumentation geringer Funktionsumfang geringe Speicherkapazität nur JTAG/Auslöten Speicherbaustein Smartphones (meist) bekannte Dateisysteme allerdings: Schutzmechanismen (oft) open source hoher Funktionsumfang hohe Speicherkapazität zusätzlich: Softwarelösungen, Schnittstelle adb usw. Um die Schwierigkeiten bei der Analyse auf Daten aus Mobiltelefonen zu verdeutlichen, wird nun die Analyse einer SMS auf einem Nokia Series 40 dargestellt (basierend auf Spreitzenbarth [2009]). Die SMS liegt auf dem Smartphone als einfacher Binärstrom vor (siehe Abbildung 1.21). Dieser muss jedoch manuell nachvollzogen werden, da kein einheitlicher Standard existiert. Abb. 1.21: Aufbau einer SMS Spreitzenbarth [2009] In Abbildung 1.22 ist die SMS genauer beschrieben. Interessant sind hierbei aus forensischer Sicht vor allem Daten wie die Nummer des Absenders, das Datum und der Inhalt der Mitteilung. Das Datum liegt dabei im Format YYMMDDHHMMSS vor, wobei die einzelnen Zeichen Byte für Byte vertauscht werden. Ein Wert von “90” ist also als “09” zu interpretieren. Die SMS ist somit am 16.04.09 um 20:04:49 Uhr von der Nummer +491705489447 versendet worden. Der Inhalt der SMS ist mit einem 127 bit GSM Alphabet codiert, das auf einem ASCII-Alphabet basiert. Für genauere Informationen zum Decodieren der Nachricht siehe Spreitzenbarth [2009]. Abb. 1.22: Detaillierter Aufbau einer SMS [Spreitzenbarth, 2009] 1.5.2 Smartphones: Überblick über die Systeme Es gibt verschiedenste Smartphones und Smartphone-Betriebssysteme. Zu den am weitesten verbreiteten Systemen zählen Android, Symbian, iOS und Research In Motion (RIM). Microsoft spielt trotz seiner Bekanntheit bei den PCBetriebssystemen eine eher untergeordnete Rolle (siehe Abbildung 1.23). In den folgenden Unterkapiteln werden nun einige dieser Systeme kursorisch vorgestellt. 1.5 Mobilfunkforensik Seite 27 Abb. 1.23: Anzahl Smartphones nach Typ (zitiert nach Spreitzenbarth [2009] 1.5.2.1 Apple iOS iOS basiert auf Mac OS X, welches Ähnlichkeiten zu Unix besitzt und auf Smartphones, Tablets und TV-Boxen eingesetzt wird. Die Synchronisation erfolgt über iTunes oder iCloud. Dies kann bei der forensischen Analyse ausgenutzt werden, wobei jedoch deutlich mehr Daten direkt auf dem iPhone vorliegen als auf dem Backup. Dabei handelt es sich beispielsweise um den Keyboard Cache, gelöschte Daten, GoogleMaps-Sucheinträge, Browser-Cache usw. 1.5.2.2 Google Android Googles Smartphone-Betriebssystem beruht auf einem modifizierten Linux, welches, wie iOS, auf Smartphones, Tablets und TVs eingesetzt wird. Es ist größtenteils als open source Software verfügbar, was die Analyse deutlich vereinfacht. Außerdem ist der Zugriff über die adb-Schnittstelle wesentlich leichter und billiger als andere zuverlässige Verfahren. Zum Zugriff auf die Daten im Rahmen einer forensischen Analyse gibt es mehrere Ansätze, die oben bereits näher beschrieben wurden, wobei die Entwicklerschnittstelle adb herausragt. Wir werden später in Abschnitt 1.5.4 nochmals auf dieses Thema zurückkommen. 1.5.2.3 (Microsoft) Windows Phone Microsoft verwendet für seine Smartphones die eigene Windows Win32 API, was die Parallelen zu Windows 7 bzw. Windows 8 erklärt. Das Betriebssystem ist auf Smartphones verschiedener Hersteller zu finden. In Bezug auf die forensische Analyse ist das Windows Phone noch relativ unerforscht, vermutlich auf Grund der geringeren Verbreitung. 1.5.2.4 RIM Blackberry Das System RIM Blackberry ist closed source und wird auf Smartphones und Tablets eingesetzt. Tragende Rolle übernimmt der Blackberry Enterprise Server (BES), der für Synchronisation und Backup sorgt. Die Kommunikation mit dem Server erfolgt verschlüsselt. Apps basieren auf Java und QNX. Die forensische Analyse von Blackberry ist ziemlich unerforscht, da, deutlich einfacher, der Enterprise Server sichergestellt und untersucht werden kann. Seite 28 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik 1.5.3 Root-Zugriff und Datenanalyse bei Android Wir gehen nun etwas spezifischer auf die Möglichkeiten einer forensischen Datenanalyse bei Android ein. Da Android auf Linux basiert, werden die Berechtigungen typischerweise in User und Group eingeteilt. Besonders interessante Stellen im Android-Dateisystem sind ausserdem vor der Analyse besonders geschützt. Die einzige Möglichkeit, diesen Schutz zu umgehen, ist das Erlangen von root-Rechten. In der Regel ist es durch die Hersteller von Android-Smartphones unerwünscht, wenn Benutzer root-Rechte auf dem Telefon besitzen, da diese dann beliebige Veränderungen am System vornehmen können. Dennoch gibt es neben verschiedenen Schwachstellen, die mittels einex Exploits root-Zugang ermöglichen, mittlerweile auch “offizielle” Wege. Bei Samsung und HTC etwa werden bereits Smartphones verkauft, die einen offenen Bootloader besitzen. Über diesen kann man ein modifiziertes Betriebssystem booten (analog zum Booten mittels einer Live-CD). Die angesprochenen root-Exploits sind in der Regel nur für ältere Versionen von Android verfügbar. Diese erlauben das so genannte “rooten” des Telefons und anschließend das Austauschen des Kernels. In einem solchen modifizierten Kernel kann man dann eine root-Shell erhalten, mit der man privilegierte Systembefehle absetzen kann. In Android gibt es verschiedene Stellen im Dateisystem, an denen sich interessante Daten verbergen. Jede App hat eine eigene Datenbank (SQLite), deren Daten unter /data/data/ und /sdcard/data/data/ liegen. Dokumente, Musik und Bilder sind unter /sdcard/ zu finden. Außerdem hat jede App ihren eigenen Arbeitsspeicherbereich. Die SQLite-Datenbank lässt sich mit Parsern verhältnismäßig einfach darstellen. Dadurch ist der Zugriff beispielsweise auf SMS wesentlich einfacher als bei Mobiltelefonen, deren SMS-Format erst aufwendig ermittelt werden muss (siehe oben). Struktur der Daten Dalvik Debug Monitor Server Wear-Levelling Chunks Der interne Flash-Speicher ist in der Regel mit einem YAFFS2- oder EXT4Dateisystem formatiert, während die Speicherkarte Dateisysteme mit FAT oder EXT3 beherbergt. Der Arbeitsspeicher liegt in Form einer leicht modifizierten hprof-Variante vor. Bilder sind im JPEG-Format ggf. mit EXIF-Erweiterung (siehe Abschnitt 1.4) vorhanden und können zusätzliche Informationen wie GPSKoordinaten, Typ der Kamera und Zeitstempel beinhalten. FAT, EXT3 und EXT4 sind bekannte Formate, die einfach ausgelesen werden können. Mit dem ProgrammDalvik Debug Monitor Server können sogar die hprof-Daten im RAM analysiert werden. Obwohl YAFFS2 ein offener Standard ist, ist es nicht sehr gut erforscht und erfasst [Spreitzenbarth et al., 2011]. Die ungenaue Dokumentation kommt vor allem bei Wear-Leveling und Garbage-Collection zum tragen. Wear-Leveling ist eine Technik, die von SSDs und USB-Sticks verwendet wird, um die Lebenszeit der Hardware zu verlängern. Dabei werden Schreibzugriffe möglichst gleichmäßig verteilt. GarbageCollection gibt nicht genutzten Speicher wieder frei. Das YAFFS2-Dateisystem wurde extra für NAND-Flashspeicher entwickelt und ist inChunks und Blöcke, entsprechend dem NAND-Speicher, gegliedert. Blöcke werden in Chunks beschrieben, können jedoch nur als Ganzes gelöscht werden. Der Speicher ist in YAFFS2 in Objekte gegliedert, die Daten, Hard Links, Soft Links oder spezielle Objekte, wie Devices oder Pipes, beinhalten können. Beim Einhängen von YAFFS2 werden alle diese Informationen über das Gerät in den RAM geladen. Es wird dabei die Ordnerstruktur sowie eine Hash-Tabelle für die Objektnummern erzeugt. 1.5 Mobilfunkforensik Für die Blockverwaltung existieren mehrere Stadien, um belegte Blöcke,Bad Blocks, zu löschende Blöcke usw. zu identifizieren. Insgesamt werden 10 Zustände verwaltet, darunter FULL für volle Blöcke, EMPTY für Leere und DEAD für kaputte Blöcke, sogenannte Bad Blocks. Initial haben alle Blöcke den Status UNKNOWN, der durch einen Scan festgelegt wird. Interessant ist noch der Zustand ALLOCATING, der dem Block zugewiesen wird, der aktuell für Schreiboperationen verwendet wird, bis er komplett gefüllt ist. YAFFS2 beschreibt dabei die Chunks innerhalb eines Blocks und die Blöcke des NAND-Speichers in strikter sequentieller Reihenfolge solange leere Blöcke existieren. Dadurch kann ein chronologisches Logfile über die Modifikationen geführt werden und macht YAFFS2 zu einem sogenanntenlog-structured file system. Da keine Daten überschrieben werden, existieren eigentlich immer veraltete Blöcke, weshalb die oben angesprochene Garbage-Collection erforderlich ist. Seite 29 Bad Blocks log-structured file system Für weiter Infos zu YAFFS2 sei auf Spreitzenbarth et al. [2011] und Zimmermann and Spreitzenbarth [2012] verwiesen. 1.5.4 Android-Forensik mit ADEL Abschließend soll nun noch das Projekt ADEL (Android Data Extractor Lite) vorgestellt werden. ADEL ist ein Tool, dass Android-Systeme automatisch analysiert, in dem es die Daten in SQLite-Datenbanken mit Hilfe der Android Debug Bridge adb ausliest und forensisch untersucht [Freiling et al., 2011]. ADEL wurde für Android 2.x unter den Voraussetzungen der forensischen Korrektheit, der Erweiterbarkeit und der Bedienbarkeit entwickelt. Forensisch korrekt bedeutet, dass keine Daten verändert werden, weder vom Benutzer, noch von einem Betriebssystem. Um dieses Ziel zu erreichen arbeitet ADEL lediglich lesend (read only) auf Kopien und fertigt Hashes vor und nach jeder Bearbeitung an. Das Programm ist in Python geschrieben und in Module eingeteilt, wodurch es erweiterbar ist und viele Apps bzw. deren Datenbanken analysieren kann. Eine Besonderheit von ADEL ist, dass es EXIF-Daten aus JPEGs, GPS und weitere ortsbestimmte Daten extrahieren, verknüpfen und daraus Bewegungsprofile erzeugen kann. Für die Bewegungsprofile werden geographische Daten aus Apps, wie beispielsweise der Twitter App, sowie aus System Cache-Datenbanken, Widgets und den Navigationsverläufen in GoogleMaps entnommen [Spreitzenbarth and Schmitt., 2012]). Selbst der Browser speichert lokale Suchen. Abb. 1.24: ADELBewegungsprofil [Spreitzenbarth and Schmitt., 2012] Seite 30 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Abbildung 1.24 zeigt ein Bewegungsprofil eines Test-Smartphones um den Brienzersee in der Schweiz. Kreise zeigen ungefähr den Standort an, an dem telefoniert wurde, eine Nachricht verschickt wurde oder ein Bild aufgenommen wurde (grünes JPG-Zeichen). Es wurden viele WiFi-Router erkannt und vermerkt, auf deren Basis sich der Weg des Smartphones nachvollziehen lässt. Die Ortung liegt dabei im Schnitt bei 50 bis 100 Metern, während sich die Daten von Mobilfunkgesellschaften im Bereich größer 500 Meter befinden. 1.5.5 Zusammenfassung Zusammenfassend spielt die Mobilfunkforensik in heutigen Untersuchungen eine nicht zu unterschätzende Rolle, da häufig der Nachweis einer Kommunikation im Fokus einer Ermittlung stehen kann und moderne Smartphones eine Vielzahl zusätzlicher Daten —- wie beispielsweise Bewegungsdaten –– liefern können. Solche Daten können in einem Verfahren gezielt dazu herangezogen werden, Aussagen zu überprüfen oder zu widerlegen (beispielsweise in Bezug auf einen Aufenthaltsort zu einer bestimmten Zeit im Falle der zuvor genannten Bewegungsdaten). 1.6 Verschleierungstechniken Zur Analyse unbekannter Anwendungen und Dateiformate bedient man sich häufig Techniken des Reverse Engineering (siehe auch Modul M15). Wir betrachten im Folgenden den Teil des Reverse Engineering, der sich auf die Rekonstruktion des Quellcodes aus übersetztem (Binär-)Code bezieht. In diesem Bereich gibt es mittlerweile viele Ansätze, um Reverse Engineering zu verhindern. Wir betrachten im Folgenden einige dieser Methoden im Überblick. Dieser Überblick soll es Ihnen erlauben, die praktischen Möglichkeiten der Anwendungsanalyse realistisch einschätzen zu können und die Arbeitsweise des „Gegners“ kennen zu lernen. (Verschleierung wird dabei manchmal auch mit dem englischen Begriff Obfuscation benannt.) Die Vorstellung der Techniken erfolgt nur kursorisch denn eine vertiefende Einführung mit Anwendungen auf die Malware-Analyse erfolgte bereits in Modul 15 (Reverse Engineering). control flow Verschleierungstechniken sollen den Quellcode und damit schlussendlich auch die Intention und den Zweck einer Software verbergen. Sie transformieren ein Programm in ein anderes Programm, sollen jedoch nicht die ursprüngliche Funktionalität verändern. Es ist also wichtig, dass trotz aller Verschleierung das transformierte Programm dasselbe Programmverhalten an den Tag legt und dabei effizient bleibt, d. h. die resultierende Laufzeit sollte vergleichbar mit der des ursprünglichen Programmabschnitts sein [Drape, 2004]. Ziel der Obfuscation ist es vor allem, den Kontrollfluss (control flow) so zu verkomplizieren, dass dessen eigentliche Funktionalität nicht mehr erkennbar ist [Majumdar and Thomborson, 2006]. Dabei wird meist auf objektorientierte Sprachen und sehr häufig auf kryptografische Verschlüsselung zurückgegriffen. Verschleierungstechniken sind ein zweischneidiges Schwert. Aus Sicht der Forensik stehen häufig dubiose oder gar strafbare Handlungen im Vordergrund, etwa die Analyse von Schadsoftware, Raubkopien oder plagiierten Codes. In einem solchen Fall spricht man auch häufig von Anti-Forensik. Es gibt jedoch auch legitime Anwendungen von Verschleierungstechniken, etwa zum Schutz geistigen Eigentums in Software (Schutz vor Raubkopien) [Wroblewski, 2002]. Allgemein wird bei der Analyse von verschleierter Software angenommen, dass sich das Programm unter der vollen Kontrolle des Rechners befindet, auf dem es läuft. Der Administrator, Antivirenhersteller oder sonstige Analytiker kann also zum Beispiel auf den kompletten (Binär-)Code des Programms zugreifen und die 1.6 Verschleierungstechniken Seite 31 aktuell verwendeten Daten verändern, beispielsweise innerhalb eines Debuggers Vrba and Halvorsen [2010]. Im Folgenden werden wir uns kurz mit der “Gegentechnik” zu Obfuscation, dem Reverse Engineering, beschäftigen. Danach folgt etwas Theorie zu Fragen der Verschleierung mit einigen Beispielen. Zum Schluss sehen wir uns einige Verschleierungstechniken genauer an. 1.6.1 Reverse Engineering Die Techniken des Reverse Engineering unterteilt man in der Regel in zwei Bereiche: die statische und die dynamische Analyse. Bei der statischen Analyse wird lediglich der Code der Schadsoftware mit Hilfe von Disassembler und Decompiler betrachtet. Im Gegensatz dazu wird bei der dynamischen Analyse das Programmverhalten zur Laufzeit unter Verwendung von Debuggern analysiert. Tabelle 1.2 nennt einige Programme, die für die statische und dynamische Analyse verwendet werden. Technik Disassembler (statisch) Decompiler (statisch) Java-Bytecode Javap/jasmine Jd/jad Debugger (dynamisch) Jdb/JDebugTool X86 Binärcode IDA pro Hexrays Decompiler (IDA Plugin) OllyDbg/Immunity Debugger statische Analyse Tabelle 1.2: Reverse Engineering Tools Im Folgenden konzentrieren wir uns der Einfachheit halber auf Java-Bytecode. Das gleiche Thema im Kontext von x86-Binärcode wird im Modul 15 (Reverse Engineering) genauer behandelt. Wir gehen die Schritte einer statischen Analyse einers binär vorhandenen Java-Fragments durch. Folgender Java-Bytecode soll im Folgenden beispielhaft statisch analysiert werden: Quelltext 1.1 06 3b 03 3c 1b 07 a2 00 15 1a 06 a3 00 0b 06 3b 84 01 01 a7 ff f1 06 3b a7 ff ec b1 Allgemein versucht man im Rahmen der statischen Analyse folgende Schritte in der beschriebenen Reihenfolge durchzuführen: 1. Disassemblierung, d.h. erstellen von “Maschinensprache” aus Binärcode 2. Erstellen des Kontrollflussgraphen (Control Flow Graph) 3. Elimination nicht erreichbarer Code-Fragmente (Dead Code Elimination) 4. Vereinfachung des Kontrollflussgraphen (Control Flow Graph) 5. Übersetzung in Pseudo Code, der möglichst nahe am Quellcode ist Disassambly. Zuerst wird aus dem nicht lesbaren Bytecode eine lesbarere Variante erstellt. Dies erfolgt mittels entsprechender Programme automatisch. Das so genannte “Disassembly” kann einfacher interpretiert und nachvollzogen werden als der binär codierte Bytecode. Q Seite 32 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Stack-Maschine Q Der folgende Quelltext zeigt die Ausgabe des Disassemblers auf den oben gezeigten Binärcode. In der ersten Spalte steht die Zeilennummer, mit der einzelne Instruktionen identifiziert werden können. In eckigen Klammern folgt der ByteWert, aus dem der Befehl besteht, der in der rechten Spalte dargestellt ist. Das Maschinenmodell von Java ist eine Stack-Maschine. Argumente werden dabei auf einen internen “Stapel” (Stack) geladen und dann mittels einer Operation manipuliert. Es gibt auch benannte Speicherzellen (ähnlich Registern), die mit load- und store-Befehlen angesprochen werden können. Quelltext 1.2 0: 1: 2: 3: 4: 5: 6: 9: 10: 11: 14: 15: 16: 19: 22: 23: 24: 27: [06] [3b] [03] [3c] [1b] [07] [a2,00,15] [1a] [06] [a3,00,0b] [06] [3b] [84,01,01] [a7,ff,f1] [06] [3b] [a7,ff,ec] [b1] iconst_3 istore_0 iconst_0 istore_1 iload_1 iconst_4 if_icmpge 27 iload_0 iconst_3 if_icmpgt 22 iconst_3 istore_0 iinc 1, 1 goto 4 iconst_3 istore_0 goto 4 return In Zeile 0 bis 3 werden zwei Variablen (in den Speicherzeillen 0 und 1) initialisiert. Anschließend werden die Variable 1 und die Konstante 4 auf den Stack geladen und in Zeile 6 verglichen (“compare greater equal”). Wenn Variable 1 größer oder gleich vier ist, springt der der Ablauf in Zeile 27 (return), ansonsten wird Variable 0 geladen und getestet, ob sie größer als 3 ist. In jedem Fall wird Variable 0 auf 3 gesetzt und in Zeile 4 gesprungen. Sollte Variable 0 kleiner gleich 3 sein, so wird zusätzlich noch Variable 1 inkrementiert (iinc). Kontrollflussgraph. Als Kontrollflussgraph (Control Flow Graph) eines Programms bezeichnet man den gerichteten Graphen, der wie folgt entsteht: Die Knoten des Graphen sind die einzelnen (Programm-)Anweisungen; zwischen zwei Knoten a und b besteht eine gerichtete Kante, falls nach Anweisung a potentiell Anweisung b ausgeführt werden kann. Der Einfachheit halber werden sequentiell im Programm aufeinanderfolgende Anweisungen zu einem Konoten zusammengefasst. Abbildung 1.25 zeigt den Kontrollflussgraphen des oben gezeigten Programmes. Variable 0 wurde dabei als x bezeichnet und Variable 1 als i. Der Kontrollflussgraph hilft in der Regel deutlich beim Verständnis eines Programmes. So wird etwa der Rücksprung 19 und 24 deutlicher und man erkennt die typische Ablaufstruktur einer while-Schleife, die im Disassembly eher schwierig zu erfassen ist. Außerdem ist nun ersichtlich, dass der Vergleich in Zeile 11 überflüssig ist, da x (Variable 0) immer 3 ist. 1.6 Verschleierungstechniken Seite 33 Abb. 1.25: Control Flow Graph des JavaProgrammes Dead Code Elimination. Wie aus dem Kontrollflussgraphen zu ersehen ist, ist die Abfrage des Wertes von x überflüssig, da x von Anfang an den Wert 3 hat und niemals einen anderen Wert annimmt. Die Abfrage x <= 3 ergibt als immer den Wert true und kann durch diesen ersetzt werden. Der false-Zweig wird daher nie erreicht (so genannter dead Code) und kann im Graph eliminiert werden. Gleichzeitig fällt damit x (Variable 0) weg, da sie nirgends im Programm gelesen wird. Dies ist in Abbildung 1.26 dargestellt. Man kann den Code also deutlich vereinfachen. Abb. 1.26: Kontrollflussgraph während Dead Code Elimination Vereinfachter Kontrollflussgraph. Nachdem die unnötige Variable und Verzweigung aus dem Kontrollflussgraph entfernt wurden, ist die while-Schleife noch deutlicher zu sehen (siehe Abbildung 1.27). Überführung in Pseudo Code. Man kann nun also den vereinfachten Kontrollflussgraph in den (vermuteten) Quellcode überführen. Diese Umwandung ist natürlich niemals eindeutig machbar sondern basiert auf typischen Mustern, wie sie von Compilern generiert werden, hier etwa das Muster einer while-Schleife: Seite 34 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Abb. 1.27: Vereinfachter Kontrollflussgraph Q Quelltext 1.3 i = 0 while (i < 4) i++ Wir haben also aus dem Binärcode den vermuteten Quellcode rekonstrieren können. Dass dies im allgemeinen Fall etwas schwieriger ist als in diesem Beispiel, dürfte klar sein. Wir betrachten im Folgenden einige Ansätze, wie die statische Analyse in der Praxis erschwert werden kann. 1.6.2 Verschleierungstechniken zum Anti Reverse Engineering Beispiele für Code-Verschleierungen sind im Netz sehr einfach zu finden. Es gibt mittlerweile sogar Wettbewerbe auf diesem Gebiet, bei dem man ein möglichst 1.6 Verschleierungstechniken Seite 35 einfaches Programm möglichst elegant möglichst unleserlich machen soll (“Obfuscated C Contest” bzw. “Obfuscated Perl Contest”). Beispiel 1.1 B Das folgende Programm ist ein Beispiel für ein Programm aus dem “Obfuscated C Contest”. Es berechnet beispielsweise die Kreiszahl π. # d e f i n e _ −F<00||−−F−OO−−; i n t F =00 ,OO= 0 0 ; main ( ) { F_OO ( ) ; p r i n t f ( " % 1 . 3 f \n " , 4 . ∗ − F/OO/OO) ; } F_OO ( ) { _−_−_−_ _−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_−_−_−_−_ _−_−_−_−_−_−_−_ _−_−_−_ } Verschleierung findet meist mittels eigener Programme statt, da die Verschleierung „per Hand“ fehleranfällig und aufwendig ist. Ein Verschleierungsprogramm (Obfuscator) ähnelt dabei einem Compiler, nur dass dieser möglichst unleserlichen Code produzieren soll. Die Vorgehensweise solcher Tools ist in Abbildung 1.28 dargestellt. Als Eingabe erhält der Obfuscator das (zu verschleiernde) Originalprogramm P, in dem bestimmte Stellen als wichtig markiert wurden (precious code). Diese Code-Stücke sollen mittels Transformationen verschleiert werden. Dieser Code wird nun analysiert und mittels vorgegebener Code Transformationen umgewandelt. Zum Schluss entsteht aus dem Programm P das obfuskierte Programm P 0. ObfuscationLTool P Obfuscation Level Acceptable overhead Precious code Program analysis Abb. 1.28: Obfuscator [Collberg and Nagra, 2009] Obfuscating transformations 1.LSelectLcode 2.LSelectLtransformation 3.LApplyLtransformation 4.LDone? precious code P' 1.6.2.1 Perfekte Verschleierung: Voll-Homomorphe Verschlüsselung Die Kryptographie kennt in Form von Verschlüsselungsroutinen schon lange sehr gute Verschleierungsmethoden. Allerdings beziehen sich diese Methoden immer auf die Verschlüsselung von Daten und niemals von Code. Um Code auszuführen, muss man ihn stets zuvor entschlüsseln. Auf Daten hingegen wäre theoretisch Seite 36 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik ein perfekt verschleiertes Rechnen möglich. Diese Idee ist unter dem Konzept der voll-homomorphen Verschlüsselung bekannt, das wir im Folgenden kurz erklären. Ein Verschlüsselungsverfahren e ist homomorph zu einer Rechenoperation ⊗, falls es egal ist, ob man auf den Werten vor oder nach der Verschlüsselung rechnet, also: e(x ⊗ y) = e(x) ⊗ e(y) Wenn ein Kryptosystem homomorph ist bezüglich der beiden in der Ganzzahlarithmetik notwendigen Rechenoperationen ist (+ und ∗ bzw. OR und AND), dann spricht man von einem voll-homomorphen Kryptosystem. Nicht voll-homomorphe Kryptosysteme nennt man zur Abgrenzung auch teil-homomorph. In der Praxis gibt es viele teil-homomorphe Kryptosysteme (wie RSA), aber es gibt bisher noch kein praktikables voll-homomorphes Kryptosystem. Ein voll-homomorphes Kryptosystem hätte viele Anwendungsmöglichkeiten. So könnte man beispielsweise verschlüsselte Daten abspeichern, könnte auf ihnen rechnen, und bräuchte sie erst dann zu entschlüsseln, wenn das Endresultat benötigt wird. So könnte man zwar nicht den Algorithmus verschleiern (also was mit den Daten geschieht), aber die konkreten Werte wären perfekt verschleiert. Hätte man einen perfekten Obfuscator für beliebige Programme, könnte man aus jedem beliebigen (teil-homomorphen) Kryptosystem ein voll-homomorphes Kryptosystem herstellen. In der folgenden Formel bezeichnet OBF diesen perfekten Obfuscator, e die Verschlüsselung und d die Entschlüsselung des Kryptosystems: x ⊗ y = OBF(e(d(x) ⊗ d(y))) (1.1) Die Formel besagt, dass man x ⊗ y auf verschlüsselten Werten x und y berechnen kann, indem man die Werte zunächst entschlüsselt, dann auf den entschlüsselten Werten ⊗ berechnet, und das Ergebnis dann wieder verschlüsselt. Damit dies nicht durch Reverse Engineering durchschaut werden kann, wird die gesamte Prozedur durch den perfekten Obfuscator geschützt. Wenn man also für x und y verschlüsselte Werte einsetzt, also e(x) und e(y), so erhält man: e(x) ⊗ e(y) = OBF(e(d(e(x)) ⊗ d(e(y)))) Da d(e(x)) = x und der Obfuscator die Werte nicht verändert, ergibt dies: e(x) ⊗ e(y) = e(x ⊗ y) Da wir keine Einschränkung der zu berechnenden Operation vorgenommen haben, kann man dies für jede Operation durchführen. Das Verfahren ist also vollhomomorph. Noch verrückter ist die folgende Anwendung eines perfekten Obfuscators: Man kann mit einem solchen Obfuscator aus jedem symmetrischen Kryptoverfahren ein asymmetrisches erzeugen. Das asymmetrische Verschlüsseln würde durch das verschleierte Verschlüsselt mit einem symmetrischen Schlüssel erreicht, das asymmetrische Entschlüsseln analog durch verschleiertes Entschlüsseln: Public(x) = OBF(ek (x)) (1.2) Private(x) = OBF(deck (x)) (1.3) Die Notation ek (x) bedeutet Verschlüsselung mittels festem Schlüssel k. Zu beachten ist, dass der perfekte Obfuscator OBF den Wert des Schlüssels k perfekt schützt. 1.6 Verschleierungstechniken Seite 37 Wenn der Obfuscator effizient arbeitet, dann könnte man damit unter Umständen sogar schnellere asymmetrische Kryptoverfahren erzeugen, als es sie heute gibt. 1.6.2.2 Definition von Obfuscator Wir haben bis jetzt häufig von einem Obfuscator gesprochen. Nun wollen wir ihn etwas genauer definieren. Definition 1.1: Obfuscator Ein Obfuscator OBF ist ein Compiler, der auf Eingabe eines Programms P die Ausgabe P 0 = OBF(P) liefert, sodass die Funktionalität von P erhalten bleibt, sich die Effizienz nicht merklich verschlechtert und die Eingabe möglichst gut verschleiert wird. D Mit dieser Definition weiss man schon etwas genauer, was ein Obfuscator ist. Allerdings sind einige Eigenschaften noch recht vage beschrieben, beispielsweise, dass sich die Effizienz “nicht merklich verschlechtern” soll. Dies könnte man etwas so verstehen, dass bezüglich der Effizienz das verschleierte Programm OBF(P) nicht exponentiell langsamer sein darf als P. Unklar bleibt jedoch auch nach längerem Nachdenken die Aussage, dass OBF(P) “unverständlicher als P” sein soll. Dies ist jedoch der Kern der Verschleierung. Es gibt in der Literatur mehrere Versuche, den Begriff der Unverständlichkeit genauer zu definieren. Wie betrachten und diskutieren nun ein paar Vorschläge. Definition 1.2: Virtual Black Box Obfuscator Ein Obfuscator OBF wird als Virtual Black Box Obfuscator bezeichnet, wenn aus einem verschleierten Programm OBF(P) = P 0 nur die Informationen erlangt werden können, die auch durch eine reine Schnittstellenbetrachtung (Black Box Zugriff) auf das unverschleierte Programm P erlangt werden können. Bei einem Black Box Zugriff werden nur die Schnittstellen eines Programmes betrachtet; innere Abläufe, Variablen oder Programmzustände können nicht beobachtet bzw. eingesehen werden. D Ein Black Box-Zugriff ist ein Zugriff, der nur auf die Schnittstelle eines Programms zugreift und nicht auf die inneren Abläufe und Zwischenwerte. Diese Definition kommt dem Begriff eines perfekten Obfuscators darum sehr nahe. Sie ist aber für viele praktische Formen der Verschleierung zu stark und so gut wie nie zu erreichen. Eine alternative Definition lautet: Definition 1.3: Best Possible Obfuscator Der Obfuscator OBF heißt best possible, falls OBF(P) weniger Informationen über P verrät als jedes andere Programm mit derselben Funktionalität wie P. Diese Definition ist deutlich schwächer als Definition 1.2, allerdings müsste man „jedes andere Programm“ testen (bzw. eine hinreichend große Menge), um diese D Seite 38 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Definition zu verifizieren. Dies ist nicht praktikabel und darum ist die Definition zu ungenau. Versuchen wir es mit einer weiteren Definition. Eine weitere Möglichkeit, Definition 1.2 einzuschränken, ist die folgende: Definition 1.4: t-Obfuscator D Der Obfuscator OBF heisst t-Obfuscator wenn für ihn die virtual Black Box Eigenschaft mindestens für den Zeitraum t gilt. Ein t-Obfuscator erfüllt also die virtual black box-Eigenschaft nicht für immer sondern nur für eine begrenzte Zeit t. Bei sehr großen Werten von t kommt diese Definition der Definition 1.2 sehr nahe. Bei sehr kleinen Werten von t ist sie bedeutungslos. Insofern hängt der Nutzen der Definition sehr vom konkreten Wert t ab. Eine letzte mögliche Definition lehnt sich an Begriffe aus der Kryptographie an. Definition 1.5: Indistinguishable Obfuscator D Sei P eine Klasse von Programmen und seien P und Q aus P zwei unterscheidbare Programme. Der Obfuscator OBF heisst ununterscheidbar (engl. indistiguishable), falls OBF(P) und OBF(Q) nicht mehr unterscheidbar sind. Diese Definition ist zwar stark abhängig von der Menge P, ist aber trotzdem noch ganz gut handhabbar. Der Nachweis, dass OBF(P) und OBF(Q) nicht unterscheidbar sind, ist deutlich einfacher zu erbringen, als der Nachweis für einen Best Possible Obfuscator. Es existieren außerdem Klassen, mit deren Hilfe sich nachweislich ununterscheidbare Programme erstellen lassen. Point Functions Q Wir betrachten nun Beispiele solcher Klassen, mit denen man einen indistinguishable Obfuscator bauen kann. Basis für diese Klassen sind dabei die so genanntenPoint Functions. Das sind Funktionen, die eine Eingabe bekommen und einen booleschen Wert zurückliefern, der nur für eine ganz bestimmte Eingabe true zurückliefert [Wee, 2005]. Beispiel für eine Point Function ist die folgende Funktion (in Pseudo Code): Quelltext 1.4 bool point_func(string pw){ if(pw == "secret"){ return true; } else { return false; } } Die Funktion vergleicht den übergebenen Text mit dem Passwort “secret” und gibt entsprechend wahr oder falsch aus. Diese Funktion ist allerdings nicht sicher in Bezug auf ihre Verschleierung, da das Passwort „secret“ einfach aus dem Quelltext entnommen werden kann. In Kombination mit einer kryptografisch sicheren 1.6 Verschleierungstechniken Seite 39 Einwegfunktion lässt sich eine ununterscheidbare Obfuscation nach Definition 1.5 wie folgt konstruieren. Quelltext 1.5 Q bool indistinguishable_point_func(string pw){ if(hash(pw, SALT) == HASH){ return true; } else { return false; } } Für eine sichere kryptografische Hash-Funktion (wie beispielsweise MD5) ist es nicht effizient möglich, das Passwort aus dem Hash zu berechnen. Die beiden Programme OBF(P) und OBF(Q) im nachfolgenden Beispiel sind im Sinne ihrer Obfuscation nicht mehr zu unterscheiden, denn in beiden Fällen kann man nicht effizient herausfinden, womit die Eingabe im Klartext verglichen wird. Quelltext 1.6 Q OBF(P): if(md5(Input|Salt) == 4cbe59a0e5f685fd48160888c568beab) then true else false; OBF(Q): if(md5(Input|Salt) == 2f548f61bd37f628077e552ae1537be2) then true else false; Weitere Beispiele für solche sicheren Kombinationen zur Verschleierung sind der diskrete Logarithmus, der unter anderem beim Diffie-Hellman-Schlüsseltausch verwendet wird, und die Faktorisierung, die die Grundlage für das Kryptosystem RSA bildet. Quelltext 1.7 //choose prime p and g < p-1 //k = g^c mod p with c constant bool indistinguishable_point_func2(int x){ if(g^x mod p == k){ return true; } else { return false; } } Q Seite 40 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Aus der Unentscheidbarkeit des Halteproblems folgt, dass Eigenschaften eines Programms nicht allgemein effizient bestimmbar sind. Das bedeutet, dass Reverse Engineering und Verschleierung individuell durchgeführt werden müssen, um gute Ergebnisse zu erreichen. Dies wird in Abbildung 1.29 verdeutlicht. Zwar gibt es sowohl Programme, deren Funktionalität verschleierbar ist, als auch Programme, bei denen das nicht der Fall ist. Allerdings gibt es auch eine große Menge an Programmen, bei denen unklar ist, ob sie verschleierbar sind oder nicht). Daraus folgt, dass keine vollständige Automatisierung des Verschleierungsprozesses für alle Programme möglich ist, bei der nicht die groben Strukturen des Algorithmus enthalten sind oder größere Einschränkungen gemacht werden müssen. Praktisch bedeutet das, dass man Obfuscation nicht für kryptografische Zwecke nutzen kann. Es ist lediglich möglich das Reverse Engineering zu erschweren. Abb. 1.29: Nachweisbarkeit für Obfuscation 1.6.2.3 Techniken Im Nachfolgenden werden einige Verfahren zur Code-Verschleierung vorgestellt. Inwieweit diese mit der Güte der Verschleierung zusammenhängen, wird im nächsten Kapitel behandelt. Umbenennen von Identifiern: Das bloße Umbenennen von Bezeichnern erzeugt bereits eine verblüffend hohe Verschleierungswirkung. Betrachten wir die folgenden beiden Code-Fragmente: Q Quelltext 1.8 for(int i = 0; i < size; ++i) print(array[i]); Q Quelltext 1.9 for(int _$%& = 0; _$%& < _%$&; ++_$%&) print(_&%$[_$%&)]); Der erste Codeabschnitt ist deutlich lesbarer als der zweite. Im zweiten wurden jedoch nur die Namen der Variablen ausgetauscht. Vor allem Sonderzeichen und möglichst sinnlose und lange Zeichenketten eigenen sich gut als Ersatznamen. Beliebt sind auch Hashes, etwa MD5 oder SHA1. Diese Technik macht jedoch nur Sinn, wenn der eigentliche Kontrollfluss erhalten bleibt, wie etwa bei Java, Javascript, Python etc. 1.6 Verschleierungstechniken Seite 41 Opaque Predicates: Bedingungen, die immer nur einen Wert zurückliefern, heißen opake Prädikate (Opaque Predicates). Wenn im Programmcode ein fester Wahrheitswert benötigt wird, kann man diesen also durch ein möglichst kompliziertes opakes Prädikat ersetzen. Betrachten wir wieder die folgenden beiden Code-Fragmente: Quelltext 1.10 Q if (b == true) //... Quelltext 1.11 Q if (b == 2|(x^2 +x)) //... Das opake Prädikat ist hierbei der Ausdruck “2|(x^2+x)”. Die beiden Programmfragmente sind auf das Ergebnis bezogen identisch, jedoch ist das Ergebnis der zweiten Bedingung nicht einfach ersichtlich. Bogus Control Flow / Dead Code: Mit den Begriffen Bogus Control Flow und Dead Code bezeichnet man Verschleierungstechniken, die Programmabläufe suggerieren, die niemals genommen werden können. Beispielsweise wird der else-Zweig eines opaken Prädikates niemals ausgeführt und enthält daher so genannten “toten” Code. Dies kann wiederum genutzt werden, um den Quellcode künstlich zu vergrößern, ohne dass die Performance merklich eingeschränkt wird. Die folgenden beiden Code-Fragmente sind gleichwertig. Das zweite ist aber schwerer zu verstehen als das erste: Quelltext 1.12 Q a(); b(); Quelltext 1.13 a(); if(opaque_true) b(); else deadcode(); Random Predicates: Bei Random Predicates wird eine Verzweigung zufällig gewählt, jedoch danach derselbe Code, unterschiedlich verschleiert, ausgeführt. Da der Code nach der Q Seite 42 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Verschleierung stark verändert ist, fällt nicht auf, dass eigentlich dasselbe berechnet wird. Quelltext 1.14 Q if(random){ OBF_1(b()); } else { OBF_2(b()); } Fake Loops: dead code Durch das Einfügen von zusätzlichen Schleifen, die nicht durchlaufen werden, kann zusätzliche Verwirrung gestiftet werden. Die Performance bleibt auch annähernd gleich, da der Code-Rumpf der Schleife nie ausgeführt wird (dead code). Nichtsdestotrotz fallen für die Schleife und insbesondere für verwendete Variablen gewisse Kosten (im Sinne von Speicher und Rechenzeit) an. Im Folgenden Quelltext-Beispiel wird zwar eine Schleife in den Code eingebaut. Allerdings steigt der Programmfluss im ersten Schleifendurchlauf durch ein break aus der Schleife aus. Dies ist durch die verschleierte Bedingung auf den ersten Blick nicht klar. Für die (eigentlich unnötige) Variable i muss Speicher reserviert werden. Q Quelltext 1.15 for(int i = 0; i < size; ++i){ if(OBF(true)){ break; } deadcode(); } Verschlüsselung: In der Praxis wird Code häufig verschlüsselt ausgeliefert und erst kurz vor der Verwendung entschlüsselt. Steht zur Entschlüsselung keine Online-Verbindung zur Verfügung, so muss der zur Entschlüsselung notwendige Schlüssel dem Programm mitgegeben werden, da dieses zur Laufzeit schließlich unverschlüsselt zur Verfügung stehen muss. Der Schlüssel steckt zwar irgendwo im Programm drin, doch er muss erst gefunden werden. Gegen derartige Verfahren helfen meist nur Ansätze der dynamischen Analyse, bei der sich der Code quasi “selbst entschlüsselt”. Dies wird in Abbildung 1.30 dargestellt. Links oben ist ein Code-Fragment abgebildet, das verschleiert werden soll. Rechts unten ist der verschleierte Code angegeben. Die Abfrage der Bedingung wird dabei durch den Vergleich von Hashes ersetzt. Wenn der Vergleich erfolgreich war, wird der verschlüsselte Code zunächst entschlüsselt und dann mittels eval aufgerufen. 1.6 Verschleierungstechniken Seite 43 Abb. 1.30: Nutzen von Verschlüsselung zur Obfuscation Merging von Funktionen bzw. Klassen: Zwei Funktionen oder Klassen, die möglichst wenig miteinander zu tun haben, werden zu einer Funktion bzw. Klasse verschmolzen. Dadurch entsteht der Eindruck, dass ihr Code zusammen gehört, weil sie über dieselbe Schnittstelle erreichbar sind. In Wahrheit haben sie aber nichts miteinander zu tun. Der folgende Code soll das verdeutlichen: f l o a t foo [ 1 0 0 ] ; void f ( i n t a , f l o a t b ) { foo [ a ] = b ; } f l o a t g ( f l o a t c , char d ) { return c ∗( f l o a t )d ; } i n t main ( void ) { f (42 ,42.0); float v = g(6.0 , 'a ' ) ; return 0; } f l o a t foo [ 1 0 0 ] ; Merge Abb. 1.31: Merging von Funktionen void f g ( i n t a , f l o a t bc , char d , i n t w) { i f (w == 1 ) { foo [ a ] = bc ; r e t u r n bc ∗ ( f l o a t ) d ; } i n t main ( void ) { fg ( 4 2 , 4 2 . 0 , ' b ' , 1 ) ; f l o a t v = fg ( 9 9 , 6 . 0 , ' a ' , 2 ) ; return 0; } Im Beispiel werden die Funktionen f und g verschmolzen. Die Schnittstelle von fg enthält nun einen zusätzlichen Parameter w, der darüber entscheidet, welche Funktion ausgeführt werden soll. Splitting von Funktionen bzw. Klassen: Analog zur Verschmelzung von Funktionen bzw. Klassen ist auch das Umgekehrte denkbar, nämlich das Aufteilen von Funktionen. Im Ergebnis wird der Zusammenhang der Codeteile verschleiert. Abb. 1.32: Splitting von Funktionen Die Ausdrücke foo[a] = b und *(foo + a*sizeof(float)) = b sind gleichwertig, da ein Array lediglich einen zusammenhängenden Bereich im Speicher darstellt. Es kann daher auch einfach der Pointer foo um a Einträge verschoben werden. Seite 44 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Zahlen „verschleiern“: Zahlen und Berechnungen können durch Arithmetik, Lookup Tables und TeilHomomorphie vor dem Betrachter verborgen werden. Ein Beispiel zur Zahlenverschleierung durch Arithmetik: Quelltext 1.16 Q y = x * 42; //ebenso: y = x << 5; y += x << 3; y += x << 1; Ein Shift entspricht einer Multiplikation bzw. Division mit 2. Der Ausdruck x « 5 multipliziert x also fünfmal mit 2, also x · 25 . Das Ganze passiert in den Zeilen darauf noch einmal analog. Insgesamt berechnet sich y daher wie folgt: y = x · 25 + x · 23 + x · 21 = x · (25 + 23 + 2) = x · (32 + 8 + 2) = x · 42 lookup table Tabelle 1.3: Abschätzung Größe einer Lookup Table Einfache Arrays, die Zahlenwerte speichern (lookup table), können Zahlen im Code ersetzen. So könnte z. B. statt 42 ein lt[10] oder lt[i] stehen. Allerdings ist dies nur für kleine Werte und einfache Formeln sinnvoll. Tabelle 1.3 enthält eine Abschätzung über die Größe und den Nutzen einer Lookup-Table unter verschiedenen Annahmen. Eine Funktion f (x, y) mit je 32-bit Werten würde als Lookup Table also 236 GB benötigen, was eindeutig nicht umsetzbar für ein einzelnes Programm ist. Funktion f(x,y) f(x) f(x) f(x,y) Werte 32-bit 23-bit 16-bit 8-bit Summe 236 GB 16 GB 128 kB 64 kB Wertung zu viel zu viel okay okay Bei teil-homomorphen Funktionen wird ausgenutzt, dass bestimmte Aktionen trotz Verschlüsselung noch möglich sind (siehe oben). Der folgende Quellcode 1.6 Verschleierungstechniken Seite 45 beschreibt einen “Trick”, um Zahlen zu verschleiern, so dass man trotzdem noch auf ihnen rechnen kann. Quelltext 1.17 Q #define N (53*59) //Produkt zweier Primzahlen int enc(int e, int p){ return p*N + e; } int dec(int e){ return e % N; } int encrypted_add(int a, int b){ return a + b; } int encrypted_mul(int a, int b){ Return a * b; } Zur Erläuterung: Betrachten Sie zunächst die Verschlüsselungsoperation enc. Die zu verschleiernde Zahl ist die Eingabe e. Der Wert p ist ein “Verschleierungsfaktor”, quasi ein Schlüssel, der e verschleiern soll. Die Verschleierung blendet e mit einem Wert p*N. Jetzt schauen Sie auf die Entschlüsselungsoperation dec: Hier wird der Blendfaktor p durch die Modulo-Operation herausgerechnet, denn: ( p*N + e ) % N = e Wenn man jetzt zwei solche verblendeten Zahlen in die Additions- bzw. Multiplikationsoperationen reinsteckt und anschliessend entschlüsselt, kommt tatsächlich die Summe bzw. das Produkt der unverschleierten Zahlen heraus: dec( encrypted_add( p1*N+e1, p2*N+e2 ) ) = dec( p1*N+e1 + p2*N+e2) = (p1*N + e1 + p2*N + e2) % N = e1 + e2 Nachteil dieser Verschleierung von Zahlen ist, dass alle vorkommenden Zahlen kleiner als N sein müssen, sonst kommt es zum Überlauf. Außerdem sind boolesche Vergleiche nicht mehr möglich, da für eine Zahl durch die Modulo-Operation mehrere Repräsentationen existieren. Ein weiteres Beispiel fürTeil-Homomorphie ist RSA. RSA ist bzgl. der Multiplikation homomorph, wie die folgenden Rechnungen zeigen: E(x × y) = E(x) × E(y) (1.4) Teil-Homomorphie Seite 46 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik RSA Wie oben bereits beschrieben, bedeutet Teil-Homomorphie, dass die Multiplikation mit zwei verschlüsselten Werten E(x) und E(y) dasselbe ergibt wie die Multiplikation der unverschlüsselten Werte x und y, die danach verschlüsselt werden, also E(x × y). Dies kann man aus der Definition des RSA-Verfahrens ableiten: n = p×q e × d = 1 mod (p − 1)(q − 1) (1.5) (1.6) Für den RSA-Algorithmus werden zuerst zwei ungleiche Primzahlen p und q gewählt und aufmultipliziert (Formeln 1.5 und 1.6). Danach werden e und d so gewählt, dass die Bedingung in Zeile zwei erfüllt ist. Die Werte e und d sind, zusammen mit n, der öffentliche und der private Schlüssel. RSA-Ver- und Entschlüsselung C = M E mod n (1.7) d (1.8) M = C mod n Nun kann verschlüsselt werden, indem die Nachricht M mit dem öffentlichen Schlüssel e potenziert und modulo n genommen wird (Formeln 1.7 und 1.8). Entschlüsselung funktioniert analog, nur dass der private Schlüssel d verwendet werden muss. Bei hinreichend großen Primzahlen p und q lassen sich keine Rückschlüsse von e auf d machen und umgekehrt. RSA: Homomorphie bzgl. Multiplikation Die Homomorphie bzgl. der Multiplikation lässt sich nun wie folgt für zwei Nachrichten M1 und M2 beweisen (Formel 1.9). (M1e mod n) × (M2e mod n) = (M1e × M2e ) mod n = (M1 × M2 )e mod n (1.9) Aliasing: Aliasing lässt sich am besten anhand eines Beispielcodes nachvollziehen: Q Quelltext 1.18 int alias(int *a, int *b){ *a = 10; *b = 5; if((*a - *b) == 0) code(); } Die Funktion code() wird auf den ersten Blick niemals aufgerufen und ist toter Code (dead code). Aber, wenn man folgenden Aufruf betrachtet, wird schnell klar, dass code() doch aufgerufen werden kann. Q Quelltext 1.19 int a = 0; alias(&a, &a); 1.6 Verschleierungstechniken Seite 47 Automatische Alias-Analyse ist ein NP-schweres Problem und kann daher nicht effizient gelöst werden. D. h. es ist nicht möglich, solche scheinbar nicht erreichbaren Codeabschnitte automatisch zu finden. Pointer Indirection: Bei Pointer Indirektionen wird ein Pointer auf die entsprechende Stelle (Funktion, Klasse, Variable) gesetzt und dieser statt dem eigentlichen Zugriff verwendet. Betrachten wir ein Beispiel: Quelltext 1.20 void void void void f() g() h() k() { { { { Q } f(); } f(); g(); } } int main() { h(); void (*p)() = &k; p(); } Um den Code zu analysieren, zeichnen wir den Aufrufgraphen. Im Aufrufgraph sind die Funktionen die Knoten und es existiert eine Kante von Knoten a zu b, wenn Funktion a im Quellcode Funktion b aufruft. Der Aufrufgraph ist abgebildet in Abbildung 1.33. Wenn man sich das Beispiel anschaut, gibt es im Aufrufgraphen auch einen Knoten für k, auf den aber keine Kante zeigt. Man hat auch p als Knoten, auf den eine Kante aus main() zeigt, aber p ruft im Quellcode niemanden auf. Wenn man aber den Code genauer anschaut, dann wird p als Funktionspointer definiert und auf k “umgebogen”. Im Endeffekt wird also doch k aufgerufen, obwohl im Quellcode kein “normaler” Aufruf existiert (normal im Sinne der anderen Aufrufe, die im Beispiel stehen). Stellen Sie sich vor, der Pointer &k wäre noch irgendwie verschleiert, beispielsweise mittels eines opaken Prädikates. Dann sieht man, dass es auch für automatische Tools schwer wird, den “wahren” Aufrufgraphen zu erstellen. k Abb. 1.33: Aufrufgraph des Beispiels zu Pointer Indirection g h f main p Control Flow Flattening (chenxify): Indem man Rekursionen und Schleifen ausrollt und bedingte Verzweigungen, z. B. durch einen switch/next, abflacht, kann die Code-Komplexität erhöht werden. Der folgende Quelltext zeigt ein Beispiel: Seite 48 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Abb. 1.34: Control Flow Flattening Die switch-Anweisung wird hier mehrfach rekursiv aufgerufen, wobei next den nächsten Abschnitt definiert, der aufgerufen werden soll. Alle Codeabschnitte müssen daher den Wert neu setzen. Selbstmodifizierender Code: Eine besonders raffinierte Verschleierungsspielart ist selbstmodifizierender Code. Da das in einer Hochsprache schwer zu machen ist, ist das Beispiel in Assembler (siehe Modul 15, Reverse Engineering). Betrachten Sie den statischen Kontrollflussgraphen des Codes in Abbildung 1.35, den tools wie z.B. IDA erzeugen. In Abbildung 1.35 hat man ein Stück Assemblercode, der offenbar in einer Endlosschleife endet: In Adresse 14 wird immer direkt nach Adresse 9 gesprungen. Adresse 16 wird niemals angesprungen. Wenn man aber den Code ausführt, dann passiert doch etwas anderes: In Adresse 0 wird der Wert 12 in Register r0 geladen. In Adresse 3 der Wert 4 in Register r1. Nun passiert das “Wunder” des selbstmodifizierenden Codes: in Zeile 6 wird der Inhalt von r1 (also 4) an die Adresse geschrieben, die in Register r1 steht (also 12). An Adresse 12 steht aber der Opcode des Befehls inc r4 (siehe Abbildung 1.35). Durch die store-Operation wird aus dem Opcode 3 der Opcode 4. Nun steht im Speicher also nicht mehr inc r4 sondern bra 4, was in Abbildung 1.36 dann dargestellt ist. Das Programm hat sich also selbst verändert. Solche Veränderungen sind statisch (also ohne das Programm auszuführen) sehr schwer vorherzusehen und deswegen sehr wirksam zur Obfuskierung. Abb. 1.35: Statischer CFG eines selbst modifizierenden Programms 1.6 Verschleierungstechniken Seite 49 Abb. 1.36: Dynamischer Fluss dieses Programms Unaligned Branches/Jumps: Man kann Disassembler gezielt stören, indem man scheinbar “unsinnige” Sprungziele angibt, die trotzdem sinnvoll sein können. Das folgende Beispiel soll das verdeutlichen: Quelltext 1.21 main: jmp entry; db "obf" entry: ... Q ;disturb alignment ;code ... Disassembler werden durch das obf im Hexdump gestört, sodass die Ausrichtung nicht mehr stimmt und ein bestimmter Bereich um die Stelle falsch interpretiert wird (siehe Abbildung 1.37: grün der richtige Code und rot der disassemblierte Code). Abb. 1.37: Disassembler schlägt fehl Seite 50 Studienbrief 1 Einführung in die Browser- und Anwendungsforensik Interpretationsschicht bzw. VM-basiert: VM-basierte Verschleierung führt eine eigene Interpretationsschicht in die Programmumgebung ein. Diese Interpretationsschicht verarbeitet Register, Stack, Stack Pointer und das eigentliche Programm, welche als Variablen enthalten ist (siehe Abbildung 1.38). Es wird so eine zusätzliche Indirektion eingeführt. Bevor der eigentliche Code offengelegt werden kann, muss so vorher die Zwischenschicht durch Reverse Engineering nachvollzogen werden. Diese Zwischenschicht könnte sogar auf einer eigenen, pseudo-zufälligen Sprache basieren. Zusätzliche Komplexität lässt sich durch weitere Stufen erreichen (geschachtelte virtuelle Maschinen). Abb. 1.38: VMbasierte Obfuscation Remote-Execution: Wichtige Code-Teile werden entfernt und beispielsweise mittels PHP auf einem entfernten Rechner ausgeführt. Gerade bei Internet-Anwendungen oder Webseiten (Javascript) ist diese Technik einfach umsetzbar. Sonstige Obfuscation-Techniken: Junk Code Q Es gibt eine Vielzahl weiterer Verschleierungstechniken. Arrays und Strings können beispielsweise durch einfaches Permutieren oder Splitten ihren Inhalt verschleiern. Weiterhin könnte sogenannterJunk Code eingefügt werden, also Code der eigentlich nichts bewirkt, wie folgendes Beispiel zeigt: Quelltext 1.22 a += 2; a--; --a; Es existieren viele weitere Möglichkeiten den Code weiter zu verschleiern, beliebt sind auch Kombinationen von Methoden, die das Nachvollziehen der Programmabläufe weiter erschweren. Nachdem meist ein Obfuscation-Programm zum Einsatz kommt und dies nicht manuell durchgeführt wird, können diesem Tool mehrere Verfahren übergeben werden, die dann nacheinander oder durcheinander mehrfach ausgeführt werden können. 1.6 Verschleierungstechniken Seite 51 1.6.2.4 Güte der Obfuscation Als Maß für die Obfuscation können aus der Softwareentwicklung bekannte Merkmale wiederverwendet werden. Sie sind jedoch gegenteilig zu verstehen bzw. anzuwenden, für Software negative Effekte sind bei Obfuscation unter Umständen durchaus erwünscht. Tabelle 1.4 listet einige Komplexitätsmaße, die man zur Bewertung der Güte einer Verschleierung verwenden kann. 1) 2) 3) Program Length: Cyclomatic Complexity: Nesting Complexity: 4) Data Flow Complexity: 5) 6) IO-Complexity: Data Structure Complexity: 7) Callgraph Complexity usw. Anzahl der Operationen Anzahl linear unabhängiger Pfade in P Verschachtelungs-Level von Abhängigkeiten Anzahl der Referenzen zwischen BasicBlocks Anzahl Ein/Ausgabe Parameter Anzahl/Größe statischer Datenstrukturen Allerdings ist bei allen diesen Maßen nicht klar, inwieweit sie mit dem menschlichen Verständnis des Codes korrelieren. 1.6.3 Zusammenfassung In diesem Abschnitt wurden verschiedene Ansätze zur Verschleierung als AntiForensik-Maßnahme gezeigt. Obgleich der Vielfalt hier kaum Grenzen gesetzt sind, wurde ein grundlegendes Verständnis für die Problematik entwickelt, das in einem konkreten Fall adaptiert werden kann. Tiefergehende Techniken im Bereich des Reverse Engineering zur Erfassung der Funktionalität einer verdächtigen Binärdatei werden in Modul 15 (Reverse Engineering) vertiefend behandelt. Im Gegensatz zur statischen Analyse, bei der Code-Verschleierung schon mit einfachen Mitteln gut umsetzbar ist, ist die dynamische Analyse vergleichsweise schwerer zu verhindern, da sie auf dem reinen I/O-Verhalten des Programms basiert. Nichtsdestotrotz existieren auch Techniken, wie z. B. INT 3-Erkennung, Exception Handler oder “Sich-Selbst-Debuggen”, um die dynamische Analyse zu erschweren. Auch dies wird in Modul 15 (Reverse Engineering) näher behandelt. Tabelle 1.4: Merkmale für die Güte der Obfuscation Verzeichnisse Seite 53 Verzeichnisse I. Abbildungen Abb. 1.1: Abb. 1.2: Abb. 1.3: Abb. 1.4: Abb. 1.5: Abb. 1.6: Abb. 1.7: Abb. 1.8: Abb. 1.9: Abb. 1.10: Abb. Abb. Abb. Abb. Abb. 1.11: 1.12: 1.13: 1.14: 1.15: Abb. 1.16: Abb. 1.17: Abb. 1.18: Abb. 1.19: Abb. 1.20: Abb. Abb. Abb. Abb. Abb. Abb. Abb. Abb. Abb. Abb. Abb. Abb. Abb. Abb. Abb. Abb. Abb. Abb. 1.21: 1.22: 1.23: 1.24: 1.25: 1.26: 1.27: 1.28: 1.29: 1.30: 1.31: 1.32: 1.33: 1.34: 1.35: 1.36: 1.37: 1.38: Grum-Botnetz Wertschöpfungskette [Levchenko et al., 2011, Fig. 1] . . . . . . . . . . . . . . 9 Ablauf der Spam-Analyse [Levchenko et al., 2011, Fig. 2] . . . . . . . . . . . . . . . . . . . . 10 Aufteilung der Spam-Produkte [Levchenko et al., 2011, Tab. III] . . . . . . . . . . . . . . . . 11 Kategorisierung nach Vertriebsprogrammen [Levchenko et al., 2011, Tab. IV] . . . . . . . . . 12 Verteilung von Vertriebsprogrammen auf Banken [Levchenko et al., 2011, Tab. V] . . . . . . 13 Folgen der Abschaltung bestimmter Elemente der Spam-Industrie [Levchenko et al., 2011, Fig. 5] 13 Beispiele von gespeicherten Cookies [Berghel, 2008] . . . . . . . . . . . . . . . . . . . . . . 15 Ist ein Zustand aus früheren public Modi im privaten Modus erreichbar? [Aggarwal et al., 2010, Tab. 1] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Ist ein Zustand aus früheren privaten Modi im public Modus erreichbar? [Aggarwal et al., 2010, Tab. 2] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Ist ein Zustand an einem bestimmten Punkt einer privaten Session später wieder erreichbar innerhalb derselben privaten Session? [Aggarwal et al., 2010, Tab. 3] . . . . . . . . . . . . . 18 Serverseitig verfügbare Browser-Infos [Eckersley, 2010, Tab. 1] . . . . . . . . . . . . . . . . 19 Eindeutigkeit von Browser-Fingerprints [Eckersley, 2010, Fig. 1] . . . . . . . . . . . . . . . . 20 Word-Metadaten des Irak-Dossiers [Berghel, 2008] . . . . . . . . . . . . . . . . . . . . . . . 21 Beispiele für rekonstruierte Bilder [Murdoch and Dornseif, 2004] . . . . . . . . . . . . . . . . 22 Beispiel für ein vermeintlich anonymes Bild im Internet (Kategorie „Ausschneiden zum Identitätsschutz“) Murdoch and Dornseif [2004] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Bild aus Abbildung 1.15 nach Wiederherstellung mittels Thumbnail [Murdoch and Dornseif, 2004] 23 Weiteres Beispiel aus der Kategorie „Ausschneiden zum Identitätsschutz“ [Murdoch and Dornseif, 2004] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Bild aus Abbildung 1.17 nach Wiederherstellung mittels Thumbnail [Murdoch and Dornseif, 2004] 24 Überwachungsmaßnahmen der Telekommunikation (Bundesnetzagentur, zitiert nach Spreitzenbarth [2009]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Anzahl sichergestellte Mobiltelefone beim BKA, Abteilung TESIT-6 (BKA, zitiert nach Spreitzenbarth [2009]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Aufbau einer SMS Spreitzenbarth [2009] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Detaillierter Aufbau einer SMS [Spreitzenbarth, 2009] . . . . . . . . . . . . . . . . . . . . . 26 Anzahl Smartphones nach Typ (zitiert nach Spreitzenbarth [2009] . . . . . . . . . . . . . . . 27 ADEL-Bewegungsprofil [Spreitzenbarth and Schmitt., 2012] . . . . . . . . . . . . . . . . . . 29 Control Flow Graph des Java-Programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Kontrollflussgraph während Dead Code Elimination . . . . . . . . . . . . . . . . . . . . . . . 33 Vereinfachter Kontrollflussgraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Obfuscator [Collberg and Nagra, 2009] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Nachweisbarkeit für Obfuscation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Nutzen von Verschlüsselung zur Obfuscation . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Merging von Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Splitting von Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Aufrufgraph des Beispiels zu Pointer Indirection . . . . . . . . . . . . . . . . . . . . . . . . . 47 Control Flow Flattening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Statischer CFG eines selbst modifizierenden Programms . . . . . . . . . . . . . . . . . . . . 48 Dynamischer Fluss dieses Programms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Disassembler schlägt fehl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 VM-basierte Obfuscation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 II. Beispiele Beispiel 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Seite 54 Verzeichnisse III. Definitionen Definition Definition Definition Definition Definition 1.1: 1.2: 1.3: 1.4: 1.5: Obfuscator . . . . . . . . . . Virtual Black Box Obfuscator Best Possible Obfuscator . . t -Obfuscator . . . . . . . . . Indistinguishable Obfuscator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 37 37 38 38 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 17 18 20 Vergleich Mobiltelefon vs. Smartphone Reverse Engineering Tools . . . . . . . Abschätzung Größe einer Lookup Table Merkmale für die Güte der Obfuscation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 31 44 51 IV. Kontrollaufgaben Kontrollaufgabe Kontrollaufgabe Kontrollaufgabe Kontrollaufgabe 1.1 1.2 1.3 1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V. Tabellen Tabelle Tabelle Tabelle Tabelle 1.1: 1.2: 1.3: 1.4: VI. Literatur Gaurav Aggarwal, Elie Bursztein, Collin Jackson, and Dan Boneh. An analysis of private browsing modes in modern browsers. In USENIX Security Symposium, pages 79–94, 2010. Hal Berghel. Brap forensics. Commun. ACM, 51(6):15–20, 2008. Simon Byers. Information leakage caused by hidden data in published documents. IEEE Security and Privacy, 2(2):23–27, March 2004. ISSN 1540-7993. doi: 10.1109/MSECP.2004.1281241. URL http://dx.doi.org/10. 1109/MSECP.2004.1281241. Christian Collberg and J. Nagra. Surreptitious Software: Obfuscation, Watermarking and Tamperproofing. AddisonWesley, 2009. S. Drape. Obfuscation of Abstract Data-Types. Oxford: University of Oxford, 2004. Peter Eckersley. How unique is your web browser? In Proceedings of the 10th international conference on Privacy enhancing technologies, PETS’10, pages 1–18, Berlin, Heidelberg, 2010. Springer-Verlag. ISBN 3-642-14526-4, 978-3-642-14526-1. URL http://dl.acm.org/citation.cfm?id=1881151.1881152. Felix Freiling, Sven Schmitt, and Michael Spreitzenbarth. Forensic analysis of smartphones: The android data extractor lite (adel). In Proceedings of the 2011 ADFSL Conference on Digital Forensics, Security and Law, pages 151–161, 2011. Chris Kanich, Christian Kreibich, Kirill Levchenko, Brandon Enright, Geoffrey M. Voelker, Vern Paxson, and Stefan Savage. Spamalytics: an empirical analysis of spam marketing conversion. In Proceedings of the 15th ACM conference on Computer and communications security, CCS ’08, pages 3–14, New York, NY, USA, 2008. ACM. ISBN 978-1-59593-810-7. doi: 10.1145/1455770.1455774. URL http://doi.acm.org/10.1145/1455770.1455774. Kirill Levchenko, Andreas Pitsillidis, Neha Chachra, Brandon Enright, Márk Félegyházi, Chris Grier, Tristan Halvorson, Chris Kanich, Christian Kreibich, He Liu, Damon McCoy, Nicholas Weaver, Vern Paxson, Geoffrey M. Voelker, and Stefan Savage. Click trajectories: End-to-end analysis of the spam value chain. In Proceedings of the 2011 IEEE Symposium on Security and Privacy, SP ’11, pages 431–446, Washington, DC, USA, 2011. IEEE Computer Society. ISBN 978-0-7695-4402-1. doi: 10.1109/SP.2011.24. URL http://dx.doi.org/10.1109/SP.2011.24. Literatur Seite 55 Anirban Majumdar and C. Thomborson. A Survey of Control-Flow Obfuscations. Berlin Heidelberg: Springer Verlag, 2006. Steven Murdoch and Maximillian Dornseif. Hidden data in interned published documents, 2004. Michael Spreitzenbarth. Mobile phone forensics. Diplomarbeit, Universität Mannheim, 2009. Retrieved 2012-04-04 from http://pi1.informatik.uni-mannheim.de/filepool/theses/ diplomarbeit-2009-spreitzenbarth.pdf. Michael Spreitzenbarth and S. Schmitt. Forensic acquisition of location data on android smartphones, 2012. Michael Spreitzenbarth, Sven Schmitt, and Christian Zimmermann. Reverse engineering of the android file system. Technischer bericht, Friedrich-Alexander-Universität, Department Informatik, 2011. Online verfügbar unter http://www.opus.ub.uni-erlangen.de/opus/frontdoor.php?source_opus=2833, letzter Zugriff: 2012-04-04. Zeljko Vrba and P. Halvorsen. Program obfuscation by strong cryptography. Oslo: University of Oslo, 2010. H. Wee. On Obfuscating Point Functions. California: University of California, 2005. Bernd Wientjes. Prozess: Junge studentin im todeskampf, ex-freund googelte: “rote augen tot”. Trierer Volksfreund, January 2011. G. Wroblewski. General Method of Program Code Obfuscation. Wroclaw, 2002. Christian Zimmermann and Michael Spreitzenbarth. Forensic analysis of yaffs2. In Tagungsband der Konferenz “SICHERHEIT — Schutz und Zuverlässigkeit” des Fachbereichs Sicherheit der Gesellschaft für Informatik, 2012.