In this article
9 Best Practices für die Speicherung von Passwörtern
Die sichere Speicherung von Passwörtern ist für jede Organisation eine Herausforderung – vom kleinen Start-up bis zum Großkonzern.
Bei neu gegründeten Start-ups kann der Mangel an Ressourcen dazu führen, dass zunächst unerfahrene Entwickler eingestellt werden, denen das nötige Fachwissen zur sicheren Speicherung von Passwörtern fehlt. Da die Authentifizierung oft schon früh im Entwicklungsprozess hinzugefügt wird, kann dies zu mangelhaften Verfahren für die Passwortspeicherung führen.
So entstehen unzureichende Implementierungen, auf denen die Anwendung aufbaut. Und je zentraler ein Modul für eine Anwendung ist, desto weniger geneigt ist der Entwickler, es später im Projektverlauf zu ändern – aus Angst, etwas kaputtzumachen.
Die mangelhafte Authentifizierungsimplementierung wird also weitergegeben, bis schließlich etwas schiefgeht und jemand die Passwörter Ihrer Benutzer stiehlt.
Best Practices für die Anwendungssicherheit sind in der Entwicklungsphase entscheidend, um Sicherheitsverletzungen von vornherein zu verhindern. Doch nichts ist zu 100 % sicher. Deshalb müssen Sie Maßnahmen ergreifen, um die Passwörter Ihrer Benutzer zu schützen.
In diesem Artikel stellen wir die wichtigsten Best Practices für die Speicherung von Passwörtern vor.
1. Schützen Sie Ihre Datenbanken und Container
Datenbanksicherheit ist nicht ausschließlich eine Best Practice für Passwörter. Sie betrifft vielmehr alle in Ihrer Datenbank gespeicherten Daten und sollte daher nicht vernachlässigt werden.
Wenn ein Angreifer gar nicht erst auf Ihre Daten zugreifen kann, hat er auch keine Möglichkeit, sie zu entschlüsseln. Informieren Sie sich daher auch über die Best Practices zur Sicherheit Ihres Datenbankanbieters.
Das gilt natürlich für alle Ihre Systeme, nicht nur für Ihre Datenbanken. Wenn Sie eine gängige Container-Engine wie Docker verwenden, sind Sie den damit verbundenen Risiken ausgesetzt. Vernachlässigen Sie daher nicht die Container-Sicherheit und stellen Sie sicher, dass Ihre Systeme angemessen überwacht werden.
Container-Sicherheit mit Fokus auf Entwickler
Snyk findet und behebt automatisch Schwachstellen in Container-Images und Kubernetes-Workloads.
2. Hashen Sie alle Passwörter
Speichern Sie Passwörter niemals im Klartext. Erstellen Sie immer einen Hash daraus und speichern Sie stattdessen diesen. Beim Speichern von Passwörtern ist Hashing der Verschlüsselung überlegen, da sich ein Hash nicht umkehren lässt.
Wenn sich ein Benutzer anmelden möchte, können Sie aus dem eingegebenen Passwort erneut einen Hash erstellen und prüfen, ob dieser mit dem bei der Registrierung gespeicherten Hash übereinstimmt. Niemand mit Zugriff auf die Datenbank kann das ursprüngliche Passwort aus diesem Hash ablesen oder erraten – auch Sie und Ihre Kollegen nicht. Bei Verwendung eines Hashs gibt es außerdem keinen Verschlüsselungsschlüssel, der gestohlen werden könnte.
3. Verwenden Sie eine starke Hashfunktion
Nicht alle Hashfunktionen sind gleich. Manche sind kryptografisch unsicher, andere wurden für eine schnelle Berechnung entwickelt – genau das sollten Sie beim Hashen eines Passworts vermeiden.
Schnell berechenbare Hashfunktionen ermöglichen es Angreifern, viele zufällige Zeichenfolgen per Brute-Force auszuprobieren, bis sie die in den Hashes verborgenen Passwörter finden. Machen Sie es ihnen schwer. Zwar müssen auch Sie diese langsamen Funktionen verwenden, wenn Sie Passwörter bei der Registrierung oder Anmeldung hashen, aber nicht für Millionen zufälliger Zeichenfolgen.
OWASP empfiehlt, Passwörter mit Argon2 zu hashen. Falls das nicht verfügbar ist, verwenden Sie bcrypt und, falls auch bcrypt nicht verfügbar ist, scrypt.
4. Salzen Sie Ihre Passwörter
Beim Salzen eines Passworts wird vor dem Hashen eine zufällige Zeichenfolge hinzugefügt. Dadurch sehen die resultierenden Hashes gängiger Passwörter unterschiedlich aus. Ein Angreifer könnte über eine Tabelle mit solchen Passwörtern und den zugehörigen Hashes verfügen und einfach prüfen, welche davon Ihre Benutzer verwenden. Diese Tabelle enthält vielleicht den Hash für das Passwort password, aber nicht den für &()/&IJDNSBAEpassword.
Benutzer verwenden dasselbe Passwort außerdem häufig für mehrere Anwendungen. Wenn ein Angreifer also geleakte Passwörter aus mehreren beliebten Anwendungen erbeutet, verhindert das Salzen vor dem Hashen, dass er sie miteinander vergleichen kann.
Die Salt-Zeichenfolge wird zusammen mit der Passwort-Zeichenfolge in Ihrer Datenbank gespeichert. Moderne Hashing-Bibliotheken wie Argon2 oder bcrypt salzen Passwörter vor dem Hashen automatisch.
5. Peppern Sie Ihre Passwörter
Pepper funktioniert ähnlich wie Salting: Vor dem Hashen wird eine zufällige Zeichenfolge hinzugefügt.
Der Unterschied: Beim Peppern ist die Zeichenfolge für alle Passwörter gleich, wird aber nicht zusammen mit den Passwörtern in der Datenbank gespeichert. Stattdessen müssen Sie sie im Dateisystem oder im Objektspeicher ablegen. Jeder Speicherort ist geeignet, solange er sich nicht am selben Ort wie Ihre Passwortdatenbank befindet.
Selbst wenn ein Hacker Zugriff auf Ihre Datenbank erhält, fehlt ihm dann noch ein Teil der Daten. Dadurch wird es deutlich schwieriger, Ihre Passwort-Hashes den richtigen Passwörtern zuzuordnen.
6. Aktualisieren Sie Ihre Work-Faktoren
Hashfunktionen benötigen zwar eine gewisse Zeit für ihre Berechnungen, doch mit steigender Rechenleistung von Computern wird dieser Prozess immer schneller. Eine Hash-Berechnung, die bei der Entwicklung des Codes noch einige Sekunden gedauert hat, kann für einen Angreifer mit einem leistungsfähigeren Computer nur Millisekunden dauern.
Um diesem Problem entgegenzuwirken, verfügen Hashfunktionen über einen Parameter namens „Work-Faktor“. Je nach Work-Faktor führt die Funktion mehr Iterationen für Ihren Hash durch und benötigt dadurch mehr Zeit.
Bei Work-Faktoren sind zwei Dinge zu beachten. Einerseits soll das Hashen für Angreifer nicht zu einfach sein, andererseits darf die Anmeldung nicht zu schwierig werden. Vermeiden Sie daher generell extrem hohe Work-Faktoren.
Wenn Sie Ihre Infrastruktur modernisieren und Ihre Server leistungsfähiger werden, sollten Sie auch Ihre Work-Faktoren anpassen, damit Ihre Sicherheit ebenfalls von der höheren Leistung profitiert.
7. Zwingen Sie Benutzer nicht, ihre Passwörter zurückzusetzen
Früher galt es als Best Practice, Benutzer alle paar Wochen zum Ändern ihrer Passwörter zu zwingen. Damit sollten gestohlene Passwörter ein Ablaufdatum erhalten. In der Praxis frustrierte dies jedoch die Benutzer und führte dazu, dass sie einfachere und unsicherere Passwörter wählten.
Wenn Sie aufgrund von Compliance-Vorschriften an dieser veralteten Praxis festhalten müssen, können Sie sie nicht umgehen. Gibt es jedoch keine externen Faktoren, die solche Vorgaben erfordern, sollten Sie Ihre Benutzer nicht zum Ändern ihrer Passwörter zwingen. So bleibt die Qualität der Passwörter langfristig höher.
8. Achten Sie auf die Länge, nicht auf die Komplexität der Passwörter
Insgesamt ist die Länge eines Passworts wichtiger als seine Komplexität. Je länger das Passwort, desto mehr Rechenzeit ist erforderlich, um es programmatisch zu knacken – in manchen Fällen sogar Jahre. Das ist durchaus vorteilhaft, denn ein Benutzer kann sich IonceateahamburgerinLondon viel leichter merken als x5§.11#.
Deshalb sollten Sie von Benutzern nicht verlangen, Zahlen oder Sonderzeichen zu verwenden. Lassen Sie sie einfach ein Passwort ihrer Wahl eingeben und stellen Sie sicher, dass es länger als fünf Zeichen ist.
9. Vergleichen Sie Passwörter mit Wörterbüchern und Sperrlisten
Sie sollten Benutzer zwar nicht zur Verwendung beliebig komplexer Passwörter verpflichten, aber neue Passwörter mit bekannten Einträgen in öffentlichen Wörterbüchern und Sperrlisten abzugleichen, ist empfehlenswert. Stimmt ein neues Passwort mit einem Eintrag aus diesen Quellen überein, informieren Sie den Benutzer und stellen Sie sicher, dass er es nicht verwendet.
Auch Hacker greifen auf solche Passwortquellen zurück, um gestohlene Hashes abzugleichen. Ein Abgleich mit diesen Listen erschwert es Hackern daher zusätzlich, Ihre Passwörter im Klartext herauszufinden.
Best Practices für die Passwortspeicherung sind ein entscheidender Bestandteil des SDLC
Passwörter sind ein wesentlicher Bestandteil Ihrer Anwendung. Ihre sichere Speicherung ist langfristig wichtig. Je nachdem, wie sensibel die Benutzerdaten sind, kann ein kompromittiertes Passwort Ihr gesamtes Unternehmen zu Fall bringen.
Mangelhafte Passwortpraktiken können zu zahlreichen Sicherheitsproblemen führen: Sie ermöglichen Angriffe von außen und innen und machen Sie zugleich anfällig für Passwörter, die aus anderen Anwendungen wiederverwendet werden. Wenn die Benutzerakzeptanz sinkt, kann das außerdem Frustration auslösen und die Compliance beeinträchtigen, wodurch die Sicherheitsrisiken steigen. Schlimmstenfalls hält es Menschen davon ab, Ihren Service zu nutzen.
Bei der Entwicklung kritischer Software müssen Best Practices für die Sicherheit auf jeder Ebene des Entwicklungsprozesses angewendet werden. Passwortsicherheit ist nur ein kleiner Teil des sicheren SDLC. Verhindern Sie, dass Angreifer überhaupt erst an Ihre Passwörter gelangen. Der statische Application-Security-Scanner Snyk Code prüft Ihren Code auf bekannte Schwachstellen und zeigt Ihnen, wie Sie diese beheben können.
Sichern Sie Ihre Open-Source-Abhängigkeiten
Die entwicklerorientierten Tools von Snyk erstellen mit einem Klick Fix-Pull-Requests für anfällige Open-Source-Abhängigkeiten und deren transitive Abhängigkeiten.