Die Sicherheit von User-Accounts wird nicht nur im geschäftlichen Bereich immer wichtiger, auch private Rechner enthalten sensible Daten, die vor fremdem Zugriff geschützt werden sollten. Mit einer Zwei-Faktor Authentifizierung minimiert man auch das Risiko, durch schwache oder gerne verwendete Passwörter Hackern das Leben leicht zu machen. Die Verwendung eines One-Time-Passwords (OTP, Einmalpasswort) ist zudem eine anwenderfreundliche Methode, um etwas mehr Sicherheit zu generieren. Dies gilt nicht für den Login am Desktop, denn mit einer Live-CD kann dieser Schutz einfach ausgehebelt werden. Diese Methode ist vor allem für SSH-Remote-Verbindungen gedacht.
In diesem Beitrag beschreibe ich die Einrichtung mit dem Google Authenticator auf einem Ubuntu-System und einem Token-Generator auf einem Android Smartphone.
Hinweis: Die folgende Anleitung funktioniert nicht bei -> verschlüsseltem home-Verzeichnis, da PAM im Moment des Logins noch nicht auf die erforderlichen Daten zugreifen kann! Keine Probleme gibt es bei verschlüsselten Partitionen.
Wie funktioniert ein One-Time-Password?
Aus der Sicht des Anwenders muss zusätzlich zum Passwort ein meist 6-stelliger Zahlencode eingegeben werden, der auf einem zweiten Gerät (z.B. einem Smartphone) generiert wird und nur für kurze Zeit gültig ist.
Technisch gesehen muss sowohl das System als auch der User das OTP kennen. Bei den TAN-Listen für Online-Überweisungen hat der User eine Liste der Einmalkennwörter, die auch dem System bekannt sind. Wird eine TAN verwendet, erlischt ihre Gültigkeit und sowohl User als auch System streichen die TAN aus ihrer Liste. Problematisch dabei ist, dass diese Listen Unbefugten bekannt werden könnten. Durch eine dynamische Generierung der Einmalkennwörter wird das vermieden.
Ich beschränke mich hier auf das zeitgesteuerte Verfahren, bei dem sowohl das System als auch der Generator den Algorithmus für die Generierung besitzt, den Time-based One-time Password Algorithmus (TOTP). Wer sich mit der genauen Funktion der Passworterzeugung näher beschäftigen möchte, findet bei -> Wikipedia eine ausführliche Erläuterung dazu.
Installation auf Ubuntu 16.04
Zunächst installiert man das Paket Google-Authenticator auf dem Ubuntu-System.
:~$ sudo apt update :~$ sudo apt-get install libpam-google-authenticaton
Konfiguration von FreeOTP
Anstelle des Google Authenticator verwende ich FreeOTP, da diese Software Opensource ist. FreeOTP kann über den Google Playstore installiert werden. Auf dem Rechnersystem wird im Terminal die Konfiguration aufgerufen mit
:~$ google-authenticator Do you want authentication tokens to be time-based (y/n)
Da ich ein zeitbasiertes Token verwenden möchte antworte ich mit y und erhalte einen QR-Code, sowie den Secret Key und Emergency Scratch Codes.
Diesen Barcode scannt man mit FreeOTP auf dem Smartphone ab.
Alternativ kann man auch über Schlüssel hinzufügen den Secret Key per Hand eintragen, der unter dem Barcode angezeigt wird. Alle weiteren Fragen beantworte ich mit y.
Your new secret key is: JDQWWMEQFYA5IUDC Your verification code is 068129 Your emergency scratch codes are: 41853321 88357914 80763204 70520773 60960856 Do you want me to update your "/home/impuscatura/.google_authenticator" file (y/n) Do you want to disallow multiple uses of the same authentication<br>token? This restricts you to one login about every 30s, but it increases<br>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) y 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. <br>Do you want to enable rate-limiting (y/n) y
Die im home-Verzeichnis jetzt liegende Datei .google-authenticator sollte man zusätzlich als Kopie auf einem sicheren Speicher aufbewahren. Hier sind sowohl der Secret Key als auch die Emergency Scratch Codes enthalten.
OTP aktivieren
Um beim allen Authentifizierungsvorgängen die Abfrage des OTP zu aktivieren, editiert man die Datei common-auth.
:~$ sudo nano /etc/pam.d/common-auth
Hier wird nun der Authenticator mit auth required pam_google_authenticator.so nullok als erste (!) Authentifizierungsregel eingefügt.
# here are the per-package modules (the "Primary" block) auth required pam_google_authenticator.so nullok auth [success=1 default=ignore] pam_unix.so nullok_secure # here's the fallback if no module succeeds
Das nullok sorgt dafür, dass sich andere User, die noch keine Zwei-Faktor-Authentifizierung konfiguriert haben trotzdem einloggen können.
sudo ohne OTP
Da in der Datei common-auth festgelegt wurde, dass sofern konfiguriert jede Authentifizierung mit einem OTP erfolgen muss, wird auch bei einem sudo-Kommando das Einmalpasswort verlangt. Auf Dauer stört das ungemein. Das kann verhindert werden, indem man die Datei /etc/pam.d/sudo editiert. Dort wird mit @include common-auth die Konfiguration aus der Datei common-auth eingebunden. Diese Zeile wird daher auskommentiert und der Inhalt der common-auth wird ohne die Zeile
auth required pam_google_authenticator.so nullok
dort eingefügt.
OTP beim Login aushebeln
Bootet man mit einer Live-CD, lässt sich die Zeile aus der common-auth einfach wieder entfernen und damit die Zwei-Faktor-Authentifizierung umgehen bzw. abschalten
Zum Thema Zwei-Faktor Authentifizierung für SSH gibt es eine Vielzahl von Artikeln im Netz, so dass ich hier auf -> Thomas Krenn und das Ubuntu -> Wiki verweisen kann.
2 Comments