Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

Reflective DLL Loading

hacking

Définition

La Reflective DLL Loading (chargement réflexif de DLL) est une technique d'injection avancée qui permet à une DLL de se charger elle-même en mémoire sans passer par le chargeur Windows standard (LoadLibrary). La DLL est entièrement self-contained : elle inclut son propre loader qui effectue toutes les opérations normalement réalisées par le chargeur Windows (résolution des imports, relocation, exécution de DllMain). Développée par Stephen Fewer en 2008 dans son projet ReflectiveDLLInjection sur GitHub, cette technique a révolutionné l'injection de code en permettant le déploiement de DLLs fonctionnelles entièrement en mémoire, sans fichier sur disque. Le code du loader réflexif (typiquement ~600 lignes C) est intégré dans la DLL elle-même comme fonction exportée (ReflectiveLoader). Le processus de chargement réflexif : 1) la DLL est copiée dans l'espace mémoire du processus cible (via WriteProcessMemory, depuis un shellcode, ou depuis un agent C2), 2) l'exécution est transférée à la fonction ReflectiveLoader, 3) celle-ci localise sa propre base en mémoire (via une technique de scan mémoire ou les registres), 4) alloue un nouveau bloc mémoire de la taille de l'image PE, 5) parse les en-têtes PE pour copier chaque section aux offsets appropriés, 6) applique les relocations, 7) résout les imports via les modules déjà chargés (GetProcAddress/GetModuleHandle), 8) appelle DllMain(DLL_PROCESS_ATTACH). Cobalt Strike utilise la Reflective DLL Loading pour son Beacon : le payload stager est un petit shellcode qui télécharge le Beacon complet (une DLL) et invoque son loader réflexif. Le Beacon s'exécute entièrement en mémoire sans aucun fichier sur disque. Meterpreter utilise également une technique similaire. Des variantes comme Module Stomping, Ghostwriting, et Phantom DLL Hollowing combinent le chargement réflexif avec d'autres techniques pour réduire encore les artefacts mémoire et contourner les détections basées sur la présence de régions mémoire privées avec des permissions d'exécution.

Fonctionnement

La fonction ReflectiveLoader est exportée dans la DLL à une position fixe ou localisable via des techniques de hashage d'export. Un stager shellcode minimal (~100 octets) effectue : téléchargement de la DLL en mémoire (VirtualAlloc + transfert réseau), localisation de ReflectiveLoader via parsing des exports PE, appel direct de ReflectiveLoader qui complète le reste du chargement. Résultat : une DLL entièrement fonctionnelle en mémoire sans LoadLibrary et sans fichier sur disque.

Exploitation offensive

La Reflective DLL Loading est le mécanisme de déploiement standard des agents C2 modernes (Cobalt Strike Beacon, Metasploit Meterpreter, Sliver, Havoc). Elle permet un déploiement fileless d'agents complets avec toutes les capacités de post-exploitation. Combinée avec Process Injection, elle permet de déployer ces agents dans des processus légitimes sans laisser de traces sur le disque.

Détection et mitigation

Les EDR avec memory scanning détectent les patterns caractéristiques du loader réflexif en mémoire (parsing PE, fonctions GetProcAddress, hash de recherche d'exports) et les regions mémoire exécutables non associées à un module chargé. CrowdStrike, SentinelOne et Microsoft Defender for Endpoint ont des règles spécifiques pour la Reflective DLL Loading. Le kernel callback LoadImageNotifyRoutine peut détecter les chargements de modules non enregistrés.

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis