Ja Spectre kann die Grenzen von Host / Gast, Gast / Host und Gast / Gast überschreiten, da dies ein Fehler auf CPU-Ebene ist, der bedeutet, dass potenziell vertrauliche Informationen über alles hinweg übertragen werden können, was auf einem CPU-Kern ausgeführt wird.
In den meisten Nachrichten im Internet wird davon gesprochen, dass die Cloud-Anbieter am stärksten davon betroffen sind, da es sich um massive Cluster von Systemen handelt, die virtualisiert sind und möglicherweise missbraucht werden, um vertrauliche Informationen zu verlieren.
Die meisten großen Anbieter hätten jetzt, so gut sie können, gegen die Fehler geflickt werden müssen, aber dies wird ein Problem sein, das uns noch einige Zeit beschäftigen wird.
Security.SE hat diesbezüglich ein kanonisches Q & A und erwähnt VMs:
Ich verwende eine virtuelle Maschine / Container. Inwieweit bin ich anfällig?
Nach Steffen Ullrichs Antwort
- Meltdown-Angriffe kreuzen keine VMs, sondern leiten nur Kernel-Speicher an lokale Prozesse ab.
- Spectre kann über mehrere VMs hinweg arbeiten.
Auch von Steffen aus arbeiten Meltdown und Spectre mit Containern, da Container auf den Host-Kernel angewiesen sind.
VMs verwenden die tatsächliche CPU in Ihrem System, wobei einige privilegierte Anweisungen abgefangen und umgeleitet werden können. Es verwendet dieselben Caches und Anweisungen wie der Host. Es ist im Wesentlichen nur eine weitere Schicht innerhalb der physischen CPU in Ihrem System.
Die Virtualisierung ist nur schnell, weil die physische CPU so wenig wie möglich abstrahiert wird und die CPU-Hardware für die Isolierung sorgt. Dinge wie qemu können Emulationen ausführen, die sicherer wären, da es sich nicht um eine Hardware-CPU handelt, aber sie ist viel langsamer und unterscheidet sich von der Virtualisierung.
Nochmals aus dem kanonischen Eintrag von Security.se :
Spectre arbeitet auf einer anderen Ebene und erlaubt keinen Zugriff auf Kernel-Space-Daten aus dem User-Space. Bei diesem Angriff täuscht der Angreifer die spekulative Ausführung vor, um Anweisungen fälschlicherweise vorhersagend auszuführen. Kurz gesagt, der Prädiktor wird gezwungen, ein bestimmtes Verzweigungsergebnis vorherzusagen (wenn -> wahr), das dazu führt, dass ein Speicherzugriff außerhalb der Grenzen angefordert wird, den der Opferprozess normalerweise nicht angefordert hätte, was zu einer inkorrekten spekulativen Ausführung führt. Ruft dann über den Seitenkanal den Wert dieses Speichers ab. Auf diese Weise wird der zum Opferprozess gehörende Speicher an den böswilligen Prozess übertragen.
Da die VM in der tatsächlichen CPU-Hardware ausgeführt wird und nur eine bestimmte Schleife ausgeführt werden muss, um die spekulative Ausführungsengine zu "trainieren". Dann kann es das genaue Timing verwenden, um die Caches auf bestimmte Zugriffsmuster zu überwachen, die auf den Host- oder Gastprozess (oder einen anderen VM-Prozess) hinweisen, den es ausnutzen möchte.
Auf diese Weise ist eine Maschine in alle Richtungen nutzbar. Von Host zu VM, von VM zu Host und von VM zu VM.
Ja, das ist keineswegs einfach und schwierig, da sich der VM-CPU-Kern nach Belieben des Hosts ändern und der Host auch gerne Aufgaben auf verschiedenen Kernen planen könnte, aber über einen langen Zeitraum genug Informationen könnte durchgesickert sein, um einen geheimen Schlüssel für ein wichtiges System oder Konto preiszugeben. Bei genügend Zeit und einer entsprechend vertraulichen Software ist möglicherweise alles offen.
Wenn Sie eine "sichere" VM wünschen, müssen Sie sicherstellen, dass die Kerne isoliert sind. Die einzige wirkliche Möglichkeit, diesen Angriff zu blockieren, besteht darin, den Host und die VMs zu "zwingen", nur bestimmte Kerne zu verwenden, damit sie niemals auf derselben Hardware ausgeführt werden haben so viele VMs auf einem bestimmten Host. Sie könnten niemals mehr VMs ausführen, als Kerne zur Verfügung stehen. Dies würde ich auf Servern mit geringer Auslastung erwarten, da viele Systeme 90% ihrer Lebensdauer im Leerlauf verbringen.