Il sistema operativo Linux segue un modello di gestione dei permessi basato su ruoli e livelli di autorizzazione. Il ruolo root rappresenta l’utente con il massimo livello di privilegi, che permette il controllo completo del sistema. Una vulnerabilità che permette l’acquisizione dei permessi di root rappresenta una grave falla di sicurezza perché consente a un malintenzionato di eseguire qualsiasi comando e compromettere l’intero sistema. Un ricercatore indipendente ha scoperto un modo curioso, al limite della follia, per ottenere i diritti di root su Linux: creare interferenze elettromagnetiche utilizzando un semplice accendino.
Come funziona l’attacco dell’accendino su Linux per acquisire i privilegi root
Protagonista dell’impresa davvero inusuale è David Buchanan, il ricercatore che in passato ha violato la tecnica DRM Widevine di Google e ha portato Netflix e Spotify su Asahi Linux. Oltre ad aver scoperto tante problematiche legate alla sicurezza e alla privacy in un ampio ventaglio di software di uso comune.
Quando si cerca di scrivere un exploit, ovvero codice utile a ottenere un comportamento non previsto sul sistema, è un bug. Se non si riescono a individuare bug evidenti, entra in gioco la tecnica conosciuta come Fault Injection. Si tratta di una soluzione creativa che sfrutta vulnerabilità hardware di carattere temporaneo. L’iniezione di guasti in hardware può avvenire in diversi modi: dalla corruzione dei dati controllata via software al glitching elettrico (tecnica di attacco che manipola il comportamento di un dispositivo elettronico, come un microcontrollore, un chip o una CPU, interrompendo brevemente e in maniera controllata la sua alimentazione elettrica), dall’utilizzo di impulsi elettromagnetici fino all’uso di laser.
Il rovescio della medaglia è che la pratica del Fault Injetion di solito presuppone l’impiego di attrezzature specializzate e costose, data la necessità di alta precisione sia nella tempistica che nella localizzazione del guasto.
Negli ultimi anni, sono stati fatti notevoli tentativi per ridurre i costi di queste tecniche: si pensi a progetti come PicoEMP basato su RP2040 o soluzioni come il “Laser Fault Injection for The Masses“.
Ingenerare guasti hardware usando un accendino piezoelettrico
Buchanan racconta che tra gli approcci più creativi ed economici vi è l’utilizzo di un accendino piezoelettrico: al momento della sua attivazione, infatti, un oggetto del genere può provocare guasti elettromagnetici (EMFI, Electromagnetic Fault Injection).
Per effettuare un esperimento sul campo, il ricercatore ha utilizzato un laptop Samsung S3520, dotato di CPU Intel i3-2310M e 1 GB di RAM DDR3, prodotto nel 2011. Sebbene non sia propriamente un oggetto “di primo pelo”, è comunque un notebook abbastanza moderno da eseguire una distribuzione Linux leggera (Buchanan ha installato Arch). Allo stesso tempo, si tratta di un sistema sufficientemente obsoleto da non preoccuparsi di un suo eventuale danneggiamento fisico.
L’obiettivo del ricercatore era infatti quello di iniettare guasti hardware sul bus DDR per sviluppare un exploit in grado di acquisire i privilegi di root sull’installazione Linux.
Dal punto di vista tecnico, Buchanan si è concentrato sulla linea dati DQ26 della memoria DDR3. Ha saldato un filo e una resistenza (15 ohm) sul bus, creando un’antenna in grado di raccogliere le interferenze elettromagnetiche limitrofe. Attivando un semplice accendino piezoelettrico vicino al filo, il ricercatore ha indotto errori di memoria rilevati dall’utilità memtest86+.
Sfruttamento dei bit-flip in CPython
Come primo passo, Buchanan ha tentato un exploit “sandbox escape” su CPython, implementazione di riferimento – scritta in C – del linguaggio di programmazione Python.
L’operazione è definita “puramente accademica”, dato che CPython non funziona all’interno di una sandbox. L’idea di base consisteva comunque nell’ingenerare un bit-flip all’interno di una parola a 64 bit conservata in memoria al fine di manipolare i puntatori e ottenere un’operazione di lettura/scrittura arbitraria.
Il bit-flip è un evento in cui uno specifico bit di un dato binario cambia il suo valore da 0 a 1 o da 1 a 0 in modo inaspettato.
Manipolando i puntatori con i glitch indotti con l’attivazione dell’accendino tascabile, Buchanan ha prodotto un riferimento a un bytearray, che permette di leggere e scrivere nella memoria a proprio piacimento.
Superamento dei limiti di sicurezza su Linux
Dopo aver acquisito una comprensione approfondita delle potenzialità dei glitching causati sulla memoria, il ricercatore si è spinto oltre cercando di scalare i privilegi da utente Linux sprovvisto di diritti a utente root.
Su un sistema Linux, causare un bit-flip in una posizione chiave, come una tabella di pagine di memoria o una struttura di controllo del file system, può far sì che l’accesso a risorse privilegiate (come la memoria protetta del kernel) sia erroneamente concesso.
Le CPU moderne funzionano utilizzando una cache a più livelli (L1, L2, L3). Il punto centrale dell’exploit messo a punto da Buchanan ruota attorno alle tabelle delle pagine (Page Table) e alla Translation Lookaside Buffer (TLB), due elementi cruciali nella gestione della memoria virtuale e fisica nei sistemi operativi moderni.
Come punto di partenza, il ricercatore ha tratto ispirazione dall’exploit Rowhammer, che sfrutta errori nella gestione della memoria, ma con un approccio diverso: non cercare di controllare la disposizione delle strutture nella memoria fisica, bensì riempire (spraying) il 50% della memoria fisica con tabelle di livello 0.
Il ricercatore ha utilizzato un accendino tascabile per indurre una piccola interferenza nel momento critico di lettura delle PTE ovvero del contenuto della Page Table. L’obiettivo era quello di corrompere i bit in memoria, facendo sì che la tabella puntasse a un’altra tabella precedentemente inserita nella memoria fisica. Il bit-flip ha permesso di puntare a un’area della memoria arbitraria e ottenere i privilegi necessari per accedervi.
La dimostrazione pratica è in questo video YouTube: si vede l’antenna esterna e si può notare come l’interferenza indotta con l’accendino permetta l’acquisizione dei privilegi di root.
Considerazioni sull’exploit e utilizzi futuri
L’exploit dimostra che, con una combinazione di conoscenze avanzate sulla gestione della memoria e l’uso di interferenze fisiche, è possibile ottenere privilegi di root su un sistema Linux senza accesso diretto alla memoria fisica.
Sebbene l’accendino utilizzato sia stato in grado di indurre il glitch necessario per ottenere i privilegi di root, il ricercatore sottolinea che tecniche più sofisticate, come l’uso di interferenze elettromagnetiche, potrebbero migliorare la precisione e la ripetibilità dell’exploit.
In futuro, lo sviluppo di exploit di questo tipo potrebbe sfidare anche i moderni sistemi di protezione come il TPM, rendendo vulnerabili persino dispositivi che utilizzano tecnologie di protezione avanzate, compresi i dispositivi Android basati su SafetyNet.
Credit immagini nell’articolo: David Buchanan