Come può essere usato SharedArrayBuffer per gli attacchi di temporizzazione?

16

Since this new class of attacks involves measuring precise time intervals, as a partial, short-term, mitigation we are disabling or reducing the precision of several time sources in Firefox. The precision of performance.now() has been reduced from 5μs to 20μs, and the SharedArrayBuffer feature has been disabled because it can be used to construct a high-resolution timer.

Mozilla Foundation Security Advisory 2018-01

Come si può usare SharedArrayBuffer per costruire un timer ad alta risoluzione? Non è solo un buffer con regole speciali che gli permettono di essere direttamente passato a un altro contesto invece di clonarlo ?

    
posta curiousdannii 08.01.2018 - 06:32
fonte

1 risposta

16

SharedArrayBuffer consente a due thread di condividere lo stato, quindi si può operare come un "orologio" (incrementando il segnale di temporizzazione) e l'altro può leggere "l'orologio". Inoltre, la disponibilità dell'oggetto Atomics consente di eseguire operazioni su il SharedArrayBuffer in un modo che rende efficiente l'incremento e può essere visto dal thread di lettura senza il rischio di una condizione di competizione.

Questo timer è, ammettiamolo, solo in unità di "quanto velocemente l'altro thread incrementa" e non "secondi", ma per gli attacchi temporali, i dati interessanti per un utente malintenzionato sono i tempi relativi . Sapendo che una determinata linea di cache (nel caso di Spectre) si carica più velocemente di altre rivela che è stata precaricata dalla CPU. Lo stesso vale per gli attacchi temporali su cose come il confronto delle password (i caratteri corretti prendono proporzioni più lunghe dei caratteri errati).

Sarebbe possibile calibrare un ciclo di temporizzazione veloce contro un riferimento di clock noto (ad esempio, da performance.now ()) per ottenere un tempo medio per incremento, ma ci sarebbe ancora qualche piccolo jitter.

    
risposta data 08.01.2018 - 06:42
fonte

Leggi altre domande sui tag