Reflective Loading
hackingDéfinition
Le Reflective Loading est une technique d'injection avancée qui charge un PE (Portable Executable — .exe ou .dll) directement depuis un buffer en mémoire sans utiliser les APIs Windows standard de chargement (LoadLibrary, CreateProcess), en implémentant manuellement les étapes du chargeur PE Windows. Cela permet de charger et exécuter du code malveillant sans aucune trace sur le disque. La bibliothèque ReflectiveDLLInjection de Stephen Fewer (2008) a popularisé cette technique pour les DLLs. La DLL inclut une fonction 'ReflectiveLoader' qui, quand exécutée, effectue toutes les étapes normalement réalisées par le système : 1) analyser les headers PE de la DLL, 2) allouer de la mémoire à la taille image correcte, 3) copier les sections PE, 4) appliquer les relocations (ajuster les adresses absolutes selon la base de chargement réelle), 5) résoudre les imports (remplir la IAT en trouvant les fonctions exportées dans les DLLs chargées), 6) appeler le DllMain. L'absence d'appel à LoadLibrary signifie que la DLL n'apparaît pas dans la liste des modules chargés du processus (obtenu via EnumProcessModules ou ToolHelp32), rendant la DLL invisible aux outils de surveillance qui listent les modules. Cette invisibilité dans la liste des modules est un avantage majeur par rapport à l'injection classique. Cobalt Strike utilise le reflective loading pour son Beacon : le stageless payload Beacon est une DLL réflective qui se charge elle-même. La commande 'dllinject' et 'shinject' de Cobalt Strike injectent respectivement une DLL réflective et du shellcode dans un processus cible. L'exécution d'assemblies .NET via Assembly.Load() est l'équivalent .NET du reflective loading : une assembly est chargée depuis un byte[] sans écrire un fichier sur disque.
Fonctionnement
Sequence reflective DLL : 1) allouer RW dans le processus cible (VirtualAllocEx), 2) y écrire la DLL réflective complète (WriteProcessMemory), 3) calculer l'adresse de ReflectiveLoader dans le buffer (offset depuis le début de la DLL), 4) CreateRemoteThread avec l'adresse de ReflectiveLoader comme point de départ. ReflectiveLoader se charge lui-même et appelle DllMain. La DLL apparaît uniquement dans les dumps mémoire raw, pas dans la liste des modules chargés.
Exploitation offensive
Le reflective loading est la technique de base de tous les frameworks C2 modernes pour leurs agents. Il permet d'utiliser tout l'écosystème d'outils .NET (SharpHound, Rubeus, Seatbelt) via Execute-Assembly sans aucun artefact disque. La persistance fileless associée (stocker l'assembly chiffrée en registre) complète l'approche pour des opérations sans trace disque.
Détection et mitigation
Les EDR avec memory scanning détectent les structures PE (MZ/PE headers) dans des régions mémoire non mappées depuis des fichiers disque — un indicateur fort de reflective loading. Les ETW Threat Intelligence events capturent les allocations mémoire et les créations de threads associées au reflective loading. Defender for Endpoint a des détections spécifiques pour les patterns Cobalt Strike Beacon et autres frameworks.
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