it-swarm.com.de

Wie kann SharedArrayBuffer zum Timing von Angriffen verwendet werden?

Da diese neue Klasse von Angriffen das Messen präziser Zeitintervalle umfasst, deaktivieren oder reduzieren wir als teilweise kurzfristige Abschwächung die Genauigkeit mehrerer Zeitquellen in Firefox. Die Genauigkeit von performance.now () wurde von 5 μs auf 20 μs reduziert, und die SharedArrayBuffer-Funktion wurde deaktiviert, da damit ein hochauflösender Timer erstellt werden kann.

Mozilla Foundation Security Advisory 2018-01

Wie kann SharedArrayBuffer verwendet werden, um einen hochauflösenden Timer zu erstellen? Ist es nicht nur ein Puffer mit speziellen Regeln, die es ihm ermöglichen, direkt an einen anderen Kontext übergeben zu werden, anstatt ihn zu klonen ?

20
curiousdannii

SharedArrayBuffer ermöglicht es zwei Threads, den Status gemeinsam zu nutzen, sodass einer als "Takt" (Inkrementieren des Zeitsignals) arbeiten und der andere den "Takt" lesen kann. Darüber hinaus ermöglicht die Verfügbarkeit des Objekts Atomics das Ausführen von Operationen am SharedArrayBuffer auf eine Weise, die das Inkrementieren effizient macht und vom Lesethread ohne das Risiko von gesehen werden kann eine Rennbedingung.

Dieser Timer ist zwar nur in Einheiten von "wie schnell der andere Thread inkrementiert" und nicht in "Sekunden" angegeben, aber für Timing-Angriffe sind die interessanten Daten für einen Angreifer relativ Timing. Wenn Sie wissen, dass eine bestimmte Cache-Zeile (im Fall von Spectre) schneller als andere geladen wird, wird sie von der CPU vorgespeichert. Gleiches gilt für Timing-Angriffe auf Dinge wie Passwortvergleiche (korrekte Zeichen dauern etwas länger als falsche Zeichen).

Es wäre möglich, eine schnelle Zeitschleife gegen eine bekannte Taktreferenz (dh von performance.now ()) zu kalibrieren, um eine Durchschnitt Zeit pro Inkrement zu erhalten, aber es würde immer noch einen kleinen Jitter geben .

19
David