Script RC di Avvio: RC Scripts (T1037.004)
La tecnica T1037.004 - RC Scripts sfrutta i file di configurazione eseguiti durante la fase di avvio dei sistemi Unix-like per garantire persistenza a livello root. Modificando file come rc.local, rc.common o gli script contenuti in /etc/init.d/, un attaccante ottiene l'esecuzione automatica di codice arbitrario a ogni riavvio, con privilegi elevati.
La tecnica si colloca in due tattiche MITRE ATT&CK: TA0003 (Persistence), perché consente di sopravvivere a reboot e cambi di credenziali, e TA0004 (Privilege Escalation), perché lo script viene eseguito nel contesto di root indipendentemente dall'utente che l'ha modificato.
Sebbene molte distribuzioni Linux moderne siano passate a systemd e macOS abbia adottato launchd, gli script RC restano rilevanti per retrocompatibilità (Ubuntu, Debian) e sono critici in ambienti dove non esistono alternative: ipervisori VMware ESXi, dispositivi IoT, appliance di rete e sistemi embedded che eseguono nativamente come root. In particolare, ESXi mantiene la maggior parte dei file di sistema in RAM e li resetta allo shutdown, rendendo /etc/rc.local.d/local.sh uno dei pochissimi meccanismi di persistenza sopravvissuti al riavvio.
Sono documentati 3 gruppi APT (APT29, Velvet Ant, UNC3886), 4 famiglie malware (iKitten, HiddenWasp, Cyclops Blink, Green Lambert) e 1 mitigazione ufficiale che sfruttano o contrastano questa tecnica, con impatto particolarmente severo su infrastruttura di virtualizzazione e appliance di rete.
In un esercizio di red team, la manipolazione degli script RC richiede accesso root al sistema target. La catena tipica prevede escalation privilegi, individuazione dei file RC attivi sulla distribuzione, iniezione del payload e verifica della persistenza attraverso reboot controllato.
Su Linux tradizionale (Debian, Ubuntu con retrocompatibilità), il file di riferimento è /etc/rc.local. Una modifica minimalista aggiunge una riga prima di exit 0:
echo '/opt/backdoor/implant &' >> /etc/rc.local chmod +x /etc/rc.local
È fondamentale verificare che il file abbia il bit di esecuzione, altrimenti su Ubuntu moderno non verrà lanciato. In alternativa, si può creare uno script in /etc/init.d/ e registrarlo con update-rc.d nomescript defaults, replicando il pattern usato da Green Lambert con file init.d e rc.d.
Su VMware ESXi, target d'elezione documentato per UNC3886, il file chiave è /etc/rc.local.d/local.sh. L'inserimento di comandi qui garantisce persistenza attraverso reboot, nonostante ESXi resetti il filesystem in RAM, perché questo path viene reimportato dalla configurazione persistente. Un pattern realistico:
vi /etc/rc.local.d/local.sh
e aggiunta di una riga nohup /store/packages/vmtools.py & prima di exit 0. Va poi rigenerato lo stato con auto-backup.sh per garantire che la modifica sopravviva.
Su macOS legacy (fino a Panther 10.3) e in scenari di compatibilità, /etc/rc.common resta un vettore, come sfruttato da iKitten. Su macOS moderno la tecnica è deprecata a favore di launchd.
Su appliance di rete (come i BIG-IP F5 targetizzati da Velvet Ant), l'attaccante modifica /etc/rc.local direttamente via shell bash dopo aver ottenuto un accesso amministrativo, spesso sfruttando vulnerabilità di management interface.
Per laboratorio consiglio Atomic Red Team (open source) che include test T1037.004 pronti all'uso, e Caldera (open source) di MITRE per automazioni end-to-end. Per validazione post-exploitation, systemd-analyze (open source, incluso in systemd) mostra i servizi effettivamente lanciati al boot, mentre chkconfig --list (open source) elenca gli script init.d attivi. Su ESXi, esxcli system syslog config get aiuta a capire cosa viene loggato durante il boot, informazione utile per pianificare evasione. Ricordate di documentare ogni modifica in scope per il rollback pulito.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo