Process Hollowing: Sostituire l'Anima di un Processo Legittimo (T1055.012)
Il process hollowing rappresenta una delle tecniche più sofisticate per nascondere codice malevolo all'interno di processi legittimi. Questa metodologia permette di svuotare letteralmente la memoria di un processo appena creato, sostituendola con payload arbitrario mantenendo però l'apparenza del processo originale.
La tecnica si colloca strategicamente in due fasi della kill chain: TA0004 (Privilege Escalation) quando l'attaccante cerca di ottenere privilegi superiori eredità dal processo padre, e TA0005 (Defense Evasion) per mascherare l'esecuzione sotto processi fidati. Con 7 gruppi APT attivi e 32 malware che implementano questa tecnica, parliamo di una metodologia ampiamente adottata nel panorama delle minacce avanzate.
Il processo tipico prevede la creazione di un nuovo processo in stato sospeso tramite CreateProcess con flag CREATE_SUSPENDED, seguito dalla rimozione della memoria originale con ZwUnmapViewOfSection e la scrittura del nuovo codice malevolo attraverso la sequenza VirtualAllocEx, WriteProcessMemory, SetThreadContext e infine ResumeThread.
Per replicare il process hollowing in ambiente controllato, iniziamo creando un processo sospeso. Su Windows, il comando PowerShell seguente dimostra i primi passi:
$StartInfo = New-Object System.Diagnostics.ProcessStartInfo
$StartInfo.FileName = "C:\Windows\System32\svchost.exe"
$StartInfo.CreateNoWindow = $true
$Process = [System.Diagnostics.Process]::Start($StartInfo)
La vera magia avviene però tramite codice nativo. Un esempio in C mostra la sequenza completa:
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
CreateProcess("C:\\Windows\\System32\\notepad.exe", NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
Dopo la creazione sospesa, procediamo con lo svuotamento attraverso NtUnmapViewOfSection. Tool come Cobalt Strike automatizzano questo processo con il comando:
beacon> inject [pid] x64 [listener]
Per test più controllati, strumenti come Donut permettono di convertire assembly .NET in shellcode iniettabile. La sequenza diventa:
donut.exe payload.exe -o payload.bin
Seguito dall'iniezione manuale utilizzando tool come ProcessHacker o script custom. Agent Tesla e TrickBot utilizzano frequentemente svchost.exe come target, mentre Emotet preferisce certutil.exe copiato in directory temporanee.
Il framework Metasploit offre moduli pronti per testing:
use post/windows/manage/reflective_dll_inject set PROCESS notepad.exe set DLL /path/to/payload.dll
Per simulazioni più realistiche, IcedID dimostra come iniettare beacon Cobalt Strike in cmd.exe, mentre QakBot esegue il suo payload principale attraverso questa tecnica. La chiave sta nel timing: tutto deve avvenire rapidamente tra creazione e resume del processo.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo