Gute Zahlen, schlechte Zahlen

Die Ursachen und Auswirkungen der schwachen OpenSSL-Bibliothek des Debian-Linux-Projektes sind vielen Anwendern und Admins noch unklar. Der Artikel hilft die Hintergründe zu verstehen und das persönliche Risiko zu bewerten.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 17 Min.
Von
  • Martin Bartosch
Inhaltsverzeichnis

Durch den seit September 2006 annähernd funktionslosen Zufallszahlengenerator der Debian-Variante von OpenSSL kommt es zu verschiedenen direkten und indirekten Problemen im Zusammenhang mit kryptographisch abgesicherter Kommunikation. Die Folgen treffen dabei nicht nur Debian-Anwender, sondern indirekt auch Benutzer anderer Systeme, die mit einem Debian-System verschlüsselt kommunizieren oder schwache Debian-Schlüssel verwenden. Auch wer kein Debian-System benutzt, kann von dem Problem betroffen sein.

Gute Zufallszahlen sind das Fundament vieler kryptographischer Verfahren und Protokolle. Es ist wichtig, dass die verwendeten Zufallszahlen nicht vorhersagbar sind. Solche Zufallszahlen zu erzeugen, fällt Computern naturgemäß schwer. Da die Qualität der Zufallszahlen von Betriebssystem zu Betriebssystem stark variieren kann, setzt das auf vielen Plattformen verfügbare OpenSSL auf eine eigene Funktion zur Erzeugung von Zufallszahlen aus einem internen Entropie-Pool. Diesem Pool fügt OpenSSL über die interne Funktion ssleay_rand_add() in der Datei crypto/rand/md_rand.c Daten aus verschiedenen Quellen hinzu.

Dabei gehen im Fall von Linux unter anderem die Uhrzeit, die aktuelle Prozess-ID, die User-ID des Benutzers, nicht initialisierter Speicher und vor allem Daten aus dem Unix-Device /dev/urandom ein. OpenSSL merkt sich bei jeder Auffüllung des Entropie-Pools in einer internen Variablen, wieviel zusätzliche Entropie hinzugefügt wurde. Im Gegenzug wird diese Variable um den entsprechenden Wert verringert, sobald OpenSSL Entropie aus dem Pool einverwendet, um Zufallszahlen zu erzeugen.

In der Absicht, Warnmeldungen von Memory-Debuggern wie Valgrind oder Purify zu verhindern, legte der Eingriff des Debian-Maintainers Kurt Roeckx ausgerechnet die zentrale Instruktion in der Funktion ssleay_rand_add() lahm, die neue Daten in den Entropie-Pool von OpenSSL übernehmen soll. Seine Änderung führte dazu, dass die Funktion die übergebenen Daten schlichtweg ignorierte.

Die OpenSSL-Funktion ssleay_rand_bytes(), deren Aufgabe es ist, eine vom Aufrufer spezifizierte Menge von Zufallszahlen zu erzeugen, verwendete den so vorbereiteten – und in der Debian-Variante völlig leeren – Entropie-Pool, um einen Pseudozufallszahlengenerator (PRNG) mit einem Startwert zu initialisieren. Dabei fügte die Funktion noch einmal selbst die aktuelle Prozess-ID hinzu, die bei einem normalen Linux-System 2^15 mögliche Werte annehmen kann. Somit kamen insgesamt nur 32767 verschiedene Zahlenfolgen zum Einsatz.

Kryptographisch starke Zufallszahlen haben einen ähnlich großen Stellenwert wie die Algorithmen, die sie verwenden. Die Tragweite des Problems wird deutlich, wenn man sich vergegenwärtigt, wo überall sichere Zufallszahlen benötigt werden und welche Auswirkungen es hat, falls sie leicht zu erraten sind. Grundsätzlich gehört nun jede Anwendung auf den Prüfstand, die Zufallszahlen aus dem OpenSSL-Zufallszahlengenerator benutzt. Dazu gehören OpenSSH, OpenVPN und eine Reihe von weiteren Applikationen, die gegen die OpenSSL-Bibliotheken gelinkt sind, nicht aber beispielsweise GPG, das seine eigenen Crypto-Funktionen mitbringt. Die schwachen Zufallszahlen wirken sich je nach OpenSSL-Funktion unterschiedlich aus. Zwar sind konkrete Informationen für einzelne Anwendungen zusammen mit entsprechenden Handlungsanweisungen im OpenSSL-Wegweiser von Heise Security sowie im Debian-Wiki beschrieben, doch die folgende Übersicht soll beim Verständnis der Zusammenhänge helfen, um das persönliche Risiko bewerten zu können.