Regole Udev Malevole: Udev Rules (T1546.017)

La tecnica T1546.017 - Udev Rules sfrutta il sottosistema udev del kernel Linux, ovvero il gestore dinamico dei nodi di dispositivo che governa i file pseudo-device nella directory /dev e reagisce agli eventi hardware come il collegamento di dischi esterni o tastiere. Un attaccante con privilegi di root può creare o modificare file di regole in /etc/udev/rules.d/, /run/udev/rules.d/, /usr/lib/udev/rules.d/, /usr/local/lib/udev/rules.d/ o /lib/udev/rules.d/ per innescare l'esecuzione di codice arbitrario ogni volta che un evento hardware soddisfa le condizioni definite dalle match keys.

La tecnica si colloca nelle tattiche TA0003 (Persistence) e TA0004 (Privilege Escalation) della kill chain: consente di mantenere un punto d'appoggio che sopravvive ai riavvii e di eseguire codice nel contesto di systemd-udevd, spesso con privilegi elevati. Sebbene udev sia progettato per eseguire solo task brevi e sandboxati (senza accesso a rete o filesystem), l'uso di RUN+= permette di fare il detach di processi in background, aggirando così le restrizioni della sandbox.

L'impatto operativo è significativo: la persistenza è invisibile ai controlli tradizionali su cron, systemd services e file di autostart utente. Un solo file di regola in una directory poco monitorata è sufficiente a garantire l'esecuzione ricorrente del payload a ogni accesso a /dev/random o all'inserimento di un dispositivo USB.

Per simulare T1546.017 in un ambiente di laboratorio autorizzato, l'operatore red team parte da una shell con privilegi root sulla macchina target. Il flusso tipico prevede la scrittura di un file di regola udev che invoca un payload esterno tramite la direttiva RUN+=, poiché quest'ultima è vincolata a task brevi e non permette direttamente processi long-running.

Un esempio didattico di regola posizionata in /etc/udev/rules.d/70-persistence.rules potrebbe essere:

KERNEL=="random", RUN+="/bin/sh -c '/tmp/.payload &'"

La chiave KERNEL=="random" fa scattare la regola ogni volta che un processo accede al device /dev/random, evento estremamente frequente su qualsiasi sistema Linux (crypto, TLS handshake, generazione UUID). Il costrutto sh -c '... &' esegue il detach del processo figlio, così quando udevd termina il worker dopo pochi secondi il payload continua a girare in background, aggirando il sandbox di systemd-udevd che blocca rete e filesystem al processo diretto.

Dopo la scrittura del file la regola va ricaricata:

udevadm control --reload-rules

udevadm trigger

Il comando udevadm test /dev/random (open source, incluso in systemd) permette di verificare quali regole matcherebbero un dato evento senza attendere l'evento reale, utile per debug in lab.

Varianti più stealth usano SUBSYSTEM=="usb" per attivare il payload solo all'inserimento di una specifica chiavetta identificata via ATTR{idVendor} e ATTR{idProduct}, riducendo la superficie di detection comportamentale. Un'altra variante sfrutta il prefisso numerico del filename per garantire priorità elevata: un file 10-net.rules viene processato prima di 70-persistence.rules.

Per la fase di weaponization il payload esterno può essere un binario ELF statico compilato con musl (open source) per evitare dipendenze da glibc, oppure uno script Python offuscato con PyArmor (freemium). Il framework Metasploit (open source) non offre moduli nativi per questa tecnica, ma Sliver (open source) e Havoc (open source) permettono di generare implant compatibili da chiamare dalla regola.

Per emulazione strutturata, Atomic Red Team (open source) include il test T1546.017 con procedure reversibili. In post-exploitation il gruppo REPTILE (rootkit LKM documentato in MITRE come S1219) ha impiegato udev per mantenere persistenza, offrendo un riferimento realistico per esercizi di purple team.

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.