Malware-Analyse und Reverse Engineering. 13: Rückblick über das Semester Prof. Dr. Michael Engel

Ähnliche Dokumente
Matthias Hanreich - TheGreyKnight

Sicheres C Programmieren in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester

Maschinencode Dateiformat und Stackframes

Malware-Analyse und Reverse Engineering. 8: Statische und dynamische Analysen zur Malware-Erkennung Prof. Dr.

Übungsblatt 10 (Block C 2) (16 Punkte)

Einführung in die Systemprogrammierung

Konzepte von Betriebssystemkomponenten

Tafelübung zu BSRvS 1 6. Sicherheit

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Übungen zur Vorlesung Systemsicherheit

MALWARE AM BEISPIEL VON STUXNET

Einführung. Übungen zur Vorlesung Virtuelle Maschinen. Stefan Potyra. SoSe 2009

Linker: Adreßräume verknüpfen. Informationen über einen Prozeß. Prozeß-Erzeugung: Verwandtschaft

SLAC, Johannes Plötner

Systemprogrammierung

Absicherung von Linux- Rechnern mit grsecurity

Malware-Analyse und Reverse Engineering. 9: Polymorphe Viren und selbstmodifizierender Code Prof. Dr. Michael Engel

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / Vorlesung 9, Dienstag 18.

U23 Assembler Workshop

Bibliotheks-basierte Virtualisierung

Hinweise C-Programmierung

Angewandte IT-Sicherheit

U23 - Shellcode. Twix Chaos Computer Club Cologne. Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides

2Binden 3. und Bibliotheken

Systeme I: Betriebssysteme Kapitel 8 Speicherverwaltung

Übung 1 - Betriebssysteme I

Echtzeitbetriebssysteme

Technische Informatik 1

Datenstrukturen, Alignment Stack Prozeduraufruf, Parameterübergabe und -rückgabe (Calling Conventions) Leaf procedures

Zwei Möglichkeiten die TLB zu aktualisieren

System Monitoring mit strace. Systemcall tracing

Hacking in C (Windows) Reinhard Oertel

U23 Assembler Workshop

Just-In-Time-Compiler (2)

Konzepte von Betriebssystemkomponenten Referat am Thema: Adressräume, Page Faults, Demand Paging, Copy on Write Referent: Johannes Werner

Windows Vista Security

Karlsruher Institut für Technologie

DHBW Stuttgart Mikrocomputertechnik Labor KEIL Entwicklungsumgebung. Projektstruktur

Was ist ein Profiler?

Betriebssysteme Vorstellung

Diplomarbeit Antrittsvortrag

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Computeranwendung in der Chemie Informatik für Chemiker(innen) 3. Software

Virtuelle Maschinen Konzept von VMWare

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Einführung in die Programmiersprache C

Ransomware-Angriffe in Sekunden stoppen und reparieren. Das ist InterceptX von Sophos. Roman Schlenker Senior Sales Engineer

Tutorium Rechnerorganisation

Just-In-Time-Compiler (2)

IT-Security durch das passende OS. Oracle Solaris 11.2.

Einführung in die Programmiersprache C

Betriebssysteme. Tutorium 2. Philipp Kirchhofer

Rechnerarchitektur und Betriebssysteme (CS201): Frühe Betriebssysteme, geschützte CPU-Befehle, CPU-Modus

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming

PC/XT/AT ASSEMBLER-BUCH

Konzepte von Betriebssystem-Komponenten. Programmstart & dynamische Bibliotheken SS 05. Wladislaw Eckhardt.

Teil 3: Konzepte von Betriebssystemen

Vorlesung Programmieren

Betriebssysteme KU - Einführungstutorium

6 Speicherorganisation

Algorithmen und Datenstrukturen

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

Einführung in die Systemprogrammierung

Leichtgewichtsprozesse

