Die Abhängigkeit der Ausführungszeit von Instruktionen von Daten auf ARM- und Intel-CPUs

Eric Biggers, einer der Entwickler des Adiantum-Verschlüsselungsalgorithmus und Maintainer des Linux-Kernels fscrypt-Subsystems, schlug eine Reihe von Patches vor, um Sicherheitsprobleme zu beheben, die durch die Besonderheiten von Intel-Prozessoren entstehen, da diese keine konstanten Ausführungszeiten für verschiedene verarbeitete Daten garantieren. Bei Intel-Prozessoren tritt das Problem mit der Ice-Lake-Familie auf. Ein ähnliches Problem zeigt sich auch bei ARM-Prozessoren.

Die Abhängigkeit der Ausführungszeit von den in diesen Instruktionen verarbeiteten Daten wird vom Patch-Autor als Schwachstelle in den Prozessoren betrachtet, da dieses Verhalten die Sicherheit kryptografischer Operationen im System nicht garantieren kann. Viele Implementierungen kryptografischer Algorithmen basieren darauf, dass Daten die Ausführungszeit der Instruktionen nicht beeinflussen, und eine Verletzung dieses Verhaltens könnte zu Angriffen über Seitenkanäle führen, die Daten durch Analyse ihrer Verarbeitungszeit rekonstruieren.

Potentiell kann die Abhängigkeit der Ausführungszeit von den Daten auch für Angriffe zur Bestimmung von Kernel-Daten aus dem Benutzerspeicher verwendet werden. Laut Eric Biggers wird die konstante Ausführungszeit standardmäßig nicht einmal für Instruktionen gewährleistet, die Additions- und XOR-Operationen ausführen, sowie für spezielle AES-NI-Instruktionen (die Informationen sind nicht durch Tests bestätigt, jedoch gibt es hinweise, dass beim Multiplizieren von Vektoren und Zählen von Bits eine Verzögerung von einem Zyklus auftritt).

Um das besprochene Verhalten zu deaktivieren, haben Intel und ARM neue Flags vorgeschlagen: das PSTATE-Bit DIT (Data Independent Timing) für ARM-CPUs und das MSR-Bit DOITM (Data Operand Independent Timing Mode) für Intel-CPUs, die das alte Verhalten mit konstanten Ausführungszeiten zurückgeben. Intel und ARM empfehlen, den Schutz nach Bedarf für besonders kritischen Code zu aktivieren, aber in der Praxis können wichtige Berechnungen überall im Kernel und im Benutzerspeicher auftreten, weshalb eine permanente Aktivierung der Modi DOITM und DIT für das gesamte Kernel in Betracht gezogen wird.

Für ARM-Prozessoren wurden bereits Patches für den Linux-Kernel 6.2 angenommen, die das Verhalten des Kernels ändern. Diese Patches gelten jedoch als unzureichend, da sie nur den Kernel-Code abdecken und das Verhalten im Benutzerspeicher nicht ändern. Bei Intel-Prozessoren befindet sich die Aktivierung des Schutzes derzeit nur in der Überprüfung. Die Auswirkungen des Patches auf die Leistung wurden noch nicht gemessen, doch laut Intel-Dokumentation führt die Aktivierung des DOITM-Modus zu Leistungseinbußen (zum Beispiel aufgrund der Deaktivierung bestimmter Optimierungen wie der datenspezifischen Vorabladung) und in künftigen Prozessor-Modellen könnten die Leistungseinbußen zunehmen.

Quelle: opennet.ru

60GB SSD 8Gb DDR4