Vor kurzem berichten diverse Newsticker über eine Windows-Sicherheitslücke, die seit 1997 bekannt ist. Aber es handelt sich dabei nicht um eine Lücke, sondern schlicht um ein „dummes“ Konzept. Wenn ein Browser oder eine Anwendung eine Ressource nicht über http:\\server oder https:\\server holen soll, sondern über smb:\\server oder schlicht \\server und der Server eine Authentisierung verlangt, dann wird Windows extrem hilfsbereit: es versucht den Nutzer einfach mal anzumelden. Vielleicht kappt das ja und dann muss der Nutzer nicht mit so einem lästigen Passwortprompt behelligt werden. Und dabei wird freundlicherweise die Kombination von Benutzer-Name und Passwort genommen, mit der der Nutzer gerade am Windows angemeldet ist. Wie blöd ist das denn?
Bindet ein Anbieter eine Grafik (das berühmte weiße Pixel reicht völlig) über das smb-Protokoll ein, bekommt der Server Benutzername und gehashtes Passwort frei Haus. In vielen Artikel liest man, dass der Angreifer dann noch das Passwort knacken muss. Das stimmt so nicht immer.
Microsoft verwendet bei der Anmeldung an einer Ressouce per smb (genauer NTLM(v2) Authentisierung) ein Challenge-Response-Verfahren. Der Server schickt eine Zufallszahl (das Challenge) an den Klienten und der muss es verschlüsselt zurück schicken (der Response). Nur womit wird verschlüsselt? Mit dem Passwort des Nutzers? Das Passwort kennt der Klient aber nicht, da es nur gehasht gespeichert wird. Das bei der Anmeldung eingegebene Passwort wird sofort gehasht und es wird nach erfolgreicher Authentisierung sofort gelöscht. Also nimmt der Klient in Ermangelung des Passworts den Hashwert des Passworts zur Authentisierung. Ist das Ziel des Angriffs die Anmeldung an einer entsprechenden Ressource reicht die Kenntnis des Hashes des Passworts völlig aus.
Dieses Verfahren ist auch als „Pass-the-Hash“ bekannt. Der Benutzer/Klient beweist dem Server, dass er den Hash des Passworts kennt, ohne ihn zu übertragen. Das eigentliche Passwort zur Anmeldung am ist nämlich der Hash des Passworts.
Was lernen wir hieraus? Passwort-basierte Challenge-Response-Verfahren benötigen immer das Passwort im Klartext auf beiden Seiten. Und das ist schlecht, da man Passworte nicht im Klartext speichern darf. Challenge-Response-Verfahren machen nur dann Sinn, wenn sie auf Private-Key-Kryptographie basieren. Denn nur dann kann man das Geheimnis (den privaten Schlüssel) vernünftig schützen. Dem Server reicht die Kenntnis des öffentlichen Schlüssels zur Authentisierung.
It’s not a bug, it’s a feature. Deshalb wird die Lücke wohl auch nicht gepatcht. Zu viele Anwendungen würden nicht mehr funktionieren.
Bei der Domain-Anmeldung an ein Active Directory kommt seit Windows 2000 eine Kerberos-basierte Authentifizierung zum Einsatz. Wen der Server kein Kerberos kann gibt es einen automatischen Rückfall auf NTLM. Abwärtskompatibilität macht IT-Sicherheit nicht einfacher.