sogen - émulateur userspace haute performance pour Windows et Linux
(github.com/momo5502)- Émulateur userspace haute performance pour Windows/Linux fonctionnant au niveau des appels système (
syscall), avec un contrôle de l’ensemble de l’exécution des processus grâce à un hooking étendu - Adapté aux tâches nécessitant un contrôle fin de l’exécution des processus, comme la recherche en sécurité, l’analyse de malwares et la recherche sur les DRM
- Fonctionne au niveau
syscallsans réimplémenter l’API Windows, ce qui permet de réutiliser directement les DLL système existantes - Écrit en C++ et peut fonctionner avec le backend de votre choix : Unicorn Engine, icicle-emu, Hyper-V(WHP)
- Gestion mémoire avancée : construit au-dessus de la gestion mémoire d’Unicorn, avec prise en charge des types mémoire propres à Windows comme reserved et committed
- Prise en charge complète du chargement PE : gestion du chargement des exécutables et DLL, mappage mémoire approprié, relocations et prise en charge de TLS
- Gestion des exceptions : implémentation de la gestion structurée des exceptions (SEH) de Windows, avec prise en charge du dispatcher d’exceptions et de l’unwinding
- Prise en charge du multithreading : fournit un modèle de threading avec ordonnanceancement en round-robin
- Gestion d’état : prend en charge à la fois la sérialisation complète de l’état et les snapshots rapides en mémoire
- Interface de débogage : implémente le protocole série GDB, permettant l’intégration avec IDA Pro, GDB, LLDB, VS Code, etc.
- Lors d’une analyse de malware, l’isolation de l’hôte peut ne pas être parfaite ; il est donc recommandé d’utiliser la version web basée sur le sandbox du navigateur
- Automatisation possible avec Python
- Installation avec
pip install sogen - Exécution de l’émulateur, enregistrement de callbacks et interception des appels WinAPI directement depuis Python
- Installation avec
Voir les slides de présentation : Fake It ‘til We Make It: The Art of Windows User Space Emulation
- Qu’est-ce que l’émulation userspace Windows ?
- Technique consistant à exécuter un processus dans un émulateur et à simuler l’OS et le noyau situés en dessous
- Alors que l’émulation classique exécute le code sur un CPU virtuel et simule le matériel, l’émulation userspace reproduit en plus les couches OS et noyau au-dessus
- Sa valeur centrale est le contrôle total sur le code exécuté — l’émulateur peut intervenir à chaque étape de l’exécution
- Ce contrôle s’exerce via des points de hooking
- Hooking des accès mémoire — interception des opérations de lecture, écriture et exécution
- Hooking de l’exécution des instructions — capture de l’exécution d’instructions spécifiques comme
syscall,cpuid,rdtsc - Hooking de l’exécution de nouveaux chemins de code — détection des chemins de code exécutés pour la première fois
- Grâce à ces capacités de hooking, il devient possible d’intercepter les communications externes, de suivre le flux d’exécution et de mesurer la couverture de code, ce qui en fait une base pour l’analyse de DRM, l’analyse de malwares, l’analyse de vulnérabilités et la recherche en sécurité
- L’intervenant est un développeur DRM ayant déjà reverse-engineer et contourné de nombreux DRM comme Steam CEG, Arxan et Denuvo
- L’émulation a été un outil central pour analyser le DRM Denuvo, très utilisé par les jeux Windows
- Les DRM modernes rendent souvent l’analyse statique et dynamique impossible à cause de l’obfuscation, de l’anti-tampering et de l’anti-debugging
- Utilisation de l’émulateur pour l’analyse de vulnérabilités (fuzzing) : randomisation des entrées à l’intérieur de l’émulateur, retour de couverture de code via le hooking, exécution prévisible et reproductible
- Les limites des solutions existantes ont motivé son développement
- Qiling, Speakeasy et Dumpulator sont écrits en Python, donc extrêmement lents pour l’analyse de DRM nécessitant beaucoup de hooking
- Binee et Unicorn PE reposent sur une réimplémentation au niveau API, donc incomplète et susceptible d’introduire des bugs
- Échelle des
syscall: 409 appels système généraux dansntdll.dll, 1474 appels système UI danswin32u.dll - La vitesse élevée d’émulation repose sur le JIT
Aucun commentaire pour le moment.