Import Obfuscation
hackingDéfinition
L'obfuscation d'imports désigne les techniques permettant à un binaire malveillant de résoudre et d'utiliser des fonctions d'API Windows sans les déclarer dans sa table d'imports PE (Import Address Table - IAT), rendant l'analyse statique moins révélatrice. La table d'imports d'un binaire est une source d'information majeure pour les analyseurs de malwares — des imports comme VirtualAlloc, WriteProcessMemory, ou CreateRemoteThread signalent immédiatement un comportement potentiellement malveillant. Les techniques d'obfuscation d'imports incluent : la résolution dynamique (utiliser GetProcAddress(GetModuleHandle('ntdll'), 'NtAllocateVirtualMemory') au lieu d'un import statique — la chaîne de nom peut être obfusquée), la résolution par hash (calculer un hash du nom de chaque fonction exportée et le comparer à des hashes hardcodés — même technique que dans le hash-based shellcode), le custom PE loader (ne pas utiliser le loader Windows pour charger les DLLs, implémenter un loader custom qui résout les exports manuellement), et les forwarded exports (utiliser des chaînes de forwarding d'exports pour atteindre la fonction cible via des indirections). Des outils comme Donut (pour convertir des .NET en shellcode) et des frameworks de C2 implémentent des techniques d'obfuscation d'imports avancées. Cobalt Strike avec des Malleable C2 Profiles peut configurer le Beacon pour minimiser ses imports visibles. Un binaire avec zéro imports ou uniquement des imports dans des DLLs légitimes et innocentes (kernel32.dll pour GetProcAddress/GetModuleHandle uniquement) est suspect mais difficile à analyser statiquement sans l'exécuter ou l'émuler. Les analyseurs dynamiques et les sandboxes contournent cette technique en observant les appels d'API à l'exécution.
Fonctionnement
GetProcAddress dynamique avec nom obfusqué : typedef LPVOID (WINAPI *pVA)(LPVOID,SIZE_T,DWORD,DWORD); char fname[] = {0x56^0x11,'i'^0x11,...}; // 'VirtualAlloc' XOR 0x11 decrypt(fname); HMODULE hk = GetModuleHandleA('kernel32'); pVA VA = (pVA)GetProcAddress(hk, fname); VA(NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);. La table d'imports ne montre que GetModuleHandleA et GetProcAddress, pas VirtualAlloc. L'analyste statique ne voit pas le comportement réel.
Exploitation offensive
L'obfuscation d'imports combinée avec l'obfuscation de chaînes crée un binaire dont la table d'imports ne contient aucune fonction révélatrice. Les outils de triage malware (capa, FLOSS) ont du mal à classifier correctement ces binaires sans émulation. Des payloads offensifs modernes utilisent exclusivement des direct syscalls (sans imports ntdll) + hash-based resolution (sans strings) pour un profil d'imports minimal.
Détection et mitigation
Les analyses dynamiques (Cuckoo, Any.run) observent les appels d'API réels lors de l'exécution, révélant les imports dynamiques. Les outils d'analyse de malware comme capa (MANDIANT) identifient les patterns de résolution dynamique d'API même sans imports statiques. Les EDR avec ETW API monitoring capturent tous les appels d'API Windows indépendamment du mécanisme de résolution.
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h