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.
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