@MK one :
Ich bezweifle das das was hier als Spectre 1.2 beschrieben wird in der Weise auf AMD funktioniert (bzw. gut genug funktioniert)
1.2 Spectre1.2: Read-only Protection Bypass:
Spectre3.0, aka Meltdown [39], relies on lazy enforcement of User/Supervisor protection flags for page-table entries (PTEs). The same mechanism can also be used to bypass the Read/Write PTE flags.We introduce Spectre1.2, a minor variant of Spectre-v1 which depends on lazy PTE enforcement, similar to Spectre-v3.
Da Meltdown auf AMD CPUs wegen der Überprüfung eines zusätzlichen Bits nicht zum tragen kommt:
Siehe:
Meltdown could be considered a design flaw in the OS, but it was really a team effort between the hardware and software. The Intel hardware does maintain zero-order protection across protection domains, but fails to prevent speculative execution from using protected data to make reliably detectable changes in the cache state. This provides a high-bandwidth covert channel for reading protected data. AMD was right to block this case before execution (since there is no case in which the memory access would be allowed to complete, allowing it to execute speculatively provides no benefits). Ironically, Intel's TSX extensions provide a large increase in the throughput of the Meltdown attack, as well as eliminating the exceptions that could be monitored by the OS.
Frei das Fett markierte übersetzt: " Intel Hardware macht zwar eine grundsätzliche Prüfung über das Überschreiten von Schutz-Domänen (Stichwort Ring0, 1 usw) aber lässt speculative Exekution geschützter Daten zu die nachweisbare Veränderungen der Caches zustände auslösen...
Dies erlaubt einen hoch-bandbreitigen verdeckten Kanal zum Daten auslesen.
AMD hat Recht gehabt diesen Fall vor der Ausführung zu blocken (da es keinen einzigen Fall gibt in welchem ein erlaubter Speicherzugriff abgeschlossen sein könnte, würde auch die Erlaubnis diesen Spekulativ auszuführen keinen Vorteil haben). Ironischerweise erlauben Intels TSX Erweiterungen einen hohe Steigerung im Durchsatz der Meltdown attacke...
Weiter unten führt er dann nochmal genauer aus:
"The Meltdown exploit requires that (1) the user process page tables include the kernel page tables, and (2) speculative memory accesses from user space to kernel pages are allowed to execute (returning data to the core and allowing dependent speculative instructions to execute using the *value* loaded from the kernel address).
This can be fixed by changing either (1) or (2). AMD prohibits (2), by refraining from executing loads speculatively if the code is currently operating in user space and the Page Table Entry for the target address has the kernel attribute set. Contrary to some comments, this is not hard to detect -- it requires comparing one bit of the current processor execution mode and one bit from the Page Table Entry that had to be present to perform the address translation and access checking for the memory reference. "
Frei übersetzt:
Meltdown verlangt (1) dass eine User Prozess Page Table die Kernel Pages tables enthält und (2) den Spekulative Speicherzugriff aus dem User space auf Kernel Seiten erlaubt zur Ausführung sind (also das zurückbringen von Datem aus dem Kern und das Erlauben davon abhängiger spekulativer Befehle unter Benutzung des Wertes der aus der Kernel Adresse geladen wird).
Dies kann verhindert/gefixed werden entweder durch Veränderung der Bedingung (1) oder (2).
AMD verbietet Fall (2) - spekulative Loads werden an der Ausführung gehindert/zurückgehalten FALLS der Code der gerade in Ausführung ist im User Space operiert UND der Page Table Eintrag für die Adresse das Kernel attribut trägt.
Im Gegenteil zu manchen Kommentaren ist dies nicht schwer zu prüfen. Es erfordert nur die Prüfung eines Bits des aktuellen CPU Ausführungs Modes mit einem Bit aus dem Page Table Eintrag welcher VORHANDEN SEIN MUSS für die Adress Übersetzung und die Zugriffsprüung für die Speicher-Referenz.
Da oben von "The same mechanism..." gesprochen wird gehe ich davon aus das Intel hier mal wieder nicht die Berechtigungs-Bits prüft....
Spectre 1.2 wird wohl also dann nur Intel und manche ARM CPUs treffen - wie Meltdown (=Spectre v3 bei den Autoren dieses Papers).
EDIT: Weiter unten wird McAlpin noch deutlicher:
"The speculative read is a good optimization feature -- unless it can be proven that it can never be successful! This is the benefit of the AMD implementation. The core knows what mode it is operating in (user or kernel), and the Page Table Entry has a bit that says that user-mode access is not allowed. Since the core needs to read the Page Table Entry to get the Physical Address, it is guaranteed that this information is available to the core before the L1 Data Cache tags can be queried. I would say that there is not much excuse for speculatively executing the read in this case. "
Frei übersetzt: Der Spekulative Read ist ein Gutes Optimierungsfeature - sofern man nicht belegen kann dass er nie erfolgreich sein wird ! Dies ist der Vorteil der AMD Implementierung. Der Kern weiss in welchem Modus er operiert (User oder Kernel) und der Page Tabel Eintrag hat ein Bit dass sagt user-mode Zugriff ist verboten. Da der Kern den Page Tabel Eintrag lesen muss um die Physikalische Adresse zu erhalten ist eigentlich garantiert dass diese Information der CPU verfügbar ist BEVOR diese den L1 Data cache abfrägt. Ich würde sagen es gibt eigentlich keine Entschuldigung dafür solche Befehle dennoch Spekulativ Auszuführen.
Zuletzt bearbeitet: