Einrichten der Multi-Factor-Authentifizierung für SSH unter Ubuntu 14.04

Einführung

Ein Authentifizierungsfaktor ist eine einzelne Information, die verwendet wird, um zu beweisen, dass Sie über die Berechtigung zum Ausführen einer Aktion verfügen, z. B. das Anmelden bei einem System. Ein Authentifizierungskanal ist die Art und Weise, in der ein Authentifizierungssystem dem Benutzer einen Faktor liefert oder vom Benutzer eine Antwort verlangt. Kennwörter und Sicherheitstoken sind Beispiele für Authentifizierungsfaktoren. Computer und Telefone sind Beispiele für Kanäle.

SSH verwendet standardmäßig Kennwörter für die Authentifizierung, und die meisten Anweisungen zur SSH-Absicherung empfehlen stattdessen die Verwendung eines SSH-Schlüssels. Dies ist jedoch immer noch nur ein einziger Faktor. Wenn ein schlechter Schauspieler Ihren Computer kompromittiert hat, kann er Ihren Schlüssel verwenden, um auch Ihre Server zu kompromittieren.

Um dem entgegenzuwirken, richten wir in diesem Lernprogramm die Multifaktorauthentifizierung ein. Multifaktorauthentifizierung (MFA) erfordert mehr als einen Faktor, um sich zu authentifizieren oder anzumelden. Dies bedeutet, dass ein schlechter Schauspieler mehrere Dinge kompromittieren muss, wie z. B. Ihren Computer und Ihr Telefon, um einzusteigen. Die verschiedenen Arten von Faktoren werden häufig wie folgt zusammengefasst:

  1. Etwas, das Sie * kennen *, wie ein Passwort oder eine Sicherheitsfrage

  2. Etwas, das Sie * haben *, wie eine Authentifizierungs-App oder ein Sicherheitstoken

  3. Etwas, das Sie * sind *, wie Ihr Fingerabdruck oder Ihre Stimme

Ein häufiger Faktor ist eine OATH-TOTP-App wie Google Authenticator. OATH-TOTP (Zeitbasiertes Einmalkennwort für offene Authentifizierung) ist ein offenes Protokoll, das ein Einmalkennwort generiert, in der Regel eine 6-stellige Zahl, die alle 30 Sekunden wiederverwendet wird.

In diesem Artikel wird erläutert, wie die SSH-Authentifizierung mithilfe einer OATH-TOTP-App zusätzlich zu einem SSH-Schlüssel aktiviert wird. Wenn Sie sich über SSH bei Ihrem Server anmelden, sind zwei Faktoren auf zwei Kanälen erforderlich, wodurch die Sicherheit höher ist als bei einem Kennwort oder einem SSH-Schlüssel.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Ein Ubuntu 14.04 Droplet.

  • Ein sudo-Benutzer ohne Rootberechtigung mit einem hinzugefügten SSH-Schlüssel, den Sie einrichten können, indem Sie this Initial Server folgen Setup-Tutorial.

  • Ein Smartphone oder Tablet mit installierter OATH-TOTP-App, z. B. Google Authenticator (iOS)).

Schritt 1 - Installation von libpam-google-authenticator

In diesem Schritt installieren und konfigurieren wir Google PAM.

PAM (Pluggable Authentication Module) ist eine Authentifizierungsinfrastruktur, die auf Linux-Systemen zur Authentifizierung eines Benutzers verwendet wird. Da Google eine OATH-TOTP-App erstellt hat, wurde auch eine PAM erstellt, die TOTPs generiert und mit jeder OATH-TOTP-App vollständig kompatibel ist.

Aktualisieren Sie zunächst den Ubuntu-Repository-Cache.

sudo apt-get update

Installieren Sie als Nächstes den PAM.

sudo apt-get install libpam-google-authenticator

Wenn der PAM installiert ist, verwenden wir eine Helfer-App, die mit dem PAM installiert wurde, um einen TOTP-Schlüssel für den Benutzer zu generieren, dem Sie einen zweiten Faktor hinzufügen möchten. Dieser Schlüssel wird benutzerbezogen und nicht systemweit generiert. Dies bedeutet, dass sich jeder Benutzer, der eine TOTP-Authentifizierungs-App verwenden möchte, anmelden und die Hilfsprogramm-App ausführen muss, um seinen eigenen Schlüssel zu erhalten.

google-authenticator

Nachdem Sie den Befehl ausgeführt haben, werden Ihnen einige Fragen gestellt. Der erste fragt, ob Authentifizierungstoken zeitbasiert sein sollen.

