Vulnerabilita' cpu Intel MELTDOWN, funzionamento e come proteggersi


Dall'inizio del mese si e' inziato a vociferare di una falla gravissima sui processori intel, ed ecco che in questi giorni sono usciti completamente i dettagli di Meltdown.

Normalmente un processore RISC molto semplice come il MIPS , esegue le istruzioni in sequenza, su una pipeline nel caso specifico.

Annunci

Si puo' immaginare la pipeline come una catena di montaggio industriale dove ogni operaio lungo il nastro trasportatore esegue un compito, ad esempio prendiamo un semplice telecomando di tv, ci sara' un operaio che prepara i 2 pezzi della scocca, un operaio che posizionera' dentro il circuito elettronico, ed uno che chiudera' le 2 parti di plastica, ed infine uno che fara' un test del telecomando.

Tutto bello, e funziona anche bene all'atto pratico nel caso delle catene di montaggio, ma cosa succederebbe se per ipotesi dovesse essere deciso se buttare o meno il circuito elettronico in base all'esito del test del telecomando precedente?

Ecco che si crea un cosi' detto conflitto di esecuzione in termini MIPS.

Per risolvere questo problema la soluzione piu' efficiente e' o di riordinare le istruzioni, ovvero i telecomandi da montare oppure inserire delle istruzioni nulle , ovvero finche' non e' finito il testo del telecomando 1 , il primo operaio non inizia a lavorare sul telecomando 2.

Ti potrebbe interessare  I tester

Nel caso dei processori CISC invece, non essendo possibile di fatto applicare una pipeline per parallelizzare il calcolo si e' ricorso ad un altro stratagemma ideato da Tomasulo , detto Algoritmo di Tomasulo.

Questo algoritmo a grandi linee date varie istruzioni, prova ad eseguirle tutte in parallelo sostituendo ove necessario gli operandi non ancora disponibili con dei placeholder in attesa che siano disponibili.

In questo modo appena diventa disponibile tutto quello che serve per eseguire le istruzioni, e' possibile eseguirle non necessariamente nell'ordine in cui sono arrivate.

Si pone a tutto cio' un problema pero' per ottimizzare il tutto, come sapere nel caso di un IF se la sua condizione sara' vera o meno, e per questo si utilizza l'esecuzione speculativa, ovvero eseguire delle istruzioni anche se non necessariamente serviranno basandosi su dei contatori statistici.

Nel caso poi si verifichi l'ipotesi prevista , il calcolo e' gia' fatto e quindi si ha un grosso guadagno in parallelismo, nel caso invece in cui la predizione e' risultata falsa, vengono annullate tutte le modifiche fatte dal ramo eseguito erroneamente, IN TEORIA...

Ti potrebbe interessare  Treni ad idrogeno,prima corsa in Germania per il Cordial iLint

La vulnerabilita'

Quanto enunciato sopra sulla carta funziona ma invece nella realta' , vengono si annullate le modifiche, ma non nella cache, ed e' qui il problema.

La cache per chi non lo sapesse e' una memoria molto piu' veloce della memoria centrale ( RAM ) che viene utilizzata per tenere piu' facilmente accessibili i dati piu' utilizzati.

E' possibile tramite un algoritmo studiato ingannare l'esecuzione speculativa di intel nel pensare che l'if successivo verra' eseguito, e poi all'interno di tale if inserire un accesso alla memoria privilegiata.

Normalmente la memoria privilegiata ovvero del kernel non e' accessibile quando il processore e' in user mode ( ovvero si trova all'interno di un semplice programma utente come "Campo Minato" per intenderci ) , ma e' qui proprio il secondo problema, la intel non ha previsto i controlli di permessi nel caso non sia confermato il codice eseguito dalla predizione, e quindi l'istruzione viene effettivamente eseguita.

Dopo per accedere al byte che si vuole "rubare" viene utilizzano uno stratagemma sulla cache L1

  1. Viene svuotata la cache L1 effettuando delle letture false su un array di dimensione sufficiente
  2. Si esegue un'istruzione che va a leggere memoria privilegiata utilizzando il valore letto come scostamento in un array, in questo modo la cache viene caricata solo per il valore dell'array il cui scostamento e' uguale al byte che si vuole rubare
  3. Si va a leggere tutto l'array e grazie ai contatori di prestazioni all'interno delle moderne CPU si risale a quale indice dell'array ha impiegato meno tempo per la lettura, ovvero contiene il "settore" della cache che era stato attivato dall'esecuzione speculativa
  4. Il dato letto potrebbe essere la vostra password facebook nella memoria del browser o magari la chiave di cifratura del disco, o la chiave wifi ecc
Ti potrebbe interessare  Amazon, prodotti apple di settembre scontati.

La vulnerabilita' ad oggi almeno su Linux e' stata patchata , togliendo dalla MMU tutte le mappature del kernel e pulendo quindi la cache per tali indirizzi, ovviamente tutto cio' ha un costo ed anche grande.
I software che interagiscono di piu' con il sistema, tipo database management system hanno riportato cali di prestazioni anche del 30%

Non sono affetti invece i processori AMD in quanto non vanno a leggere memoria non consentita dalla modalita' corrente della CPU tramite esecuzione speculativa.


Tagged with: , , ,