Menü
Security

Apache-Tool erzeugt Passwort-Hashes mit vorhersagbaren Salts

Von
vorlesen Drucken Kommentare lesen 83 Beiträge

Salts sollen den Einsatz von Wörterbuchattacken und Rainbow Tables auf Passwort-Hashes erschweren, falls ein Angreifer doch mal auf die Passwortdatenbank zugreifen kann. Allerdings gibt es offenbar fehlerhafte Implementierungen, bei denen es die Entwickler den Passwort-Knackern unnötig leicht machen. Peter Watkins berichtet auf Bugtraq von einem weit verbreiteten Beispiel: das im Lieferumfang des Apache-Webservers enthaltene htpasswd. Das Tool erzeugt unter anderem die MD5-Hashes aus Passwörtern und Salts für Basic HTTP Authentication.

Leider nutzt htpasswd dabei nicht den möglichen Zahlenraum für Salts aus, sodass die effektive Länge von 48 auf 29 Bits reduziert ist. Dies entspricht laut Watkins nur 0.000191 Prozent des für den Hash-Algorithmus nutzbaren Bereichs, womit ein Salt leichter vorhersagbar ist. Damit lohnt es sich möglicherweise doch wieder, im Rahmen von Rainbow Tables die Hashes trotz des Salts vorauszuberechnen.

Der Grund für das Problem liegt laut Bericht darin, dass htpasswd den Pseudozufallszahlengenerator rand() initialisiert, indem es srand() mit der aktuellen Zeit füttert (Time of day). So hat unter anderem jedes Passwort, das in der gleichen Sekunden erzeugt wird, das gleiche Salt (UYuQl/..):

~$ htpasswd -nbm user1 pass1; htpasswd -nbm user2 pass2;  htpasswd -nbm user3 pass2
user1:$apr1$UYuQl/..$ViUB8TjwOV4bSX7TT65Nh1
user2:$apr1$UYuQl/..$hCaYQ2z9z8nBEUtYH.SqJ1
user3:$apr1$UYuQl/..$hCaYQ2z9z8nBEUtYH.SqJ1

Dies führt dazu, dass bei User2 und User3 das gleiche Passwort den gleichen Hash ergibt. Zudem enden alle Salts mit den Zeichen /..

Als Lösung schlägt Watkins vor, ein anderes Tool zur Erzeugung der Hashes zu benutzen, das zufälligere Salts generiert. Dazu müsse das alternative Tool nur den "apr1"-MD5-Algorithmus unterstützen. In der Apache-Fehlerdatenbank sind aber bereits Patches für htpasswd unter Apache 1.3.39 und 2.2.8 verfügbar, durch die das Tool wieder den vollen Zahlenraum mit 48 Bits nutzen soll. Dafür macht es laut Beschreibung Gebrauch von /dev/urandom und /dev/random.

Die gepatchte Version soll dann keine vorhersagbaren Salts mehr liefern:

 
$ htpasswd -nbm user1 pass1; htpasswd -nbm user2 pass2; htpasswd -nbm user3 pass2
user1:$apr1$wMdual6C$4.JZNIEfbWvF7OKvpsTGO0
user2:$apr1$LCXYBrpM$6ypjd9FWcVjt6niwCHst71
user3:$apr1$7vefL1ic$6WdQmN9sMUQvQvMGVyHU//

Siehe dazu auch:

(dab)