Privacy- und Sicherheitsaspekte

Dissertation "Privacy- und Sicherheitsaspekte in ubiquitären Umgebungen" als Buch und als PDF
Debian und OpenSSL: Die Schonzeit ist vorbei
Debian (und Debian-Derivate wie Ubuntu) hat ein akutes Problem mit OpenSSL-Schlüsseln, die nach dem 17.9.2006(!) erzeugt wurden: Durch einen Debian-spezifischen Patch sind die verwendeten Zufallszahlen so schwach, daß die Schlüssel leicht gebrochen werden können und somit die Verschüsselung von OpenSSH, https und vielen weiteren mehr oder minder hinfällig ist. Seit gestern existiert ein Programm zum automatischen Brechen solcher Schlüssel - es ist also höchste Zeit, sein Schlüsselmaterial zu aktualisieren und auf mögliche Einbrüche zu prüfen! Die Geschichte hinter dem Bug liest sich übrigens mehr als gruselig:
Ein Debian-Entwickler hat nach diesem Bericht OpenSSL mit valgrind untersucht. Valgrind ist ein Tool, um Speicherlecks und diverse Programmierfehler aufzuspüren. Valgrind entdeckte tatsächlich ein potentielles Problem: An einer Stelle wurde auf nicht initalisierten Speicher zugegriffen - also Speicher, der vom Programm angefordert, aber noch nicht sinnvoll belegt wurde (ein typischer Programmierfehler ist es, versehentlich mit dem potentiellen Datenmüll zu arbeiten). Daraufhin entfernte der Debian-Entwlickler den Aufruf, der zu dem Fehler führte. Dummerweise war dies ein Teil der Routine, welche Zufallszahlen für die Generierung von Schlüsseln besorgt - OpenSSL nutzt offensichtlich solchen Speichermüll als Entropiequelle.
Autsch - wie kann man nur in einem sicherheitskritischen Programm so unkritisch herumfuhrwerken? Ich stelle mir gerade den zugehörigen Logeintrag vor: "Aufruf der Routine entfernt, diese lieferte keine sinnvollen Daten, nur zufällige Bits"...
Die Analyse dieser "Verbesserung" zeigt, daß die erzeugten Schlüssel nun einzig und allein von der Prozeß-ID des Programmlaufs abhiengen - damit schrumpfte der Raum der Zufallszahlen auf 32768 verschiedene Werte. Daß man diese trivial durchprobieren kann, ist wohl offensichtlich.
Ein geknackter Schlüssel bedeutet, daß sich der betroffene Datenverkehr abhören oder via man-in-the-middle manipulieren läßt. Damit wird de facto ssh zu telnet und https zu http, jede solche Verbindung kann potentiell abgehört werden. ssh-Keys zur Authentisierung via Schlüssel sind ebefalls betroffen, so kann eine solche Authentisierung mit (im Schnitt) ca. 16000 Login-Versuchen geknackt werden. In kritischen Umgebungen müssen auch ssh-Keys, die zwar mit einer nicht kompromittierten Version generiert wurden, aber deren Secret Key auf einem System mit schwachem ssh-Host-Key lag, als kompromittiert betrachtet werden.
Unter dem Aspekt, daß man so nur wenige ssh-Keys für einen Account durchprobieren muß, erscheinen auch die ssh-Scans nach root-Accounts, die ich seit dem 7. Mai in meinen Logs finde, in einem ganz anderen Licht. In diesem Blogeintrag habe ich Links auf das svn-Repository von Debian gefunden: dies war der fatale Patch und dies ist der Fix. Der Fix wurde also 5 Tage vor dem offiziellen Advisory, also am 8. Mai eingespielt! Dies läßt die Debianer in einem doppelt schlechten Licht erscheinen: Zum einen wurde ein wirklich wichtiger Patch nicht zeitnah kommuniziert, zum andern drängt sich die Vermutung auf, daß Leute, welche von dem Problem Kenntnis hatten (was insbesondere Debianer gewesen sein dürften), ganz schnell ans Scannen gemacht haben.
Debian liefert im aktualisierten Paket ein Tool namens ssh-vulnkey mit, mit dem geprüft werden kann, ob ein Schlüssel mit einer defekten openssl-Version erzeugt wurde. Man kann damit aber auch überprüfen, welche Webseiten schwache Schlüssel benutzen - so zum Beispiel whitehouse.gov... ich habe die Befürchtung, daß die Bezeichnung "security fuckup des Jahres" keine allzu große Untertreibung sein dürfte.
Trackback-URL für diesen Artikel:
Ist meiner Meinung nach DER Bug des Jahrzehnts und so wie die Bots reagieren werden wir auch noch genug davon haben:
Jeglichemit OpenSSL eurzeugte Keys die unter Debian (-Derivaten) nach dem 17.09.2006 generiert wurden sind übelst anfällig für si...
…Der tatsächliche ‘Verlierer’ ist nicht nur Debian und seine Derivate. In Zukunft sollte man mit Atributen wie sicherste Distribution etwas vorsichtiger umgehen und auch Schadenfreude bei denn Distributions-Schwestern und -Br...


