Sicurezza Informatica

Spectre e Meltdown: le vulnerabilità che hanno sconvolto il mondo delle tecnologie

Il termine virus, inteso come infezione informatica, fa parte del linguaggio comune anche ai “naviganti della rete” meno esperti. Già in diversi nostri articoli, sono state approfondite alcune categorie di attacchi come il phishing (ovvero una serie di truffe che portano l’utente a fornire informazioni riservate o a sottrargli denaro) o i ransomware (algoritmi in grado di crittografare i dispositivi rendendoli inutilizzabili all’utente). Un’altra categoria sono gli attacchi Side Channel che, invece di sfruttare una vulnerabilità diretta del sistema da attaccare, sfruttano delle caratteristiche indirette come le emissioni elettromagnetiche o termiche. In generale, le misure di sicurezza per arginare questo tipo di attacchi sono:

  • Schermare i sistemi;
  • Modificare le componenti dell’hardware in modo da evitare le radiazioni che potrebbero portare a ricostruire delle informazioni.

Row Hammer

La continua miniaturizzazione delle componenti elettroniche può portare ad errori causati da disturbi provenienti da altre fonti elettromagnetiche nelle vicinanze. Tale fenomeno, denominato Row Hammer, è stato studiato per la prima volta da Kim et al [1] ed ha riguardato particolarmente le DRAM[1]. Il motivo è abbastanza chiaro, infatti in una cella DRAM il valore (0 o 1) è rappresentato dalla presenza o meno della carica in un condensatore; se i condensatori sono “piccoli” è necessario che vengano “rinfrescati”[2] affinché non perdano il loro contenuto informativo. Per aumentare la capacità delle memorie e ridurre i costi, è necessario ridurre le dimensioni fisiche delle memorie stesse il che implica l’avvicinamento tra le celle. I problemi relativi ad interferenze elettromagnetiche tra celle sono stati mitigati sia mediante l’isolamento delle celle sia con l’introduzione dell’Error Correction Code in grado di correggere 2 errori per riga di celle. Lo studio di Kim et al [1] si propone di analizzare i disturbi non dal punto di vista casuale bensì da quello volontario, ad esempio per violare la sicurezza del sistema. In generale le misure di protezione più semplici da adottare sono:

  • Il dimezzamento del tempo di refresh che, pur rallentando il tempo di accesso alla memoria, riduce l’efficacia degli attacchi Row Hammer;
  • Procedure per verificare la vulnerabilità delle memorie, in modo da implementare misure di protezione specifiche;
  • Monitorare gli accessi alla DRAM o l’utilizzo delle Cache[3] e dei Buffer[4] di memoria, per identificare e bloccare i processi che eseguono un attacco Row Hammer;
  • Separare fisicamente i dati con privilegi diversi o di utenti differenti, in modo che un attaccante non possa leggere tutti i dati presenti in memoria.

Nonostante la pericolosità di Row Hammer, oltre alle contromisure riportate, l’effetto sul sistema è mitigato da alcuni fattori quali:

  • L’attacco riguarda solo la memoria DRAM e non tutte le DRAM sono vulnerabili;
  • Gli attacchi sono evidenti poiché eseguono azioni non usuali.

Meltdown e Spectre

Meltdown e Spectre sono vulnerabilità hardware e si basano sulla progettazione di funzionalità di base delle CPU[5] moderne: il primo colpisce quasi tutti i processori Intel realizzati dal 1995 in avanti mentre il secondo penalizza tutti i processori recenti. Per ostacolare e mitigare la sicurezza dei processori sono state rilasciate diverse patch software ma, dal momento che esistono molte varianti di Meltdown e Spectre, non sempre i produttori sono riusciti a migliorare la sicurezza. In realtà, la soluzione “definitiva” richiede la ri-progettazione e la sostituzione di tutte le CPU esistenti e che sono presenti in tutti i dispositivi presenti nella nostra vita quotidiana.

La caratteristica principale di Meltdown è che permette di accedere in lettura a tutti i dati gestiti dal kernel[6] del Sistema Operativo da parte di un processo con privilegi bassi, evitando i controlli HW presenti nella CPU.

Come si svolge un attacco Meltdown? (in breve)

  1. Un processo senza alcun privilegio è l’attaccante e non dovrebbe accesso diretto in lettura alla memoria del kernel;
  2. Viene individuata una linea di esecuzione che garantisce l’esecuzione out-of-order[7]delle istruzioni successive;
  3. Tra le istruzioni da eseguire fuori sequenza ed in anticipo rispetto alle altre operazioni, viene inserita la lettura di una locazione della memoria del kernel, un’operazione (in teoria) vietata dall’hardware;
  4. La CPU carica in un proprio registro il contenuto della locazione di memoria del kernel per prepararsi all’istruzione di lettura;
  5. La lettura del registro viene eseguita nel ramo out-of-order e sulla base del valore del registro viene scritto un dato nella cache[8];
  6. La CPU verifica in parallelo se il processo in esecuzione ha privilegi sufficienti per accedere ai dati;
  7. Quando la verifica dei privilegi è completata senza successo, la CPU blocca l’esecuzione del programma.

