Spectre — AMD-Microcodeupdate-Chaos seit über einem Jahr
Anfang 2018 wurden diverse Hardware-Sicherheitslücken in Prozessoren weltbekannt und erhielten die Namen Meltdown und Spectre. Während Meltdown ausschließlich und beide Varianten von Spectre die Intel-CPUs vieler Jahre betreffen, hatte AMD zumindest bei einer Spectre-Variante Handlungsbedarf.
Beide große Unternehmen lösten die Probleme der alten Prozessoren mittels Microcodeupdates und planten Hardwarelösungen für neue, noch nicht fertige Prozessoren ein. AMD hat im Januar 2018 und Februar 2018 die erforderlichen Microcodeupdates nach Tests für CPUs und APUs der Family 15h (Bulldozer und Abkömmlinge), Family 16h (Kabini und Abkömmlinge) sowie Family 17h (Zen und Abkömmlinge) freigegeben. Damit diese Microcodeupdates aber überhaupt auf die Zielcomputer gelangen können, ist ein Update erforderlich, sodass diese auch angewandt werden können.
Möglichkeit Nr. 1 — die Integration in ein BIOS-/UEFI-Update:
Während für einigermaßen aktuelle Systeme BIOS-Updates verfügbar sind, gibt es in der Regel für Systeme, die älter als 4 Jahre sind, oft keinen Support, sprich Updates. Bei Mainboards ist es noch schlimmer. Ein Beispiel: das ASRock FM2A68M-DG3+ — dieses Board hat am 05.03.2019 ein BIOS-Update erhalten, darin ist das erforderliche Microcodeupdate für Carrizo und Bristol Ridge, jedoch keines der Updates für die anderen FM2- sowie FM2+-Prozessoren. Leider wiederholt sich dies bei anderen Boards und Herstellern. Sofern es überhaupt noch Updates für Sockel FM2- oder FM2+-Boards gibt, ist maximal das Microcodeupdate für die letzte Generation der Bulldozer — AMD Carrizo — enthalten.
Möglichkeit Nr. 2 — die Integration in einen Bootloader:
Eine weitere Option ist ein präparierter Bootloader, der die Microcodeupdates vor dem Betriebssystem (und dessen eigenem Bootloader) lädt. Problem ist hier nur, es verstößt gegen den UEFI SecureBoot und kann so nicht von Unternehmen genutzt werden.
Möglichkeit Nr. 3 — die Integration in den OS-Kernel:
Die dritte und letzte funktionierende Variante ist die Integration der Microcodeupdates in die jeweiligen Kernels des Betriebssystems.
Beim Windows-Kernel (ntoskrnl.exe) sind die Microcodeupdates ab Windows 7 in 2 Dateien des System32-Ordners enthalten:
- mcupdate_AuthenticAMD.dll für AMD-CPUs
- mcupdate_GenuineIntel.dll für Intel-CPUs
Während für Intel-CPUs gleich mehrere Windows-Updates mit aktualisierter mcupdate_GenuineIntel.dll verfügbar sind und auch an alle derzeit noch im Support befindlichen Windows-Versionen verteilt wurden, sieht es bzgl. Updates mit aktualisierter mcupdate_AuthenticAMD.dll noch immer düster aus.
Wer jetzt denkt, dies sei ein reines Windows-Problem und bei Linux gäbe es so etwas nicht, hat durchaus Recht, denn dort sieht es noch düsterer aus! Linux benötigt da nur die jeweiligen Fam-Bins – aber auch wenn es da neuere Dateien gab, fehlen bei Linux die meisten Updates.
Hier eine kleine Übersicht:
Microsoft liefert die Microcodeupdates für Spectre bei AMD-CPUs bisher nur für die ersten Bulldozer-CPUs (OR-B2 und OR-C0) wie auch für die ersten Bulldozer-APUs (TN-A1 und RL-A1) aus – aber auch nur für Windows 10 Version 1809 sowie Server 2019 und neuer! Ältere Versionen erhielten nichts, auch wenn es Windows-10-LTSB-Varianten sind. Die kommende neue Version von Windows 10, bisher als 19H1 bekannt, hat auch keine weiteren Microcodeupdates.
Linux, ausgehend vom Kernel-Git liefert bisher nur Microcodeupdates für die ersten Bulldozer CPUs (OR-B2 und OR-C0) in der microcode_amd_fam15h.bin. Das darin enthaltene Update für TN-A1 und RL-A1 ist veraltet (06001119 aus 2012). Darüber hinaus gibt es noch Updates für einige Zen-basierte CPUs (ZP-B2 und Pir-B2) in der microcode_amd_fam17h.bin. Da man bei Linux nur die jeweiligen .bin-Dateien (microcode_amd_fam15h.bin, microcode_amd_fam16h.bin und microcode_amd_fam17h.bin) austauschen müsste, sollte ein Update für Linux viel schneller gehen als bei Windows. Auch hat Linux den Vorteil, dass die Bins für alle möglichen Kernel genutzt werden könn(t)en. Aber seit Monaten ist es still in der lkml.org…
Eine große Unbekannte bleibt jedoch weiterhin Microsoft, denn in den ersten Builds (ab 10.0.18836.1000) für Windows 10 Version 20H1 sind alle Microcodeupdates von AMD erhalten, auch in älteren Builds als manche vom kommenden Windows 10 “19H1”. Ausgehend der bisher üblichen Praxis von Microsoft wird jedoch hieran bis zum finalen Release von Windows 10 Version 19H1 nichts mehr geändert werden, da Microsoft nur noch finale Feinjustierungen macht, immerhin ist der Start für März/April vorgesehen. Warum jedoch Microsoft nach über einem Jahr erst anfängt, alle Microcodeupdates zu integrieren, die dann erst 2 Jahre nach Bekanntwerden von Spectre kommen, kann nur Microsoft selbst beantworten.
Auf bisher vier Anfragen an AMD seit April 2018 hierzu gab es bislang null Antworten. Auf die bisher drei versandten Anfragen an Microsoft gab es, Überraschung, null Antworten…
Fazit:
Seit über einem Jahr gibt es Microcodeupdates, aber für die meisten AMD-CPUs werden einfach keine verteilt, ein Chaos, das für den normalen Anwender nicht über‑, geschweige denn durchschaubar ist. Man kann nur hoffen, dass dies baldigst behoben wird, spätestens in einem Jahr wären dann die AMD-CPUs mit den erforderlichen Microcodeupdates über den Windows-Kernel geschützt. Bei Linux sollten die erforderlichen Updatedateien auch langsam verteilt werden.
Links:
Planet 3DNow!: Microsoft testet Microcodeupdates für AMD Bulldozer in Windows 10 Build 17672
Plato Mavropoulos: Microcode-Extractor und Microcode Archiv
Linux Source Git — AMD µCode Updates
Phoronix: The Current Spectre / Meltdown Mitigation Overhead Benchmarks On Linux 5.0