Quali "attacchi temporali" potrebbero eseguire i siti Web utilizzando le ultime date di modifica dei file?

5

Il link descrive la proprietà .lastModified di un oggetto File in JavaScript (in genere creato quando un utente seleziona un file tramite un elemento <input type="file"> HTML, JavaScript in-browser fornito da una pagina Web ovviamente non ha accesso illimitato al file system dell'utente!)

I documenti contengono la seguente osservazione di sicurezza criptica:

To offer protection against timing attacks and fingerprinting, the precision of someFile.lastModified might get rounded depending on browser settings. In Firefox, the privacy.reduceTimerPrecision preference is enabled by default and defaults to 20us in Firefox 59; in 60 it will be 2ms.

A un vero tratto posso vedere come, ipoteticamente, le date di modifica dei file potrebbero essere utilizzate per fingerprinting : se riesci a far selezionare a un utente lo stesso file in una finestra di dialogo <input type="file"> su più siti, e memorizzi la data esatta di modifica del file al microsecondo, quindi puoi fare un riferimento incrociato e notare che, voilà, è lo stesso utente (anche se questo sembra uno scenario inverosimilmente inverosimile!). Ma sono totalmente dispiaciuto per immaginare quali "attacchi temporali" potrebbero proteggere da questo arrotondamento.

Quali sono gli attacchi che questa funzione dovrebbe effettivamente prevenire?

    
posta Mark Amery 16.04.2018 - 16:25
fonte

2 risposte

2

Non penso che ci sia un attacco a tempo specifico contro File.lastModified . Penso che la precisione ridotta dell'ultimo campo modificato sia un effetto di attenuazione per tutti i tipi di attacchi di temporizzazione.

Spectre / Meltdown erano sfruttabili da JavaScript , programmando certe dichiarazioni. Per questo, avresti bisogno di un tempismo di alta precisione. Per risolvere questo problema, Mozilla ha ridotto la precisione del timer con privacy.reduceTimerPrecision . Questo deve influenzare tutti i timer: se someFile.lastModified è più preciso di new Date() o qualche altro timer, puoi creare un timer preciso cambiando un file e poi guardando lastModified .

    
risposta data 16.04.2018 - 16:51
fonte
0

Hai ragione: è una protezione contro le impronte digitali.

Ciò non richiederebbe alcuna interazione da parte dell'utente, dal momento che è possibile creare file fittizi tramite JavaScript:

const file = new File([], 'foo.bar');
console.log(file.lastModified);

Se non si specifica l'ultima data di modifica, il valore predefinito sarà Date.now() .

Poiché Date.now doveva essere limitato per impedire attacchi di impronte digitali (vedi bug # 1217238 ), i documenti devono riflettere questo comportamento per gli sviluppatori.

    
risposta data 16.04.2018 - 17:21
fonte

Leggi altre domande sui tag