Samstag, 11. Februar 2012


Kolumne

Montag, 26. November 2007 | Kolumne

KW 48/07 - Standpunkt Sicherheit

(Link zum Artikel: http://www.entwickler.de/entwicklerde/news/039637)
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share

Heute geht es um Zufallszahlengeneratoren, die mehr oder weniger zufällig zu wenig zufällige Zahlen generieren. Denn Anfang machen

Schwächen im Zufallszahlengenerator von Windows 2000 ...

Leo Dorrendorf und Zvi Gutterman von der Universität Jerusalem sowie Benny Pinkas von der Universität Haifa haben den Pseudozufallszahlengenerator ("Pseudo Random Number Generator", PRNG) von Windows 2000 unter die Lupe genommen. Die Ergebnisse werden in "Cryptanalysis of the Random Number Generator of the Windows Operating System" (PDF) beschrieben. Der Algorithmus des PRNG wurde von Microsoft nicht veröffentlicht, so das er vor der Untersuchung erst rekonstruiert werden musste. Das Ergebnis ist nicht sehr schön, die drei Wissenschaftler konnten Angriffe entwickeln, mit denen sich die vom PRNG erzeugten Zufallszahlen unter bestimmten Voraussetzungen zurückberechnen oder vorhersagen lassen. Das Problem dabei ist, das die vom PRNG erzeugen Zufallszahlen z.B. für die Erzeugung der geheimen Schlüssel von Verschlüsselungsfunktionen verwendet werden. Kennt ein Angreifer die Zufallszahlen, kann er auch den geheimen Schlüssel berechnen.

Allgemein führt ein PRNG verschiedene Rechenoperationen auf interne Zustandsregister aus, die dadurch in einen neuen Zustand versetzt werden. Dies wird meist mehrmals wiederholt, bevor ein Teil des aktuellen Zustands als Zufallszahl ausgegeben wird. Die drei Wissenschaftler haben herausgefunden, das sich aus einem bekannten Zustand des PRNG die davor ausgegebenen Zufallszahlen berechnen lassen. Die Komplexität der Berechnung wird mit O(2²³) angegeben, was eine effiziente Berechnung auf einem herkömmlichen PC möglich macht. Außerdem wird der PRNG von Windows 2000 unsicher eingesetzt: Erstens läuft er im Benutzer- statt im Kernel-Modus, so dass die internen Zustände leichter ausgelesen werden können. Zweitens werden für die Initialisierung zum Teil Daten genommen, die sich zum Zeitpunkt der Initialisierung auf dem Stack befinden. Diese Daten lassen sich unter Umständen vorhersagen. Drittens wird für jedes Programm, das den PRNG benutzt, ein neuer Prozess gestartet, dessen Zustandsregister erst nach jeweils 128 KByte erzeugten Zufallszahlen durch neue Entropiedaten aufgefrischt werden. Entropiedaten werden aus möglichst zufälligen Daten des Systems, z.B. Mausbewegungen, gewonnen, um eine Vorhersage der Initialisierungsdaten zu verhindern. Die gewählte Implementierung führt dazu, das sich aus einem einzigen bekannten Zustand der Zustandsregister die 128 KByte Zufallszahlen zwischen zwei Initialisierungen berechnen lassen.

Praktisch zu einem Angriff umsetzen lassen sich diese Erkenntnisse, wenn z.B. eine Pufferüberlauf-Schwachstelle dazu genutzt werden kann, um den aktuellen Wert der Zustandsregister zu ermitteln. Danach lassen sich daraus die vom betroffenen Programm verwendeten Zufallszahlen aus dem aktuellen 128-KByte-Bereich berechnen. Gefährlich ist so etwas z.B. bei einer Schwachstelle, durch die der Zustand des für das Erzeugen von SSL-Schlüsseln verwendeten PRNG ausgespäht werden kann. Der Angreifer kann danach auch die zukünftig erzeugten SSL-Schlüssel bis zum Erreichen der 128-KByte-Grenze berechnen, während er normalerweise nur die zum Zeitpunkt des Angriffs verwendeten Schlüssel ausspähen könnte.

... und XP

Am 21.11. hat Microsoft eingeräumt, das auch Windows XP von den Problemen betroffen ist, da dort der gleiche PRNG verwendet wird. Nicht betroffen sind Windows Vista und Windows Server 2003, dort wird ein modifizierter bzw. anderer PRNG verwendet. Für XP soll die Schwachstelle mit dem Service Pack 3 behoben werden, das für 2008 angekündigt ist. Die Entdecker der Probleme und Microsoft streiten darüber, ob es eine Schwachstelle ist oder nicht. Microsoft meint "Nein", da der Angreifer das System bereits kompromittiert haben muss, um die Schwachstelle ausnutzen zu können. Das stimmt nur zum Teil. Denn was ist mit einem Benutzer, der die Schwachstelle ausnutzt, um die Zufallszahlen eines anderen Benutzers auszuspionieren? OK, jetzt kommt bestimmt wieder das alte Argument, das man nur vertrauenswürdigen Benutzern Zugriff auf seine Systeme gewähren sollte. Aber ist das realistisch? Wie sieht es z.B. mit den zig Benutzern einzelner Rechner bei Shared-Hosting-Angeboten aus - darf man da davon ausgehen, das alle vertrauenswürdig sind? Meines Erachtens nicht. Außerdem kann aus einem vertrauenswürdigen Benutzer schnell ein nicht vertrauenswürdiger werden. Wenn die Sicherheit eines Systems davon abhängt, das nur vertrauenswürdige Benutzer Zugriff haben, stimmt etwas nicht. Außerdem führt Microsofts Argumentation im Prinzip zu der Aussage "Eine Schwachstelle ist keine Schwachstelle, wenn sie erst nach dem Ausnutzen einer anderen Schwachstelle ausgenutzt werden kann". Würde jemand so argumentieren, bekäme er zu Recht "Da ist Blödsinn" zu hören. Also vergessen wir das ganze einfach und stellen fest, das der PRNG eine Schwachstelle enthält. Außerdem hat Microsoft schon weitaus weniger gefährliche Schwachstellen im Rahmen von Security Bulletins geschlossen. Ich vermute, das "Dies ist keine Schwachstelle"-Argument hat einen ganz praktischen Hintergrund: Da Windows 2000 sich am Ende seines Support-Zeitraums befindet, werden nur noch sicherheitsrelevante Fehler behoben. Wenn man diese Schwachstelle nun zu einem nicht-sicherheitsrelevanten Fehler umdefiniert, muss sie für Windows 2000 nicht mehr behoben werden.

Also: Die Schwachstelle existiert, auch wenn sie nicht kritisch ist. Damit ein Angreifer sie ausnutzen kann, muss er erstens Zugriff auf ein betroffenes System haben und zweitens muss dort ein Programm den PRNG nutzen, um irgend etwas zu tun, an dem der Angreifer Interesse hat. Das reicht aber allemal mindestens für eine Einstufung als "Mittlere Gefährdungsstufe".

Und dann ist da noch...

... ein US-Standard zur Erzeugung von Zufallszahlen mit evtl. eingebauter Hintertür. Auf die hat Bruce Schneier hingewiesen. Es handelt sich um die NIST Special Publication 800-90, "Recommendation for Random Number Generation Using Deterministic Random Bit Generators" (PDF), in der ein vorgeschlagener PRNG eine ungewöhnliche Eigenschaft besitzt: Der Algorithmus basiert auf elliptischen Kurven, die durch eine Reihe von Konstanten beschrieben werden. Die werden im Anhang des Standards aufgeführt, woher sie kommen bzw. wie sie gebildet wurden, wird aber nicht verraten. Nils Ferguson und Dan Shumow von Microsoft konnten zeigen (PDF), dass diese Konstanten in Bezug zu einem zweiten Satz von Zahlen stehen. Und wer die kennt, kann sie zur Berechnung der Zufallszahlen verwenden. Ein Schelm, wer Böses dabei denkt. Wem das bekannt vorkommt: Der Verschlüsselungsstandard DES steht unter einem ähnlichen Verdacht, siehe About Security #70.

Carsten Eilers

Kommentare

Folgende Links könnten Sie auch interessieren