SlideShare una empresa de Scribd logo
1 de 66
Descargar para leer sin conexión
Sebastian Porst (sebastian.porst@zynamics.com)
TU Dortmund – Januar 2010
   Master of Science Informatik, FH Trier 2007
   Softwareentwickler für Reverse Engineering
    Tools bei der zynamics GmbH
   Fast 12 Jahre Reverse Engineering Erfahrung
   Zwei Jahre Vortragserfahrung über Reverse
    Engineering (CanSecWest, Hack in the Box,
    SOURCE Barcelona, …)
   Unzufrieden mit Fortschritten beim Reverse
    Engineering in den letzten 10 Jahren
   Möchte akademische Forschung mit
    industrieller Anwendung verknüpfen
   Studenten für Reverse Engineering
    begeistern
   IT-Sicherheitsfirma aus Bochum
   Spezialisiert auf das Entwickeln von RE Tools
   5 Jahre alt
   12 Mitarbeiter
   Deutscher IT-Sicherheitspreis 2006
   Diskussion der Problematik
   Abstrakte Interpretation
   Metasprachen
   Dynamische Instrumentierung
   Taint Tracking
   BitBlaze
   Analyse von Binärcode ohne Zuhilfenahme
    von Quellcode
   Ermitteln der Programmfunktionalität oder
    bestimmter Eigenschaften des Binärcodes
   Optionale Rückübersetzung in
    Hochsprachencode
   Schwachstellenermittlung
   Malwareanalyse
   Behebung von Kompatibilitätsproblemen
   Überprüfung von Code auf
    Vertrauenswürdigkeit
   Entdeckung von Codediebstahl
   Disassembler (IDA Pro)
   Debugger (WinDBG, OllyDbg)
   Hex-Editoren
   Fuzzer
   Dateianalyseprogramme
   Entpacker
   Mühsame Handarbeit
     Finden interessanter Stellen
     Untersuchung interessanter Stellen
   Kaum Automatisierung
   Kaum Nutzung von Erkenntnissen aus der
    Informatik
   Keine Standardisierung
   Software wird immer größer und komplexer
   Immer mehr Plattformen
     Heimcomputer, Handys, PDAs, Router, Wireless
   Mehr schützenswerte Daten
   Sicherheitsanalysen werden teuer und
    aufwändiger
   Neue Tools welche mit den Datenmengen
    besser umgehen
   Plattformunabhängige Tools
   Übernahme von formalen Methoden aus der
    Informatik
   Abstrakte Interpretation
   Metasprachen
   Dynamische Instrumentierung
   Taint Tracking
   BitBlaze
   Codeanalyse ohne Programmausführung
   Vorteile:
     Unabhängig von ausgeführtem Code
     Keine Ausführung von gefährlichem Code
   Nachteile:
     Statische Unentscheidbarkeit
   Entwickelt von Patrick Cousot und Radhia
    Cousot in den 1970ern
   Teilabschnitt der Programmanalyse
   Statisches Analyseverfahren basierend auf
    Verbandstheorie
   Theorie der Approximation mathematischer
    Strukturen in semantischen Modellen
   Aussagen treffen über Programme ohne die
    Programme auszuführen
   Verifikation von Behauptungen oder
    Entdeckung von Eigenschaften
   Reduktion der Komplexität auf das
    Wesentliche
   Annahme der Existenz einer analysierten
    Programmiersprache mit Wertemenge V
   Teilmenge von V beschreibt zu jedem
    Zeitpunkt den Programmzustand
   Semantik der Sprache definiert
    Wertübergänge
          p : v1   v2
   Anzahl der konkreten Werte wächst
    explosionsartig
   Einzelner 32 bit Ganzzahlwert hat
    4294967295 Zustände
   Zustandsmenge mehrerer Variablen wächst
    multiplikativ
   Ermittlung des Gesamtzustands im
    allgemeinen zu aufwändig und nicht nötig
   Reduktion der Werte aus V auf abstrakte
    Eigenschaften L
         p : l1   l2
   Konkrete Gestalt der Eigenschaften ist
    abhängig von der gewünschten Analyse
   Eine Variable ist null oder nicht null
   Wertebereich einer Variablen als Intervall
   Variable hat einen Einfluss auf den späteren
    Programmzustand
   Verifikation eines sicheren Zustandes
   Konstantenpropagation
   Ermittlung benötigter Register
   Ermittlung der potentiellen Werteintervalle
    von Variablen
   Definition der Eigenschaftsübergänge für alle
    Werteübergänge der Sprache P
   Abarbeiten des zu analysierenden
    Programms
   Für jeden Werteübergang einen
    Eigenschaftsübergang ausführen
   Fixpunktiteration durchführen bis keine
    weiteren Erkenntnisse gefunden werden
   Zu analysierender Code wird in gerichteten
    Graph zerlegt
   Knoten enthalten einzelne Werteübergänge
   Kanten beschreiben möglichen
    Programmablauf zwischen Werteübergängen
1400: add t0, 15, t1


                        1401: bisz t1, , t2


                       1402: jcc t2, , 1405


  1403: str 8, , t3                           1405: str 16, , t3


