Passwortsicherheit in Webanwendungen mit Phpass

© © Michael Möller, fotolia

Nützlicher Fleischwolf

Wie merkt sich eine Webanwendung ein Passwort? Gar nicht. Sie verwandelt es in ein Pfund Gehacktes. Dabei hilft Phpass, das in immer mehr bekannten Webanwendungen für Passwortsicherheit sorgt.
Egal, um welchen Dienst es sich dreht, den Benutzern geht es immer zu langsam. Der Schwerpunkt des ADMIN-Magazins 05/2011 verrät, mit welchen Tools man ... (mehr)

Das nigelnagelneue, hochpolierte Content-Management-System wartet nur darauf, von zahlreichen Nutzern mit Inhalten gefüttert zu werden. Damit die keinen Schabernack treiben, müssen sie sich vorher mit einem Passwort authentifizieren. Dessen Überprüfung scheint zunächst trivial: Die Web-Anwendung sucht in ihrer Datenbank das zum Benutzer gehörige Passwort und vergleicht es mit dem eingegebenen. Dazu müsste sie jedoch die Passwörter im Klartext in der Datenbank ablegen – während dem sicherheitsbewussten Entwickler bei diesem Gedanken die Haare zu Berge stehen, knallen bei den Angreifern die Sektkorken.

Man könnte jetzt selbst geeignete Sicherheitsmaßnahmen ergreifen – oder besser gleich zu fertigen Softwarekomponenten von Sicherheitsprofis greifen. Eine solche Lösung ist das Passwort Hashing Framework, kurz Phpass [1] . Es verschlüsselt Passwörter knacksicher und kommt in bekannten Webanwendungen wie dem Content-Management-System Drupal oder der Blog-Software Wordpress zum Einsatz – dort teilweise allerdings mit einigen Einschränkungen (dazu später mehr). Bevor man Phpass mit wenigen Handgriffen in die eigene Anwendung integrieren kann, ist ein kurzer Blick auf seine Arbeitsweise notwendig.

Hash mich

Phpass steckt jedes übergebene Passwort in eine spezielle mathematische Funktion. Wie ein Fleischwolf macht sie aus dem Passwort ein Pfund gehackte Zeichenkette. Die Funktion ist so aufgebaut, dass sie für ein Passwort immer das gleiche Ergebnis liefert, aus dem sich nur mit großem Aufwand das originale Passwort rekonstruieren lässt. Eine solche Funktion bezeichnet man als Hash-Funktion, die chaotische Ausgabe als Hash-Wert (oder auch Fingerabdruck des Passworts).

Die Webanwendung muss jetzt nur noch diesen unleserlichen Hashwert in der Datenbank speichern ( Abbildung 1 ). Sobald sich ein Benutzer später mit seinem Passwort anmeldet, berechnet Phpass aus der Zeichenkette erneut den Hashwert und vergleicht ihn mit dem in der Datenbank hinterlegten.

Abbildung 1: Hat ein Angreifer Zugriff auf die Datenbank, sieht er dort nur kryptische Zeichenketten. Hier gewährt PhpMyAdmin Einblick in das Content-Management-System Joomla, welches das MD5-Verfahren mit Salt verwendet.

Fünf ist Trümpf

Nach diesem Prinzip arbeiten schon länger alle großen Web-Anwendungen. Wie das Content-Management-System Joomla benutzen sie als Hash-Funktion allerdings durchweg den Message Digest Algorithm 5, kurz MD5. Er ist sogar praktischerweise in jeder PHP-Umgebung mit einer eigenen Funktion vertreten:

$hashwert = md5($passwort);

MD5 wurde jedoch von seinen Erfindern für eine schnelle Verarbeitung optimiert. Mit genügend großer Rechenkraft und ein paar Tricks lassen sich mittlerweile aus den von ihr berechneten Hash-Werten die Passwörter herausfinden. Moderne Mehrkernprozessoren oder Grafikchips (Stichwort GPGPU) rechnen für ein Passwort mehrere Millionen MD5-Hashes pro Sekunde durch und vergleichen sie mit dem gespeicherten Hash. Dank Clouds und billigen Terabyte-Platten kann man sogar einfach für jedes mögliche Passwort vorab den zugehörigen Hashwert berechnen und in einer langen Tabelle ablegen (sogenannte Rainbow Tables). Wie in einem Telefonbuch muss man dann nur nachschlagen, welcher Hashwert zu welchem Passwort gehört.

Glücklicherweise bietet die PHP-Umgebung über die etwas umständlich zu nutzende Funktion »crypt()« noch weitere, bessere Hashfunktionen an [2] . Welche dabei tatsächlich zur Verfügung stehen, hängt von der PHP-Version und dem Betriebssystem ab. Phpass fährt deshalb notgedrungen eine mehrstufige Strategie: Zunächst versucht es den wesentlich sichereren Bcrypt-Algorithmus zu verwenden, der wiederum auf dem Blowfish-Verfahren basiert [3] .

Sollte Bcrypt nicht greifbar sein, zieht Phpass das Extended-DES-Verfahren heran. Kann es auch dies nicht nutzen, fällt es als Notlösung auf MD5 mit ein paar eigenen Sicherheitserweiterungen zurück. Der Phpass-Entwickler hat Blowfish und Extended-DES bewusst zu seinen Favoriten gekürt, da sie in den meisten Systemen besonders effizient in C implementiert sind.

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023