in che modo l'attacco del canale laterale della cache della CPU si adatta allo sfondo della vulnerabilità di Meltdown? [duplicare]

1

NOTA: So che ci sono domande simili là fuori, vale a dire questo , ma quella risposta è solo un'estrazione dal documento originale, che non ha chiarito l'attacco. Inoltre, posso vedere dalle risposte che stanno andando alcune discussioni significative, quindi pubblicherò questa domanda fino a quando non verrà visualizzato un ulteriore suggerimento.

In alcune pubblicazioni, ho visto alcune descrizioni vaghe come:

the Meltdown vulnerability uses the cache as a side channel to leak the information found during step two. During the attack, in order to use the cache as a side-channel, the attacker must generate a significant amount of cache misses for every cache-hit, as the timing differences between the cache-miss and the cache-hit is used to gather the data.

Qualcuno può descrivere in che modo esattamente i dati sensibili che l'utente malintenzionato voleva sapere è determinato byte per byte? e in che modo la dimensione della pagina (4096) svolge un ruolo cruciale qui?

    
posta Sajuuk 15.01.2018 - 14:47
fonte

1 risposta

1

C'è un XKCD per questo! .

Una pagina è la più piccola unità di dati per la gestione della memoria in un sistema operativo di memoria virtuale. Ciò significa che quando i dati vengono spostati dentro e fuori dalla cache, vengono spostati in blocchi di almeno 1 pagina.

Nel caso più semplice, supponiamo che l'attaccante sia interessato a un singolo byte di memoria. Diciamo che questo byte è all'indirizzo 0. L'attaccante imposta una matrice lunga 256 pagine. Chiamiamo questo array "page_array". Quindi ingannano il processore per eseguire quanto segue:

1. load address 0 into register[X]
2. load the byte at page_array[PAGE_SIZE * register[x]] into register[y].
   // PAGE_SIZE would usually be 4096

La CPU quindi realizza il suo errore e annulla tutto quanto sopra. Ma nel frattempo la pagina che contiene page_array [PAGE_SIZE * register [x]] è stata recuperata e si trova nella cache. se il valore fosse 1 ti aspetteresti -

  • byte per page_array [da 0 a 4095] è improbabile che si trovino nella cache.
  • byte a page_array [da 4096 a 8191] probabilmente nella cache.
  • byte a page_array [8192+] è improbabile che si trovino nella cache.

Calcolando l'accesso a page_array [PAGE_SIZE * i] per i nell'intervallo compreso tra 0 e 255 le pagine che si caricano più velocemente sono quasi certamente nella cache. La differenza è abbastanza grande che selezionando una soglia appropriata dovresti essere in grado di discernere in modo abbastanza affidabile tra un hit e un miss.

Ripetendo più volte lo stesso processo e adottando misure speciali per svuotare l'array dalla cache prima di indicizzarlo, un attore malintenzionato può raggiungere un punto in cui ha il valore corretto con una probabilità statistica molto elevata.

    
risposta data 15.01.2018 - 16:33
fonte

Leggi altre domande sui tag