Buffer Overflow. Denis Graf, Tim Krämer, Konstantin Schlese. Universität Hamburg Fachbereich Informatik. 6. Januar 2013

Rootkits. Windows-Kernel unterwandern. Greg Hoglung, James Butler. An imprint of Pearson Education

Einleitung Funktionsaufrufe Berechnungen Verzweigungen Systemaufrufe Speicherzugriffe Fazit Quellen. Laufzeitkosten in C.

Vortrag zum Seminar Konzepte und Techniken virtueller Maschinen und Emulatoren. Bruno Kleinert 20. Juni 2007

Visualisierung von Graphenalgorithmen

Betriebssysteme. Vorlesung im Herbstsemester 2010 Universität Mannheim. Kapitel 6: Speicherbasierte Prozessinteraktion

1.7 Assembler Programmierung

S7: Java als Sicherheitsrisiko security-zone Renato Ettisberger

Unterprogramme. Unterprogramme

Vorlesung Rechnerarchitektur. Einführung

Einführung in die Programmiersprache C

Smartphone Entwicklung mit Android und Java

Technische Informatik 1 Übung 2 Assembler (Computerübung) Matthias Meyer

Synchronized Security

Mikrocontroller-Programmierung

Lösungsvorschlag zur 3. Übung

Compilerbau + Virtuelle Maschinen

Betriebssystemtechnik

Wie groß ist die Page Table?

Technische Informatik 1 - Übung 3 3. & 4. November Philipp Miedl

TI-Übung Assembler. Andreas I. Schmied AspectIX-Team Abteilung Verteilte Systeme Universität Ulm WS2005

Exploits Wie kann das sein?

Repetitorium Informatik (Java)

FAKULTÄT FÜR INFORMATIK

Assembler Programmierung Motivation. Informatik II SS 2004 Teil 4: Assembler Programmierung. Assembler vs. Maschinensprache

RO-Tutorien 15 und 16

2.1 Rechnersichten 2.2 Rechnerorganisation: Aufbau und Funktionsweise

Betriebssysteme I: Speicherverwaltung (Teil A: Adress-Bindung)

Abstrakte C-Maschine und Stack

Polymorphie Begriffsklärung und Anwendung

Sicherheit in Software

Betriebssysteme I: Klassische UNIX Exploits

Design and Implementation of a Soft-error Resilient OSEK Real-time Operating System

Transkript:

Malware-Analyse und Reverse Engineering 13: Rückblick über das Semester 29.6.2017 Prof. Dr. Michael Engel

Überblick MARE 2017: Einführungund Motivation, Malware-Historie Übersetzen und Linken von Programmen, Binärformate Laufzeitverhaltenvon Programmen, dynamisches Linken Unix-Prozesse, Programmstart, Stackframes und -verhalten Buffer Overflows und Funktionsaufrufe Return Oriented Programming Schutzmechanismen gegen Buffer Overflows Statische und dynamischecodeanalyse Polymorphe Viren und selbstmodifizierendercode Systemaufrufe Verhaltensanalyse von Viren Rootkits MARE 13 Rückblick 2

Einführung und Motivation, Malware-Historie Kurze Geschichte der Computerviren Definition Reverse Engineering und Malware Historie von Malware Verbreitung Beispiele Code und Funktionsweise eines einfachen Beispielvirus Rechtliche Implikationen MARE 13 Rückblick 3

Übersetzen und Linken von Programmen, Binärformate Compiliervorgang: Separate Schritte: Übersetzen:.c ->.o Linken:.o -> ELF Binärformate ELF: Struktur, Sektionen (.text,...) Werkzeuge zur Analyse (readelf,...) Symbole und Adressen Linker Symbole Relokationen Endianness MARE 13 Rückblick 4

Laufzeitverhalten von Programmen, dynamisches Linken Virtueller Speicher in Linux Seitentabellen, Umsetzung virtuelle -> physikalische Adressen Virtuelles Speicherlayout von Prozessen Programme und Prozesse Prozessstart: Übergang Programm -> Prozess Linkerskripte und Speicherlayout Speicherlayout von Programmen zur Laufzeit Dynamisches Linken Shared Libraries MARE 13 Rückblick 5

Unix-Prozesse, Programmstart, Stackframes und -verhalten Prozessmodell und Prozesserzeugung in Unix fork und exec, Eltern-/Kindprozesse Programmstart Libc, crt0, Aufruf und Parameter von main Semantik von Funktionsaufrufen Parameterübergabe auf dem Stack Erzeugen und Aufbau von stack frames Stack- und Framepointer MARE 13 Rückblick 6

Buffer Overflows und Funktionsaufrufe Funktionsaufrufe auf x86 (32 Bit) und x64 (64 Bit) x86-linux Parameterübergabe: Stack vs. Register Funktionsaufruf in Assembler sub movq Funktion des Base (Frame) Pointers movq Stack-Probleme bei C-Funktionen callq Lokale und globale Variable xor add Lokale Arrays, unsichere libc-funktionen retq Buffer Overflow und Stackverhalten Angriffsmethoden Ausführbarer Stack: Malware-Code im Buffer mitliefern Nicht ausführbarer Stack: Return to libcausnutzen $0x64, %rsp %rdi, %rdx %rsp, %rdi <memcpy> %rax,%rax $0x64, %rsp MARE 13 Rückblick 7

Return Oriented Programming Ausführbarer vs. nicht ausführbarer Stack-Speicherbereich Data Execution Protection (DEP = W^X) Details zu return to libc Problem bei x64: Parameterübergabe an Funktionen Register statt Stack: Code zum Setzen von Registern notwendig Nicht auf Stack => aber Codefragmente im.text-segment Anspringen kurzer Gadgets mit Return (0xc3) am Ende: Return oriented programming(rop) Ausnutzen von ROP Finden von Gadgets im Speicher Verketten von Gadgets für erweiterte Funktionalität Gadgets mit weiterer Funktionalität (nicht nur Laden von Registern) MARE 13 Rückblick 8

Schutzmechanismen gegen Buffer Overflows Erkennen von Buffer Overflows Stack canaries Stack smashing protector Sicherheit von canaries Schutz vor Buffer Overflows Shadow stacks Schutz vor ROP Address Space Layout Randomization (ASLR) Data Execution Prevention (DEP) Details zu virtuellem Speicher bei x86 und Adressumsetzung Statische Codeanalyse Modellierung von Strings und Constraint-Analyse MARE 13 Rückblick 9

Statische und dynamische Codeanalyse (1) Mehr statische Codeanalysen Analyse von Codesignaturen (Finden von Bytefolgen in Binaries) Probleme der signaturbasierten Erkennung false positives und false negatives Größe der Signaturdatenbank und Zeitaufwand für Scans Umgehen der Signaturanalyse Mutation (Obfuskation) von Viren: Einfügen von NOPs Codeumsortierung und Einfügen von Sprüngen Ersetzen von Instr. durch semantisch identische Folgen E800 0000 00(90)* 5B(90)* 8D4B 42(90)* 51(90)* 50(90)* 50(90)* 0F01 4C24 FE(90)* 5B(90)* 83C3 1C(90)* FA(90)* 8B2B MARE 13 Rückblick 10

Statische und dynamische Codeanalyse (2) Polymorphe Viren Kombination verschiedener Obfuskationstechniken Komplexere statische Analyse: Abstrakte Interpretation Abstraktion von Programmzuständen Abstraktion von Programmsemantik Anwendung: Sprunganalyse Dynamische Analysen Kontrollflussverfolgungund Funktionsaufrufgraphen MARE 13 Rückblick 11

