14/10/2019

Wie werden Passwörter sicher gespeichert?

Authentifizierung ist ein Kernaspekt von Webapplikationen. Egal ob Online-Shops wie Amazon, Online-Games wie World of Warcraft oder das Konto bei PayPal, sie alle erfordern es, dass sich ein Benutzer zunächst registriert und bei Benutzung der Applikation dann einloggt. Dabei ist das Passwort das Erkennungsmerkmal, das der Applikation sagt: „Hier handelt es sich um Benutzer xy“. Leider treffen wir im Zuge von Penetration Tests immer wieder auf Applikationen, die den Umgang und Schutz der User-Passwörter nicht ausreichend ernst nehmen, oder diese schlicht falsch implementieren. Deshalb möchten wir mit ein paar Mythen des Passwortschutzes aufräumen:

Passwort-Hashing auf Client-Seite als Fehlerquelle

Das Prozedere funktioniert wie folgt: Der Benutzer loggt sich ein, wodurch das Passwort vom Client an den Server gesendet und dort auf Richtigkeit geprüft wird. Dabei wird das Passwort häufig bereits beim Client „unleserlich gemacht“ oder wie es eben im Fachjargon heißt: „gehasht“. Die Idee dahinter wäre, dass ein Angreifer, welcher die Kommunikation belauscht, dadurch nicht das Passwort auslesen kann. Theoretisch ein guter Ansatz allerdings wird der übertragene Hash unweigerlich zum Passwort der Applikation. Der Server erwartet also das gehashte Passwort für die Anmeldung des Benutzers. Ist ein Angreifer also in der Lage den Hash abzugreifen, so kann er diesen Hash nutzen, um sich an der Applikation anzumelden. Diese Art des Angriffs wird auch Pass the Hash (Pth) genannt.
Die richtige Maßnahme in diesem Fall: Eine Verschlüsselung der Kommunikation mit Algorithmen nach dem derzeitigen Stand der Technik. Dadurch wird sichergestellt, dass ein Angreifer keinen Klartext auslesen kann, wodurch weder der Passwort Hash noch das Passwort selbst auslesbar wird.

Rainbow-Table Angriffe verhindern

Mittlerweile dürfte es zum allgemeinen Wissensstand gehören, dass Klartext-Passwörter nicht in einer Datenbank gespeichert werden sollen, nicht zuletzt, weil die eingesetzten Sicherheitsmaßnahmen keinen ausreichenden Schutz bieten. Aber auch gehashte Passwörter können geknackt werden: Hash-Funktionen sind sogenannte Einweg-Funktionen, was bedeutet, dass derselbe Input immer zum selben Output führt, rückwärts betrachtet, aber vom Output nicht auf den Input geschlossen werden kann. Ein findiger Angreifer kann aber beliebige Zeichenketten vorab als Hash berechnen und sie in einer Art Wörterbuch abspeichern. Er verfügt dann über ein Nachschlagewerk mit Hashs, die für ein bestimmtes Wort stehen. Diese Angriffe werden Rainbow-Table-Angriffe genannt und ermöglichen es einem Angreifer gehashte Passwörter zu knacken.

Das „Salz“ in der Suppe

Damit man sich vor diesem Angriff schützen kann, ist es notwendig einen sogenannten „Salt“ dem Hash hinzuzufügen.

Dadurch kann der gleiche Inputwert mit unterschiedlichen Salts gehasht werden, wodurch das Erzeugen einer Rainbow-Table unendlich aufwendig wird.

Limes empfiehlt

Das korrekte Speichern von Passwörtern ist eine komplexe Herausforderung. Wir empfehlen die entsprechenden Entwickler mit gezielten Workshops im Bereich Secure-Development zu schulen, damit die Verantwortlichen nicht nur mit den aktuellen Sicherheitskonzepten vertraut sind, sondern auch gleich technische Umsetzungsleitfäden in den jeweiligen Entwicklungssprachen erhalten.

Unsere Spezialisten helfen Ihnen gerne weiter – kontaktieren Sie uns!