Dirottamento KernelCallbackTable: KernelCallbackTable (T1574.013)

La tecnica T1574.013 descrive l'abuso della KernelCallbackTable, una struttura interna del Process Environment Block (PEB) di Windows che contiene puntatori a funzioni grafiche utilizzate dai processi GUI dopo il caricamento di user32.dll. Manipolando questa tabella, un attaccante può reindirizzare l'esecuzione di un processo legittimo verso codice arbitrario, ottenendo un effetto simile all'hijack del flusso di controllo senza toccare la sezione codice del binario.

MITRE ATT&CK mappa questa tecnica su tre tattiche complementari: TA0003 (Persistence), TA0004 (Privilege Escalation) e TA0005 (Defense Evasion). La logica è che il payload viene eseguito nel contesto di un processo fidato (spesso explorer.exe o un'applicazione GUI di sistema), aggirando controlli basati sulla reputazione del binario e mascherando l'attività malevola sotto un parent process legittimo.

L'attacco prevede tipicamente il recupero del puntatore al PEB tramite NtQueryInformationProcess(), la duplicazione della tabella, la sostituzione di una entry come fnCOPYDATA o __fnDWORD con l'indirizzo del payload, l'aggiornamento del PEB e infine l'invio di un messaggio Windows che triggera l'esecuzione. Al termine, la tabella può essere ripristinata per cancellare le tracce.

L'impatto è significativo: 1 gruppo APT documentato (Lazarus Group) e il malware FinFisher utilizzano attivamente questa tecnica, che risulta particolarmente insidiosa perché sfrutta un meccanismo interno raramente monitorato dagli EDR tradizionali.

Per riprodurre T1574.013 in laboratorio serve un ambiente Windows 10/11 isolato con Visual Studio o MinGW per compilare il PoC in C/C++, e strumenti di debugging come WinDbg (gratuito, incluso in Windows SDK) e x64dbg (open source) per validare l'iniezione.

La catena operativa si articola in cinque fasi. Prima si individua un processo GUI target (tipicamente explorer.exe o notepad.exe) tramite OpenProcess() con permessi PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_QUERY_INFORMATION. Poi si recupera l'indirizzo del PEB del processo remoto invocando NtQueryInformationProcess() con la classe ProcessBasicInformation, che restituisce una struttura PROCESS_BASIC_INFORMATION contenente PebBaseAddress.

Dall'offset del PEB (0x58 su x64) si legge il puntatore alla KernelCallbackTable tramite ReadProcessMemory(). Si alloca quindi memoria eseguibile nel processo target con VirtualAllocEx() specificando PAGE_EXECUTE_READWRITE, si copia lo shellcode con WriteProcessMemory(), si duplica la tabella originale, si sostituisce l'entry fnCOPYDATA (offset noto nella struttura) con il puntatore allo shellcode e si scrive il nuovo indirizzo della tabella nel PEB.

Il trigger avviene inviando un messaggio WM_COPYDATA al target tramite SendMessage() o PostMessage() con un HWND appartenente al processo — recuperabile con EnumWindows() filtrando per PID via GetWindowThreadProcessId().

Esempio di frammento concettuale per la lettura del PEB:

NtQueryInformationProcess(hProc, 0, &pbi, sizeof(pbi), NULL);

Per semplificare la simulazione red team, il framework Cobalt Strike (a pagamento) e Sliver (open source) supportano moduli di process injection personalizzabili dove è possibile implementare varianti custom. Il PoC pubblico KCT-Injection su GitHub (open source) di ricercatori indipendenti mostra l'implementazione completa e può essere usato come riferimento in lab.

Per misurare l'efficacia della tecnica contro le difese, in un red team engagement conviene loggare con Process Hacker (open source) o Process Explorer (gratuito, Sysinternals) le modifiche al PEB in tempo reale, e confrontare l'output con la telemetria dell'EDR sotto test. Attenzione: il payload deve essere position-independent, altrimenti fallirà nel contesto del processo target. In ambiente ESXi o Linux la tecnica non è applicabile, essendo specifica dell'architettura Windows GUI.

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

Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo

TEST GRATUITO
2 minuti · 7 domande Che professionista cyber sei? Scopri il profilo più vicino al tuo modo di pensare e inizia dal percorso giusto.