1404: jcc t2, , 1406


                       1406: add t3, t3, t4
                                                   int t4 = t0 == -15 ? 32 : 16

                       1407: jcc 1, , 1420
   Definition der Eigenschaften L als Verband
   Definition von Infimum (Bottom) und
    Supremum (Top)
   Definition von monotonen
    Eigenschaftsübergängen anhand von
    Werteübergängen
   Definition eines Vereinigungsoperators
T




B
   Jedem Knoten des Programmgraphen wird
    ein Element aus L zugewiesen
   Das Element aus L beschreibt bekanntes
    Wissen über das Programm an der Stelle des
    Knotens
   Ohne Vorkenntnisse: Bottom
   Mit Vorkenntnissen: Beliebiges Element
   Durchführung von Eigenschaftsübergängen
    auf Basis der Werteübergänge
   Entweder in Programmablaufrichtung oder
    umgekehrt
   Vereinigung von Eigenschaften wenn
    Kontrollfluss zusammenläuft
   Iteration durchführen bis keine weiteren
    Informationen gefunden werden
   Ergebnis ist Menge der abstrakten
    Programmzustände
     = Menge der Verbandselemente an den Knoten
   Terminierung garantiert durch
    Verbandsordnung und Monotonie
   Realität ist komplizierter (widening,
    narrowing, …)
   Laufzeitintensiv
   Kein Quelltext vorhanden
   Analyse von Assemblersprachen ist komplex
    aufgrund der großen Befehlsmenge
     Definition von Eigenschaftsübergängen für
     Hunderte von Befehlen
   Lösung: Metasprachen
   Pseudo-Assemblersprachen
   Echte Assemblersprachen können einfach in
    Metasprachen überführt werden
   Metasprachen sind weniger komplex
   Besser geeignet für Abstrakte Interpretation
   Speziell entwickelt für Reverse Engineering
   Designziel: Einfach zu verstehen und zu
    benutzen
   Nur 17 verschiedene Befehle
   Sehr reguläre Struktur mit 3 Operanden pro
    Befehl
   Plattformunabhängig
   Pro Algorithmus nur 17
    Eigenschaftsübergänge
   Einfaches Mapping zwischen Originalcode
    und REIL Code
   Framework für abstrakte Interpretation
    bereits verfügbar
   Framework zur abstrakten Interpretation von
    REIL Code
   Implementiert in Java
   Benutzbar aus jeder beliebigen JVM-Sprache
    (Java, Jython, JRuby, …)
   Erleichtert das Schreiben von statischen
    Analysealgorithmen durch Standardisierung
    der Struktur
   Eingabe: Echter Assemblercode
   Transformation zu REIL
   Analyse des REIL Codes mit MonoREIL
   Rückbeziehung der Ergebnisse auf den
    Eingabecode
   Codeanalyse durch Programmausführung
   Vorteile
     Vollständige Kenntnisse über Programmverlauf
   Nachteile
     Nur ausgeführter Code wird betrachtet
     Potentiell gefährlicher Code wird ausgeführt
   Zu analysierendes Programm wird echt
    ausgeführt
   Analyse geschieht entweder in Echtzeit oder
    im Nachhinein auf protokollierten Daten
   Idee: Instrumentierungscode wird zur
    Laufzeit in Programmcode eingeschleust
   Möglichkeiten:
     Echtzeitüberwachung aller Aspekte des
     ausgeführten Programms
     Echtzeitmanipulation des Programmcodes und
     der Daten
   Ermittlung von
    Verzweigungswahrscheinlichkeiten
   Statistiken über Fehler und Ausnahmen
   CPU Profiling
   Code Coverage
   Taint Tracking
   Pin
     University of Virginia
     Aktiv weiterentwickelt von Intel
   DynamoRIO
     Zusammenarbeit von Hewlett-Packard und MIT
   Verschiedene Ansätze
   Auswirkungen auf das Zielprogramm
     DynamoRIO ist schneller und braucht weniger
     Speicher
     DynamoRIO kann Instruktionsstream verändern
   Beide Tools über C-Programme erweiterbar
     Pin-Erweiterungen sind weniger komplex
   Erkenntnis I: Daten sind wichtiger als Code
   Erkenntnis II: Manche Daten sind wichtiger
    als andere Daten
   Taint Tracking markiert und verfolgt wichtige
    Daten
     Beispiel: Unverifizierte Eingaben
   Initiale Definitionspunkte für wichtige Daten
    werden ermittelt
   Ursprungsdaten werden markiert
   Immer wenn bereits markierte Daten in
    Berechnungen verwendet werden müssen
    auch Berechnungsresultate markiert werden
   Markierung von Registerwerten und
    Speicherzellen
   Markieren von Bits mit Hilfe von Bitmasken
    erweist sich als wirkungsvoller
   Markieren von Ablaufpfaden als Resultat von
    bedingten Verzweigungen ist nützlich
   Teilregister müssen besonders betrachtet
    werden
   Befehle müssen auch getaintet werden
   Menge von disjunkten gerichteten Graphen
   Ablesbar wie Daten zusammenhängen
   Ablesbar wann welche Daten einen Einfluss
    auf das Programm hatten
   Ablesbar welche Befehle auf Grund der
    verfolgten Daten ausgeführt werden
   Feststellen ob eingegebene Daten korrekt
    entschärft werden
   Feststellen ob zu einem bestimmten
    Zeitpunkt eingegebene Daten noch einen
    Einfluss auf das Programm haben
   Überprüfen der Erreichbarkeit einzelner
    Befehle
   Menge an Daten in modernen Programmen
    bringt Komplexitätsprobleme mit sich
     Lösung: Konzentration auf Teilmengen der Daten
   Geschwindigkeit und Qualität hängen von der
    Instrumentierung ab
   Binary Analysis for Computer Security
   Programmanalyseprojekt der Universität von
    Berkeley
   Derzeit fortgeschrittenstes RE Framework
   Implementierung in O‘Caml
   Vine
     Komponente zur statischen Analyse
   TEMU
     Komponente zur dynamischen Analyse
   Rudder
     Komponente zur symbolischen Ausführung
   Metasprache zur Simulation von x86 Code
   Ermöglicht die Erstellung von
    Kontrollflussgraphen
   Stellt Standardalgorithmen zur
    Programmanalyse bereit
     Konstantenpropagation
     Datenabhängigkeiten
   Kann in C-Code übersetzt werden
   Erweiterung von QEMU
   Ermöglicht Taint Tracking
   Ermöglicht Verhaltensanalyse vollständiger
    Programme
   Symbolische Ausführung von Code
   Start mit interessanten Registern und
    Speicherwerten
   Werteveränderungen werden als Formeln
    dargestellt
   Erlaubt das mathematische Betrachten von
    Wertänderungen
   Abstrakte Interpretation
   Abhängigkeitsanalyse
   Logische Analyse mit Theorembeweiser
   Emulation und dynamische Instrumentierung
   Symbolische Ausführung
   Automatic Patch-based Exploit Generation
   Hidden Code Extraction from Packed
    Executables
   Deviation Detection in Binaries
   Automatic Malware Dissection and Trigger-
    based Behavior Analysis
   …
   Diskussion der Problematik
   Abstrakte Interpretation
   Metasprachen
   Dynamische Instrumentierung
   Taint Tracking
   BitBlaze
   Daten sind wichtiger als Code
   Formale Methoden werden benötigt um
    Komplexität entgegenzuwirken
   Es wird viel geforscht aber wenig angewand
   Reverse Engineering ist ein Feld mit
    anspruchsvollen und interessanten Aufgaben
   Reverse Engineering Reddit
     http://www.reddit.com/r/reverseengineering
   Lambda – The Ultimate
     http://lambda-the-ultimate.org/
   The Program Transformation Wiki
     http://www.program-transformation.org/
   University of Berkeley
     http://bitblaze.cs.berkeley.edu/
   University of California, Santa Barbara
     http://www.cs.ucsb.edu/~seclab/
   Carnegie-Mellon University
     http://www.cylab.cmu.edu/index.html
   Stony Brook University
     http://seclab.cs.sunysb.edu/seclab/
   Universität Karlsruhe
     http://pp.info.uni-karlsruhe.de/publications.php
   MonoREIL Algorithmen zur
    Programmanalyse
   Input Crafting um Verzweigungen zu erfüllen
   Semantisches Diffen
   Trennung von Code und Daten
