Dopo aver studiato attentamente tutte le risposte molto utili e aver ordinato tutte le informazioni che ho raccolto, faccio qui un veloce riassunto delle conoscenze che ho ottenuto e che mi sono state di aiuto come risposta soddisfacente.
Prima di tutto sono molto grato al commento di @ cort-ammon:
"The key concept is that no chip is obliged to precisely execute code according to the instructions. The obligation is instead that it must execute "as if" the code was precisely executed according to the instructions. All modern processors take advantage of this freedom."
Questo concetto è davvero necessario per capire perché tutte queste caratteristiche della CPU (come Branch Target Prediction, Speculative Execution e così via) sono state implementate in primo luogo e perché rimangono ugualmente valide (e ora sappiamo: come pericoloso!) come sempre.
Ora come per la domanda:
- cosa avrebbe impedito l'accesso a quella zona di memoria in una normale esecuzione se il codice avrebbe cercato di farlo in modo esplicito?
Niente (come sottolineato da @immibis & @ gnasher729!):
perché questa versione della vulnerabilità di Spectre consente solo di leggere i dati a cui il processore ha accesso.
Non c'è differenza nel codice, ad esempio, una lettura da un overflow del buffer all'interno dello stesso spazio di memoria del processo ( Vedi ad esempio questo codice ).
Cioè: il codice indicato nella domanda viene estratto da Variante 1: Limiti controllo bypass , in cui il generico Viene mostrato Proof of Concept (PoC) .
Questo PoC viene utilizzato in vari modi: per utilizzare il codice in Variante 1 per attaccare il kernel, è necessario l'accesso a un interprete bytecode eBPF , in modo che "Il codice di spazio utente non privilegiato può fornire codice bytecode al kernel" . Questo è il comportamento caratteristico (!) Di eBPF (" esteso Berkeley Packet Filter ", una funzione programmabile dei kernel Linux) che l'attacco fa pieno uso di: in questo modo l'attacco passa inalterato al kernel, dove può leggere le posizioni di memoria che non dovrebbe (saranno fuori dalla sua memoria riservata, ma nello stesso spazio di processo) senza attivare alcun allarme - e non sarebbe nemmeno se il codice fosse esaminato dal compilatore eBPF (e non lo fosse), perché non viene effettuata alcuna lettura diretta della memoria fuori dai limiti.
Ma il PoC può anche essere usato in Variante 2: Iniezione target del ramo in cui, con altri trucchi, costringe la CPU a eseguire salti diretti in un'esecuzione di altri processi speculata erroneamente per ottenere l'accesso in lettura a posizioni di memoria virtuali arbitrarie.
Questo attacco sfrutta appieno il fatto che alcune Branch Target Buffer (BTB) di alcune CPU (almeno Intel Haswell Xeon) utilizza solo una parte dell'intero indirizzo di memoria per memorizzare le informazioni di previsione dei rami. Questo fa parte del fatto che porta all'abilità (attacco) di un processo di influenzare il predittore del target di Branch per un altro processo completamente diverso, bypassando così le protezioni userspace / kernel (e altre).
E ora capisco dove questo indirizzo di memoria parziale BTB si adatta nella risposta che ho indicato nella mia domanda, che ha dichiarato che al fine di proteggere una CPU dagli attacchi Spectre:
"Branch predictor state must take the full address of the branch instruction into account (currently, to save space, only the low-order bits are used)." (@Mark)
Per quanto riguarda la seconda domanda:
- non sarebbero i controlli (se la risposta alla prima domanda è che sono necessari controlli aggiuntivi) o che l'impatto del "flushing" nelle prestazioni? e se è così, è stato stimato quanto? (quando quelle presunte CPU sarebbero / saranno fatte).
ora che sono a conoscenza degli interni di questi attacchi, e anche degli interni delle ottimizzazioni della CPU (BTB, exec speculativo ...) la domanda mi sembra meno imperativa: i progettisti di CPU cercheranno di mantenere l'equilibrio tra performance e sicurezza ... potrebbe essere solo che la sicurezza non era in questo equilibrio prima che questi attacchi venissero resi pubblici (anche se gli attacchi sul canale laterale molto promettenti erano già noti ... ma questa è un'altra storia).
Ad esempio, come (di nuovo) @ punti cort-ammon:
"For example, I'm certain there's an Intel designer looking right now at whether the next generation CPUs can un-evict cache lines if a speculative read falls though to get them one step closer to "as if.""
Grazie ancora per tutte le risposte.