Exploiting und Reverse Engineering

Workshop Reverse Engineering
und Exploiting
Brutewoorse IT-Sec Gruppe
Agenda
Unser Programm für
heute
1.
2.
3.
4.
Wer sind wir?
Motivation
Was ist Reverse Engineering
Wie funktioniert Reverse
Engineering
a.
Hands-On Beispiele mit GDB
5. Maßnahmen gegen Reverse
Engineering
6. Reverse Engineering Tools und
Skills
Geschichte
- Gründung 2014
- Inzwischen in 3. Generation
- Größere Erfolge bei CTFs
-
Internationale Top 10%
State of the Union
- Wöchentliche Treffen (meistens)
-
Austausch, Planung, Weiterbildung, Write-ups, etc..
- Monatliche CTFs (meistens :P)
-
Am Wochenende
- Neue Pfade
-
Neue Leitung, Kooperation mit dem Chaos Darmstadt
Neue Mitglieder?
Realweltangriffe: Stagefright
-
7 Sicherheitslücken in libstagefright von Android
ca. 95% (950 Millionen) Android-Geräte betroffen
Remote-Code-Execution über manipulierte Bilder möglich
Bisher nur Proof-of-Concept Exploits gebaut
ältere Geräte immer noch verwundbar
Realweltangriffe: Heartbleed
Gemeinsamkeit von Stagefright und Hearbleed
- Quellcode liegt offen / “Open Source”-Vulnerabilities
- Können über statische/dynamische Quellcode-Analyse gefunden werden
- “relativ” einfach
Realweltangriffe: Mirai Botnetz
- Botnetz, das aus Internet-of-Things-Geräten besteht.
- Kann sehr mächtige DDos-Attacken ausführen (> 1 Tbit/s)
- Malware-Angriff auf Management-Schnittstelle bei Routern
- Analyse der Funktionsweise nur über Reverse Engineering möglich
Realweltangriffe: Internet Explorer
Wozu verwendet man Reverse Engineering?
-
Malware-Analyse
Rekonstruktion alter Software
Nachträgliche Erstellung von Dokumentation
Finden von Sicherheitslücken in Closed-Source-Software
(z.b. Treiber/Firmware/alles was sich hacken lässt)
- Denial of Service Angriffe
- Erstellen von Exploits für Remote-Code-Execution
- Analyse von Konkurrenz-Software
Was ist Reverse Engineering?
Let’s talk about cookies:
Was ist Reverse Engineering?
Now let’s talk about the real stuff:
libraries
source code
compiler
assembler
linker
executable binary
Was ist Reverse Engineering?
Can we reverse it?
libraries
source code
compiler
assembler
linker
executable binary
But how?
Executable and Linking Format (ELF-Binary)
-
Standard für portable object files
Executables
Shared Libraries
relocatable files
static and dynamic binaries
Layout einer ELF-binary
executable code (assembler,
read only)
read only data (constants)
read/write data (variables)
Beispiel 1 - How to linux-console
Beispiel 2 - how to GDB
Was ist GDB?
-
GNU Debugger
Autor: Richard Stallman
de-facto Standard-Debugger in Linux
konsolenbasiert
erweiterbar
Manual: https://sourceware.org/gdb/onlinedocs/gdb/
x86 Prozessor
- Führt Assembler-Anweisungen aus
- Verschiedene Register:
-
EAX/RAX: Akkumulator
EBX/RBX: Basis
ECX/RCX: Zähler
EDX/RDX: Daten/Allzweck
ESI/RSI: Quellindex (Zeichenketten)
EDI/RDI: Zielindex (Zeichenketten)
ESP/RSP: Stapelzeiger
EBP/RBP: Stapelsegment (Anfangsadresse)
EIP/RIP: Befehlszeiger
Stackframe
Parameters
Return Addresse
ebp
Saved EBP
Local Variables
esp
Stackframe und Methodenaufruf
argc
argv[]
Stackframe
für main()
Return Addresse
ebp
Saved EBP
esp
*pw
eip
ebp
Return Addresse to
main
Stackframe für
EBP of main
check_password()
foobar
input
result
esp
Beispiel 3 - Buffer Overflow
Buffer Overflow
*pw
Return Addresse
to
AAAAAAAAAAAAAAAA
main
AAAAAAAAAAAAAAAA
EBP of mainAAAAAAAAAAAAAAAA
foobar
input
result
eip: 0xaaaaaaaaaaaa
=> Segmentation fault
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
Beispiel 4 - Remote code execution
Remote code execution
Parameters
Neue
Sprung
Addresse
Return
Addresse
Saved EBP
Padding
Exploit Code
Buffer[80]
Maßnahmen gegen Buffer Overflow:
Canary
Parameters
Return Addresse
Saved EBP
Neue Sprung
Addresse
Canary
Padding
Exploit Code
Buffer[80]
Maßnahmen gegen Buffer Overflow:
Address Space Layout Randomization
example2
libc
1. Aufruf
0xabcde
0x12345
2. Aufruf
0xcdbae
0x24135
3. Aufruf
0xbceda
0x53426
….
….
….
Maßnahmen gegen Reverse Engineering
-
Packing
Obfuscation
fehlende Debugging-Symbols
Verschlüsselung
“Spaghetti-Code”
Reverse Engineering Skills
Architekturen
(Hardware)
C,
Assembler
Betriebssysteme
Reverse Engineering Skills
auch Python
kann hilfreich
sein
Motivation
… und viel Zeit
Reverse Engineering Tools
GNU Debugger (gdb)
OllyDbg
Immunity Debugger
https://www.gnu.org/software/gdb/
http://www.ollydbg.de/
https://www.immunityinc.com/products/debugger/
radare2
Hopper
http://radare.org/r/
https://www.hopperapp.com/
IDA Pro
https://www.hex-rays.com/products.shtml
Vorgehen
PE
herunterladen
prüfen
(file)
ausführen
ELF
Tools
Ressourcen
OverTheWire (Wargames)
http://overthewire.org/wargames/
Smash The Stack (Wargames)
http://smashthestack.org/wargames.html
Corelan (Tutorials)
https://www.corelan.be/
SecurityTube (Tutorials)
http://www.securitytube.net/
Bildquellen
-
http://memeshappen.com/media/created/----meme-42321.jpg
https://www.immunityinc.com/images/debugger-logo-large.jpg
http://radare.org/r/img/r2logo3.png
https://www.hopperapp.com/Hopper_v4.png
https://www.hex-rays.com/products/ida/index.shtml
- alle anderen Materialien lassen sich in der Public Domain finden