Iniezione di DLL nei Processi: Dynamic-link Library Injection (T1055.001)

L'iniezione di DLL è una tecnica con cui un avversario esegue codice arbitrario nello spazio di memoria di un processo già in esecuzione, scrivendo il percorso di una libreria dinamica nella memoria del bersaglio e forzandone il caricamento tramite un nuovo thread. Il risultato è duplice: il codice malevolo eredita i privilegi e il contesto di rete del processo ospite, e la sua esecuzione risulta mascherata dietro un processo legittimo.

La tecnica si colloca in due fasi distinte della kill chain. Nella tattica Privilege Escalation (TA0004) consente di ottenere permessi elevati — fino a SYSTEM o amministratore locale — sfruttando il contesto del processo target. Nella tattica Defense Evasion (TA0005) permette di sfuggire ai controlli di sicurezza basati su processo, poiché l'attività malevola appare originata da un eseguibile fidato.

I numeri confermano la popolarità di questa tecnica: 9 gruppi APT documentati, 56 software tra malware e tool offensivi, 1 campagna tracciata e 1 mitigazione ufficiale. Le varianti includono la reflective DLL injection (la DLL si mappa autonomamente in memoria), il memory module (mappatura manuale senza toccare il disco) e il Module Stomping/DLL Hollowing, dove una DLL legittima viene caricata nel processo remoto e il suo AddressOfEntryPoint viene sovrascritto prima di avviare un nuovo thread, mascherando il codice iniettato dietro un file legittimo su disco.


La catena d'attacco classica su Windows si basa su tre chiamate API in sequenza: VirtualAllocEx per allocare memoria nel processo remoto, WriteProcessMemory per scrivervi il percorso della DLL, e CreateRemoteThread per invocare LoadLibrary nel contesto del bersaglio. Comprendere questa sequenza è fondamentale prima di passare ai tool.

Cobalt Strike offre il modulo di reflective DLL injection integrato. Dopo aver ottenuto una sessione Beacon, il comando inject consente di selezionare il PID del processo target e caricare una DLL direttamente in memoria, senza che questa tocchi il disco. La stessa tecnica è disponibile in PowerSploit, che include una collezione di moduli CodeExecution per iniettare DLL e shellcode in un processo. Il cmdlet di riferimento è:

Invoke-ReflectivePEInjection -PEPath C:\payload.dll -ProcId [PID]

Pupy, il framework post-exploitation in Python, permette la migrazione in un altro processo tramite reflective DLL injection con un singolo comando dalla console dell'agente. Koadic, invece, sfrutta un approccio basato su JScript/VBScript per eseguire process injection tramite DLL riflessiva.

Per simulare la variante classica — quella che scrive la DLL su disco — si può replicare il comportamento di FunnyDream, il cui componente FilepakMonitor inietta nel processo Bka.exe usando esattamente la triade VirtualAllocEx, WriteProcessMemory e CreateRemoteThread. Un PoC in C minimale segue questa logica:

hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, targetPID); pRemote = VirtualAllocEx(hProc, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(hProc, pRemote, dllPath, dwSize, NULL); CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, pRemote, 0, NULL);

Per testare il Module Stomping, il flusso richiede un passo aggiuntivo: si carica prima una DLL legittima nel processo remoto, si ottiene l'indirizzo del suo entry point, lo si sovrascrive con il payload malevolo, e infine si avvia il thread. Questa variante è particolarmente insidiosa perché la DLL su disco risulta firmata e legittima.

I processi bersaglio più comuni negli scenari reali includono explorer.exe, svchost.exe, rundll32.exe, dllhost.exe, winlogon.exe e browser come iexplore.exe e firefox.exe. In laboratorio, è consigliabile testare l'iniezione contro ciascuno di questi per verificare le differenze nei livelli di integrità e nelle policy di protezione.


Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Scarica la guida gratuita e segui il percorso corretto fin dal primo passo

We use cookies

Utilizziamo i cookie sul nostro sito Web. Alcuni di essi sono essenziali per il funzionamento del sito, mentre altri ci aiutano a migliorare questo sito e l'esperienza dell'utente (cookie di tracciamento). Puoi decidere tu stesso se consentire o meno i cookie. Ti preghiamo di notare che se li rifiuti, potresti non essere in grado di utilizzare tutte le funzionalità del sito.