Zum Hauptinhalt Zur Navigation

CPUs von Intel und ARM: Linux und der Umgang mit datenabhängigem Timing

Wenn die Dauer von Operationen von den Daten abhängt, ermöglicht dies Timing-Attacken auf Informationen. Wie geht Linux damit um?
/ Boris Mayer
16 Kommentare News folgen (öffnet im neuen Fenster)
Die Messung des Timings erlaubt Rückschlüsse auf die Daten: ein Problem für die Kryptografie. (Bild: Tim Reckmann via flickr)
Die Messung des Timings erlaubt Rückschlüsse auf die Daten: ein Problem für die Kryptografie. Bild: Tim Reckmann via flickr / CC-BY 2.0

Bei neueren CPUs von Intel und auch von ARM ist die Ausführungszeit nicht mehr von Operatoren – wie Additionen, AND, OR, XOR und vielen mehr(öffnet im neuen Fenster) – abhängig, sondern von den Daten, die diese Operatoren zu einem Ergebnis verknüpfen. Weil darunter Operatoren sind, die für AES und andere kryptografische Methoden Verwendung finden, könnte dies Angriffswege bieten, um etwas über die verwendeten Daten zu erfahren.

Sowohl bei Intel als auch bei ARM gibt es ein Feature, das die Ausführungszeiten wieder auf ein konstantes, nur von den Operatoren abhängiges Timing schaltet. Das Aktivieren dieses Modus bedeutet aber einen Performanceverlust gegenüber dem variablen Timing – ein Verlust, von dem zumindest Intel sagt, dass er in den kommenden CPU-Generationen immer größer werde.

Die große Frage ist, wer eigentlich dafür zuständig ist, dass dieser Modus mit dem konstanten Timing ein- oder ausgeschaltet wird. Eigentlich müssten Entwickler sich bei jeder Operation überlegen, ob die verwendeten Daten vor einem Timing-Angriff geschützt werden müssen.

Bei Linux ist man sich noch nicht so ganz einig

Besonders kritisch dürfte das in den Kernen der Betriebssysteme sein – kein Wunder also, dass es bei Linux eine Diskussion(öffnet im neuen Fenster) gab, wie mit dem Problem zu verfahren ist. Das bisherige Ergebnis: Für ARM-CPUs wird das variable Timing im Kernel ab Linux 6.2 abgeschaltet(öffnet im neuen Fenster) , für den Userspace bleibt sie aktiviert.

Für Intel gibt es auch einen Patch(öffnet im neuen Fenster) , allerdings wurde hier noch nichts gemerged. In diesem Patch wird die CPU global in den Modus mit dem konstanten Timing versetzt. Was daraus wird, ist noch nicht zu sagen.

Aus der ARM-Entscheidung mit der Aufteilung für den Kernel- und den Userspace lässt sich auch nicht wirklich eine Analogie ziehen, denn auch wenn ARM und Intel ein konzeptionell vergleichbares Feature implementiert haben, heißt das noch lange nicht, dass die davon ausgehende potenzielle Gefahr gleich ist – das hängt von der Implementierung ab.

Wie auch immer die Entscheidung bei Linux ausfallen wird, als Softwareentwickler wird man in das Thema im Auge behalten müssen. Denn bei Kryptografiemodulen und anderen Algorithmen mit Sicherheitsbedarf wird das konstante Timing aktiviert werden müssen.


Relevante Themen