APC Injection
- Antonio Capobianco
- Visite: 3811
Pillole di #MalwareAnalysis
#APC INJECTION
APC è il sinonimo di #AsyncronousProcedureCalls e si riferisce a una funzione eseguita in maniera asincrona rispetto all’esecuzione di un #Thread.
In pratica ogni Thread ha una propria coda APC all’interno della quale trova tutta una serie di funzioni da eseguire. Queste funzioni vengono accodate al verificarsi di eventi asincroni come le #Interrupt. Una APC generata dal Sistema viene definita #KernelModeAPC, mentre se viene generata dall’utente #UserModeAPC.
Un Thread per eseguire una APC deve entrare in uno stato definito #Alertable, e lo fa quando vengono chiamate funzioni come #SleepEX, #WaitForSingleObjectEx etc…
Un #malware che vuole inserire una routine malevola all’interno di una coda APC deve:
1) Ricercare il processo vittima utilizzando le primitive #CraeteToolHelp32Snapshot e #Process32First/ #Process32Next
2) Scrivere la routine malevola nello spazio di memoria del processo utilizzando le primitive #WriteProcessMemory e #VirtualAllocEx
3) Scegliere il thread bersaglio all’interno del processo con le #API #Thread32First / #Thread32Next
4) Accodare la routine malevola alla coda APC del thread con #QueueUserAPC
5) Mettere il thread in sleep con SleepEx
Questo thread al suo risveglio dallo Sleep eseguirà la routine malevola inserita nella coda APC.
Questa #injection è definita dal #Mitre #Attack come tecnica #T1055 e viene utilizzata con successo da #malware come #InvisiMole, #Attor, #Carberp e #Pillowmint.
Per identificare malware con queste caratteristiche dobbiamo ricercare le primitive che vi ho indicato, con particolare attenzione a quelle che sospendono un thread, scrivono nell’area di memoria di un processo e QueueUserAPC