Polymorphe Viren und selbstmodifizierender Code Reverse Engineering und das Vermeiden davon Erschweren des Disassemblierens: Sprünge mitten in Opcodes Arten von Disassemblern Linear Sweep vs. Recursive Traversal Definition und Semantik von Basisblöcken Mehr zu polymorphen Viren Selbstentschlüsselende Viren Problem der Bestimmung des aktuellen PC Obfuskation durch Instruktionsersetzung Selbstmodifizierender Code MARE 13 Rückblick 12

Systemaufrufe Systemaufrufe in Linux Unterschiede zu und Gemeinsamkeiten mit Funktionsaufrufen Schutzringe und Privilegienübergang Überblick über Funktionalität von Systemaufrufen Systemaufruftabelle und -nummern Zusammenhang libc <-> Systemaufruf Systemaufrufe in Assembler SYSCALL-Befehl Parameterübergabe und rückgabe Verfolgen von Systemaufrufen strace und ptrace MARE 13 Rückblick 13

Verhaltensanalyse von Viren Beobachten des Laufzeitverhaltens von Programmen Schon gesehen: Kontrollflussverfolgung Analogie zum Immunsystem Analyse von Folgen von Systemaufrufen Systemaufruf-Traces mit lookahead Einschränkungen des lookahead-ansatzes Nur Syscall-Nummern (keine Parameter) analysiert, kein Timing, keine Analyse von ausgeführten Instruktionen Angriffe auf lookahead-verfahren Einfügen sinn- und nutzloser Systemaufrufe Verwenden von Systemaufruf-Folgen, die kürzer als der lookahead sind MARE 13 Rückblick 14

Rootkits Permanentes Kompromittieren eines angegriffenen Systems Installation und Verbergen von Malware-Komponenten Unterscheidung Kernel-/Usermode-Rootkit Verwenden bereits bekannte Methoden (z.b. LD_PRELOAD) Kernelmodule als Grundlage von Kernelmode-Rootkits Erkennung der Veränderung von Binaries Checksumming mit Hashfunktionen Probleme mit Hashfunktionen: Kollisionen in md5 und sha1 Speicherbasierte Rootkits Nach Reboot verschwunden, ohne Spuren zu hinterlassen VM-basierte Rootkits Grundlagen HW-Virtualisierung: Ring -1 Beispiel Blue Pill und Erkennungsmöglichkeiten MARE 13 Rückblick 15

Fazit: Was sollte das alles? Kernkompetenzen aus der Vorlesung Wissen über den Übersetzungsvorgang und das Laufzeitverhalten von Software Prozesse, Funktions- und Systemaufrufe, Stackverhalten Typische Sicherheitslücken und Möglichkeiten, sie auszunutzen Buffer Overflows, return to libc, ROP,... Typische C-Programmierfehler Hardware- und Software-basierte Schutzmechanismen DEP, ASLR, statische und dynamische Codeanalyse,......und wie diese wieder umgangen werden können... usw. Polymorphe Viren, verschlüsselter/selbstmodif. Code,... Definition, Strukturen und Funktion von Rootkits MARE 13 Rückblick 16

Fazit: Was sollte das alles? Kernkompetenzen aus den praktischen Übungen Bessere Einblicke in Linux auf Systemebene Compiler, Linker, Shared Libraries, Stackaufbau, ABIs... Umgang mit Analysetools (ELF-Dump, Disassembler, Debugger) Analyse von Programmen auf Maschinenebene Implementierung typischer Angriffe: Buffer overflow, ROP Analyse und Umgehen von Schutzmechanismen: Canaries Implementieren dynamischer Analysen: Kontrollflussverfolgung Verwenden von Systemaufrufen, Parameterübergabe in ASM Tracing von Systemaufrufen als weitere dynamische Analyse Verbergen von Programmen als Rootkit-Teilfunktionalität Hausaufgabe: Knobeln mit selbstmodifizierendem Code MARE 13 Rückblick 17

Das war schon alles... MARE 13 Rückblick 18