SSH mit 2-Faktor-Authentifizierung

Für die Anmeldung an einem Server oder einer Webseite wird in der Regel eine Kombination aus Benutzernamen und Passwort benötigt. Sicherer ist es jedoch, neben dem Passwort einen zweiten Faktor einzusetzen, der ebenfalls abgefragt wird. Ideal ist ein zweiter Faktor aus einer anderen Kategorie, neben Wissen z.B. Besitz. Zusätzlich zum Passwort könnte der zweite Faktor also z.B. ein Smartphone sein.

 

Sicherheit für eigene Projekte

Genau hierfür gibt es seitens Google ein Projekt, welches eine 2-Faktor-Authentifizierung nach RFC-6238 implementiert. Der Besitz des Smartphones wird hierbei abgefragt, indem eine App (Google Authenticator) anhand eines geheimen Schlüssels und der Uhrzeit einen 6-stelligen Zahlencode generiert, der zusätzlich zum Passwort eingetippt werden muss. Das Verfahren nennt sich „timed one-time password“ (kurz: TOTP), also ein zeitabhängiges Einmalpasswort. Daher ist es auch erforderlich, dass am Smartphone und am Server relativ genau die gleiche Uhrzeit konfiguriert ist, denn das Passwort wechselt in der Standardkonfiguration alle 30 Sekunden.

Die App ist neben Android auch für iOS, Windows Phone und Blackberry erhältlich, daneben gibt es auch ein PlugIn für den kostenlosen Passwortmanager KeePass (Achtung: speichert man den geheimen Schlüssel UND das Passwort im Passwortmanager, ist es kein 2. Faktor mehr !).

Das Verfahren lässt sich relativ leicht in eigene Projekte integrieren – nachfolgend als Beispiel die Absicherung eines SSH-Servers unter Ubuntu Linux.

 

Ein 2. Faktor für SSH

Installieren Sie zunächst die App Google Authenticator auf Ihrem Smartphone.

Verbinden Sie sich per SSH zum abzusichernden Server. Lassen diese Session so lange geöffnet, bis Sie sicher sind, dass das neue Verfahren einwandfrei funktioniert !

Installieren Sie das Paket libpam-google-authenticator – das Paket ist in den aktuellen Ubuntu-Paketquellen integriert, aber auch in den Quellen vieler anderer Distributionen:

apt-get install libpam-google-authenticator

Nun gilt es, einen geheimen Schlüssel zu generieren – das erledigt ein gerade neu installierter Befehl, der im Dialog ein paar Dinge abfragt:

google-authenticator

Notieren Sie sich die ausgegebenen Zeichenketten gut, die unteren sind zeitunabhängige Einmalpasswörter, die Sie verwenden können, wenn es mit der normalen Variante mal nicht klappen sollte – z.B. wenn Sie das Smartphone verloren haben. Die erste Zeichenkette ist das geheime Passwort, welches in der Google-Authenticator-App auf dem Smartphone konfiguriert werden muss. Am einfachsten geht das, indem Sie den ebenfalls angezeigten QR-Code einfach mit der App vom Bildschirm scannen.

Nun müssen noch zwei Konfigurationsdateien auf dem Server um je eine Zeile ergänzt werden, damit der SSH-Server das neue Verfahren anwendet.

Bearbeiten Sie die Datei /etc/pam.d/sshd mit einem Editor (z.B. vi, mc (Midnight Commander) etc.) und fügen Sie die folgende Zeile ein:

auth required pam_google_authenticator.so

In der Datei /etc/ssh/sshd_config (nicht: ssh_config !) muss der folgende Parameter gesetzt werden – sofern nicht schon vorhanden, ergänzen Sie also die Zeile:

ChallengeResponseAuthentication yes

Schließlich muss der SSH-Daemon neu gestartet werden (bitte lassen Sie die bestehende SSH-Sitzung noch offen !):

service ssh restart

(oder je nach Version ggf. auch /etc/init.d/sshd restart)

Geschafft. Nun können Sie sich das erste Mal mit 2-Faktor-Authentifizierung einloggen – öffnen Sie eine neue SSH-Sitzung zum Server: nun werden Sie nach Benutzernamen, Passwort und anschließend noch nach dem TOTP gefragt, das alle 30 Sekunden von der App auf Ihrem Smartphone neu generiert wird !

Erst wenn Sie sicher sind, dass das einwandfrei funktioniert, können Sie auch die ursprüngliche Terminalsitzung beenden.

 

 Vorteil

Selbst wenn Ihnen bei der Anmeldung jemand über die Schulter schaut, ist der Server noch sicher: bekannt sind nur Ihr Passwort und ein bereits abgelaufenes Einmalpasswort. Und wenn das Smartphone verloren geht, hat der Finder lediglich Zugriff auf die Einmalpassworte, aber nicht Ihr festes Passwort, und zudem ist nicht bekannt, zu welchem Server das TOTP gehört. Mit dem obigen Befehl generieren Sie dann einfach einen neuen geheimen Schlüssel für das nächste Smartphone. 😉

 

Schreibe einen Kommentar