sogen - Hochleistungs-Userspace-Emulator für Windows & Linux
(github.com/momo5502)- Ein Hochleistungs-Userspace-Emulator für Windows/Linux, der auf Systemaufruf-(syscall-)Ebene arbeitet und durch umfassendes Hooking die komplette Prozessausführung steuert
- Geeignet für Aufgaben, die eine fein granulare Kontrolle über die Prozessausführung erfordern, etwa Sicherheitsforschung, Malware-Analyse und DRM-Forschung
- Arbeitet auf syscall-Ebene, ohne die Windows-API neu zu implementieren, sodass bestehende System-DLLs unverändert genutzt werden können
- Geschrieben in C++ und mit dem gewünschten Backend betreibbar: Unicorn Engine, icicle-emu, Hyper-V(WHP)
- Erweiterte Speicherverwaltung: Auf der Speicherverwaltung von Unicorn aufgebaut und Unterstützung für Windows-spezifische Speichertypen wie reserved und committed
- Vollständige PE-Ladeunterstützung: Verarbeitung des Ladens von ausführbaren Dateien und DLLs, korrektes Memory-Mapping, Relocations und TLS-Unterstützung
- Ausnahmebehandlung: Implementiert Windows Structured Exception Handling (SEH) mit Unterstützung für Exception Dispatcher und Unwinding
- Thread-Unterstützung: Bietet ein Threading-Modell mit Round-Robin-Scheduling
- State-Management: Unterstützt sowohl vollständige Zustandsserialisierung als auch schnelle In-Memory-Snapshots
- Debugging-Schnittstelle: Implementiert das GDB-Serial-Protokoll und kann mit IDA Pro, GDB, LLDB, VS Code usw. integriert werden
- Bei der Malware-Analyse ist die Host-Isolation möglicherweise nicht vollständig, daher wird die Nutzung der browser-sandboxbasierten Web-Version empfohlen
- Automatisierung mit Python möglich
- Installation mit
pip install sogen - Emulator ausführen, Callbacks registrieren und WinAPI-Call-Intercepts direkt in Python verarbeiten
- Installation mit
Siehe auch die Vortragsfolien: Fake It ‘til We Make It: The Art of Windows User Space Emulation
- Was ist Windows User Space Emulation?
- Eine Technik, bei der ein Prozess innerhalb eines Emulators ausgeführt und das darunterliegende OS und der Kernel simuliert werden
- Während bei klassischer Emulation Code auf einer virtuellen CPU läuft und Hardware simuliert wird, imitiert Userspace-Emulation darüber hinaus auch die OS- und Kernel-Schicht
- Der zentrale Wert davon ist die vollständige Kontrolle über den ausgeführten Code — der Emulator kann in jede Ausführungsphase eingreifen
- Die Kontrolle erfolgt über Hooking-Points
- Hooking von Speicherzugriffen — Abfangen auf Ebene von read, write und execute
- Hooking der Befehlsausführung — Erkennen des Ausführungszeitpunkts bestimmter Instruktionen wie syscall, cpuid und rdtsc
- Hooking der Ausführung neuer Codepfade — Erkennen von Codepfaden, die erstmals ausgeführt werden
- Dank dieser Hooking-Fähigkeiten sind das Abfangen externer Kommunikation, die Nachverfolgung des Ausführungsflusses und die Messung der Code-Coverage möglich; das bildet die Grundlage für DRM-Analyse, Malware-Analyse, Schwachstellenanalyse und Sicherheitsforschung
- Der Vortragende ist DRM-Entwickler und hat zahlreiche DRM-Systeme wie Steam CEG, Arxan und Denuvo reversiert und umgangen
- Bei der Analyse des von vielen Windows-Spielen eingesetzten Denuvo-DRM war Emulation ein zentrales Mittel
- Moderne DRM-Systeme machen statische und dynamische Analyse durch Obfuskation, Anti-Tampering und Anti-Debugging oft unmöglich
- Einsatz des Emulators für Schwachstellenanalyse (Fuzzing): Eingaben werden innerhalb des Emulators randomisiert, per Hooking wird Code-Coverage-Feedback gewonnen, und die Ausführung ist vorhersagbar und reproduzierbar
- Die Grenzen bestehender Lösungen waren die Motivation für die Entwicklung
- Qiling, Speakeasy und Dumpulator sind in Python geschrieben und bei DRM-Analysen mit vielen Hooks extrem langsam
- Binee und Unicorn PE sind API-Level-Neuimplementierungen und daher unvollständig sowie potenziell fehleranfällig
- Umfang der syscalls: allgemeine syscalls in ntdll.dll 409, UI-syscalls in win32u.dll 1474
- Die hohe Emulationsgeschwindigkeit ist JIT zu verdanken
Noch keine Kommentare.