Iniezione TLS Callback: Thread Local Storage (T1055.005)

La tecnica T1055.005 Thread Local Storage rappresenta una variante sofisticata di process injection che sfrutta i callback TLS (Thread Local Storage) all'interno dei file eseguibili PE (Portable Executable) di Windows. I callback TLS sono puntatori a funzioni che il sistema operativo invoca automaticamente per inizializzare o rilasciare dati specifici del thread, e vengono eseguiti prima del punto di ingresso legittimo del programma (AddressOfEntryPoint).

Un attaccante che riesce a modificare la TLS directory di un processo target può quindi dirottare l'esecuzione verso codice arbitrario, ottenendo esecuzione nel contesto di un processo legittimo. Questa tecnica si colloca nelle tattiche TA0004 (Privilege Escalation) e TA0005 (Defense Evasion), poiché consente sia di guadagnare i privilegi del processo iniettato sia di mascherare l'attività malevola sotto un binario firmato.

L'impatto operativo è significativo: iniettando codice in un processo di sistema, l'avversario accede a memoria, token e risorse di rete del target. Nei dati MITRE risultano 2 famiglie malware che implementano la tecnica (Ursnif e CANONSTAGER) e 1 mitigazione raccomandata (M1040). La combinazione con Process Hollowing (T1055.012) è ricorrente, dato che la scrittura nella TLS directory richiede primitive di allocazione e write già disponibili in altre varianti di injection.

Simulare T1055.005 in laboratorio richiede la comprensione della struttura PE, in particolare della IMAGE_DIRECTORY_ENTRY_TLS (indice 9 nella data directory) che punta a una struttura IMAGE_TLS_DIRECTORY contenente il campo AddressOfCallBacks. Questo campo è un array di puntatori a funzione terminato da zero: aggiungendo un puntatore prima del terminatore si ottiene esecuzione automatica al load.

Per costruire un PoC didattico su Windows 10/11 in VM isolata puoi partire da questi strumenti reali:

  • PE-bear (open source) o CFF Explorer (gratuito) per ispezionare e modificare la TLS directory di un binario di test
  • pefile (open source, Python) per parsing e patching programmatico dei campi PE
  • LIEF (open source) come libreria multi-linguaggio per riscrivere sezioni .tls e aggiungere callback
  • Process Hacker / System Informer (open source) per verificare thread e memoria del processo target

Una catena tipica in red team simula lo scenario documentato per Ursnif: allocazione di memoria remota nel processo target con VirtualAllocEx, scrittura del payload con WriteProcessMemory, quindi patch della TLS directory del modulo caricato per far puntare AddressOfCallBacks[0] alla shellcode. Il trigger avviene alla creazione del thread successivo, senza chiamare CreateRemoteThread — ed è proprio questo il vantaggio evasivo rispetto a T1055.003.

Per studiare CANONSTAGER, l'approccio è diverso: qui la TLS non serve per iniezione cross-process ma come storage in-process di indirizzi di funzione risolti tramite API hashing custom. Puoi replicare il pattern scrivendo un loader C/C++ che popola TlsAlloc + TlsSetValue con puntatori a LoadLibraryA, GetProcAddress, VirtualProtect risolti via hash (algoritmo tipo djb2 o ROR13), poi invoca le funzioni leggendole da TlsGetValue. Questo pattern rende difficile lo static analysis perché le import non compaiono nella IAT.

Per la fase di weaponization in ambiente controllato, Donut (open source) genera shellcode position-independent da PE/DLL/.NET assembly, ideale come payload da piazzare come TLS callback. Sliver (open source) e Havoc (open source) sono C2 framework che supportano stager custom per test di detection engineering.

Documenta ogni esecuzione con Time Travel Debugging di WinDbg (gratuito) per catturare il flusso dal callback fino al main, materiale prezioso per il team blue.

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.