CPU

TLBleed è l’attacco che colpisce l’Hyper-Threading di Intel

La scorsa settimana gli sviluppatori del progetto OpenBSD hanno annunciato la scelta di disabilitare l'Hyper-Threading sui processori Intel per ragioni di sicurezza. A qualche giorno di distanza la situazione si è fatta leggermente più chiara, con Arstechnica che la spiega in un lungo e dettagliato articolo, di cui proviamo a riassumervi le parti più importanti.

Stando a quanto riportato, i ricercatori della Vrije Universiteit Amsterdam nei Paesi Bassi hanno trovato una nuova vulnerabilità side-channel nei processori con Hyper-Threading chiamata TLBleed. Questa falla porta i processi che condividono un core fisico (ma che usano core logici differenti) a scambiarsi inavvertitamente informazioni l'un l'altro.

I ricercatori hanno creato anche un proof of concept: hanno avviato un programma che calcola le firme crittografiche usando l'algoritmo Curve 25519 EdDSA implementato in libgcrypt su un core logico e il loro programma di attacco sull'altro core logico. Il programma di attacco è riuscito a determinare la chiave crittografica a 256 bit usata per calcolare la firma con una combinazione di due millisecondi di osservazione, seguiti da 17 secondi di ipotesi mediante machine learning e una frazione di secondo finale di brute forcing.

Tali osservazioni sono state fatte usando un side channel, elemento che ritorna anche negli exploit Spectre e Meltdown. Rispetto a questi famosi attacchi, TLBleed usa un side channel differente, il translation lookaside buffer (TLB) del processore. Il TLB è uno speciale tipo di cache usata dal processore per determinare gli indirizzi di memoria. Nello specifico ospita le mappature dagli indirizzi di memoria virtuali a quelli fisici.

Ogni byte di memoria in un sistema ha un indirizzo fisico: un numero che identifica unicamente il byte. Per ragioni di sicurezza e convenienza i programmi e i sistemi operativi non usano questi indirizzi fisici, bensì quelli virtuali. Ogni programma in funzione ha il proprio insieme di indirizzi virtuali, e il sistema operativo mantiene un insieme di mappature da questi indirizzi virtuali verso la sottostante memoria fisica.

Queste mappature sono grandi e complesse, coinvolgono più ricerche in diverse tabelle, con ogni tabella che ha parte dell'indirizzo fisico che corrisponde a un determinato indirizzo virtuale. Dato che il processo in questione è piuttosto lento (nei tempi dell'informatica, ovvio) il processore salva le mappature usate più di recente.

cpu

In tal modo se deve cercare ripetutamente la stessa manciata di indirizzi, può farlo in modo quasi istantaneo piuttosto che dover consultare tutte le tabelle. Questo archivio di mappature recenti è il TLB. In modo simile alle altre cache, i processori hanno una gerarchia per il TLB e la loro dimensione si misura nel numero di mappature archiviabili. Ogni core fisico dei chip Ryzen, ad esempio, ha 64-entry level 1 e 1536-entry level 2. Solo se una mappatura non si trova in una di queste il processore deve consultare le tabelle.

Questa struttura è quella che costituisce il side channel. Quando si cerca un indirizzo di memoria in TLB le prestazioni sono alte, solo una manciata di cicli del processore, mentre se l'indirizzo non è in TLB sono necessari centinaia o più cicli.

Questa differenza prestazionale può essere misurata, permettendo di fare deduzioni sulle mappature presenti in quel momento nel TLB. Per ogni nuova mappatura ricercata, una mappatura esistente deve essere scartata dal TLB.

Sebbene non vi siano maggiori dettagli su TLBleed, si desume che funzioni come altri attacchi simili. Il programma di attacco innesca il TLB in qualche modo, provando ad accedere a un intervallo di indirizzi di memoria che pre-popolano il TLB con le mappature per tali indirizzi.

Il programma di crittografia, che esegue i propri accessi agli indirizzi di memoria, farà sì che alcune di quelle voci TLB siano sfrattate e sostituite con nuove mappature. Il malintenzionato può quindi tentare di accedere di nuovo al proprio intervallo di indirizzi e calcolare la durata di ciascun accesso.

Se un accesso è lento allora il malintenzionato sa che la voce TLB che archivia tale mappatura è stata scartata. Per quanto riguarda gli attacchi cache tradizionali ci sono diverse variazioni a questo approccio. Ad esempio invece di guardare a una ricerca lenta, l'attacco potrebbe cercarne una veloce – indicando che uno specifico pezzo di dato è stato consultato.

Le piccole variazioni prestazionali che intercorrono consentono di dedurre il dato esatto o l'indirizzo di memoria consultato dal programma vittima. Il modo in cui queste deduzioni possono essere usate per determinare le chiavi crittografiche del programma vittima deve ancora essere reso noto.

La caratteristica che ha portato OpenBSD ha disattivare l'Hyper-Threading è però un'altra. I processori con simultaneous multithreading (SMT) supportano due o più core logici, ognuno dei quali può gestire un thread, su ogni core fisico. Questi core logici condividono le risorse fisiche del core, incluse cache e TLB. Con il programma attaccante che lavora sullo stesso core logico del programma vittima, i malintenzionati possono rilevare cambiamenti al TLB nel momento in cui avvengono.

La ricerca si è soffermata sulle CPU Intel, ma potrebbero essere interessate anche le CPU AMD con SMT, non è chiaro al momento. Fortunatamente TLBleed sembra decisamente meno pericoloso di Spectre e Meltdown e secondo Intel le contromisure messe in campo per gli altri attacchi side channel sono sufficienti.

C'è chi però la pensa diversamente. Jake Williams, ex hacker della National Security Agency, afferma che è necessaria una modifica complessa del sistema operativo per risolvere il tutto. Altri ricercatori di sicurezza però sono di parere diverso. OpenBSD ha invece scelto un approccio immediato e "brutale", disabilitando la tecnologia, almeno per il momento.