In der letzten Zeit häufen sich die Fälle, das Angreifer in Webseiten eindringen und die gefundenen persönlichen Daten inklusive der Passwörter später im Internet veröffentlichen. Jüngstes Beispiel ist die Veröffentlichung von etwa 50.000 Kombinationen aus E-Mail-Adressen und Passwörtern aus dem Datenbestand der Supermarkt Kette Rewe.
TYPO3 ist ein sehr sicheres Content Management System und das TYPO3 Security Team leistet hervorragende und viel zu unterbewertete Arbeit, um den TYPO3 Core und die Extensions so sicher wie möglich zu halten. Dennoch kann nie zu 100% ausgeschlossen werden, dass ein Angreifer nicht doch irgendwie einen Weg auf den Webserver findet und an die Daten in der Datenbank kommt. Damit kommt er dann automatisch auch an die Passwörter, die in der Datenbank gespeichert sind. TYPO3 bis Version 4.5 speichert die Backend Passwörter standardmäßig als MD5 Hash und die Frontend User Passwörter im Klartext(!).
Warum das sehr ungut ist und wie man sehr leicht die Sicherheit der Passwörter erhöhen kann, möchte ich mit diesem Artikel zeigen.
Ein bisschen Theorie
Die Speicherung von Passwörtern im Klartext sollte unter allen Umständen vermieden werden. Eine Alternative stellt die Speicherung eines Hashes, also einer Prüfsumme, dar. Beim Login wird vom eingegebenen Passwort ein Hash erstellt, der dann mit dem in der Datenbank gespeicherten Hash verglichen wird. In den meisten Fällen wird für die Generierung des Hash der MD5 Algorithmus verwendet. Dieser erzeugt aus beliebigen Zeichenketten eine 128-Bit Prüfsumme (32 Zeichen lang). Auch TYPO3 verwendet diese Methode für das Backend Passwort. Seit einiger Zeit ist aber bekannt, dass diese Methode aus zwei Gründen unsicher ist. Zum einen ist die Möglichkeit einer Kollision, also das zwei unterschiedliche Texte die gleiche Prüfsumme ergeben, recht hoch, zum anderen existieren mittlerweile riesige Rainbow Tables, in denen Kombinationen aus Passwort und Prüfsumme gespeichert sind. Per Google können die Passwörter so leicht „entschlüsselt“ werden, vor allem wenn es sich um unsichere Passwörter ohne Zahlen und Sonderzeichen handelt.
Durch die Hinzufügung eines Salt (deutsch: Salz) kann die Passwort Sicherheit wesentlich erhöht werden. Ein Salt ist eine zufällig gewählte Zeichenkette, die vor der Bildung der Prüfsumme an das Passwort angehängt wird. Wörterbuch- und Brute-Force-Angriffe werden so wesentlich schwieriger, da es ohne das Salt zu kennen nicht möglich ist, geeignete Rainbow Tables zu generieren.
TYPO3 bringt eine einfache Lösung mit
Bereits seit Version 4.3 liefert TYPO3 die Systemextension saltedpasswords von Marcus Krause mit, in der verschiedene Hashing Methoden implementiert sind und die sowohl für Backend als auch Frontend Benutzer funktioniert. Die Extension erwartet, dass das Passwort am Server im Klartext ankommt. Bislang „verschlüsselt“ TYPO3 das Passwort mit einer JavaScript Methode, bevor es zum Server übertragen wird. Um den Übertragungsweg abzusichern ist nun entweder eine SSL Verbindung (https) nötig oder die Systemextension rsaauth von Dmitry Dulepov, die eine Verschlüsselung des Frontend oder Backend Passworts mit einem öffentlichen und privaten Schlüssel mit dem RSA Algorithmus vor der Übertragung des Passworts implementiert.
Einfache Installation in wenigen Schritten
Voraussetzung für rsaauth ist OpenSSL. Auf den meisten Servern dürfte die entsprechende PHP Erweiterung bereits installiert sein. Bei der Installation von rsaauth sollte ein extra Verzeichnis angelegt werde, in dem temporär Daten für die Ver- und Entschlüsselung gespeichert werden. Idealerweise liegt dieses Verzeichnis außerhalb des Document Root der Webseite und die Zugriffsrechte sollten auf 0700 gesetzt werden. Manche Hoster lassen keinen Zugriff auf Dateien außerhalb des Document Root zu. In diesem Fall sollte das Verzeichnis dann noch mit einer .htaccess Datei geschützt werden, die jeglichen Zugriff auf das Verzeichnis per Browser unterbindet:
Order deny,allow Deny from all Allow from none
In die localconf.php müssen anschließend diese beiden Zeilen eingetragen werden:
$TYPO3_CONF_VARS['BE']['loginSecurityLevel'] = 'rsa'; $TYPO3_CONF_VARS['FE']['loginSecurityLevel'] = 'rsa'; |
Die Werte können auch über das Install Tool gesetzt werden. Damit wird die RSA Verschlüsselung getrennt für Frontend und Backend aktiviert. Es ist auch möglich, die Verschlüsselung nur für Frontend oder Backend zu nutzen, aber es ist sehr ratsam, RSA für das ganze TYPO3 System zu aktivieren.
Anschließend wird die Extension saltedpasswords installiert. Auch hier ist es möglich, die Extension getrennt für Frontend und Backend zu konfigurieren. Nach einem Klick auf „Aktualisieren“ prüft die Extension ab, ob alle Voraussetzungen für die Aktivierung von saltedpasswords gegeben sind und weist auf mögliche Fehler hin:
Für das Backend muss entweder rsaauth aktiviert werden (siehe oben) oder $TYPO3_CONF_VARS[‚BE‘][‚lockSSL‘] auf einen Wert größer 0 gesetzt werden und $TYPO3_CONF_VARS[‚FE‘][‚loginSecurityLevel‘] = ’normal‘; aktiviert werden. Auch eine Kombination aus SSL und RSA ist möglich.
Wenn alles korrekt konfiguriert wurde, sollte die Prüfung so aussehen:
Bestehende Passwörter konvertieren
Um jetzt die bestehenden Passwörter zu konvertieren gibt es 2 Möglichkeiten. Entweder wird beim nächsten Login das Passwort automatisch konvertiert oder man nutzt den mitgelieferten Scheduler Task, um die Passwörter per Cronjob schnell und automatisch zu konvertieren. Sobald alle Passwörter konvertiert sind, deaktiviert sind der Scheduler Task selber.
Ergebnis kontrollieren
In der Datenbank (Tabelle fe_users oder be_users) kann man sich dann das Ergebnis anschauen:
Die gesalzenen Passwörter erkennt man daran, dass sie ein Prefix haben, z.B. M$1$
Kompatibilität
Die Systemextension felogin ist kompatibel mit saltedpasswords. Auch die Registrierungs Extensions datamints_feuser und sf_register unterstützen saltedpasswords. Mit sr_feuser_register scheint es auch keine Probleme zu geben.
Noch mehr Sicherheit
Wer die Sicherheit der Backend Passwörter noch weiter erhöhen möchte, sollte mal einen Blick auf die Extension be_secure_pw von Thomas Löffler werfen, die die Benutzer dazu zwingt, komplexe Passwörter zu verwenden.
Fazit
MD5 „verschlüsselte“ Passswörter sind nicht ausreichend sicher, Passwörter im Klartext sind ein absolutes No Go! TYPO3 liefert zwei erprobte Extensions mit, die sich in wenigen Minuten installieren lassen. Ausreden gibt es also keine 😉
Mit recht wenig Aufwand kann man sehr viel für die Sicherheit der einem anvertrauten Passwörter tun. Mit der kommenden Version 4.6 von TYPO3 wird saltedpasswords standardmäßig aktiv sein. Unklar ist noch, ob saltedpasswords auch bei einem Update auf TYPO3 4.6 automatisch aktiviert wird oder nur bei Neuinstallationen aktiv ist.
Welche Erfahrungen habt ihr mit saltedpasswords gemacht? Gab es irgendwo größere Schwierigkeiten? Ich konnte auch bei größeren Updates, z.b. von TYPO3 4.2 auf 4.5 und Update von sr_feuser_register keine Probleme feststellen.
Ich freue mich auf euer Feedback und Kommentare!