Zwei Faktor Authentifizierung für SSH Zugang

SSH bietet Administratoren den sicheren Zugriff auf Systeme wie Server im Rechenzentrum oder Einplatinencomputer wie z.B. Raspberry Pi oder Banana Pi im heimischen Netzwerk. Oftmals wird der SSH Zugriff direkt über das Internet erlaubt. Dieses Szenario bietet eine generelle Angriffsfläche. Schon alleine wenn der Zugriff über ein nicht vertrauenswürdiges System erfolgt. Sind die Zugangsdaten einmal weg, haben Angreifer leichtes Spiel. Eine Möglichkeit ist der Einsatz von SSH Keys. Hier kommt ein asymmetrisches Verschlüsselungsverfahren zum Einsatz. Auf dem Zielsystem befindet sich nur der Public Key. Der sichere Private Key, der mit einer Passphrase geschützt ist, befindet sich unter Kontrolle des Administrators. Beim Zugriff auf das Zielsystem (Server, Banana Pi oder Raspberry Pi) wird also der Private Schlüssel sowie die zugehörige Passphrase benötigt.


Der klassische Zugang per Passwort lässt sich jedoch auch mit einem zweiten Faktor absichern. Dazu gibt es von Google ein Open Source Authentifizierungsmodul (libpam-google-authenticator). Damit lässt sich mit einem Smartphone (iOS, Android, BlackBerry) ein „One-Time-Password“ erstellen. Die Implementierung der „Zwei Faktor Authentifizierung“ auf einem Linux System ist schnell umgesetzt. Die benötigte Smartphone App „Google Authenticator“ lässt sich in den App Stores finden. Für Windows Phone lässt sich die App „Authenticator“ von Microsoft verwenden. Auf dem Linux System muss das entsprechende Paket mit dem „Google Authenticator“ installiert und dann für den SSH Zugriff aktiviert werden. Der „Secret Key“ für die Mobile App wird einfach per Befehl erzeugt.

Installation unter Arch Linux:

yaourt -S libpam-google-authenticator

Installation unter Debian Linux:

sudo apt-get install libpam-google-authenticator

Nach der Installation sollten als erstes der „Secret Key“ sowie die Notfallcodes generiert werden. Die Notfallcodes werden benötigt, wenn die App mal den Dienst verweigern sollte oder nicht zur Verfügung steht. Selbstverständlich müssen diese Daten sicher abgespeichert werden (z.B. KeePass Passwortsafe). Im Folgenden wird der Vorgang des durchzuführenden Befehls dargestellt.

google-authenticator
Do you want authentication tokens to be time-based (y/n) y
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/foo@barOsecret%0815CODE
Your new secret key is: 0815CODE
Your verification code is 123456
Your emergency scratch codes are:
  12345678
  87654321
  78945612
  65412387
  96322874

Do you want me to update your "/home/username/.google_authenticator" file (y/n) y

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y

Mit dem „Secret Key“ lässt sich das „One-Time-Password“ in der Smartphone App einrichten. Dies sollte geschehen, bevor die Zwei Faktor Authentifizierung aktiviert wird. Alternativ lässt sich auch die URL öffnen. Der angezeigte QR Code kann von der App ebenfalls eingelesen werden. Wenn das Smartphone ein OTP ausspuckt, lässt sich das PAM Modul aktivieren. Dazu müssen in der Datei „/etc/pam.d/sshd“ folgende Zeilen eingefügt werden. Bei Debian wird nur die erste Zeile „auth required pam_google_authenticator.so“ benötigt. Die weiteren Einträge sind bei Arch Linux erforderlich.

sudo nano /etc/pam.d/sshd
auth      required        pam_google_authenticator.so
auth      required        pam_unix.so
auth      required        pam_env.so

Die Datei sollte danach ähnlich wie das Beispiel aussehen.

#%PAM-1.0
auth      required  pam_google_authenticator.so
auth      required  pam_unix.so
auth      required  pam_env.so
auth      include   system-remote-login
account   include   system-remote-login
password  include   system-remote-login
session   include   system-remote-login

In dieser Konfiguration wird als erstes das „One-Time-Password“ abgefragt, bevor das tatsächliche User Kennwort eingegeben wird. Die Reihenfolge kann geändert werden, indem die Zeile „auth required pam_unix.so“ vor „auth required pam_google_authenticator.so“ gesetzt wird. Bei den Modulen „pam_google_authenticator.so“ und „pam_unix.so“ kann die Aktion von „required“ auch auf „sufficient“ für erste Tests geändert werden. Sollte die TOTP Authentifzierung fehlschlagen, funktioniert die Anmeldung mit Passwort weiterhin. Zusätzlich muss das „Challenge Response Verfahren“ in der Datei „etc/ssh/sshd_config“ aktiviert werden. Der vorhandene Wert wird auf „yes“ geändert.

sudo nano etc/ssh/sshd_config
ChallengeResponseAuthentication yes

Die Konfiguration ist somit abgeschlossen und kann aktiviert werden, indem der SSH Daemon neu gestartet wird.

sudo systemctl reload sshd

Ab sofort wird bei einem SSH Zugriff der zweite Faktor abgefragt.

SSH 2 Faktor Authentifizierung

2FA SSH

Mit dieser Möglichkeit werden Server oder Single Boards (Raspberry Pi, Banana Pi), die den SSH Port über das Internet geöffnet haben ein Stück abgesichert, da ohne einen zweiten Faktor (2FA) kein Zugriff mehr möglich ist. Auch das Risiko durch Keylogger wird somit eliminiert.

Quelle: https://wiki.archlinux.org/index.php/Google_Authenticator