Vor einiger Zeit rief Mike Kuketz in seinem Microblog dazu auf MD5 htpasswd Hashes zu ersetzen. Dabei empfiehlt er anstatt MD5 oder SHA1 auf bcrypt zu wechseln.

Für den Apache Webserver können Bcrypt verschlüsselte Passwörter einfach mit dem tool htpasswd und dem Schalter -B erzeugt werden (htpasswd -Bc passwordfile username). Apache unterstützt die Formate bcrypt, apr1 (MD5), SHA1, crypt () und unverschlüsselten Plain text.

Das Nginx Basic Auth Modul versteht jedoch keine bcrypt Hashes.

Tatsächlich unterstützt Nginx laut Dokumentation nur Plain text, crypt(),  apr1 (MD5), SHA1 und SSHA (salted SHA1) welche alle als mehr oder weniger anfällig für Kollissionsangriffe gelten (unterschiedliche Passwörter können den selben Hash ergeben).

Entgegen der offiziellen Dokumentation versteht das Nginx Basic Auth Modul jedoch auch SHA2 Passwort-Hashes (jedenfalls die bei Ubuntu 16.04. mitgelieferte Version).

Ein SHA-512 Hash lässt sich einfach erzeugen mit:

mkpasswd -m sha-512

Mkpasswd gehört bei Ubuntu zum Paket whois, welches zuerst installiert werden muss.
Der erzeugte Passworthash kann dann in die htpasswd Datei übernommen werden, in der Form

username:$6$E7UzqcDh3$XiFGo71gzxltwDnJqlMIFpejrCoxWX25xXBwRC0YSeFyQ7ylPBtLW/Jx//99k6G8YU3a2mtEyM9QNH4KafVA2.

Dies erhöht allerdings nur den Schutz vor Kollissionsangriffen. Der Schutz vor Wörterbuch- oder Brute-Force-Angriffen erhöht sich nicht.

Das reine durchprobieren von Passwörtern gegen die eigene Webseite kann dann erschwert werden indem man Aufrufe der Loginseite mit dem Modul ngx_http_limit_req_module  auf wenige Aufrufe pro Minute begrenzt oder z.B. Fail2ban einsetzt.

Da ich von Kryptographie generell wenig Ahnung habe, kann ich nicht wirklich beurteilen ob das ersetzten der standardmäßig verwendeten md5 Hashes in htpasswd Dateien in der Praxis wirklich einen Sicherheitsgewinn bringt. Allerdings verursacht das verwenden einer stärkeren Hashfunktion auch keinen zusätzlichen Aufwand.

Eines hat Mikes Aufruf für mich auf jeden Fall gebracht: Ich habe mich mit den auth_basic Modulen von Apache und Nginx beschäftigt und wieder etwas gelernt.


Dieser Text ist lizensiert unter einer Creative Commons Namensnennung 4.0 International Lizenz.

Comments are closed.