Zwei-Faktor-Authentifizierung für SSH

„Secure Shell“ SSH ist ein Netzwerkprotokoll zum Aufbau einer sicheren Verbindung zwischen Hosts, standardmäßig über Port 22 (was besser zu ändern ist). SSH-Clients und SSH-Server sind für die meisten Betriebssysteme verfügbar. Fast jedes andere Netzwerkprotokoll funktioniert innerhalb von SSH, d. h. Sie können remote auf einem anderen Computer arbeiten, einen Audio- oder Videostream über einen verschlüsselten Kanal übertragen usw. Außerdem, über SOCKS-Proxy auf einem Remote-Host Sie können im Namen dieses Remote-Hosts eine Verbindung zu anderen Hosts herstellen.

Die Authentifizierung erfolgt über ein Passwort, Entwickler und Systemadministratoren verwenden jedoch traditionell SSH-Schlüssel. Das Problem besteht darin, dass der private Schlüssel gestohlen werden kann. Das Hinzufügen einer Passphrase schützt theoretisch vor Diebstahl des privaten Schlüssels, in der Praxis jedoch, wenn Schlüssel weitergeleitet und zwischengespeichert werden, ist dies der Fall weiterhin ohne Bestätigung nutzbar. Die Zwei-Faktor-Authentifizierung löst dieses Problem.

So implementieren Sie die Zwei-Faktor-Authentifizierung

Entwickler von Honeycomb haben kürzlich veröffentlicht detaillierte Anleitung, wie man die entsprechende Infrastruktur auf dem Client und Server implementiert.

Bei den Anweisungen wird davon ausgegangen, dass Sie über einen bestimmten Basishost verfügen, der für das Internet geöffnet ist (Bastion). Sie möchten sich von Laptops oder Computern über das Internet mit diesem Host verbinden und auf alle anderen Geräte zugreifen, die sich dahinter befinden. 2FA stellt sicher, dass ein Angreifer nicht dasselbe tun kann, selbst wenn er Zugriff auf Ihren Laptop erhält, beispielsweise durch die Installation von Malware.

Die erste Option ist OTP

OTP – einmalige digitale Passwörter, die in diesem Fall zusammen mit dem Schlüssel für die SSH-Authentifizierung verwendet werden. Die Entwickler schreiben, dass dies keine ideale Option sei, da ein Angreifer eine Fake-Bastion errichten, Ihr OTP abfangen und nutzen könnte. Aber es ist besser als nichts.

In diesem Fall werden serverseitig folgende Zeilen in die Chef-Konfiguration geschrieben:

  • metadata.rb
  • attributes/default.rb (von attributes.rb)
  • files/sshd
  • recipes/default.rb (Kopie von recipe.rb)
  • templates/default/users.oath.erb

Auf der Clientseite wird jede OTP-Anwendung installiert: Google Authenticator, Authy, Duo, Lastpass, installiert brew install oath-toolkit oder apt install oathtool openssl, dann wird eine zufällige Base16-Zeichenfolge (Schlüssel) generiert. Es wird in das Base32-Format konvertiert, das mobile Authentifikatoren verwenden, und direkt in die Anwendung importiert.

Als Ergebnis können Sie sich mit Bastion verbinden und sehen, dass es jetzt nicht nur eine Passphrase, sondern auch einen OTP-Code zur Authentifizierung benötigt:

➜ ssh -A bastion
Enter passphrase for key '[snip]': 
One-time password (OATH) for '[user]': 
Welcome to Ubuntu 18.04.1 LTS...

Die zweite Option ist die Hardwareauthentifizierung

In diesem Fall muss der Benutzer nicht jedes Mal den OTP-Code eingeben, da der zweite Faktor das Hardwaregerät oder die Biometrie ist.

Hier ist die Chef-Konfiguration etwas komplizierter und die Client-Konfiguration hängt vom Betriebssystem ab. Aber nach Abschluss aller Schritte können Clients unter MacOS die Authentifizierung in SSH mithilfe einer Passphrase und einem Fingerauflegen auf den Sensor bestätigen (zweiter Faktor).

iOS- und Android-Besitzer bestätigen die Anmeldung per Knopfdruck auf Ihrem Smartphone. Hierbei handelt es sich um eine spezielle Technologie von Krypt.co, die noch sicherer als OTP ist.

Unter Linux/ChromeOS besteht die Möglichkeit, mit YubiKey-USB-Tokens zu arbeiten. Natürlich kann ein Angreifer Ihren Token stehlen, aber er kennt die Passphrase immer noch nicht.

Source: habr.com

Kommentar hinzufügen