Avatar von Nalathni
  • Nalathni

mehr als 1000 Beiträge seit 09.09.2004

Re: Etwas irreführender Artikel

Es wird versucht, den Eindruck zu erwecken, als gäbe es hier echte dauerhafte Buffer-Overflows, und eine Art von Virus könne beliebig in den Speicher Code und Daten schreiben.

Das wird tatsächlich nicht klar beschrieben, finde ich auch.

Wenn ich das verlinkte PDF richtig verstehe, sind es zwei separate neue Ansätze, die Spectre 1.1 und Spectre 1.2 genannt werden.

Obwohl für Spectre 1.1 spekulative Schreibzugriffe verwendet werden, können auf diese Weise über Seitenkanäle wohl tatsächlich nur Information gelesen werden. Im PDF findet sich folgendes einfaches Code-Beispiel:

if (y < lenc) c[y] = z;

Hier erfolgt zwar eindeutig ein Schreibzugriff (anders als im Code-Beispiel direkt darüber, wo der klassische Spectre-1-Angriff illustriert wird, der hier Spectre 1.0 genannt wird). Aber weil y einen zu hohen Wert hat, so dass die Bedingung nicht tatsächlich erfüllt wird, wird dieser vom Prozessor nur spekulativ ausgeführt, führt also zu keiner tatsächlichen Änderung des Speichers, lässt sich aber im Timing-Verhalten auswerten, was indirekte Lesezugriffe erlaubt, wie ja ein paar Zeilen darunter (unter 1.1) auch bestätigt wird:

While this is only a speculative write, which leaves no architecturally-visible effects, it can still lead to information disclosure via side channels.

Soweit hast Du recht. Es handelt sich um spekulative Buffer Overflows, also spekulative Schreibzugriffe, die am Ende unberechtigte Lesezugriffe erlauben.

Anders sieht es mit Spectre 1.2 aus, was im PDF passenderweise unter 1.2 beschrieben wird:

In a Spectre1.2 attack, speculative stores are allowed to overwrite read-only data, code pointers, and code metadata, including vtables, GOT/IAT, and control-flow mitigation metadata.

Da ist explizit von Schreibzugriffen die Rede. Spectre 1.2 soll wohl Ähnlichkeiten zu Meltdown aufweisen:

We introduce Spectre1.2, a minor variant of Spectre-v1 which depends on lazy PTE enforcement, similar to Spectre-v3.

und

Spectre3.0, aka Meltdown [39], relies on lazy enforcement of User/Supervisor protection flags for page-table entries (PTEs).

Ich hätte nun vermutet, dass Systeme, die bereits gegen Meltdown abgesichert sind, indem für User-Prozesse nur Teile des virtuellen Speichers sichtbar sind (auf Kosten der Geschwindigkeit bei Kontextwechseln), auch gegen Spectre 1.2 immun sind, aber das scheint nicht der Fall zu sein:

Fortunately, an effective workaround for Spectre3.0 is to use separate user and supervisor page tables, e.g., kernel page table isolation [13]. Future Intel processors also plan to feature Rogue Data Cache Load (RDCL_NO) protection [29]. However, these approaches do not address Spectre1.2.

Im weiteren Text wird leider fast nur noch auf Spectre 1.1 eingegangen, mit einer bemerkenswerten Ausnahme zu Spectre 1.2:

We have validated this attack on both ARM and Intel x86 processors.

Sind hier x86-Prozessoren von ARM gemeint oder andere ARM-Prozessoren? Dazu hätte ich mir ein paar mehr Informationen gewünscht, genau so wie auf die Frage, warum der Schutz gegen Meltdown für Spectre 1.2 nicht wirksam sein soll.

Bewerten
- +
Anzeige