Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Corso Ethical Hacker: accedi alla promozione fino al 30 Aprile! Scopri di più
Il dynamic linker hijacking è una tecnica che sfrutta il meccanismo con cui i sistemi operativi Unix-like e macOS risolvono le dipendenze delle librerie condivise a runtime. Quando un programma viene eseguito, il linker dinamico — ld.so su Linux, dyld su macOS — consulta una serie di variabili d'ambiente per determinare quali librerie caricare e in quale ordine. La variabile LD_PRELOAD su Linux e DYLD_INSERT_LIBRARIES su macOS permettono di iniettare librerie arbitrarie che vengono caricate prima di quelle di sistema, sovrascrivendone le funzioni omonime.
Questa tecnica attraversa tre tattiche distinte: Persistence (TA0003), perché la modifica delle variabili del linker sopravvive ai riavvii dei processi e, se scritta nei file di configurazione, anche ai reboot; Privilege Escalation (TA0004), poiché la libreria iniettata eredita il contesto di sicurezza del processo vittima, potenzialmente SUID o root; Defense Evasion (TA0005), dato che l'hooking di funzioni libc come execve, readdir e open consente al malware di nascondere i propri artefatti dall'output di comandi diagnostici.
I dati MITRE documentano 3 gruppi APT, 6 famiglie malware, 0 campagne e 2 mitigazioni. L'impatto operativo è significativo: un singolo entry in /etc/ld.so.preload è sufficiente a iniettare codice malevolo in ogni processo che viene avviato sul sistema, trasformando una riga di testo in un meccanismo di persistenza globale quasi invisibile.
La simulazione di questa tecnica in laboratorio è sorprendentemente semplice, il che la rende perfetta per dimostrare al cliente quanto sia sottile il confine tra una funzionalità di debug e un vettore di compromissione. Il punto di partenza è la creazione di una shared library malevola che ridefinisce una funzione libc comunemente invocata.
Su un sistema Linux di laboratorio, compila una libreria che intercetta la funzione execve. Il codice C è minimale: una funzione execve che registra la chiamata su file e poi invoca la execve reale tramite dlsym(RTLD_NEXT, "execve"). Compila con:
gcc -shared -fPIC -o /tmp/evil.so evil.c -ldl
A questo punto, la tecnica si biforca in due varianti operative. La prima è la variante per processo singolo, dove imposti la variabile d'ambiente direttamente:
LD_PRELOAD=/tmp/evil.so /usr/bin/ls
La seconda variante è quella persistente a livello di sistema, che replica il comportamento documentato per Rocke e Aquatic Panda: la modifica del file /etc/ld.so.preload. Scrivendo il percorso della libreria in quel file, ogni processo avviato sul sistema caricherà la libreria iniettata senza che la variabile d'ambiente sia visibile nell'environment del processo.
echo "/tmp/evil.so" >> /etc/ld.so.preload
Per simulare lo scenario Ebury — dove l'hooking avviene specificamente sui processi figli di sshd — puoi configurare la variabile LD_PRELOAD all'interno dell'environment del servizio SSH editando il file di unit systemd oppure il profilo di shell caricato dalle sessioni SSH.
Su macOS, la variabile equivalente è DYLD_INSERT_LIBRARIES. Compila un dylib:
clang -dynamiclib -o /tmp/evil.dylib evil.c
E iniettalo con:
DYLD_INSERT_LIBRARIES=/tmp/evil.dylib /Applications/Target.app/Contents/MacOS/Target
Tieni presente che System Integrity Protection (SIP) su macOS ignora queste variabili per i binari protetti, quindi la simulazione funzionerà solo su applicazioni di terze parti che non adottano il Hardened Runtime.
Per il red team è utile il framework Atomic Red Team (open source), che include test specifici per T1574.006 con payload pre-confezionati. Lo strumento linux-inject (open source) su GitHub offre un approccio alternativo basato su ptrace per iniettare .so in processi già in esecuzione, utile per dimostrare la variante runtime rispetto a quella basata su variabili d'ambiente.
Verifica sempre che il laboratorio sia isolato: un /etc/ld.so.preload mal configurato può rendere il sistema inutilizzabile, bloccando qualsiasi esecuzione di binari dinamicamente linkati.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo