G Data Presentation 2011 Redesign SK2

Transcrição

G Data Presentation 2011 Redesign SK2
Ein generischer Unpacking-Ansatz
Robert Michel
6. Juli 2012
Ruhr-Universität Bochum, G Data
Aufbau
 Einführung:
•
•
•
•
PE-Files
Imports
Hooking
Laufzeitpacker
 Contribution
• Unpacking mit Fokus auf Imports
Crimeware als Businessmodell
Konfigurieren Packen
Programmieren
Signatur
Verteilen
Erkennung?
 Contribution:
• Generischer und schneller Unpacker mit
Fokus auf Imports
„Zuhause“ in Analyseumgebung
Das Packerproblem
 Statisches Entpacken benötigt Algorithmus
 Generische Unpacker existieren bereits
•
•
•
•
•
OmniUnpack
Eureka
PolyUnpack
PandorasBochs
Renovo
• …
 Wozu noch einen Unpacker?
• Existierende Unpacker in zwei Klassen:
1. Anwendbarkeit von Signaturen
2. Lauffähige entpackte Binary
• Zu 1. (OmniUnpack, PolyUnpack, Renovo, …)
• Malware in gesicherter Umgebung ausführen
• Zeitpunkt abpassen, wenn Malware entpackt ist
Virenscanner anwenden(OmniUnpack)
• Zu 2. (PandorasBochs, Eureka, …)
• Malware in gesicherter Umgebung ausführen
• Zeitpunkt abpassen, wenn Malware entpackt ist
 Dumpen der Datei im lauffähigen Zustand
Generischer Unpacker mit
Fokus auf Imports
 Ziele:
• Gepackte Binaries entpacken und lauffähig
dumpen
• Mindestens die .text-Section soll lesbar sein
 Schritte zum Entpacken:
• Sandboxumgebung anpassen
• Binary starten
• Direkt am OEP anhalten
 Schritte zum Dumpen:
• PE-Header rekonstruieren und dumpen
• Sections identifizieren und dumpen
• IAT finden, daraus Imports reproduzieren, an PE
anhängen
GetProcAddress()
• Auflösen eines Funktionsnamens zu Adresse
ReverseGetProcAddress()
• Pseudofunktion: Adresse zu Funktionsnamen auflösen
Anti ReverseGetProcAddress()
• Einfache Packer legen in IAT die erwarteten Adressen
(wie Windows-Loader)
• Aufwändigere Packer legen Pointer auf eigenen Code
dazwischen
Lösung:
Export-Hooks in jeder DLL
 Jede Auflösung von Imports führt auf
UnpackCode
IAT
IAT
UnpackCode
Packer Code
UnpackCode
DLL
UnpackCode?
If (marker)
return DllName, Funktionsname
else
jmp <Funktion>
• Jede potentielle Importadresse kann mit Marker
aufgerufen werden (Call kommt nie in Dll an!)
• Für Caller transparent
Fragen?
Kontakt:
[email protected]
[email protected]
@flxp0c