Abhängigkeit der Befehlsausführungszeit von Daten auf ARM- und Intel-CPUs

Eric Biggers, einer der Entwickler der Adiantum-Verschlüsselung und Betreuer des fscrypt-Subsystems des Linux-Kernels, schlug eine Reihe von Patches vor, um Sicherheitsprobleme zu blockieren, die sich aus einer Funktion von Intel-Prozessoren ergeben, die keine konstanten Ausführungszeiten für verschiedene verarbeitete Daten garantiert. Das Problem tritt bei Intel-Prozessoren ab der Ice-Lake-Familie auf. Ein ähnliches Problem wird bei ARM-Prozessoren beobachtet.

Das Vorhandensein einer Abhängigkeit der Ausführungszeit von Anweisungen von den in diesen Anweisungen verarbeiteten Daten wird vom Autor der Patches als Schwachstelle in Prozessoren angesehen, da ein solches Verhalten die Sicherheit der im System durchgeführten kryptografischen Operationen nicht gewährleisten kann. Viele Implementierungen kryptografischer Algorithmen sollen sicherstellen, dass Daten die Ausführungszeit von Anweisungen nicht beeinträchtigen. Ein Verstoß gegen dieses Verhalten kann zur Entstehung von Seitenkanalangriffen führen, die Daten basierend auf der Analyse ihrer Verarbeitungszeit wiederherstellen.

Möglicherweise kann die Abhängigkeit von Laufzeitdaten auch dazu genutzt werden, Angriffe zu starten, um Kernel-Daten aus dem Benutzerbereich zu ermitteln. Laut Eric Biggers ist selbst für Anweisungen, die Additions- und XOR-Operationen ausführen, sowie für spezielle AES-NI-Anweisungen standardmäßig keine konstante Ausführungszeit vorgesehen (Informationen wurden nicht durch Tests bestätigt, anderen Daten zufolge gibt es eine Verzögerung von einem). Zyklus während der Vektormultiplikation und Bitzählung).

Um dieses Verhalten zu deaktivieren, haben Intel und ARM neue Flags vorgeschlagen: PSTATE-Bit DIT (Data Independent Timing) für ARM-CPUs und MSR-Bit DOITM (Data Operand Independent Timing Mode) für Intel-CPUs, die das alte Verhalten mit konstanter Ausführungszeit wiederherstellen. Intel und ARM empfehlen, den Schutz nach Bedarf für kritischen Code zu aktivieren, aber in Wirklichkeit können kritische Berechnungen überall im Kernel und im Benutzerbereich stattfinden, daher erwägen wir, die DOITM- und DIT-Modi jederzeit für den gesamten Kernel zu aktivieren.

Für ARM-Prozessoren hat der Kernel-Zweig von Linux 6.2 bereits Patches übernommen, die das Verhalten des Kernels ändern. Diese Patches gelten jedoch als unzureichend, da sie nur den Kernel-Code abdecken und das Verhalten des Benutzerbereichs nicht ändern. Für Intel-Prozessoren befindet sich die Einbeziehung des Schutzes noch in der Prüfungsphase. Die Auswirkungen des Patches auf die Leistung wurden noch nicht gemessen, aber laut Intel-Dokumentation verringert die Aktivierung des DOITM-Modus die Leistung (z. B. durch Deaktivierung einiger Optimierungen, wie z. B. datenspezifisches Vorladen), und bei zukünftigen Prozessormodellen kann die Leistungsreduzierung zunehmen .

Source: opennet.ru

Kommentar hinzufügen