http://www.flickr.com/photos/marcobellucci/3534516458/

Más contenido relacionado

Destacado

Introduction to mobile reversing
Introduction to mobile reversingIntroduction to mobile reversing
Introduction to mobile reversingjduart
 
Thomas Tinnefeld Fachsprachliche Klausuren Im Un Icert Kontext
Thomas Tinnefeld Fachsprachliche Klausuren Im Un Icert KontextThomas Tinnefeld Fachsprachliche Klausuren Im Un Icert Kontext
Thomas Tinnefeld Fachsprachliche Klausuren Im Un Icert KontextThomas Tinnefeld
 
CONSULT 2010 | Nieheim: Foerderung - Finanzierung fuer Existenzgruendung | F...
CONSULT 2010 | Nieheim: Foerderung - Finanzierung fuer Existenzgruendung |  F...CONSULT 2010 | Nieheim: Foerderung - Finanzierung fuer Existenzgruendung |  F...
CONSULT 2010 | Nieheim: Foerderung - Finanzierung fuer Existenzgruendung | F...Markus Tonn
 
CONSULT 2010 | Hagen: Foerderung - Finanzierung fuer Existenzgruendung | Foe...
CONSULT 2010 | Hagen: Foerderung - Finanzierung fuer Existenzgruendung |  Foe...CONSULT 2010 | Hagen: Foerderung - Finanzierung fuer Existenzgruendung |  Foe...
CONSULT 2010 | Hagen: Foerderung - Finanzierung fuer Existenzgruendung | Foe...Markus Tonn
 
Emex 11: Google Shopping Search in der Schweiz
Emex 11: Google Shopping Search in der SchweizEmex 11: Google Shopping Search in der Schweiz
Emex 11: Google Shopping Search in der SchweizYourposition AG
 
GEOcaching - Madeira
GEOcaching - MadeiraGEOcaching - Madeira
GEOcaching - MadeiraJuli Burger
 
Ninoslecvida
NinoslecvidaNinoslecvida
Ninoslecvidaalesonmp
 
Creasoft Akademie - Deep dive into ASP.NET MVC
Creasoft Akademie - Deep dive into ASP.NET MVCCreasoft Akademie - Deep dive into ASP.NET MVC
Creasoft Akademie - Deep dive into ASP.NET MVCCreasoft AG
 
Evaluación del software hotpotatoes
Evaluación del software hotpotatoes Evaluación del software hotpotatoes
Evaluación del software hotpotatoes SOLDARLING
 
Contact Center Network: Investitionsstudie 2012
Contact Center Network: Investitionsstudie 2012Contact Center Network: Investitionsstudie 2012
Contact Center Network: Investitionsstudie 2012Bernd Fuhlert
 
Power Point PräSentation My Egis Community
Power Point PräSentation   My Egis CommunityPower Point PräSentation   My Egis Community
Power Point PräSentation My Egis Communitysynaxonag
 

Destacado (20)

Introduction to mobile reversing
Introduction to mobile reversingIntroduction to mobile reversing
Introduction to mobile reversing
 
Thomas Tinnefeld Fachsprachliche Klausuren Im Un Icert Kontext
Thomas Tinnefeld Fachsprachliche Klausuren Im Un Icert KontextThomas Tinnefeld Fachsprachliche Klausuren Im Un Icert Kontext
Thomas Tinnefeld Fachsprachliche Klausuren Im Un Icert Kontext
 
(Forschungs-)Fragen
(Forschungs-)Fragen(Forschungs-)Fragen
(Forschungs-)Fragen
 
Administracion.pdf ludeña
Administracion.pdf ludeñaAdministracion.pdf ludeña
Administracion.pdf ludeña
 
Analisis periodico
Analisis periodicoAnalisis periodico
Analisis periodico
 
Hoja de vida omar
Hoja de vida omarHoja de vida omar
Hoja de vida omar
 
Circulares
CircularesCirculares
Circulares
 
CONSULT 2010 | Nieheim: Foerderung - Finanzierung fuer Existenzgruendung | F...
CONSULT 2010 | Nieheim: Foerderung - Finanzierung fuer Existenzgruendung |  F...CONSULT 2010 | Nieheim: Foerderung - Finanzierung fuer Existenzgruendung |  F...
CONSULT 2010 | Nieheim: Foerderung - Finanzierung fuer Existenzgruendung | F...
 
Mundo tecnologia bonfy
Mundo tecnologia bonfyMundo tecnologia bonfy
Mundo tecnologia bonfy
 
CONSULT 2010 | Hagen: Foerderung - Finanzierung fuer Existenzgruendung | Foe...
CONSULT 2010 | Hagen: Foerderung - Finanzierung fuer Existenzgruendung |  Foe...CONSULT 2010 | Hagen: Foerderung - Finanzierung fuer Existenzgruendung |  Foe...
CONSULT 2010 | Hagen: Foerderung - Finanzierung fuer Existenzgruendung | Foe...
 
Emex 11: Google Shopping Search in der Schweiz
Emex 11: Google Shopping Search in der SchweizEmex 11: Google Shopping Search in der Schweiz
Emex 11: Google Shopping Search in der Schweiz
 
Define
DefineDefine
Define
 
GEOcaching - Madeira
GEOcaching - MadeiraGEOcaching - Madeira
GEOcaching - Madeira
 
Ninoslecvida
NinoslecvidaNinoslecvida
Ninoslecvida
 
Creasoft Akademie - Deep dive into ASP.NET MVC
Creasoft Akademie - Deep dive into ASP.NET MVCCreasoft Akademie - Deep dive into ASP.NET MVC
Creasoft Akademie - Deep dive into ASP.NET MVC
 
Evaluación del software hotpotatoes
Evaluación del software hotpotatoes Evaluación del software hotpotatoes
Evaluación del software hotpotatoes
 
Klimaundso
KlimaundsoKlimaundso
Klimaundso
 
Contact Center Network: Investitionsstudie 2012
Contact Center Network: Investitionsstudie 2012Contact Center Network: Investitionsstudie 2012
Contact Center Network: Investitionsstudie 2012
 
Zukunft von Bibliotheken 2016
Zukunft von Bibliotheken 2016Zukunft von Bibliotheken 2016
Zukunft von Bibliotheken 2016
 
Power Point PräSentation My Egis Community
Power Point PräSentation   My Egis CommunityPower Point PräSentation   My Egis Community
Power Point PräSentation My Egis Community
 

Similar a Formale Methoden im Reverse Engineering

Python in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtPython in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtAndreas Schreiber
 
Software Metrics and Continuous Integration
Software Metrics and Continuous IntegrationSoftware Metrics and Continuous Integration
Software Metrics and Continuous IntegrationMilena Reichel
 
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsAndreas Schreiber
 
Topologien verstehen und erstellen - Methoden der Wirtschaftsinformatik-200329
Topologien verstehen und erstellen - Methoden der Wirtschaftsinformatik-200329Topologien verstehen und erstellen - Methoden der Wirtschaftsinformatik-200329
Topologien verstehen und erstellen - Methoden der Wirtschaftsinformatik-200329Claus Brell
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareAndreas Schreiber
 
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...Aberla
 
Technologieraum übergreifende Programmierung
Technologieraum übergreifende ProgrammierungTechnologieraum übergreifende Programmierung
Technologieraum übergreifende ProgrammierungFalk Hartmann
 
Übersicht über die IoT Plattform im Freifunk SL-FL
Übersicht über die IoT Plattform im Freifunk SL-FLÜbersicht über die IoT Plattform im Freifunk SL-FL
Übersicht über die IoT Plattform im Freifunk SL-FLFrank Radzio
 
PROFACTOR Gruppe | Complete Inspect
PROFACTOR Gruppe | Complete InspectPROFACTOR Gruppe | Complete Inspect
PROFACTOR Gruppe | Complete InspectPROFACTOR Group
 
Event Driven Architecture - OPITZ CONSULTING - Schmutz - Winterberg
Event Driven Architecture - OPITZ CONSULTING - Schmutz - WinterbergEvent Driven Architecture - OPITZ CONSULTING - Schmutz - Winterberg
Event Driven Architecture - OPITZ CONSULTING - Schmutz - WinterbergOPITZ CONSULTING Deutschland
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Jürg Stuker
 
Python, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und RaumfahrtforschungPython, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und RaumfahrtforschungAndreas Schreiber
 
OSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
OSMC 2012 | Performance graphing mit inGraph by Eric LippmannOSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
OSMC 2012 | Performance graphing mit inGraph by Eric LippmannNETWAYS
 
CV - Olexandr Ostapenko - DE - Word97
CV - Olexandr Ostapenko - DE - Word97CV - Olexandr Ostapenko - DE - Word97
CV - Olexandr Ostapenko - DE - Word97Olexandr Ostapenko
 
-getrieben. Wer treibt eigentlich die Test-Entwicklung?
-getrieben. Wer treibt eigentlich die Test-Entwicklung?-getrieben. Wer treibt eigentlich die Test-Entwicklung?
-getrieben. Wer treibt eigentlich die Test-Entwicklung?Andi Albrecht
 
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?Robin Sedlaczek
 
Einführung in .NET
Einführung in .NETEinführung in .NET
Einführung in .NETAndreas Heil
 

Similar a Formale Methoden im Reverse Engineering (20)

Python in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtPython in der Luft- und Raumfahrt
Python in der Luft- und Raumfahrt
 
Software Metrics and Continuous Integration
Software Metrics and Continuous IntegrationSoftware Metrics and Continuous Integration
Software Metrics and Continuous Integration
 
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
 
Topologien verstehen und erstellen - Methoden der Wirtschaftsinformatik-200329
Topologien verstehen und erstellen - Methoden der Wirtschaftsinformatik-200329Topologien verstehen und erstellen - Methoden der Wirtschaftsinformatik-200329
Topologien verstehen und erstellen - Methoden der Wirtschaftsinformatik-200329
 
VampirTrace und Vampir
VampirTrace und VampirVampirTrace und Vampir
VampirTrace und Vampir
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
 
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
 
Technologieraum übergreifende Programmierung
Technologieraum übergreifende ProgrammierungTechnologieraum übergreifende Programmierung
Technologieraum übergreifende Programmierung
 
Übersicht über die IoT Plattform im Freifunk SL-FL
Übersicht über die IoT Plattform im Freifunk SL-FLÜbersicht über die IoT Plattform im Freifunk SL-FL
Übersicht über die IoT Plattform im Freifunk SL-FL
 
PROFACTOR Gruppe | Complete Inspect
PROFACTOR Gruppe | Complete InspectPROFACTOR Gruppe | Complete Inspect
PROFACTOR Gruppe | Complete Inspect
 
Event Driven Architecture - OPITZ CONSULTING - Schmutz - Winterberg
Event Driven Architecture - OPITZ CONSULTING - Schmutz - WinterbergEvent Driven Architecture - OPITZ CONSULTING - Schmutz - Winterberg
Event Driven Architecture - OPITZ CONSULTING - Schmutz - Winterberg
 
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen IBIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001
 
Python, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und RaumfahrtforschungPython, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und Raumfahrtforschung
 
OSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
OSMC 2012 | Performance graphing mit inGraph by Eric LippmannOSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
OSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
 
Bit wisem 2015-wieners-sitzung-10_Programmiersprachen
Bit wisem 2015-wieners-sitzung-10_ProgrammiersprachenBit wisem 2015-wieners-sitzung-10_Programmiersprachen
Bit wisem 2015-wieners-sitzung-10_Programmiersprachen
 
