Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Corso Ethical Hacker: accedi alla promozione fino al 30 Aprile! Scopri di più
L'iniezione di DLL rappresenta una delle tecniche di process injection più longeve e diffuse nel panorama offensivo Windows. Il principio è diretto: scrivere codice arbitrario nello spazio di indirizzamento di un processo già in esecuzione, costringendolo a caricare ed eseguire una libreria dinamica controllata dall'attaccante. Questa tecnica attraversa due tattiche distinte — Defense Evasion (TA0005) e Privilege Escalation (TA0004) — perché consente simultaneamente di mascherare l'esecuzione malevola sotto un processo legittimo e di ereditarne il contesto di sicurezza, inclusi eventuali privilegi elevati.
Il flusso classico si articola in tre chiamate API: VirtualAllocEx per allocare memoria nel processo remoto, WriteProcessMemory per scrivere il percorso (o il corpo) della DLL, e CreateRemoteThread per invocare LoadLibrary nel contesto del target. Varianti più sofisticate eliminano la dipendenza da LoadLibrary: la reflective DLL injection mappa manualmente la libreria in memoria, mentre il Module Stomping (o DLL Hollowing) sovrascrive l'entry point di una DLL legittima già caricata, rendendo l'iniezione quasi invisibile all'analisi statica del disco.
L'impatto operativo è significativo: 56 software documentati utilizzano questa tecnica, 9 gruppi APT la impiegano attivamente e almeno 1 campagna ransomware la include nella propria catena d'attacco. Numeri che confermano come l'iniezione DLL resti un pilastro sia per operazioni di spionaggio statale sia per intrusioni a scopo finanziario.
La simulazione dell'iniezione DLL in laboratorio è un esercizio fondamentale per validare i controlli EDR e le regole Sysmon. L'approccio più immediato sfrutta framework già strutturati, ma è utile comprendere anche la meccanica manuale.
Cobalt Strike (a pagamento) offre il comando nativo di iniezione DLL, che replica fedelmente la catena VirtualAllocEx → WriteProcessMemory → CreateRemoteThread. In una sessione Beacon attiva, il flusso operativo prevede di identificare un processo target con ps, quindi eseguire:
shinject <PID> x64 <percorso_shellcode>
Per la reflective DLL injection, Cobalt Strike utilizza internamente il meccanismo reflective loader quando si lancia dllinject <PID> su un Beacon attivo. Questo replica esattamente ciò che gruppi come Lazarus Group e Leviathan impiegano nelle loro operazioni reali.
Con Metasploit Framework (open source), l'iniezione riflettiva è altrettanto accessibile. Dopo aver ottenuto una sessione Meterpreter, il comando migrate sposta l'agente in un altro processo tramite reflective injection:
meterpreter > migrate <PID>
Questa è la stessa tecnica documentata per Turla, che usa Metasploit per l'escalation dei privilegi tramite reflective DLL injection.
PowerSploit (open source) fornisce il modulo Invoke-DllInjection all'interno della collezione CodeExecution. Da una sessione PowerShell con privilegi adeguati:
Invoke-DllInjection -ProcessID <PID> -Dll <percorso_dll>
Per simulare la variante Module Stomping, Pupy (open source) permette la migrazione tra processi con reflective injection attraverso il comando migrate del suo agente, replicando un comportamento osservato in diversi sample analizzati.
Un approccio più granulare prevede la compilazione di un injector custom in C che richiami la sequenza classica delle tre API. Il vantaggio didattico è totale visibilità sulla catena di chiamate, permettendo di correlare ogni step con gli eventi Sysmon generati. Per il Module Stomping, l'injector deve caricare una DLL legittima nel processo remoto con LoadLibraryEx usando il flag DONT_RESOLVE_DLL_REFERENCES, sovrascrivere il suo AddressOfEntryPoint con WriteProcessMemory, e avviare un thread sull'entry point modificato.
Durante il test, monitorate sempre con Sysmon (open source, distribuito da Microsoft Sysinternals) gli eventi generati: EventCode 8 (CreateRemoteThread), EventCode 10 (ProcessAccess) e EventCode 7 (ImageLoad). Questo vi darà la baseline per validare le detection nella sezione successiva.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo