www.heise.de/newsticker/meldung/...rity-Supergau-3935124.html....Am einfachsten kann man das Problem bei der sogenannten
Meltdown-Attacke erkennen. Diese nutzt zwei Dinge aus: eine Spezialität der Intel-Prozessoren und eine der üblichen Betriebssysteme wie Linux, Windows, macOS...
Aus Performancegründen mappen diese den Adressraum des Kernels und darüber hinaus den des ganzen (sichtbaren) physischen Speichers in der Seitentabelle jedes User-Prozesses, wenn auch geschützt mit einem Supervisor-Bit, so dass der User-Prozess selbst darauf nicht zugreifen kann. Wenn also ein Befehl wie
MOV AL,[RCX] auf eine Kerneladresse zugreift, gibt es eine Exception – doch die dauert. Die Zeit kann man noch verlängern, wenn man vorher dafür sorgt, dass die Seitentabelle nicht im Cache residiert und/oder der TLB zuvor gelöscht wird.
Bis der Prozessor erkannt hat, dass er auf eine verbotene Adresse zugreift,
hat er jedenfalls bei den Intel-Prozessoren schon mal AL von eben dieser verbotenen Adresse geladen. Und in der Zwischenzeit kann man transiente Befehle ausführen, die abhängig vom Wert in AL das Cache-Layout ändern. Wie man dieses Cache-Layout dann real auslesen kann, also welche Adressen dort gespeichert sind – dazu gibt es schon seit vielen Jahren bewährte Algorithmen wie Flush-Reload (falls ein clflush-Befehl existiert) oder Evict-Reload (falls nicht), die alle eine möglichst präzise Zeitmessung benötigen. Über diesen
„covert Channel“ morst man also ein paar Bits aus der Innenwelt des Prozessors nach draußen. Die Exception selbst fängt man mit den üblichen Exception-Handlern ab und wiederholt dann die ganze Prozedur Adresse für Adresse. Das dauert zwar etwas, aber die Meltdown-Autoren kamen immerhin auf über 500 KByte/s Daten von beliebigen physikalischen Adressen. Okay, so ein paar Stunden braucht man dann schon...
Zuweilen schafften es die Intel-Prozessoren aber, den Registerinhalt von AL zu löschen, bevor dieser transient in ein Cache-Muster übersetzt wird. Falls die Meltdown-Software Null liest, wiederholt sie den Vorgang einfach ein paar Mal...