Einrichten einer Zwei-Stufen-Authentifizierung mit Apache

15.05.2015 / 0 Comments


Apache ist der meistgenutzte Webserver. Von der Apache Software Foundation (kurz ASF) ist der Apache Webserver frei und quelloffen herausgegeben worden. Dabei werden zahlreiche große Plattformen bzw bekannte Betriebssysteme wie Linux, Unix, Windows und Novells Netware unterstützt wie auch zahlreiche andere kleinere. Neben der grundsätzlichen Funktionalität als Webserver, lässt sich aufgrund des modularen Ansatzes von Apache die Kernfunktionalität leicht mit sogenannten Modulen erweitern. Mögliche Module sind solche zur Unterstützung von Skript-Sprachen wie PHP (mod_php5), Perl (mod_perl), Python (mod_python) oder Lua (mod_lua) seit Webserver-Version 2.3.

Schutzvorkehrungen für den Apache Webserver

Daneben gibt es weitere Module, um die Sicherheit der Webseite zu erhöhen und mögliche Angriffe abzuwehren. Solche Module sind jene für SSL (mod_ssl) oder für die Authentifizierung (mod_auth_basic, mod_authnz_ldap oder mod_authz_dbm und mod_authz_user), Session-Handling (mod_session und mod_session_crypto) und Nutzerverwaltung. Eine Gesamtübersicht aller Apache Module findet sich unter modules.apache.org.

Vorteile von Apache oder Apache versus Nginx

Aufgrund dieser zahlreichen Möglichkeiten sind Webseiten leicht zu implementieren, wobei die Vorteile von Apache hier im Bereitstellen von dynamischen Content zu finden sind. Im Gegensatz dazu Nginx, welcher schneller und performanter bei statischem Inhalt arbeitet. Daneben ist ein weiterer Vorteil, dass  Apache und PHP seit langem und somit stabil genutzt werden.

Apache Zwei-Stufen-Authentifizierung versus Zwei-Faktor-Authentifizierung

Aufgrund der Verbreitung von Apache und PHP nutzen viele Hoster diese Kombination. Viele Content Management Systeme (CMS) oder Blog-Systeme laufen auf einem solchen System aus Apache und PHP. Als verbreitetste Beispiele sind sicherlich WordPress, Joomla, Drupal und Magento zu nennen. Alle diese Systeme verfügen dabei über teils ähnliche Funktionalität wie der Apache HTTP Server. Nutzerverwaltung, Authentifizierung und SSL/HTTPS. Deswegen lässt sich nun einfach eine Zwei-Stufen-Authentifizierung aufsetzen. Wichtig ist hier, dass es sich um eine Zwei-Stufen-Authentifizierung handelt und nicht um eine Zwei-Faktor-Authentifizierung. Eine genauere Erklärung folgt am Ende bzw findet man in dieser „dieser Übersicht„.

CMS / Backend und Administrator-Bereich

Die meisten CMS bzw Blog-Systeme verfügen über einen Administrator-Bereich oder Backend, über das man gewisse Einstellungen vornehmen oder das CMS mit Inhalten füllen kann. So gelangt man bei WordPress über das Hinzufügen von /wp-admin/ oder /wp-login.php an die Webseiten-Url zum Backend, bei Joomla ist dies /administrator/ und bei Typo3 /typo3/. An dieser Stelle muss man sich üblicherweise mit Nutzername und Passwort authentifizieren. Jedoch sind die CMS in diesen Bereichen besonders anfällig für DOS- bzw DDoS-Attacken (Distributed-Denial-of-Service) bis hin zum Einschleusen von Code zB Cross-Site-Scripting (XSS) oder SQL-Injections. Eine häufig genutzte Schwachstelle ist die XML RPC Schnittstelle von WordPress. Siehe hierzu auch Sicherheit für WordPress: DDoS und Brute-Force Angriffe verhindern. Wobei Brute-Force-Angriffe auf Content Management Systeme eigentlich tagtäglich auftreten.

Zur Absicherung des Backends kann nun eine Zwei-Stufen-Authentifizierung mittels Apache dienen. Dazu nutzt man das Authentifizierungssystem von Apache und schaltet es vor das CMS-Backend. So kommen die zwei Stufen zustande. Zuerst authentifiziert man sich bei Apache und anschließend kann man sich am CMS authentifizieren. Kurz, erst erfolgt das Login am Apache, anschließend das Login am CMS.

Eine Möglichkeit bietet nun der Einsatz des Moduls mod_auth_basic  und der .htpasswd

Zwei-Stufen-Authentifizierung mit Apache

Apache .htpasswd

Mit Apache eigenen Bordmitteln lässt sich nun eine zweite Authentifizierungsstufe vorschalten, so dass ein Angreifer zwei statt lediglich einer Hürde zu überwinden hat. Dieses Apache Bordmittel dazu ist das Modul mod_auth_basic und der Datei .htpasswd. Dahinter verbirgt sich ein Mechanismus zur Authentifizierung und Autorisierung, mit Hilfe dessen sich leicht einzelne Verzeichnisse mit Passwörtern absichern lassen.

Jedes Verzeichnis, welches abgesichert werden soll, kann über die Datei .htpasswd verfügen. Die ganze Webseite kann somit fein-granular abgesichert werden. Sobald eine Datei oder der Verzeichnisinhalt von einem Browser oder Programm angefordert wird, fragt Apache nach der Authentifizierung, sofern dies nicht zuvor geschehen ist und in einer Apache internen Session gespeichert wurde.

 

Einrichtung eines solchen Passwort-Schutzen mit htpasswd:

In der Datei .htaccess die entweder im Root-Verzeichnis der Webseite oder analog zur .htpasswd in jedem beliebigen Verzeichnis liegen kann wird angegeben, welche Verzeichnisse mit Nutzer und Passwort geschützt werden sollen:

Mit AuthType wird die Art der Authentifizierung angegeben. Meist wird lediglich ‚Basic‘ genutzt, was für HTTP Basic Authentication steht. Nachteilig bei dieser Methode ist allerdings, dass Passwörter vom Browser unverschlüsselt übertragen werden. Um einzurichten, dass die Passwörter verschlüsselt übertragen werden müssen, muss der Wert ‚Digest‘ eingetragen werden.

Mit AuthUserFile wird der Pfad zur Datei angegeben, in der die autorisierten Nutzer stehen. Nutzt man hingegen Nutzergruppen, muss noch über AuthGroupFile ein Pfad zu einer Gruppendatei angegeben werden. Ein Beispiel folgt weiter unten.

Wichtig dabei ist, dass der Pfad zur .htpasswd absolut sein muss, da ansonsten die Datei nicht gefunden werden kann.

 

Generierung der Passwörter für .htpasswd

Um nun für die einzelnen Nutzer ein Passwort für die .htpasswd zu generieren, nutzt man den Unix-Befehl:

Das Flag -c erzeugt dabei eine neue Datei. Eine existierende wird ohne Nachfrage überschrieben. Um weitere Nutzer und Passwörter einer bereits existierenden Datei hinzuzufügen, benutzt man das Flag -m :

Der Inhalt der .htpasswd sieht zB wie folgt aus, sofern nur ein Nutzer namens ‚rachel‘ angegeben wurde:

Nutzung von Gruppen

Ein anderes Beispiel mit Gruppen:

Der Inhalt der Gruppen-Datei sieht zB wie folgt aus:

Die Nutzer, die nach dem Gruppennamen folgen, müssen in der .htpasswd Datei angegeben worden sein.

Der Zugangsschutz erfolgt nun für das in der .htaccess angegebene Verzeichnis und dessen Unterverzeichnisse. Um den Zugriff fein granulaerer zu gestaltetn, gibt es mehrere Möglichkeiten. In der .htaccess kann der Zugriff auf gewisse Dateitypen eingeschränkt werden:

