AMDs FlieĂźkommaprozessor macht Linux und FreeBSD unsicherer [Update]
Die Linux- und FreeBSD-Kernel-Entwickler haben eine Änderung der Funktionsweise von AMDs Gleitkommaeinheit verpasst. Dadurch können bösartige Prozesse die Arbeit anderer Prozesse beobachten, etwa um kryptografische Schlüssel auszuspähen.
Dass die gezielte Information über Änderungen der Arbeitsweise von Prozessoren eine Bringschuld der Hersteller sein sollte, zeigt sich wieder einmal an einer kürzlich geschlossenen Lücke im Linux- und FreeBSD-Kernel. So hat AMD in seinen Prozessoren der 7. und 8. Generation (AMD Athlon, Duron, Athlon MP, Athlon XP, Athlon64, Athlon64FX, Opteron, Turion, Sempron sowie Geode) die Funktion des Gleitkommaprozessors (FPU) ein klein wenig verändert. In der Folge kann ein Angreifer etwa auf einem Mehrbenutzersystem die Arbeit eines Prozesses überwachen, der Gleitkommaoperationen erfordert. Prinzipiell lassen sich damit beispielsweise kryptografische Schlüssel ausspähen, erklären die FreeBSD-Entwickler in ihrem ziemlich ausführlichen Fehlerreport.
Ursache des Problems ist eine Änderung im Verhalten der Befehle zum Speichern des FPU-Zustands in die Register FOP, FIP und FDP, die den gerade ausgeführten Opcode sowie die Adressen des Opcodes und des Segments der zu verarbeitenden Daten aufnehmen. Ursprünglich reichte der Befehl fxsave, um den Zustand zu retten und fxrstor, um ihn wiederherzustellen. Seit der Änderung funktioniert dies aber nur, wenn zusätzlich das Exception Summary Bit (ES) im Statusregister der FPU auf 1 gesetzt ist.
Als Ergebnis restauriert der Linux- und FreeBSD-Kernel die FOP-, FIP- und FDP-Register beim Umschalten in einen anderen Kontext nicht, womit sich die Verarbeitung anderer Prozesse beobachten lässt. AMD hat die andere Arbeitsweise zwar dokumentiert, offenbar ist aber längere Zeit im Open-Source-Bereich niemand darüber gestolpert – wer liest auch jedesmal hundertseitige Dokumentation bei Erscheinen eines neuen Prozessors. Zudem fiel die fehlerhafte Funktion des Kernels niemandem auf. Erst jetzt berücksichtigen die Updates das unterschiedliche Verhalten im Vergleich etwa zu Intels CPUs, die von dem Problem nicht betroffen sind. Unter Linux bekommen Prozesse nach dem Update bei nicht gesetztem ES-Bit künftig nur eine vom Kernel definierte Konstante zu sehen, so die Kernelentwickler. An welcher Schraube die FreeBSD-Entwickler drehen, steht im dazugehörigen Fehlerbericht nicht.
[Update]:
AMD hat den Fehler und die Möglichkeit andere Prozesse auszuspähen in einer äußerst detaillierten Stellungnahme gegenüber den FreeBSD-Entwicklern bestätigt, schränkt allerdings die Möglichkeit eines erfolgreichen Angriffs etwas ein. Der Antwort zufolge änderte AMD das Verhalten der FPU aus Performancegründen. Wie man das Problem umschifft, schildert AMD in der Antwort ebenfalls. OpenBSD und NetBSD haben auch mit einem Update reagiert, um das Problem zu beseitigen.
Siehe dazu auch: (dab)
- Fix x87 information leak between processes , Fehlerreport auf kernel.org
- FPU Information Disclosure, Fehlerreport von FreeBSD