KernelCallbackTable Hijacking: Hijack Execution Flow - KernelCallbackTable (T1574.013)
La manipolazione della KernelCallbackTable rappresenta una tecnica sofisticata per dirottare il flusso di esecuzione di un processo Windows attraverso la sostituzione di funzioni callback legittime. Questa struttura dati, situata nel Process Environment Block (PEB), contiene puntatori a funzioni grafiche che vengono inizializzate quando un processo carica la libreria user32.dll.
Gli attaccanti sfruttano questo meccanismo sostituendo i puntatori originali con indirizzi a payload malevoli. La tecnica si manifesta in tre tattiche principali: Persistence (TA0003) per mantenere l'accesso dopo riavvii e cambi di credenziali, Privilege Escalation (TA0004) per ottenere permessi elevati mascherandosi sotto processi legittimi, e Defense Evasion (TA0005) per evadere i controlli di sicurezza nascondendo l'esecuzione sotto processi trusted.
L'impatto di questa tecnica è documentato con 1 gruppo APT noto per il suo utilizzo, 1 malware che la implementa attivamente, e 1 mitigazione specifica disponibile per contrastarla.
Per comprendere appieno questa tecnica, iniziamo localizzando il PEB di un processo target. Il primo passo richiede l'identificazione dell'indirizzo del PEB tramite la funzione nativa NtQueryInformationProcess(). Una volta ottenuto il puntatore, possiamo navigare fino alla KernelCallbackTable.
La sequenza operativa tipica prevede la duplicazione della tabella originale per preservarne lo stato. Successivamente, identifichiamo una funzione callback specifica come fnCOPYDATA e sostituiamo il suo indirizzo con quello del nostro payload usando WriteProcessMemory(). Il trigger dell'esecuzione avviene inviando un messaggio Windows appropriato al processo compromesso.
Un esempio pratico in C++ dimostra il concetto:
PROCESS_BASIC_INFORMATION pbi;
NtQueryInformationProcess(hProcess, ProcessBasicInformation, &pbi, sizeof(pbi), NULL);
// Naviga al PEB e localizza KernelCallbackTable
// Duplica la tabella e modifica fnCOPYDATA
WriteProcessMemory(hProcess, targetAddress, &maliciousPayload, sizeof(PVOID), NULL);
SendMessage(hWnd, WM_COPYDATA, 0, (LPARAM)&cds);
I tool di laboratorio essenziali includono WinDbg per l'analisi del PEB, API Monitor per tracciare le chiamate alle funzioni native, e Process Hacker per visualizzare le strutture in memoria. Lazarus Group ha dimostrato l'efficacia di questa tecnica nelle loro operazioni, mentre il malware FinFisher implementa una variante che sostituisce specificamente la funzione __fnDWORD.
Il ripristino dello stato originale della tabella dopo l'esecuzione del payload costituisce un elemento critico per mantenere la stabilità del processo e ridurre le tracce forensi.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo