In-Memory Execution
hackingDéfinition
L'exécution en mémoire (In-Memory Execution) désigne les techniques permettant d'exécuter du code malveillant directement en mémoire sans jamais écrire de fichier sur le disque, contournant les protections antivirus basées sur la détection de fichiers et les analyses de disque. Cette approche fileless est devenue la méthode standard des malwares sophistiqués et des payloads de pentest avancés. Les techniques d'exécution en mémoire incluent : l'injection de shellcode (allouer une région mémoire RW, y écrire le shellcode, rendre RX et exécuter via un thread ou un callback), le chargement réflectif de DLL (charger une DLL depuis un buffer en mémoire sans passer par LoadLibrary, en implémentant manuellement le résolveur de PE), l'exécution d'assemblies .NET en mémoire (Assembly.Load() depuis un byte array chiffré, puis Invoke des méthodes), et le shellcode en région .text (code qui s'auto-modifie et s'exécute dans la section code d'un processus légitime). Des techniques complémentaires incluent : le Process Hollowing (créer un processus suspendu d'un binaire légitime, remplacer son image mémoire par le payload, reprendre l'exécution), PE Injection (injecter un PE complet dans un processus distant et l'exécuter via un thread ou via la modification de l'EntryPoint), et le module stomping (overwrite un module DLL légitime déjà chargé en mémoire avec le payload). Le défi de l'exécution en mémoire est de maintenir la persistance : une fois l'ordinateur redémarré, le code en mémoire disparaît. Les stratégies de persistance fileless utilisent le registre Windows (stocker le payload chiffré dans une valeur de registre, exécuter via PowerShell/WScript au démarrage), WMI subscriptions (déclencher l'exécution in-memory via WMI), et les macros Office (stocker dans les propriétés de document et exécuter via des événements Office).
Fonctionnement
Shellcode in-memory avec C# : byte[] buf = new byte[]{...}; // shellcode chiffré IntPtr ptr = VirtualAlloc(IntPtr.Zero, (uint)buf.Length, 0x3000, 0x40); Marshal.Copy(buf, 0, ptr, buf.Length); CreateThread(IntPtr.Zero, 0, ptr, IntPtr.Zero, 0, IntPtr.Zero);. Assembly.Load() pour .NET : byte[] assemblyBytes = File.ReadAllBytes('/network/share/tool.exe'); // ou depuis chiffré en registre Assembly asm = Assembly.Load(assemblyBytes); asm.EntryPoint.Invoke(null, new object[]{new string[]{'arg1'}});
Exploitation offensive
L'exécution in-memory est le standard pour les agents C2 modernes (Cobalt Strike Beacon, Sliver, Havoc Demon) — les implants ne touchent jamais le disque après la livraison initiale (elle-même souvent via une macro ou un dropper léger). Des outils offensifs populaires (Rubeus, SharpHound, Mimikatz) sont exécutés via Assembly.Load dans des contextes comme Execute-Assembly de Cobalt Strike.
Détection et mitigation
Les EDR avec ETW Threat Intelligence (kernel-based) détectent les allocations mémoire RWX et les séquences d'allocation/écriture/exécution caractéristiques des shellcode loaders. ACG (Arbitrary Code Guard) empêche la modification dynamique du code dans les processus protégés. Les scanners mémoire périodiques des EDR détectent les patterns de code malveillant dans les régions mémoire sans backing file.
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