Diese PAM ermöglicht zeitbasierte oder sequenzielle Tokens. Bei Verwendung von sequential-based tokens beginnt der Code an einem bestimmten Punkt und inkrementiert den Code nach jeder Verwendung. Mit time-based tokens ändert sich der Code nach Ablauf einer bestimmten Zeit nach dem Zufallsprinzip. Wir bleiben zeitbasiert, da dies von Apps wie Google Authenticator erwartet wird. Antworten Sie also mit "Ja".

Do you want authentication tokens to be time-based (y/n)

Nach Beantwortung dieser Frage wird eine große Anzahl von Ausgaben gescrollt, einschließlich eines großen QR-Codes. Vergewissern Sie sich, dass Sie den geheimen Schlüssel, den Bestätigungscode und die Notfall-Scratch-Codes an einem sicheren Ort wie einem Passwort-Manager aufbewahren.

Verwenden Sie zu diesem Zeitpunkt Ihre Authentifizierungs-App auf Ihrem Telefon, um den QR-Code zu scannen, oder geben Sie den geheimen Schlüssel manuell ein. Wenn der QR-Code zu groß zum Scannen ist, können Sie die URL über dem QR-Code verwenden, um eine kleinere Version zu erhalten. Nach dem Hinzufügen wird in Ihrer App ein sechsstelliger Code angezeigt, der sich alle 30 Sekunden ändert.

Die restlichen Fragen informieren den PAM über die Funktionsweise. Wir werden sie einzeln durchgehen.

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

Dies schreibt im Grunde den Schlüssel und die Optionen in die Datei "+ .google_authenticator +". Wenn Sie Nein sagen, wird das Programm beendet und es wird nichts geschrieben. Dies bedeutet, dass der Authentifikator nicht funktioniert.

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)

Wenn Sie hier mit "Ja" antworten, verhindern Sie einen Wiederholungsangriff, indem Sie dafür sorgen, dass jeder Code sofort nach seiner Verwendung abläuft. Dies verhindert, dass ein Angreifer einen soeben verwendeten Code erfasst und sich damit anmeldet.

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)

Wenn Sie hier mit Ja antworten, können bis zu 8 gültige Codes in einem sich bewegenden Fenster von vier Minuten angezeigt werden. Wenn Sie mit "Nein" antworten, beschränken wir uns auf 3 gültige Codes in einem Rollfenster von 1:30 Minuten. Nein ist die sicherere Wahl, es sei denn, Sie finden Probleme mit dem 1:30-Minuten-Fenster.

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)

Ratenbegrenzung bedeutet, dass ein entfernter Angreifer nur eine bestimmte Anzahl von Vermutungen ausführen kann, bevor er blockiert wird. Wenn Sie die Ratenbeschränkung zuvor nicht direkt in SSH konfiguriert haben, ist dies jetzt eine hervorragende Härtungstechnik.

Schritt 2 - OpenSSH konfigurieren

Der nächste Schritt besteht nun darin, SSH für die Verwendung Ihres TOTP-Schlüssels zu konfigurieren. Wir müssen SSH über die PAM informieren und anschließend SSH für die Verwendung konfigurieren.

Öffnen Sie zuerst die sshd-Konfigurationsdatei zum Bearbeiten mit + nano + oder Ihrem bevorzugten Texteditor.

sudo nano /etc/pam.d/sshd

Fügen Sie die folgende Zeile am Ende der Datei hinzu.

. . .
# Standard Un*x password updating.
@include common-password

Das Wort "nullok" am Ende teilt PAM mit, dass diese Authentifizierungsmethode optional ist. Auf diese Weise können sich Benutzer ohne OATH-TOTP-Schlüssel weiterhin mit ihrem SSH-Schlüssel anmelden. Sobald alle Benutzer über einen OATH-TOTP-Schlüssel verfügen, können Sie in dieser Zeile "nullok" löschen, um die MFA-Anforderung zu aktivieren.

Speichern und schließen Sie die Datei.

Als Nächstes konfigurieren wir SSH so, dass diese Art der Authentifizierung unterstützt wird. Öffnen Sie die SSH-Konfigurationsdatei zum Bearbeiten.

sudo nano /etc/ssh/sshd_config

Suchen Sie nach "+ ChallengeResponseAuthentication " und setzen Sie den Wert auf " yes +".

. . .
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication
. . .

Speichern und schließen Sie die Datei und starten Sie SSH neu, um die Konfigurationsdateien neu zu laden.

sudo service ssh restart

Schritt 3 - SSH MFA bewusst machen

In diesem Schritt testen wir, ob der SSH-Schlüssel funktioniert.

