Attacco RAMBleed

La continua miniaturizzazione delle componenti elettroniche ha contribuito ad incrementare sensibilmente le prestazioni dei dispositivi: componenti di ridottissime dimensioni che riescono a lavorare con latenze ridottissime a frequenze altissime.

A volte però, portare all’esasperazione tali componenti all’interno dei chip può portare alla manifestazione di fenomeni fisici inaspettati: è il caso del “memory bit flip”, ovvero l’inversione dei bit di memoria all’interno dei banchi DRAM.

Tale fenomeno in verità è sempre esistito, ma fino a qualche anno fa poteva manifestarsi solo in maniera sporadica[1]. Era quindi possibile avere alcuni incidenti di inversione dei bit di memoria durante la durata pluriennale di un computer medio: in tali casi, o venivano rilevati e corretti dal sistema, o si otteneva un danneggiamento silenzioso del dato.

Nei casi più fortunati, gli errori si manifestavano nelle porzioni di RAM inutilizzata, senza comportare alcun sintomo; viceversa, l’inversione avrebbe potuto incidere sul codice in esecuzione – causando arresti anomali e/o malfunzionamenti – o sui dati, portando alla corruzione di caratteri nei documenti (o a cause peggiori).

La miniaturizzazione dei chip ha alzato notevolmente la percentuale di accadimento spontaneo di questa fenomenologia; è altresì vero che i progettisti stanno continuando a studiare delle valide contromisure per ovviare a questo fenomeno.

Non a caso, in ambito server/mainframe, vengono utilizzati tipi di RAM differenti: le RAM con ECC[2]. Queste ultime sono una tipologia di memoria che formula particolari informazioni aggiuntive (ridondanti) che la CPU utilizza per rilevare e riparare eventuali “bit-flip”. Un banale esempio consiste nell’utilizzo del codice di Hamming[3].

Di fatto, per quanto detto in precedenza, le memorie di tipo ECC sono state originariamente sviluppate per far fronte ai bit-flip dovuti a raggi cosmici o a situazioni di simili: eventi occasionali che tipicamente comportano la rotazione di un singolo bit.

Analizzeremo di seguito come, tuttavia, esistano tecniche in grado di bypassare gli attuali controlli, permettendo l’ottenimento dei dati sensibili presenti all’interno della memoria di un qualsivoglia elaboratore.

ROW HAMMER – Descrizione

Nel 2014 alcuni ricercatori[4] hanno documentato una bizzarra vulnerabilità presente nei chip di memoria DRAM, soprannominata “Rowhammer”: quando molte letture o scritture accedono a una particolare posizione di memoria, potrebbe verificarsi un’inversione di bit in una locazione adiacente.

Nella letteratura questo tipo comportamento è definito “martellare” una posizione di memoria, con l’intento di capovolgere un bit in un’altra locazione.

Inizialmente tale fenomeno fu considerato come un comportamento curioso, più che come qualcosa di cui preoccuparsi. La comunità di ricerca ha però rapidamente imparato ad armare i bit-flip per compromettere una moltitudine di dispositivi: PC, smartphone, VM nel cloud, ecc.[5].

Poiché il bug è presente in molti tipi di chip DRAM e le patch non sono possibili per i difetti dell’hardware, Rowhammer è diventato un problema soprattutto per i dispositivi consumer.

ROW HAMMER – Come funziona

Come accennato, le memorie ECC aggiungono comunemente una ridondanza sufficiente a correggere (riparare) i bit-flip singoli in una parola di – diciamo – 64 bit. Nel caso “sfortunato” in cui si verifichino più inversioni, l’algoritmo insito in ECC può rilevarne fino a un massimo di due per parola. A seguito della rilevazione, il programma di gestione della memoria si blocca, poiché non ha modo di eseguire la riparazione del dato.

Ciò significa per un singolo bit-flip in Rowhammer non causerà alcun danno; due bit-flip verranno rilevati, ma bloccheranno il sistema, quindi l’attacco. Pertanto, solo se si avranno tre o più inversioni di bit al posto giusto, si avrà la possibilità di bypassare la protezione ECC.

La condizione potrebbe sembrare alquanto improbabile: tentare di ottenere contemporaneamente tre inversioni, senza accidentalmente ottenerne due innescando un arresto anomalo, è molto arduo. Per questo motivo, ECC è sempre stato considerato una buona difesa contro Rowhammer, permettendo al massimo attacchi di tipo denial-of-service, ma non una completa compromissione. In realtà si è poi dimostrato che l’algoritmo ECC è in grado di rallentare un attacco Rowhammer, ma non è sufficiente a fermarlo completamente.

