Hijacking del Linker Dinamico: Dynamic Linker Hijacking (T1574.006)
La tecnica T1574.006 — Dynamic Linker Hijacking sfrutta il meccanismo con cui i sistemi Unix-like caricano le librerie condivise all'avvio di un processo. Su Linux la variabile LD_PRELOAD (o il file /etc/ld.so.preload) istruisce il dynamic linker a caricare una libreria arbitraria prima di quelle di sistema; su macOS lo stesso ruolo è svolto da DYLD_INSERT_LIBRARIES e DYLD_LIBRARY_PATH. Le funzioni esportate dalla libreria malevola sovrascrivono i simboli originali di libc, permettendo hooking di primitive come execve, readdir o open.
MITRE ATT&CK mappa la tecnica su tre tattiche: TA0003 Persistence (l'hook resta attivo a ogni esecuzione dei binari agganciati), TA0004 Privilege Escalation (l'iniezione in processi setuid o daemon come sshd eredita privilegi elevati) e TA0005 Defense Evasion (le funzioni di enumerazione filtrano PID, file e connessioni dell'attaccante).
I numeri del catalogo ATT&CK per questa sotto-tecnica includono 3 gruppi APT documentati (APT41, Rocke, Aquatic Panda), 6 famiglie malware (Ebury, HiddenWasp, Hildegard, XCSSET, COATHANGER, MEDUSA) e 2 mitigazioni ufficiali. L'impatto operativo è severo: un rootkit user-mode basato su LD_PRELOAD può rendere invisibili processi miner, backdoor SSH e beacon C2 a strumenti standard come ls, ps, netstat e lsof, complicando triage e incident response.
Un esercizio red team su questa tecnica parte dalla costruzione di una libreria condivisa che esporti simboli omonimi a quelli di libc. Un template minimale in C definisce una funzione execve che logga gli argomenti e poi chiama la versione originale via dlsym(RTLD_NEXT, "execve"), compilata con gcc -shared -fPIC -o /tmp/evil.so evil.c -ldl. L'attivazione avviene con export LD_PRELOAD=/tmp/evil.so nella shell corrente oppure, per persistenza system-wide, aggiungendo il path a /etc/ld.so.preload (richiede root).
Per simulare l'approccio di Rocke e Aquatic Panda, che scrivono direttamente in /etc/ld.so.preload, il payload viene reso resiliente hookando anche readdir e readdir64 per filtrare le entry corrispondenti al proprio PID sotto /proc, replicando il comportamento tipico dei rootkit user-mode come Azazel (open source) e libprocesshider (open source), entrambi ottimi riferimenti didattici disponibili su GitHub.
Su macOS il flusso è analogo con DYLD_INSERT_LIBRARIES, ma va tenuto conto di SIP (System Integrity Protection) e dell'Hardened Runtime: i binari protetti ignorano la variabile. In lab si testa su applicazioni non firmate o compilate localmente, con DYLD_INSERT_LIBRARIES=/tmp/evil.dylib DYLD_FORCE_FLAT_NAMESPACE=1 ./target. Il framework di riferimento è Mach-O function hooking tramite librerie come Dobby (open source) o fishhook (open source) di Facebook.
Una catena d'attacco realistica ricalca quella di Ebury: dopo aver ottenuto root via vulnerabilità o credenziali SSH, l'operatore droppa la libreria in un path plausibile (es. /usr/lib64/libkeyutils.so.1.9), sostituisce o modifica il symlink verso la versione legittima e riavvia sshd. Ogni sessione SSH successiva carica il modulo malevolo, che intercetta system, popen, execve, execvpe, execv, execvp e execl per esfiltrare credenziali e mantenere accesso.
Per emulazione controllata si consiglia Atomic Red Team (open source) che include test dedicati a T1574.006, e Caldera (open source) di MITRE per orchestrare la catena end-to-end. In fase di validazione detection, usare auditd con regole su execve e watch su /etc/ld.so.preload permette di misurare la copertura SIEM prima di dichiarare l'esercizio concluso.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo