Meltdown and Patch

 

Per Approfondire un po l’argomento relativamente Meltdown dobbiamo pensare a come funzionano le CPU di nuova concezione, la forbice relativa al problema si estende ai prodotti degli ultimi 20 anni. ( praticamente l’intero parco macchine acceso )

Approfondire, per capire come e perchè gli eventuali workaround hanno impatto sulle performance dei nostri processori , al di la delle comunicazioni dei fornitori occorre farsi un idea personale e saperne un po di più prima di intraprendere qualsiasi operazione correttiva , e come questa si potrà comportare nel nostro ambiente.

Il problema sembra molto grave da molti definito catastrofico, questo perchè il tutto è legato all’architettura per come è stata progettata , pertanto è il design strutturale la causa stessa del problema.

i maggiori produttori di sistemi operativi , Microsoft , Linux , Apple e VMware hanno rilasciato delle patch per inibire l’uso di codice malevolo.

Ma a quale prezzo ?

Possiamo rappresentare le CPU con 2 componenti fondamentali

Execution Unit ALU
Registers

L’execution unit è la parte centrale della CPU ALU ( Arithmentic Logic Unit ) praticamente questa componente è costantemente coinvolta durante l’uso del computer e dei suoi programmi.

In aggiunta a questa componente , per funzionare il processore ha bisogno dei Registers che servono per allocare dati temporaneamente .

Queste aree vengono utilizzate per manipolare i dati prima che questi vengano copiati nella memoria (RAM) e fare economia nel dialogo CPU RAM

Le cpu multicore sono in grado di eseguire operazioni parallele queste operazioni parallele possono essere eseguite appunto contemporaneamente , quando un programma è in esecuzione il processore utilizza le pipeline e le riempie con le operazioni possibili che il programma ancora deve richiedere, ad esempio:

se A è vero esegui la funzione X
se A è falso esegui la funzione Y

vengono elaborate entrambe, e quando il programma avrà deciso , l’operazione è stata già svolta, a questo punto viene presa la buona ed invalidata quella non necessaria .

In questo modo il processore aumenta le sue performance anticipando e parallelizzando le operazioni possibili.

L’altra componente impattata è quella relativa alla cache , come sappiamo l’accesso alla ram è molto oneroso in termini di tempo nell’ordine dei 100 – 200 nano secondi , per questo sono state implementate piccole quantità di memoria ( Cache ) all’interno delle cpu dove vengono memorizzate queste operazioni speculative l’accesso alle quali è molto veloce , e per le quali non è necessaria l’attesa per l’accesso alla memoria centrale RAM.

Queste funzioni mettono a rischio la sicurezza delle informazioni perchè sono accessibili in lettura eseguendo codice malevolo , che poi non fa altro che sfruttare funzioni disponibili.

Queste problematiche come abbiamo detto esistono a livello hardware per questo non può esserci una soluzione o una patch per correggere il problema totalmente.

L’unico modo sarebbe sostituire la CPU con un tipo nuovo ridisegnato.

Tuttavia sono state rilasciate dell patch che sono di fatto dei workaround per mitigare il problema.

Queste patch non fanno altro che cambiare o disabilitare l’esecuzione speculativa , questa funzione era stata disegnata per aumentare le performance in questo modo non è possibile utilizzarla , tuttavia ancora non abbiamo un riscontro abbastanza garantito su come si comportano le CPU senza questa caratteristica .

Molti segnalano cali di prestazioni intorno al 30 % ma sembra che tipicamente l’ordine più comune si estende tra il 5 ed il 10 %.

Senza questa funzionalità dobbiamo pensare che se abbiamo una memoria con una latenza di 100 nano secondi e abbiamo una cpu con un clock rate di 1ghz , ogni esecuzione richiede un nano secondo .

quindi abbiamo un nano secondo ad esecuzione e 100 nano secondi per accedere alla memoria principale

Se ad esempio utilizziamo un semplice constructo in C possiamo vedere come funzionano questi registri.

int C = a + b

Ciclo Clock 01
1 Load Register1 da Memory Location A
2 // attesa 100 cicli di clock per l’accesso alla memoria

Ciclo Clock 102
1 Load Register1 da Memory Location B
2 // attesa 100 cicli di clock per l’accesso alla memoria

Ciclo Clock 203
1 Register 3 = Add ( Register1 , Register 2)
2 // nessun accesso alla memoria nessuna attesa

Ciclo Clock 204
1 Store Register 2 dentro Memory Location C
2 // attesa 100 cicli di clock per l’accesso alla memoria

Ciclo Clock 305 nuova istruzione

Se invece questo codice viene eseguito utilizzando le funzioni speculative può essere eseguito eseguito in Three-Stage Pipeline

 

 

in modo contemporaneo , quindi 3 istruzioni vengono eseguite parallelamente riducendo il numero dei cicli di clock e l’accesso alla memoria che risulta la componente più onerosa .

Nei prossimi giorni valuteremo l’impatto su SQL Server

Allego un documento tecnico dove nel dettaglio è spiegata la problematica

https://meltdownattack.com/meltdown.pdf

Quirino Scaramastra

website http://www.securzone.it/

 

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...