L’idea basilare di un attacco consiste nel modificare un determinato bit in memoria che garantisce la sicurezza del sistema: ad esempio, se si riesce a modificare il bit che indica che un settore di memoria è riservato, qualunque processo potrà accedere a quei dati precedentemente inaccessibili.

Quindi, modificando opportunamente determinati bit in memoria, è possibile accedere a dati riservati al kernel, ad altri utenti, a processi, all’anello 0 (kernel mode), senza passare tramite le System Call del SO.

Potenzialmente, gli attacchi di tipo RowHammer possono aggirare completamente qualunque misura di sicurezza e permettere all’attaccante qualsivoglia azione sul sistema. Le conseguenze di tale attacco includono: l’accesso amministrativo a un SO, l’accesso a chiavi crittografiche, a dati riservati, a dati presenti su macchine virtuali, a dati su macchine remote ecc.[6].

RAM Bleed – Descrizione

Gli attacchi di tipo Rowhammer prevedono la modifica della memoria per l’ottenimento di dati riservati, e sono quindi potenzialmente rilevabili.

Alcuni ricercatori[7] hanno di recente scoperto una nuova vulnerabilità che influisce sulla riservatezza dei dati archiviati nella RAM, senza però modificare in alcun modo la celle di memoria originali. Tramite il nuovo sistema, soprannominato “RamBleed”, è stato possibile estrarre una chiave di firma digitale da un server OpenSSH usando i normali privilegi utente.

Questo tipo di attacco si basa sempre su RowHammer, ma affronta la problematica da un punto di vista differente. Gli attacchi funzionano a causa dell’elevata miniaturizzazione che caratterizza le DDR3/DDR4: considerando che i condensatori delle celle di memoria sono estremamente vicini, questi ultimi tendono a perdere molto facilmente le cariche elettriche che immagazzinano i bit, se sovrastimolati.

Quindi RAMBleed porta Rowhammer in una nuova direzione. Anziché utilizzare i bit-flip per modificare i dati sensibili, la nuova tecnica sfrutta l’errore hardware per estrarre i dati sensibili memorizzati nelle regioni di memoria che sono off-limits per l’attaccante.

Gli attacchi richiedono solo che l’exploit “martelli” le posizioni di memoria per le quali il codice exploit ha già i permessi di accesso. Inoltre, l’estrazione dei dati funziona anche quando la DRAM è protetta da ECC!

RAM BLEED – Come funziona

L’estrazione delle chiavi richiede l’individuazione preventiva di una regione contenente una buona quantità di bit flipppabili. Questa fase può richiedere molto tempo: nel dettaglio, 34 ore per localizzare gli 8400 bit-flip necessari per estrarre la chiave SSH. L’investimento – non banale – di tempo e risorse richiesto è comunque compensato dal fatto che può essere eseguito in anticipo, con le sole autorizzazioni utente e senza alcuna interazione con SSH.

Dopo che i ricercatori hanno filtrato dal totale i bit inutili per l’esecuzione dell’attacco, sono state collezionate le locazioni di memoria valide, per un totale di circa 4.200 bit.

RAMBleed utilizza quindi una speciale tecnica di memorizzazione per far in modo che il sistema memorizzi la chiave SSH in locazioni di memoria prestabilite: l’obiettivo è quello di ottenere un layout simile a quello mostrato nella figura, che corrisponde alle pagine da 8 KiB necessarie per poter attuare le due varianti di attacco.

La prima utilizza un tipo di accesso fronte-retro; la seconda solo fronte.

Sebbene RAMBleed funzioni meglio nel primo caso, a causa del rumore proveniente dalle altre attività del sistema i risultati dell’attacco a volte risultano essere migliori nel secondo caso.

Il dettaglio dell’attacco è riassunto esaustivamente nell’immagine seguente: l’attaccante, possedendo i 4200bit di memoria flippabile, crea la condizione per il caricamento dei dai al di sopra ed al di sotto di una determinata pagina di memoria (A1)[8].

Detenendo il controllo delle due pagine di attivazione adiacenti al “segreto”, può “martellarle” ripetutamente per influenzare la riga centrale. Se il bit nel segreto è 0, il martellamento farà invertire il bit nella pagina di campionamento in 1; viceversa, il bit ricavato sarà 1.

Eseguendo ripetutamente il processo su diversi offset di memoria flippabili, sarà possibile rilevare tutti i bit dei dati segreti.