Öffnen Sie zuerst ein anderes Terminal und versuchen Sie jetzt SSHing auf dem Server. Sie werden feststellen, dass Sie sich mit Ihrem SSH-Schlüssel bei dieser zweiten Sitzung angemeldet haben, ohne Ihren Bestätigungscode oder Ihr Kennwort einzugeben. Dies liegt daran, dass ein SSH-Schlüssel standardmäßig alle anderen Authentifizierungsoptionen überschreibt. Wir müssen SSH anweisen, den TOTP-Code zu verwenden und Ihren SSH-Schlüssel anstelle Ihres Passworts zu verwenden.

Öffnen Sie nun die sshd-Konfigurationsdatei erneut.

sudo nano /etc/ssh/sshd_config

Suchen Sie die Zeile "+ PasswordAuthentication ", entfernen Sie das Kommentarzeichen, indem Sie das Zeichen " # " am Kopf der Zeile löschen, und aktualisieren Sie den Wert auf " no +". Dadurch wird SSH angewiesen, kein Kennwort einzugeben.

. . .
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication
. . .

Fügen Sie als Nächstes die folgende Zeile am Ende der Datei hinzu. Dies teilt SSH mit, welche Authentifizierungsmethoden erforderlich sind.

. . .
UsePAM yes

Speichern und schließen Sie die Datei.

Öffnen Sie als Nächstes die PAM sshd-Konfigurationsdatei.

sudo nano /etc/pam.d/sshd

Suchen Sie die Zeile "+ @ include common-auth " und kommentieren Sie sie aus, indem Sie ein " # " - Zeichen als erstes Zeichen in der Zeile einfügen. Dadurch wird PAM angewiesen, kein Kennwort einzugeben. wir haben SSH vorher gesagt, dass sie nicht in " sshd_config +" schreiben sollen.

. . .
# Standard Un*x authentication.
@include common-auth
. . .

Speichern und schließen Sie die Datei und starten Sie SSH neu.

sudo service ssh restart

Versuchen Sie nun erneut, sich beim Server anzumelden. Sie sollten feststellen, dass Sie sich teilweise mit Ihrem SSH-Schlüssel authentifiziert haben und dann zur Eingabe Ihres Bestätigungscodes aufgefordert wurden. Es wird so aussehen:

Beispiel für eine Login-Ausgabe

ssh @

Authenticated with partial success.
Verification code:

Geben Sie Ihren Bestätigungscode von Ihrer OAUTH-TOTP-App ein, und Sie melden sich beim Server an. Sie haben jetzt MFA für SSH aktiviert!

Fazit

Wie bei jedem System, das Sie sichern und sichern, sind Sie für die Verwaltung dieser Sicherheit verantwortlich. In diesem Fall bedeutet dies, dass Sie weder Ihren SSH-Schlüssel noch Ihren geheimen TOTP-Schlüssel verlieren. Manchmal passieren jedoch Dinge und Sie können die Kontrolle über die Schlüssel verlieren, um hineinzukommen.

Hier einige Vorschläge, um wieder auf Ihren Server zuzugreifen:

  • * Wenn Sie Ihre TOTP-App verlieren oder keinen Zugriff darauf haben, * verwenden Sie Ihre Wiederherstellungscodes als Bestätigungscode. Dies passiert, wenn Sie ein neues Telefon erhalten und vergessen haben, Ihre Schlüssel aus dem alten zu exportieren, oder wenn Ihr Telefon keinen Strom mehr hat.

  • * Wenn Sie Ihren geheimen Schlüssel und das Backup verlieren, * melden Sie sich über die Konsole über das DigitalOcean-Bedienfeld an. Benennen Sie die Datei anschließend um oder löschen Sie sie "+ ~ / .google_authenticator ". Dadurch wird sichergestellt, dass PAM Ihre Konfiguration nicht kennt und Sie nicht zur Eingabe eines Codes auffordert. Stellen Sie sicher, dass in ` / etc / pam.d / sshd +` immer noch “nullok” hinzugefügt ist, wie in Schritt 2; Wenn Sie dies ändern, müssen Sie SSH neu starten.

  • * Wenn Sie Ihren SSH-Schlüssel verlieren, * verwenden Sie die Konsole erneut, um sich anzumelden und Ihr altes Publikum von "+ ~ / .ssh / authorized_hosts +" zu entfernen. Dann können Sie ihn entweder durch einen neuen Schlüssel ersetzen.

Da zwei Faktoren (ein SSH-Schlüssel + ein MFA-Token) über zwei Kanäle (Ihren Computer + Ihr Telefon) verteilt sind, ist es für einen externen Agenten nahezu unmöglich, über SSH auf Ihren Computer zuzugreifen, und die Sicherheit von wurde erheblich erhöht Ihre Maschine.