Injection APC: Process Injection - Asynchronous Procedure Call (T1055.004)

L'injection tramite Asynchronous Procedure Call rappresenta una tecnica sofisticata per eseguire codice arbitrario nel contesto di un processo legittimo. Questa metodologia sfrutta le code APC native di Windows per mascherare l'esecuzione di payload malevoli.

La tecnica si posiziona in due tattiche critiche della kill chain: TA0004 (Privilege Escalation) quando l'injection mira a processi con privilegi elevati, e TA0005 (Defense Evasion) per occultare l'esecuzione sotto processi trusted. L'implementazione richiede chiamate API native come OpenThread e QueueUserAPC, permettendo l'esecuzione quando il thread target entra in uno stato alterabile.

Varianti come "Early Bird injection" creano processi sospesi per iniettare codice prima dell'entry point, mentre AtomBombing sfrutta la global atom table. Con 11 malware documentati che utilizzano questa tecnica e FIN8 come gruppo APT confermato, l'impatto nel panorama delle minacce è significativo.

Per comprendere la meccanica dell'APC injection, iniziamo con l'approccio classico. Il primo passo richiede l'identificazione di un processo target e l'ottenimento di un handle al suo thread principale.

Su Windows, il codice C++ base utilizza questa sequenza:

HANDLE hThread = OpenThread(THREAD_SET_CONTEXT | THREAD_SUSPEND_RESUME, FALSE, dwThreadId);
QueueUserAPC((PAPCFUNC)LoadLibraryA, hThread, (ULONG_PTR)pRemoteBuf);

La variante Early Bird richiede la creazione di un processo sospeso:

CreateProcess(NULL, "C:\\Windows\\System32\\svchost.exe", NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);

Tools come Cobalt Strike implementano APC injection tramite il comando beacon: inject pid x64 listener. Per testing controllato, ProcessHacker permette di visualizzare le code APC dei thread in tempo reale.

L'approccio AtomBombing sfrutta invece le global atoms di Windows. Il payload viene scritto nella atom table usando GlobalAddAtom, poi recuperato nel processo target tramite APC che invocano GlobalGetAtomName.

Per simulare comportamenti APT documentati, replica la tecnica di TURNEDUP che inietta in processi Rundll32 creati ad-hoc. La sequenza operativa prevede: creazione processo sospeso, allocazione memoria remota con VirtualAllocEx, scrittura payload con WriteProcessMemory, queue APC con QueueUserAPC, resume thread con ResumeThread.

Testing avanzato richiede bypass di hook userland. Utilizza syscall dirette come NtQueueApcThread invece delle API documentate, tecnica implementata da Carberp e IcedID.

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.