Über die Wichtigkeit von Code-Kommentaren
Etwas ganz anderes fällt aus diesem unglücklichen Bad Fix noch als "Meta-Weisheit" heraus: Wie wichtig es ist, Code zu kommentieren! Das hämmere ich meinen Kollegen seit Jahr und Tag ein und keiner will's wissen...
In diesem Punkt ist derjenige, der den Rollback macht und den falschen Fix wieder heraus nimmt nicht schlauer als der Pechvogel, der ihn eingearbeitet hat: Letzterer hat wenigstens noch einen Pseudo-Kommentar dazu gesetzt, der nun wieder weg ist. Hätte der ursprüngliche Autor nur eine weitere Zeile vor das MD_Update(&m,buf,j) gesetzt = "Add uninitialised memory as random data seed by design", wäre das mit Sicherheit nicht so ohne weiteres auskommentiert worden. Aber so...
Na ja, jetzt wissen ja alle von diesem Superfehler und ein Kommentar erübrigt sich damit ohnehin, gell!
Oh Mann, Programmierer sind schon ein seltsames Volk. Sind stolz drauf, wenn keiner außer ihnen selbst ihren ach so hoch performanten, kommentarlosen Supercode versteht und provozieren damit genau solche katastrophalen Spätfolgen - wenn nämlich irgendein Dritter an Sachen herumwurstelt, die er nicht versteht resp. verstehen kann (ohne sich dessen bewusst zu sein).
q.e.d.
Re: Über die Wichtigkeit von Code-Kommentaren
"Real programmers don't comment their code - it was hard to write, so it should be difficult to read" :-)
Aber Du hast schon recht: Ein Kommentar insbesondere an einer so unorthodoxen Stelle wäre sicher kein Fehler gewesen.
Andererseits ist es schon reichlich naiv, mit valgrind entdeckte (potentiell) fehlerhafte Zeilen einfach auszukommentieren, ohne dabei das Hirn zu benutzen. Insbesondere im kryptographischen Bereich (oder allgemein bei sicherheitsrelevanten Themen) kann das besonders leicht ins Auge gehen: Offensichtlich funktioniert ja noch alles (wie in diesem Beispiel gesehen) - aber geschwächte Sicherheit läßt sich nicht mit einer "compiliert-linkt-startet"-Nagelprobe herausfinden.
wenn man dann noch bedenkt,
wenn man dann noch bedenkt, wie viele weiteren Distributionen von Debian oder *buntu geforkt sind...Und wenn man überlegt, daß Debian gerade als die "Sicherheitsdistribution" galt...
Gerade im Bereich VPN-Gateways wäre da ja glaube ich auch durchaus "interessantes" Datenmaterial zu holen.
Eigentlich sollte man sämtliche authorized_keys, deren Herkunft man nicht 100% Debianfrei garantieren kann löschen...
Es ist noch perfider
Zum einen: Rate, was in meiner Umgebung gerade fleißig gemacht wird - ssh-Keys tauschen, authorized_keys leeren :-(
Auf der Seite im Debian-Wiki über das Problem findet man diesen Hinweis:
Additionally, simply the use of DSA keys may have compromised them. A strong key (i.e., generated with a 'good' OpenSSL) but used locally on a machine with a 'bad' OpenSSL must be considered to be compromised. This is due to an 'attack' on DSA that allows the secret key to be found if the nonce used in the signature is reused or known.
Wegen der fehlenden Entropie kann eine Schwachstelle in DSA ausgenutzt werden. Selbst wenn man ein DSA-Schlüsselpaar auf einem sicheren System erzeugt hat, führt die Nutzung des Private Keys auf einem anfälligen Debian (also wenn man von dort aus eine ssh-Verbindung initiiert) zur potentiellen Kompromittierung des Schlüssels.