Windows 10: Retpoline-Spectre 2-Schutz manuell aktivieren

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.

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.


Anzeige

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)


Cookies blockieren entzieht uns die Finanzierung: Cookie-Einstellungen

Dieser Beitrag wurde unter Sicherheit, Windows 10 abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

31 Antworten zu Windows 10: Retpoline-Spectre 2-Schutz manuell aktivieren

  1. 1ST1 sagt:

    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.

  2. Karl Wester-Ebbinghaus (al Qamar) sagt:

    Kann ich nicht empfehlen, da man mit diesen regkeys ggf. Andere parameter wieder deaktiviert. Wie schon bei SSB

    • 1ST1 sagt:

      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?

      • 1ST1 sagt:

        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.

      • keats sagt:

        Danke, lt. Get-SpeculationControlSettings funktioniert das Addieren einwandfrei.

        FeatureSettingsOverride auf 408 (1032)
        FeatureSettingsOverrideMaske auf 403 (1027)

        Retpoline und alle Patches aktiv auf Intel.

      • riedenthied sagt:

        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.

        • keats sagt:

          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.

    • Bernhard Diener sagt:

      Die alten werden dadurch nicht deaktiviert. Habe ich schon geprüft mittels get-speculationcontrolsettings. Alles noch aktiv und nun zudem noch retpoline.

      • 1ST1 sagt:

        Hab das gestern ausprobiert, und hatte unterirdische CPU-Z-Werte.

      • keats sagt:

        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.

    • Günter Born sagt:

      Bei heise hat jemand in einem Kommentar weitere Infos und Kombinationen zusammen gestellt.

  3. Herr IngoW sagt:

    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

  4. Gladi4 sagt:

    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

  5. Thorky sagt:

    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)

  6. Gladi4 sagt:

    Mich tünkt ich habe bessere Werte im AS SSD Benchmark.
    Bei einer Samsung EVO SSD. Hat das noch wer?

  7. Robert Richter sagt:

    "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 ?

    • ralf sagt:

      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.

      • Robert Richter sagt:

        "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.

    • 1ST1 sagt:

      Ich habs auf einem core i5 8th gen eingeschaltet, und es läuft. Auch dieses Notebook ist so schnell wie nie zuvor.

  8. der_Puritaner sagt:

    Wozu gibt es denn ein Updates wenn ich dieses erst Manuell Aktivieren muss?

    Für mich ein No Go und absolut unverständlich!

    • ralf sagt:

      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").

Schreibe einen Kommentar zu ralf Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Bitte beachtet die Regeln zum Kommentieren im Blog (Erstkommentare und Verlinktes landet in der Moderation, gebe ich alle paar Stunden frei, SEO-Posts/SPAM lösche ich rigoros). Kommentare abseits des Themas bitte unter Diskussion.