CV - Olexandr Ostapenko - DE - Word97
CV - Olexandr Ostapenko - DE - Word97CV - Olexandr Ostapenko - DE - Word97
CV - Olexandr Ostapenko - DE - Word97
 
-getrieben. Wer treibt eigentlich die Test-Entwicklung?
-getrieben. Wer treibt eigentlich die Test-Entwicklung?-getrieben. Wer treibt eigentlich die Test-Entwicklung?
-getrieben. Wer treibt eigentlich die Test-Entwicklung?
 
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
 
Einführung in .NET
Einführung in .NETEinführung in .NET
Einführung in .NET
 

Más de zynamics GmbH

How to really obfuscate your pdf malware
How to really obfuscate your pdf malwareHow to really obfuscate your pdf malware
How to really obfuscate your pdf malwarezynamics GmbH
 
Architectural Diversity (German)
Architectural Diversity (German)Architectural Diversity (German)
Architectural Diversity (German)zynamics GmbH
 
Introduction to mobile reversing
Introduction to mobile reversingIntroduction to mobile reversing
Introduction to mobile reversingzynamics GmbH
 
0-knowledge fuzzing white paper
0-knowledge fuzzing white paper0-knowledge fuzzing white paper
0-knowledge fuzzing white paperzynamics GmbH
 

Más de zynamics GmbH (6)

How to really obfuscate your pdf malware
How to really obfuscate your pdf malwareHow to really obfuscate your pdf malware
How to really obfuscate your pdf malware
 
Architectural Diversity (German)
Architectural Diversity (German)Architectural Diversity (German)
Architectural Diversity (German)
 
Introduction to mobile reversing
Introduction to mobile reversingIntroduction to mobile reversing
Introduction to mobile reversing
 
0-knowledge fuzzing white paper
0-knowledge fuzzing white paper0-knowledge fuzzing white paper
0-knowledge fuzzing white paper
 
Inbot10 vxclass
Inbot10 vxclassInbot10 vxclass
Inbot10 vxclass
 
0-knowledge fuzzing
0-knowledge fuzzing0-knowledge fuzzing
0-knowledge fuzzing
 

Formale Methoden im Reverse Engineering

  • 2. Master of Science Informatik, FH Trier 2007  Softwareentwickler für Reverse Engineering Tools bei der zynamics GmbH  Fast 12 Jahre Reverse Engineering Erfahrung  Zwei Jahre Vortragserfahrung über Reverse Engineering (CanSecWest, Hack in the Box, SOURCE Barcelona, …)
  • 3. Unzufrieden mit Fortschritten beim Reverse Engineering in den letzten 10 Jahren  Möchte akademische Forschung mit industrieller Anwendung verknüpfen  Studenten für Reverse Engineering begeistern
  • 4. IT-Sicherheitsfirma aus Bochum  Spezialisiert auf das Entwickeln von RE Tools  5 Jahre alt  12 Mitarbeiter  Deutscher IT-Sicherheitspreis 2006
  • 5. Diskussion der Problematik  Abstrakte Interpretation  Metasprachen  Dynamische Instrumentierung  Taint Tracking  BitBlaze
  • 6. Analyse von Binärcode ohne Zuhilfenahme von Quellcode  Ermitteln der Programmfunktionalität oder bestimmter Eigenschaften des Binärcodes  Optionale Rückübersetzung in Hochsprachencode
  • 7. Schwachstellenermittlung  Malwareanalyse  Behebung von Kompatibilitätsproblemen  Überprüfung von Code auf Vertrauenswürdigkeit  Entdeckung von Codediebstahl
  • 8. Disassembler (IDA Pro)  Debugger (WinDBG, OllyDbg)  Hex-Editoren  Fuzzer  Dateianalyseprogramme  Entpacker
  • 9.
  • 10.
  • 11. Mühsame Handarbeit  Finden interessanter Stellen  Untersuchung interessanter Stellen  Kaum Automatisierung  Kaum Nutzung von Erkenntnissen aus der Informatik  Keine Standardisierung
  • 12. Software wird immer größer und komplexer  Immer mehr Plattformen  Heimcomputer, Handys, PDAs, Router, Wireless  Mehr schützenswerte Daten  Sicherheitsanalysen werden teuer und aufwändiger
  • 13. Neue Tools welche mit den Datenmengen besser umgehen  Plattformunabhängige Tools  Übernahme von formalen Methoden aus der Informatik
  • 14. Abstrakte Interpretation  Metasprachen  Dynamische Instrumentierung  Taint Tracking  BitBlaze
  • 15. Codeanalyse ohne Programmausführung  Vorteile:  Unabhängig von ausgeführtem Code  Keine Ausführung von gefährlichem Code  Nachteile:  Statische Unentscheidbarkeit
  • 16. Entwickelt von Patrick Cousot und Radhia Cousot in den 1970ern  Teilabschnitt der Programmanalyse  Statisches Analyseverfahren basierend auf Verbandstheorie  Theorie der Approximation mathematischer Strukturen in semantischen Modellen
  • 17. Aussagen treffen über Programme ohne die Programme auszuführen  Verifikation von Behauptungen oder Entdeckung von Eigenschaften  Reduktion der Komplexität auf das Wesentliche
  • 18. Annahme der Existenz einer analysierten Programmiersprache mit Wertemenge V  Teilmenge von V beschreibt zu jedem Zeitpunkt den Programmzustand  Semantik der Sprache definiert Wertübergänge p : v1 v2
  • 19. Anzahl der konkreten Werte wächst explosionsartig  Einzelner 32 bit Ganzzahlwert hat 4294967295 Zustände  Zustandsmenge mehrerer Variablen wächst multiplikativ
  • 20. Ermittlung des Gesamtzustands im allgemeinen zu aufwändig und nicht nötig  Reduktion der Werte aus V auf abstrakte Eigenschaften L p : l1 l2  Konkrete Gestalt der Eigenschaften ist abhängig von der gewünschten Analyse
  • 21. Eine Variable ist null oder nicht null  Wertebereich einer Variablen als Intervall  Variable hat einen Einfluss auf den späteren Programmzustand
  • 22. Verifikation eines sicheren Zustandes  Konstantenpropagation  Ermittlung benötigter Register  Ermittlung der potentiellen Werteintervalle von Variablen
  • 23. Definition der Eigenschaftsübergänge für alle Werteübergänge der Sprache P  Abarbeiten des zu analysierenden Programms  Für jeden Werteübergang einen Eigenschaftsübergang ausführen  Fixpunktiteration durchführen bis keine weiteren Erkenntnisse gefunden werden
  • 24. Zu analysierender Code wird in gerichteten Graph zerlegt  Knoten enthalten einzelne Werteübergänge  Kanten beschreiben möglichen Programmablauf zwischen Werteübergängen
  • 25. 1400: add t0, 15, t1 1401: bisz t1, , t2 1402: jcc t2, , 1405 1403: str 8, , t3 1405: str 16, , t3 1404: jcc t2, , 1406 1406: add t3, t3, t4 int t4 = t0 == -15 ? 32 : 16 1407: jcc 1, , 1420
  • 26. Definition der Eigenschaften L als Verband  Definition von Infimum (Bottom) und Supremum (Top)  Definition von monotonen Eigenschaftsübergängen anhand von Werteübergängen  Definition eines Vereinigungsoperators
  • 27. T B
  • 28. Jedem Knoten des Programmgraphen wird ein Element aus L zugewiesen  Das Element aus L beschreibt bekanntes Wissen über das Programm an der Stelle des Knotens  Ohne Vorkenntnisse: Bottom  Mit Vorkenntnissen: Beliebiges Element
  • 29. Durchführung von Eigenschaftsübergängen auf Basis der Werteübergänge  Entweder in Programmablaufrichtung oder umgekehrt  Vereinigung von Eigenschaften wenn Kontrollfluss zusammenläuft  Iteration durchführen bis keine weiteren Informationen gefunden werden
  • 30. Ergebnis ist Menge der abstrakten Programmzustände  = Menge der Verbandselemente an den Knoten
  • 31. Terminierung garantiert durch Verbandsordnung und Monotonie  Realität ist komplizierter (widening, narrowing, …)  Laufzeitintensiv
  • 32. Kein Quelltext vorhanden  Analyse von Assemblersprachen ist komplex aufgrund der großen Befehlsmenge  Definition von Eigenschaftsübergängen für Hunderte von Befehlen  Lösung: Metasprachen
  • 33. Pseudo-Assemblersprachen  Echte Assemblersprachen können einfach in Metasprachen überführt werden  Metasprachen sind weniger komplex  Besser geeignet für Abstrakte Interpretation
  • 34. Speziell entwickelt für Reverse Engineering  Designziel: Einfach zu verstehen und zu benutzen  Nur 17 verschiedene Befehle  Sehr reguläre Struktur mit 3 Operanden pro Befehl
  • 35.
  • 36. Plattformunabhängig  Pro Algorithmus nur 17 Eigenschaftsübergänge  Einfaches Mapping zwischen Originalcode und REIL Code  Framework für abstrakte Interpretation bereits verfügbar
  • 37. Framework zur abstrakten Interpretation von REIL Code  Implementiert in Java  Benutzbar aus jeder beliebigen JVM-Sprache (Java, Jython, JRuby, …)  Erleichtert das Schreiben von statischen Analysealgorithmen durch Standardisierung der Struktur
  • 38. Eingabe: Echter Assemblercode  Transformation zu REIL  Analyse des REIL Codes mit MonoREIL  Rückbeziehung der Ergebnisse auf den Eingabecode
  • 39. Codeanalyse durch Programmausführung  Vorteile  Vollständige Kenntnisse über Programmverlauf  Nachteile  Nur ausgeführter Code wird betrachtet  Potentiell gefährlicher Code wird ausgeführt
  • 40. Zu analysierendes Programm wird echt ausgeführt  Analyse geschieht entweder in Echtzeit oder im Nachhinein auf protokollierten Daten
  • 41. Idee: Instrumentierungscode wird zur Laufzeit in Programmcode eingeschleust  Möglichkeiten:  Echtzeitüberwachung aller Aspekte des ausgeführten Programms  Echtzeitmanipulation des Programmcodes und der Daten
  • 42. Ermittlung von Verzweigungswahrscheinlichkeiten  Statistiken über Fehler und Ausnahmen  CPU Profiling  Code Coverage  Taint Tracking
  • 43. Pin  University of Virginia  Aktiv weiterentwickelt von Intel  DynamoRIO  Zusammenarbeit von Hewlett-Packard und MIT
  • 44. Verschiedene Ansätze  Auswirkungen auf das Zielprogramm  DynamoRIO ist schneller und braucht weniger Speicher  DynamoRIO kann Instruktionsstream verändern  Beide Tools über C-Programme erweiterbar  Pin-Erweiterungen sind weniger komplex
  • 45. Erkenntnis I: Daten sind wichtiger als Code  Erkenntnis II: Manche Daten sind wichtiger als andere Daten  Taint Tracking markiert und verfolgt wichtige Daten  Beispiel: Unverifizierte Eingaben
  • 46. Initiale Definitionspunkte für wichtige Daten werden ermittelt  Ursprungsdaten werden markiert  Immer wenn bereits markierte Daten in Berechnungen verwendet werden müssen auch Berechnungsresultate markiert werden  Markierung von Registerwerten und Speicherzellen
  • 47. Markieren von Bits mit Hilfe von Bitmasken erweist sich als wirkungsvoller  Markieren von Ablaufpfaden als Resultat von bedingten Verzweigungen ist nützlich  Teilregister müssen besonders betrachtet werden  Befehle müssen auch getaintet werden
  • 48. Menge von disjunkten gerichteten Graphen  Ablesbar wie Daten zusammenhängen  Ablesbar wann welche Daten einen Einfluss auf das Programm hatten  Ablesbar welche Befehle auf Grund der verfolgten Daten ausgeführt werden
  • 49.
  • 50. Feststellen ob eingegebene Daten korrekt entschärft werden  Feststellen ob zu einem bestimmten Zeitpunkt eingegebene Daten noch einen Einfluss auf das Programm haben  Überprüfen der Erreichbarkeit einzelner Befehle
  • 51. Menge an Daten in modernen Programmen bringt Komplexitätsprobleme mit sich  Lösung: Konzentration auf Teilmengen der Daten  Geschwindigkeit und Qualität hängen von der Instrumentierung ab
  • 52. Binary Analysis for Computer Security  Programmanalyseprojekt der Universität von Berkeley  Derzeit fortgeschrittenstes RE Framework  Implementierung in O‘Caml
  • 53. Vine  Komponente zur statischen Analyse  TEMU  Komponente zur dynamischen Analyse  Rudder  Komponente zur symbolischen Ausführung
  • 54. Metasprache zur Simulation von x86 Code  Ermöglicht die Erstellung von Kontrollflussgraphen  Stellt Standardalgorithmen zur Programmanalyse bereit  Konstantenpropagation  Datenabhängigkeiten  Kann in C-Code übersetzt werden
  • 55. Erweiterung von QEMU  Ermöglicht Taint Tracking  Ermöglicht Verhaltensanalyse vollständiger Programme
  • 56. Symbolische Ausführung von Code  Start mit interessanten Registern und Speicherwerten  Werteveränderungen werden als Formeln dargestellt  Erlaubt das mathematische Betrachten von Wertänderungen
  • 57. Abstrakte Interpretation  Abhängigkeitsanalyse  Logische Analyse mit Theorembeweiser  Emulation und dynamische Instrumentierung  Symbolische Ausführung
  • 58. Automatic Patch-based Exploit Generation  Hidden Code Extraction from Packed Executables  Deviation Detection in Binaries  Automatic Malware Dissection and Trigger- based Behavior Analysis  …
  • 59. Diskussion der Problematik  Abstrakte Interpretation  Metasprachen  Dynamische Instrumentierung  Taint Tracking  BitBlaze
  • 60. Daten sind wichtiger als Code  Formale Methoden werden benötigt um Komplexität entgegenzuwirken  Es wird viel geforscht aber wenig angewand  Reverse Engineering ist ein Feld mit anspruchsvollen und interessanten Aufgaben
  • 61. Reverse Engineering Reddit  http://www.reddit.com/r/reverseengineering  Lambda – The Ultimate  http://lambda-the-ultimate.org/  The Program Transformation Wiki  http://www.program-transformation.org/
  • 62.
  • 63. University of Berkeley  http://bitblaze.cs.berkeley.edu/  University of California, Santa Barbara  http://www.cs.ucsb.edu/~seclab/  Carnegie-Mellon University  http://www.cylab.cmu.edu/index.html
  • 64. Stony Brook University  http://seclab.cs.sunysb.edu/seclab/  Universität Karlsruhe  http://pp.info.uni-karlsruhe.de/publications.php
  • 65. MonoREIL Algorithmen zur Programmanalyse  Input Crafting um Verzweigungen zu erfüllen  Semantisches Diffen  Trennung von Code und Daten