A questo punto l’informazione si trova solo nella cache della CPU e, affinché non venga eliminata o sovrascritta, possono essere sfruttati gli attacchi alla cache come Covert Channel[9]. Ripetendo la procedura di attacco per tutte le locazioni della memoria del kernel, l’attaccante può leggere tutti i dati presenti proprio nella memoria del kernel.

Per migliorare le prestazioni, nella gran parte dei Sistemi Operativi la memoria del kernel è mappata. Proprio la mappatura è il principale punto di forza di Meltdown! Ne segue che la più immediata ed efficace contromisura per impedire Meltdown è di non mappare lo spazio di memoria del kernel relativo alla memoria virtuale di ogni processo con la conseguenza di avere un rallentamento, anche abbastanza rilevante, nell’esecuzione dei programmi.

Contrariamente a Meltdown, Spectre è implementabile su tutte le CPU moderne e le uniche contromisure valide, ad oggi, riguardano la modifica profonda dell’architettura delle CPU stesse. Attraverso Spectre è possibile accedere a processi e utenti del sistema. L’implementazione di un attacco Spectre è molto complessa ma, allo stesso tempo, è difficile trovare contromisure SW: dal momento che non sono coinvolte aree di memoria privilegiate, né la CPU né il S.O. hanno informazioni per poter impedire l’attacco.

Ad oggi, le vulnerabilità qui descritte non hanno provocato gravi incidenti ma è importante correre ai ripari per tempo poiché, come visto, trovare un rimedio alle vulnerabilità richiede tempi abbastanza lunghi. Per il futuro i progettisti dovranno tenere conto non solo di affidabilità e prestazioni ma anche del grado di sicurezza.

Davide Sorrentino

Dottore in Ingegneria Elettronica

Note

[1] La DRAM (Dynamic Random Access Memory) è una memoria volatile capace di conservare i dati in memoria sino a che riceve alimentazione elettrica. Affinché le informazioni non vadano distrutte è necessario ricaricare ciclicamente i condensatori (costituenti i bit); per questo motivo si parla di memoria dinamica in contrapposizione con la memoria statica (SRAM) che non ha bisogno di cicli di ricarica periodici per mantenere le informazioni.

[2] Rinfrescare (Refresh) i dati significa rileggerli/riscriverli con una certa frequenza.

[3] La memoria cache è una memoria più veloce rispetto alla memoria principale, relativamente piccola, non visibile al software e completamente gestita dall'hardware, che memorizza i dati più recenti usati della memoria principale.

[4] Il buffer è una zona di memoria usata per compensare differenze di velocità nel trasferimento o nella trasmissione di dati oppure per velocizzare l'esecuzione di alcune operazioni.

[5] La Central Processing Unit (unità centrale di elaborazione o microprocessore) è la parte di un computer che coordina l’attività delle altre unità di elaborazione, schede audio e video, schede di rete e così via.

[6] Il kernel è il nucleo fondamentale di un sistema operativo avente il compito di fornire ai processi in esecuzione sul computer un accesso sicuro e controllato all'hardware.

[7] L’esecuzione fuori sequenza consente l'invio di istruzioni alle unità di esecuzione in un ordine differente da come è indicato dal programma sfruttando il fatto che i relativi operandi sono già disponibili e non è necessario attendere la loro elaborazione da parte di altre istruzioni.

[8] Area di memoria estremamente veloce ma solitamente di bassa capacità.

[9] Un canale nascosto è un tipo di attacco informatico che consente la comunicazione di informazioni mediante il trasferimento di oggetti attraverso canali di informazione o reti esistenti per trasmettere i dati in piccole parti.

 

Riferimenti Bibliografici e Sitografici

[1] Y. Kim, R. Daly, J. Kim, C. Fallin, J.H. Lee, C. Wilkerson, K. Lai, O. Mutlu (June 24, 2014). “Flipping bits in memory without accessing them: an experimental study of DRUM disturbance errors”.

[2] A.S. Tanenbaum, “Modern Operating Systems Ed. 2”, Jackson Libri, 2002.

[3] https://meltdownattack.com/

[4] M. Schwarz et al. “Netspectre: Rear Arbitrary Memory over Network”.

[5] “Foreshadow: Breaking the Virtual Memory Abstraction with Transient Out-of-Order     Execution”.

[6] https://get.slack.help/hc/en-us/articles/213185467-Convert-a-public-channel-to-private.

[7] https://www.techopedia.com/definition/10255/covert-channel.

[8] http://www.ictedmagazine.com/index.php/edi2-4/30-phishing-come-non-farsi-pescare-di-giacomo-a-macri-abstract.

[9] http://www.ictedmagazine.com/index.php/edi2-4/49-l-infezione-del-nuovo-millennio-il-ransomware.

[10] https://www.robadainformatici.it/cose-la-cpu/.

[11] https://www.fastweb.it/internet/dram-funzionamento-e-risoluzione-dei-problemi-comuni/.

 Immagini: https://unsplash.com/

 

RIFERIMENTI

logo icted

ICTEDMAGAZINE

Information Communicatio
Technologies Education Magazine

Registrazione al n.157 del Registro Stam­pa presso il Tribunale di Catanzaro del 27/09/2004

Rivista trimestrale  

Direttore responsabile/Editore-responsabile intellettuale

Luigi A. Macrì