Qui notiamo che né la vittima né l’attaccante accedono al segreto in alcun modo, ma accedendo alle pagine di attivazione delle righe controllate dagli aggressori l’attaccante usa i dati della vittima per influenzare le immagini di bit indotte da Rowhammer nelle proprie pagine private. L’attaccante controlla direttamente la pagina di campionamento per i bit flip, deducendo in tal modo i bit della vittima” – spiegano i ricercatori.

L’attacco ha dimostrato di poter leggere una chiave RSA-2048 da un server con OpenSSH 7.9. Il test ha misurato una velocità di 0,3 bit al secondo e una precisione dell’82%. Quindi, per ottenere il set dati completo, i ricercatori hanno utilizzato una variante dell’algoritmo di Heninger-Shacham[9] in grado di ricostruire interamente le chiavi RSA da informazioni parziali.

CONCLUSIONI – Possibili contromisure

RAMBleed può rompere la riservatezza della memoria ECC, anche se tutti i bit flip venissero corretti con successo dal meccanismo ECC” – affermano i ricercatori.

Ovviare un attacco RAMBleed è possibile, ma solo sui sistemi in cui la crittografia della memoria RAM è attiva. Deve quindi essere disponibile ed abilitata sul processore la funzionalità di “esecuzione in ambiente trusted” (TEE)[10].

I TEE in commercio come: Software Guard Extensions (SGX) di Intel, Secure Encrypted Virtualization (SEV) di AMD, TrustZone di ARM (non implementata da tutti i vendor di smartphone, e non utilizzabile dai produttori di app di terze parti[11]), Secure Enclave dal processore Apple A7 in poi, applicano la crittografia sulla memoria con cui lavorano.

Un altro metodo per ridurre il rischio verso questo tipo di attacco è quello di eliminare le chiavi di crittografia dalla memoria immediatamente dopo il loro utilizzo. Questo riduce le possibilità di apprendere i dati segreti perché RAMBleed ha bisogno che il dato rimanga in memoria per almeno un intervallo di aggiornamento, che è 64 ms per impostazione predefinita.

Tale metodo è stato migliorato e automatizzato dallo standard di memoria LPDDR4 pubblicato da JEDEC, che include il supporto hardware opzionale per il cosiddetto “target row refresh” (TRR), che rallenta notevolmente l’effetto Rowhammer a livello fisico, senza influire negativamente sulle prestazioni o sul consumo energetico.

Note

[1] DRAM badness: https://www.blackhat.com/docs/us-15/materials/us-15-Seaborn-Exploiting-The-DRAM-Rowhammer-Bug-To-Gain-Kernel-Privileges.pdf.

[2] RAM ECC, acronimo di Error Correction Code.

[3] Codice di Hamming: https://it.wikipedia.org/wiki/Codice_di_Hamming.

[4] Flipping Bits in Memory Without Accessing Them: https://users.ece.cmu.edu/~yoonguk/papers/kim-isca14.pdf.

[5] Alcuni tipi di attacchi risultato essere possibili anche tramite l’esecuzione di codice Javascript, o tramite l’iniezione di codice su server collegati in desktop remoto.

[6] Rowhammer: https://www.ictsecuritymagazine.com/articoli/lhardware-e-la-sicurezza-it-parte-2-attacchi-side-channel-row-hammer-ed-attacchi-alla-cache/.

[7] RamBleed: https://rambleed.com/docs/20190603-rambleed-web.pdf.

[8] I ricercatori hanno sviluppato un particolare metodo, denominato Frame Feng Shui, che consente loro di posizionare le pagine contenenti i dati desiderati in una specifica posizione all’interno del frame di memoria flippabile predeterminato.

[9] Heninger-Shacham Algorithm: https://eprint.iacr.org/2008/510.pdf.

[10] Trusted Execution Environment: https://en.wikipedia.org/wiki/Trusted_execution_environment.

[11] Android Trusted Zone: https://medium.com/@nimronagy/arm-trustzone-on-android-975bfe7497d2.

 

Articolo a cura di Daniele Rigitano

Profilo Autore

Laureato in Tecnologie Informatiche e con un Master in Sicurezza delle Reti.
Da sempre appassionato di Sicurezza Informatica e vicino alle tematiche come Threat Intelligenze, Computer Fosensics ed Information Security Management, entra come Cyber Security Specialist nel Computer Emergency Response Team del Ministero dell'Economia e delle Finanze.

Condividi sui Social Network:

Articoli simili