sogen - emulador de espacio de usuario de alto rendimiento para Windows y Linux
(github.com/momo5502)- Emulador de espacio de usuario de alto rendimiento para Windows/Linux que opera a nivel de syscalls del sistema, controlando todo el proceso de ejecución mediante hooking integral
- Adecuado para tareas que requieren control detallado sobre la ejecución de procesos, como investigación de seguridad, análisis de malware e investigación de DRM
- Funciona a nivel de syscall sin reimplementar la API de Windows, por lo que puede aprovechar directamente las DLL del sistema existentes
- Escrito en C++ y puede ejecutarse con el backend que se desee: Unicorn Engine, icicle-emu, Hyper-V(WHP)
- Gestión avanzada de memoria: construido sobre la administración de memoria de Unicorn, con soporte para tipos de memoria propios de Windows como reserved y committed
- Soporte completo de carga PE: maneja la carga de ejecutables y DLL, mapeo de memoria adecuado, reubicaciones (relocations) y soporte para TLS
- Manejo de excepciones: implementa el manejo estructurado de excepciones (SEH) de Windows, con soporte para despachador de excepciones y unwinding
- Soporte de hilos: ofrece un modelo de threading con planificación round-robin
- Gestión de estado: admite tanto la serialización del estado completo como snapshots rápidos en memoria
- Interfaz de depuración: implementa el protocolo serial de GDB, lo que permite integrarlo con IDA Pro, GDB, LLDB, VS Code y más
- En análisis de malware, el aislamiento del host podría no ser perfecto, por lo que se recomienda usar la versión web basada en sandbox del navegador
- Se puede automatizar con Python
- Instalar con
pip install sogen - Es posible ejecutar el emulador, registrar callbacks e interceptar llamadas WinAPI directamente desde Python
- Instalar con
Consulta las diapositivas de la presentación: Fake It ‘til We Make It: The Art of Windows User Space Emulation
- ¿Qué es Windows User Space Emulation?
- Técnica que ejecuta un proceso dentro de un emulador y simula el sistema operativo y el kernel por debajo
- Si la emulación común ejecuta código en una CPU virtual y simula hardware, la emulación de espacio de usuario va un paso más allá e imita también las capas de SO y kernel
- Su valor principal es el control total sobre el código en ejecución: el emulador puede intervenir en cada etapa de la ejecución
- El control se logra mediante puntos de hooking
- Hooking de acceso a memoria: intercepta operaciones de read, write y execute
- Hooking de ejecución de instrucciones: detecta el momento en que se ejecutan instrucciones específicas como syscall, cpuid y rdtsc
- Hooking de ejecución de nuevas rutas de código: detecta rutas de código que se ejecutan por primera vez
- Gracias a esta capacidad de hooking, se puede interceptar comunicación externa, rastrear el flujo de ejecución y medir cobertura de código, lo que la convierte en una base para análisis de DRM, análisis de malware, análisis de vulnerabilidades e investigación de seguridad
- El ponente es desarrollador de DRM y tiene experiencia revirtiendo y eludiendo múltiples DRM como Steam CEG, Arxan y Denuvo
- La emulación fue una herramienta clave para analizar Denuvo DRM, muy utilizado en juegos para Windows
- Esto se debe a que los DRM modernos suelen hacer inviables los análisis estáticos y dinámicos por su ofuscación, anti-tampering y anti-debugging
- Uso del emulador para análisis de vulnerabilidades (fuzzing): dentro del emulador se aleatorizan entradas, se obtiene retroalimentación de cobertura de código mediante hooking, y la ejecución es predecible y repetible
- Las limitaciones de las soluciones existentes motivaron el desarrollo
- Qiling, Speakeasy y Dumpulator están hechos en Python, por lo que son extremadamente lentos en análisis de DRM con mucho hooking
- Binee y Unicorn PE son reimplementaciones a nivel de API, por lo que son incompletos y pueden presentar errores
- Escala de syscalls: 409 syscalls generales de ntdll.dll y 1474 syscalls de UI de win32u.dll
- La velocidad rápida de emulación se debe al JIT
Aún no hay comentarios.