In che modo il canale laterale accede effettivamente ai contenuti della memoria del kernel in Meltdown?

2

Nel documento Meltdown si menziona che può identificare l'indirizzo di memoria del kernel a cui si accede. La parte che non capisco è come il canale FLUSH + RELOAD lavori per identificare quale sia il contenuto dell'indirizzo di memoria nelle linee della cache L1. Come identifica i contenuti?

    
posta Dale 11.01.2018 - 13:36
fonte

2 risposte

3

La parte del documento a cui sei interessato è:

Based on the value of data in this toy example, a different part of the cache is accessed when executing the memory access out of order. As data is multiplied by 4096, data accesses to probe array are scattered over the array with a distance of 4 kB (assuming an 1 B data type for probe array). Thus, there is an injective mapping from the value of data to a memory page, i.e. , there are no two different values of data which result in an access to the same page. Consequently, if a cache line of a page is cached, we know the value of data . The spreading over different pages eliminates false positives due to the prefetcher, as the prefetcher cannot access data across page boundaries [14].

Inoltre, 5.1 passo 2.

In poche parole, il valore dei dati che si desidera conoscere è determinato byte per byte. Il valore sconosciuto viene moltiplicato per la dimensione della pagina, quindi ogni diverso valore di byte possibile innesca il caricamento di una pagina diversa.

Quindi puoi misurare quale pagina è stata caricata usando il metodo FLUSH + RELOAD.

    
risposta data 11.01.2018 - 16:23
fonte
3
  1. L'attaccante chiede alla CPU di fare qualcosa che richiede molto tempo, come un complicato calcolo matematico. L'esecuzione reale si blocca, quindi le prossime centinaia di istruzioni vengono eseguite in modo speculativo, senza modifiche allo stato della CPU visibile all'utente fino a quando l'istruzione complicata non è terminata.
  2. L'esecuzione speculativa viene utilizzata per leggere un valore di memoria protetto in un registro della CPU. I dati vengono inseriti nella cache e in un registro di esecuzione speculativa, nessuno dei quali può essere letto dall'attaccante.
  3. Ancora eseguendo il codice speculativamente, il valore letto viene quindi utilizzato per selezionare un indirizzo in una parte della memoria che l'utente malintenzionato è autorizzato a leggere e leggere da quello. I dati tornano nuovamente nella cache e un registro di esecuzione speculativa.
  4. L'istruzione di stallo della CPU termina l'esecuzione, e la CPU si rende conto di aver sbagliato su quali istruzioni sarebbero state eseguite dopo lo stallo. Tutti i risultati di esecuzione speculativa vengono gettati via, anche se le modifiche a ciò che è memorizzato nella cache non lo sono.
  5. Parte della memoria accessibile all'attacker è ora memorizzata nella cache dei dati. La lettura da quella posizione sarà più veloce della lettura da qualsiasi altra posizione e l'attaccante può calcolare all'indietro per capire quale deve essere il valore protetto in modo che l'esecuzione speculativa abbia letto quella posizione.

Ricorda che la modifica della cache non è l'unico canale laterale possibile per Meltdown, è solo quello con il miglior rapporto segnale-rumore.

    
risposta data 11.01.2018 - 22:58
fonte

Leggi altre domande sui tag