Microsoft führt Retpoline als Schutz vor Spectre 2-Angriffen in Windows 10 (ab Version 1809) ein. Bisher ist der betreffende Schutz auf Windows 10-Clients aber deaktiviert. Besitzer von Windows 10 V1809 können aber schon jetzt mittels Registrierungseingriffen den Retpoline-Spectre 2-Schutz manuell aktivieren.
Anzeige
Zum Hintergrund von Retpoline
Retpoline (Return Trampoline) ist eine von Google entwickelte Compiler-Technologie, um ausführbaren Code gegen Seitenkanalangriffe (Spectre) per branch-target-injection zu schützen. Gegenüber Microcode-Updates, die zu einer Leistungseinbuße führen und nur prozessorspezifisch angeboten werden können, vermeidet Retpoline als Compiler-Technologie diese Leistungseinbußen. Ich hatte bereits im Januar 2018 den Artikel Meltdown/Spectre: Google patcht Cloud ohne Leistungsverlust zu diesem Thema veröffentlicht.
Während die Linux-Entwickler diese Technologie zügig in den Kernel übernahmen, setzte Microsoft auf Microcode-Updates. Erst ab Windows 10 19H1 kommt Retpoline im Windows-Kernel als Schutz gegen Spectre V2-Angriffe zum Einsatz. Ich hatte im Herbst 2018 im Artikel Windows 10 19H1: Spectre V2-Schutz per Retpoline darüber berichtet. Dort ist auch die Bestätigung von Microsofts Mehmet Iyigun vom Windows/Azure Kernel Team nachlesbar.
Da Retpoline eine Leistungsoptimierung für die Spectre Variant 2-Schwachstelle ist, erfordert es, dass Hardware- und Betriebssystemunterstützung für die Branch Target Injection vorhanden und aktiviert sind. Skylake und spätere Generationen von Intel-Prozessoren sind nicht mit Retpoline kompatibel. Auf diesen Prozessoren wird laut Microsoft nur die Import-Optimierung aktiviert. Dies ist eine spezielle Technik von Microsoft, die den Overhead bei Kernel-Aufrufen minimieren soll. Details, welche Anforderungen an Windows-Maschinen gestellt werden (z.B. Prozessoren), finden sich in diesem Dokument).
Retpoline-Backport für ältere Windows 10-Versionen
Microsoft wird in den kommenden Monaten die Retpoline-Technologie auf ältere Windows 10-Versionen zurück portieren. Den Anfang hat Microsoft mit dem am 1. März 2019 veröffentlichten Update KB44828887 für Windows 10 Version 1809 gemacht. Im Blog-Beitrag Windows 10 V1809: Update KB4482887 (01.03.2019) findet sich der entsprechende Hinweis:
Enables "Retpoline" for Windows on certain devices, which may improve performance of Spectre variant 2 mitigations (CVE-2017-5715).
Im Blog-Beitrag Mitigating Spectre variant 2 with Retpoline on Windows hatte Microsoft bereits Anfang Dezember 2018 einige Informationen zum Thema Retpoline und Windows 10 veröffentlicht (siehe auch meinen Blog-Beitrag Neue SplitSpectre-Methode, Windows Retpoline Spectre-Schutz). Dieser Microsoft Blog-Beitrag wurde die letzten Tage um neue Informationen erweitert.
Anzeige
Am 1. März 2019 teilte Microsoft mit, dass man die für die Unterstützung von Retpoline erforderlichen Betriebssystemänderungen zurückportiert habe. So kann Retpoline im Kernel von Windows 10 Version 1809 verwendet werden. Diese Änderungen wurden mit dem Update KB44828887 vom 1. März 2019 eingeführt. Aufgrund der Komplexität der Implementierung und der damit verbundenen Änderungen will Microsoft Retpoline und die damit verbundenen Leistungsvorteile nur für Windows 10, Version 1809 und spätere Releases aktivieren.
Zudem ist Retpoline laut Microsoft derzeit sowieso standardmäßig auf Windows 10-Clientgeräten deaktiviert. Microsoft gibt an, dass man Retpoline aber im Rahmen eines schrittweisen Rollouts über die Cloud-Konfiguration in den kommenden Monaten aktivieren will. Wann ein Windows 10-Client die Retpoline-Aktivierung erhält, wird durch Microsoft bestimmt.
Manuelle Retpoline-Freigabe während des Rollouts
In einem Nachtrag zum 5. März 2019 gibt Microsofts Mehmet Iyigun vom Windows/Azure Kernel Team nun Hinweise, wie Nutzer Retpoline durch einen Registrierungseingriff während der Rollout-Phase gezielt manuell freigeben können.
Auf Windows 10 V1809-Clients sind folgende Befehle in einer administrativen Eingabeaufforderung auszuführen, um Retpoline zu aktivieren.
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 0x400
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 0x400
Danach ist die Maschine neu zu starten. Auf Windows Server 2019 sind dagegen folgende folgende Befehle einzugeben:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 0x400
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 0x401
Auch hier ist die Maschine im Anschluss neu zu starten. Ob Retpoline aktiviert ist, lässt sich mit dem PowerShell-Befehl:
Get-SpeculationControlSettings
abfragen (die benötigten Hintergrundinformationen finden sich in diesem Microsoft-Artikel).
Ähnliche Artikel:
Windows 10 19H1: Spectre V2-Schutz per Retpoline
Neue SplitSpectre-Methode, Windows Retpoline Spectre-Schutz
Windows 10 V1809: Update KB4482887 (01.03.2019)
Anzeige
Sind damit die alten Settings überholt?
https://support.microsoft.com/en-us/help/4072698/windows-server-speculative-execution-side-channel-vulnerabilities-prot
Danach sollte man bei Intel-CPUs FeatureSettingsOverride auf 0 und FeatureSettingsOverrideMask auf 3 setzen. Bei AMD sollte ersteres auf 64 gestellt werden. Und wenn HyperV zum Einsatz kam, noch einen anderen Regkey.
Ich kenne diverse Umgebungen, wo das per GPO so verteilt wird. Jetzt sind wir schon soweit, dass bei der GPO eigentlich eine Fallunterscheidung gemacht werden müsste, Intel, AMD, Workstation, Server, HyperV, 1809 mit KB44828887 oder 1903, um jeder CPU im Netz per GPO den passenden Schutz zu geben.
+1
Günter, passe die Befehle mal an. Mehmet hat sie nicht korrekt geschrieben.
https://www.deskmodder.de/blog/2019/03/05/retpoline-unter-windows-10-selbst-aktivieren/
Stimmt, die Reg-Pfade sollten in "…" stehen – danke. Hab die Anweisungen auch mal in pre-Tags gekapselt, um die Zeilenumbrüche durch WordPress zu verhindern.
Kann ich nicht empfehlen, da man mit diesen regkeys ggf. Andere parameter wieder deaktiviert. Wie schon bei SSB
Vielleicht kann man die ja addieren, schließlich representieren die bitweise Schalter um einzelne Patches ein und auszuschalten.
Einfachster Fall, Intel-CPU, Spectre und Meltdown, so wie es von MS seit letztem Jahr empfohlen wird:
FeatureSettingsOverride sollte auf
% 0000 0000 0000 0000 0000 0000 0000 0000 (0)
FeatureSettingsOverrideMask sollte auf
% 0000 0000 0000 0000 0000 0000 0000 0011 (3)
Die Maske funktioniert scheinbar wie eine Subnetzmaske, das heißt da wo "1" ist, steht in dem anderen was drin, was berücksichtigt werden soll, nämlich 1 für Migitation an, 0 für aus. Allerdings das Setting für AMD passt wieder nicht zur Maske, da wird Bit 3 gesetzt, ohne Bit 3 der Maske zu setzen:
FeatureSettingsOverride auf
% 0000 0000 0000 0000 0000 0000 0000 1000 (8)
FeatureSettingsOverrideMask sollte auf
% 0000 0000 0000 0000 0000 0000 0000 0011 (3)
Jetzt soll FeatureSettingsOverride auf
% 0000 0000 0000 0000 0000 0100 0000 0000 (0x400 = 1024)
und FeatureSettingsOverrideMask auf
% 0000 0000 0000 0000 0000 0100 0000 0000 (0x400 = 1024)
Das sieht so aus, als ob die alten Spectre/Meltdown-Patches wieder aus sind. Aber was passiert, wenn man folgendes einstellt:
FeatureSettingsOverride auf
% 0000 0000 0000 0000 0000 0100 0000 0000 (0x400 = 1024)
FeatureSettingsOverrideMaske auf
% 0000 0000 0000 0000 0000 0100 0000 0011 (0x403 = 1027)
Damit wäre theoretisch alles eingeschaltet. Nein. AMD nicht. Da müsste
FeatureSettingsOverride auf
% 0000 0000 0000 0000 0000 0100 0000 1000 (0x408 = 1032)
Welche CPU läuft jetzt aber mit was, und bei welcher knallt es, wenn man es falsch einstellt? Wieviele GPOs bräuchte ich und mit welchen WMI-Filtern erreiche ich dann die saubere Trennung?
Für AMD gibts auch noch diese Variante:
FeatureSettingsOverride auf
% 0000 0000 0000 0000 0000 0000 0100 1000 (72)
FeatureSettingsOverrideMask sollte auf
% 0000 0000 0000 0000 0000 0000 0000 0011 (3)
Demnach wäre fullfeatures alle Patches an:
FeatureSettingsOverride auf
% 0000 0000 0000 0000 0000 0100 0100 1000 (0x448=1096)
FeatureSettingsOverrideMask sollte auf
% 0000 0000 0000 0000 0000 0000 0000 0011 (3)
Fragen über Fragen.
Danke, lt. Get-SpeculationControlSettings funktioniert das Addieren einwandfrei.
FeatureSettingsOverride auf 408 (1032)
FeatureSettingsOverrideMaske auf 403 (1027)
Retpoline und alle Patches aktiv auf Intel.
Hab ich auch gerade getestet. Auch die Benchmarkwerte mit CPU-Z passen wieder.
Aber der Witz an Retpoline ist ja gerade, dass man die "alten" Patches bzw. Microcodes nicht benötigt, die das System teils massiv ausbremsen können. Insofern scheint es nicht sinnvoll zu sein, die Einstellungen zu addieren.
Retpoline ist ein alternativer Fix für Branch Target Injection. Ob alter Fix oder Retpoline, das Script wirft dann beim Schutzstatus immer "True" aus. Ohne die Addition wird bei mir durch das Aktivieren von Retpoline allerdings der Fix für Speculative Store Bypass deaktiviert.
Die alten werden dadurch nicht deaktiviert. Habe ich schon geprüft mittels get-speculationcontrolsettings. Alles noch aktiv und nun zudem noch retpoline.
Hab das gestern ausprobiert, und hatte unterirdische CPU-Z-Werte.
Verwende ich nicht die Addition, sondern nur die neuen Retpoline-Settings, resultiert das in
SSBDWindowsSupportEnabledSystemWide: False
Mit dem Fix für Speculative Store Bypass hat Retpoline aber nicht wirklich etwas zu tun. Es macht keinen Sinn, dass dieser Fix dann abgeschaltet wird?
Bei Benchmarks kann ich zudem nur einen Unterschied zwischen Retpoline on/off feststellen. 408/403 gibt höhere Performance und alles steht auf aktiviert. Falls das Script nichts Falsches auswirft, scheint das der aktuelle Optimalzustand zu sein.
Bei heise hat jemand in einem Kommentar weitere Infos und Kombinationen zusammen gestellt.
Hier mal zwei Programme zum Test als Download:
"SpectreMeltdownCheck":
https://www.ashampoo.com/de/eur/pin/1304/sicherheitssoftware/spectre-meltdown-cpu-checker
und "Inspectre"
https://www.grc.com/inspectre.htm
Also ich sehe das richtig oder?
Die beiden Laptops Dell e6440 und e7440 mit Prozessoren aus der 4er Generation müssen mit den alten Patches weiterleben?
Gruss Gladi
Auf meinen DELL-Desktops mit i5-4590 werden laut Test beide Einträge auf TRUE gesetzt.
Vielen Dank Michael passt, bei meinen beiden Laptops Gen 4 auch beide Einträge. Beim Selbstbau PC mit Prozessor Gen 8 nur der Import Eintrag.
Ich bekomme nach der Get-SpeculationControlSettings-Abfrage immer folgende Fehlermeldung:
https://s16.directupload.net/images/190306/xf6ztklj.png
Was läuft da falsch, zumal mir inspectre.exe alles in Grün anzeigt? (Haswell Xeon-Prozessor: https://s16.directupload.net/images/190306/uxl6kp88.png)
Schau den von mir verlinkten Microsoft Beitrag in der Techcommunity an. Dort ist erwähnt, dass man das CmdLet vorher herunterladen muss – zumindest, soweit ich mich erinnere.
Danke, aber auf der Seite blicke ich wie so oft bei Microsoft leider nicht durch. Eine Seitensuchabfrage mit CmdLet, um den korrekten Abschnitt zu finden, blieb leider erfolglos, das Kürzel gibts dort nicht.
Aber so oder so: meine Programme starten jetzt (wieder) spürbar schneller, selbst so komplexe wie Photoshop Elements.
EDIT: Das hier? https://gallery.technet.microsoft.com/scriptcenter/Speculation-Control-e36f0050
Mit der Anleitung hat es jetzt geklappt, BTIKernelRetpolineEnabled und BTIKernelImportOptimizationEnabled stehen wieder auf True.
https://www.ghacks.net/2019/03/06/enable-retpoline-on-windows-10-1809-and-server-right-now/
https://support.microsoft.com/de-de/help/4074629/understanding-the-output-of-get-speculationcontrolsettings-powershell
Powershell aufmachen, und zwar als Administrator
Set-ExecutionPolicy RemoteSigned
Install-Module SpeculationControl -force
Import-Module SpeculationControl
Get-SpeculationControlSettings
Mich tünkt ich habe bessere Werte im AS SSD Benchmark.
Bei einer Samsung EVO SSD. Hat das noch wer?
"Skylake und spätere Generationen von Intel-Prozessoren sind nicht mit Retpoline kompatibel."
Frage 1: Heisst das, dass ich auf Skylake/Kaby Lake dies NICHT einschalten sollte?
Frage 2: wieso ist FeatureSettingsOverrideMask beim Server 2019 auf 0x401 und nicht auf 0x400 ?
zu frage 1:
besser nicht einschalten. falls einschalten auch auf diesen mikroarchitekturen relevant ist, wird microsoft das in ihrem angekuendigten "phased rollout" fuer einen erledigen.
"Auf diesen Prozessoren wird laut Microsoft nur die Import-Optimierung aktiviert. Dies ist eine spezielle Technik von Microsoft, die den Overhead bei Kernel-Aufrufen minimieren soll."
Ich hätte nur weiterlesen sollen ;-) …
Wird also nur die Import-Aktivierung aktiviert, sodass dann beim Test mittels Get-SpeculationControlSettings das Flag BTIKernelImportOptimizationEnabled auf True steht.
Ich habs auf einem core i5 8th gen eingeschaltet, und es läuft. Auch dieses Notebook ist so schnell wie nie zuvor.
Wozu gibt es denn ein Updates wenn ich dieses erst Manuell Aktivieren muss?
Für mich ein No Go und absolut unverständlich!
muss man nicht manuell aktivieren. nur wenn man (wie die windows insider) betatester werden will, aktiviert man das jetzt manuell. fuer die anderen schaltet microsoft das dann spaeter ohne klimmzug frei (mehmet iyigun, windows/azure kernel team development manager: "Over the coming months, we will enable Retpoline as part of phased rollout via cloud configuration").