Silifuzz: Google sucht und findet per Fuzzing CPU-Fehler

Das Fuzzing-Team von Google hat eine neue Technik vorgestellt, mit der das Team nach Fehlern in Prozessoren sucht. Wie die Beteiligten in der Ausarbeitung zu dem Projekt Silifuzz(öffnet im neuen Fenster) schreiben, zielt dies aber nicht auf inhärente Logik-Fehler, die alle Chips eines Typs betreffen wie Meltdown oder Spectre. Das Team sucht über die neue Methode vielmehr elektrische Fehler, die der CPU-Hersteller beim Testen übersehen hat oder die durch dauerhaften Gebrauch entstehen können.
Hintergrund der Arbeiten ist dabei, dass diese Art Fehler der CPU eine sogenannte Silent Data Corruption (SDC) auslösen könnte. Dabei werden Daten bis hin zum vollständigen Verlust verändert, ohne dass dies etwa durch einen Absturz auffällt. Darüber hinaus sind heutige Serversysteme oft mit einer Redundanz gegen Ausfälle abgesichert. SDC-Ereignisse seien laut Google aber viel gefährlicher, da gegen dieses Phänomen oft keinerlei Vorkehrungen getroffen werden. Und in vielen Fällen sind elektrische Fehler der CPUs Auslöser für SDCs.
Für die konkrete Suche nach echten Fehlern setzt Google dabei zunächst auf das Fuzzing von CPU-Simulatoren und Disassemblern, um einen entsprechenden Testkorpus aufzubauen. Fehler, die in diesen Systemen auftreten, könnten dann auch in realen CPUs zu finden sein, so die Idee. Das Team selbst schreibt, dass dieses Vorgehen aus akademischer Sicht nicht zwingend neu und das eigene Projekt auch noch nicht ausgereift ist. Silifuzz liefert aber bereits praktische Ergebnisse, weshalb sich die Beteiligten für eine frühe Veröffentlichung der Arbeiten entschieden haben, wie sie selbst schreiben.
Viele verschiedene und bisher nicht entdeckte Fehler
Bei den so generierten Tests handele es sich um etwa 500.000 Stück, die auf "einem großen Teil von Googles Produktionsflotte" genutzt wurden. Und das Team konnte direkt "fehlerhafte" Maschinen finden. Einige der betroffenen Geräte seien bereits durch andere Tests, andere bereits bei Betriebsfehlern aufgefallen. In 45 Prozent der Fälle seien die Fehler aber allein durch Silifuzz gefunden worden.
Zu den konkreten Fehlern gehören falsche Ergebnisse für Ganzzahl-, Gleitkommazahl- oder Vektorinstruktionen. Oft sei hier nur 1 Bit falsch. Hinzu kommen zweifelhafte Fehlersignale (SIGFPE, SIGSEGV, SIGILL), fehlende Ausnahmebehandlungen, das Fehlen der Meldung SIGILL (Illegale Instruktion), wo es eine geben sollte, "Sticky Flags" - also Bit-Werte in Eflags- oder Zustandsregistern, die erhalten bleiben, obwohl dies nicht sein dürfte - oder auch die Nichtübereinstimmung von Werten in Registern für Gleitkommazahlen.
Dazu heißt es: "Wir wissen nicht, ob diese gemeinsamen Muster repräsentativ für alle CPU-Fehler oder einfach mit unserer Technik leicht zu finden sind" . Das Team ist sich aber ziemlich sicher, dass die genannten Fehler häufiger bei C-Code auftreten als bei Anwendungen, die etwa JIT-kompiliert werden.