Daneben kann die Authentifizierung auch auf einzelne Zugriffsarten beschränkt werden wie POST oder GET. (Verfügbar ab Apache 2.0.20 und erlaubt sind: POST, GET, PUT, DELETE, CONNECT, OPTIONS)

In dem Beispiel werden lediglich Zugriffe über GET eingeschränkt und nach einer Authentifizierung gefragt. Zugriff über POST sind dabei erlaubt.

Ebenso ist es möglich, den Zugriff auf bestimmte Bereiche der Webseite über IP-Adressen einzuschränken. Dies ist allerdings erst ab Apache 2.2.x möglich:

Mit Hilfe dieser beiden Mechanismen lassen sich die einzelnen Admin-Bereiche wie zB www.mysite.org/administrator/ mit einer zweiten Authentifizierung versehen. Meldet sich ein Nutzer erfolgreich an, wird er weitergeleitet und im Beispiel www.mysite.org/administrator/ würde er auf das Backend-Login von Joomla gelangen. Somit ist klar, warum diese Art der Authentifizierung Zwei-Stufen-Authentifizierung heißt.

Im Gegensatz dazu existiert die Zwei-Faktor-Authentifizierung. Bruce Schneier spricht hier teils sogar von einer Zwei-Kanal-Authentifizierung Üblicherweise funktioniert die Zwei-Faktor-Authentifizierung auf dem Prinzip, dass ein Nutzer einerseits etwas weiß und andererseits etwas besitzt. Als Beispiel wäre zB eine Smartcard oder mittlerweile teils auch eine Kreditkarte genannt. Der Nutzer besitzt diese Karte (physisch) und weiß die PIN um sich auszuweisen. Im Gegensatz dazu die Zwei-Stufen-Authentifizierung, bei der der Nutzer lediglich etwas mehr wissen muss, als bei einer einfachen Anmeldung.

Statt nun mit Apache und htpasswd eine Zwei-Stufen-Authentifizierung auf den Backend-Bereichen diverser Content Management Systemen einzuführen, lohnt sich der Einsatz einer Zwei-Faktor-Authentifizierung. Dies ist zB leicht Möglich mithilfe des SecSign ID Plugins für WordPress, Joomla oder Drupal.

Die Authentifizierung basiert dabei wieder auf dem Prinzip, etwas zu besitzen (vorzeigen zu können) und etwas zu wissen. In diesem Fall ist es ihr Smartphone und die PIN zu ihrer SecSign ID auf dem Smartphone. Daneben sieht man auch, dass hier eine richtige Zwei-Kanal-Authentifizierung, wie Bruce Schneier schrieb, vorliegt. Denn die Eingabe der SecSign ID im Backend-Bereich erfolgt auf einem anderen Kanal als die richtige Authentifizierung auf dem Smartphone. Dies geschieht teils sogar über ein anderes Netz (wenn zB das Smartphone im Funknetz sich befindet und nicht über WLAN).

Darüber hinaus ist das Besondere an dem SecSign ID Login, dass sie weder im CMS noch in Apache Passwörter speichern müssen. Somit ist das Content Management System sicher vor Bruteforce-Angriffen und vor Angriffen, die zum Ziel haben, an Passwörter oder Passwort-Hashes zu kommen.

Testen sie es einfach aus: SecSign ID: Wagen Sie einen Probelauf!

Sollten bei unseren APIs und Plugins manche Programmiersprachen oder CMS noch nicht von uns unterstützt werden, schreiben sie einfach an info@secsign.com und fragen sie. Wir freuen uns immer über Feedback.

Letzte Blog Einträge, Neuigkeiten & Funktionen

Crowd SSO

21.09.2017

Read More
Do NOT follow this link or you will be banned from the site!