Anhand der Probleme bei der Portierung von LibreSSL auf andere Plattformen wie Linux kann man erkennen, wie aus OpenSSL so ein Security-Alptraum werden konnte. Und der ist noch längst nicht vorbei.
Mit der Portierung der für OpenBSD entwickelten SSL-Bibliothek tauchen auch erste Probleme mit LibreSSL [1] auf, um die heftige Diskussionen [2] entbrennen. An der Auseinandersetzung kann man gut erkennen, was bisher bei OpenSSL schief gelaufen ist und dass eine gute Lösung sogar Änderungen am Betriebssystem erfordern kann.
Auslöser der Diskussionen ist die sichere Nutzung von Zufallszahlengeneratoren (RNG) nach einem Aufruf von fork()
, was komplett identische Kopien eines Prozesses im Speicher anlegt: Da verhalten sich LibreSSL und OpenSSL unterschiedlich. Mit einem speziellen Testprogramm liefert OpenSSL in den Kindprozessen andere Zahlen ? wie es auch sein sollte. Bei LibreSSL für Linux kommen jedoch die gleichen Zufallszahlen, was eindeutig schlecht ist.
Kruder Workaround
Allerdings argumentiert das LibreSSL-Team, dass auch OpenSSL nur einen kruden Workaround implementiert, den sie nicht in ihre Bibliothek einbauen wollen. Schließlich sei es das Ziel des Projekts, gerade solchen Bloat und gefährliche Workarounds, die durch den Zwang zur Portabilität entstanden waren, zu entfernen. Die BSD-affinen LibreSSL-Entwickler stehen auf dem Standpunkt, die Linuxer müssten ihren Kernel fixen, nicht sie die SSL-Implementierung.
Und das Faszinierende daran ? die Linuxer tun das sogar. Wie Theodore Ts’o ? einer der alteingesessenen Linux-Kernel-Hacker und Maintainer des Krypto-Subsystems ? jetzt auf der Kernel-Mailingliste vorschlägt, soll der Linux-Kern auf Anfrage des LibreSSL-Teams hin einen neuen System-Aufruf bekommen. Diese Funktion getrandom() [3] soll analog funktionieren wie getentropy() auf OpenBSD [4]. Damit lässt sich dann das fork-Problem sauber lösen und auch gleich ein möglicher Angriff durch das künstliche Aufbrauchen von Filehandles aus der Welt schaffen.
Ein Problem bleibt
Es bleibt jedoch das Problem, dass es einige Zeit dauern wird, bis eine solche Änderung tatsächlich in den Mainstream-Kernel-Versionen ankommt. Und bis die dann auf Linux-Servern zum Einsatz kommen, dürften sicher noch einige Jahre ins Land ziehen. Bis dahin haben die LibreSSL-Entwickler eine spezielle Ausnahmebehandlung für fork() [5] eingebaut. (ju [6])
>>>Klick mich<<< Bitte nicht anklicken!