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.

In-Memory Execution

hacking

Dé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

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis