Passwörter rich­tig spei­chern – Teil 1

Der erste Teil der Serie Passwörter richtig speichern zeigt den Ist-Stand in vielen produktiven Systemen auf.

Klartext

Der einfachste Ansatz Benutzernamen und Passwörter in einer Datenbank zu speichern wäre es, die Informationen in einer Tabelle im Klartext in zwei Spalten zu speichern.

Die Datenbank ist nicht direkt von außen zu erreichen, die Ports sind auf der Firewall gesperrt und damit hinreichend geschützt. Die Datenbank selber wird nur über unsere Applikation abgegriffen – niemand sonst kennt die Zugangsdaten zu unserer Datenbank. Sollte ja eigentlich sicher sein, oder?

Dieser Ansatz – so verlockend er erscheinen mag – birgt einige gravierende Gefahren:
Erlangt ein Angreifer Zugriff auf die Datenbank, kann er leicht alle Zugangsdaten direkt abgreifen. Dabei muss er nicht direkt die Live-Datenbank knacken, sondern es genügt prinzipiell ein Backup der Datenbank zu ergaunern.

Ein noch einfacherer Ansatz ist der Zugriff auf die Datenbank über Schwächen in der Software, welche auf die Datenbank zugreift. Bekannt sind diese Angriffe auch unter dem Begriff: SQL Injection.

Vorteil
+ schnell umzusetzen
+ keine speziellen Vorkenntnisse nötig
+ performant

Nachteil
– Daten liegen unverschlüsselt vor
– jeder, der auf direkt auf die Datenbank zugreifen kann, hat alle Zugangsdaten
– geringe Hürde bei SQL Injection

Fazit
Der Klartext-Ansatz bietet gravierende Gefahren und ist in keinem Fall gerechtfertigt. Im Gegenteil: gehen die Daten verloren und werden von Angreifern missbraucht, sind rechtliche Konsequenzen nicht ausgeschlossen – vom Imageverlust ganz zu schweigen.

Gepaart mit SQL Injection Attacken ist das Abgreifen der gewünschten Informationen ein leichtes.

 

Beispiel
Gegeben sei eine Datenbank mit einer Tabelle „Benutzer“, welche unsere Daten vorhält:

Id Benutzername Passwort
1FF62DD8-9951-4773-81D6-28349BA387A1 Peter Tüte
5530EE86-60C5-48C2-B542-2F901C9DD858 Günther Gans
8311F27E-C94B-4365-9BF7-6CB885282672 Hans Wurst
41C4B028-14A3-4DD7-8C39-7377D8838C05 Hans Hacker
A0869AFD-14E0-4FF8-9264-C89FC5078348 RZA Cracker

Daneben existiert eine kleine ASP.NET Anwendung, die eine simple Eingabemaske mit zwei Eingabefeldern anbietet, welche Benutzername und Passwort entgegen nehmen, um eine Anmeldung vorzunehmen.

Werden die Anmeldedaten an den Server gesendet, wird eine Datenbankanfrage zusammengebaut und an die Datenbank gesendet:

 

Eine klassische SQL Injection wäre die Eingabe der folgenden Zeile in das Feld user:

Die Eingabe in das Feld pw ist uninteressant/beliebig, da die SQL Anweisung nach unserem Inject durch die beiden Querstriche — beendet wird.

Das Ergebnis ist die vollständige Liste aller Daten aus unserer Datenbank.

Ergebnis:

Benutzer Passwort
Peter Tüte
Günther Gans
Hans Wurst
Hans Hacker
RZA Cracker

Der oben stehende Code mag im ersten Moment arg konstruiert wirken, ist aber aus einem realen Live-System übernommen und wurde erst kürzlich überarbeitet und gegen SQL Injections abgesichert. SQL ist für viele Entwickler noch immer ein rotes Tuch und Mittel zum Zweck. Dem entsprechend ist der Code häufig auf Zweckmäßigkeit denn auf Sicherheit ausgelegt.

Download

Ein lauffähiges Beispiel kann in meinem Git-Repository abgerufen werden:
https://github.com/christianaschoff/Passworte-Teil1-Klartext

tl;dr

Passwörter im Klartext abzuspeichern sehr gefährlich und fahrlässig. Es ist keine Option für ein produktives System.

Schnelleinstieg
Der Übersichtlichkeit halber ist der Artikel in mehrere Teile gegliedert:
Intro: Vorwort
Teil 1: Klartext
Teil 2: MD5 und SHA
Teil 3: Salt & Pepper
Teil 4: BCrypt
Teil 5: BCrypt & Pepper und Gesamt-Fazit

Christian Aschoff

Christian Aschoff

Senior IT-Berater bei BROCKHAUS AG
Christian Aschoff ist bei der BROCKHAUS AG in der Individualentwicklung mit Microsoft-Technologien tätig. Darüber hinaus beschäftigt er sich mit übergreifenden Themen wie IT-Security, iOS-Entwicklung mit Mono und Unity 3D. Als jemand, dem Sicherheit am Herzen liegt, schreibt er für das blogHAUS hauptsächlich über Themen aus dem Bereich Security.
Christian Aschoff
<< Vorheriger Beitrag
Nächster Beitrag >>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.