Die "sichere Shell" (SSH) ist ein Netzwerkprotokoll zur Herstellung einer gesicherten Verbindung zwischen Hosts, standardmäßig über Port 22 (den man besser ändern sollte). SSH-Clients und SSH-Server sind für die meisten Betriebssysteme verfügbar. Innerhalb von SSH funktioniert praktisch jedes andere Netzwerkprotokoll, d.h. man kann remote auf einem anderen Computer arbeiten, Audio-Streaming oder Video über einen verschlüsselten Kanal übertragen usw. Darüber hinaus, auf andere Hosts im Namen dieses remote Hosts zugreifen.
Die Authentifizierung erfolgt per Passwort, aber Entwickler und Systemadministratoren verwenden traditionell SSH-Schlüssel. Das Problem ist, dass der geheime Schlüssel gestohlen werden kann. Das Hinzufügen eines Passworts schützt theoretisch vor dem Diebstahl des geheimen Schlüssels, aber in der Praxis können sie bei der Weiterleitung und dem Caching von Schlüsseln . Die Zwei-Faktor-Authentifizierung löst dieses Problem.
Wie man die Zwei-Faktor-Authentifizierung implementiert
Die Entwickler von Honeycomb haben kürzlich , wie die entsprechende Infrastruktur auf dem Client und Server umgesetzt werden kann.
Die Anleitung geht davon aus, dass Sie einen bestimmten Host haben, der über das Internet erreichbar ist (Bastion). Sie möchten sich von Laptops oder Computern über das Internet mit diesem Host verbinden und Zugriff auf alle anderen Geräte erhalten, die sich hinter ihm befinden. 2FA garantiert, dass ein Angreifer nicht dasselbe tun kann, selbst wenn er Zugang zu Ihrem Laptop erhält, indem er beispielsweise Malware installiert.
Die erste Option — OTP
OTP — Einmalpasswörter, die in diesem Fall für die SSH-Authentifizierung zusammen mit dem Schlüssel verwendet werden. Die Entwickler weisen darauf hin, dass dies keine ideale Lösung ist, da ein Angreifer eine gefälschte Bastion aufbauen, Ihr OTP abfangen und verwenden kann. Aber es ist besser als nichts.
In diesem Fall werden auf der Server-Seite die folgenden Zeilen in die Chef-Konfiguration geschrieben:
metadata.rbattributes/default.rb(ausattributes.rb)files/sshdrecipes/default.rb(Kopie ausrecipe.rb)templates/default/users.oath.erb
Auf der Client-Seite wird eine beliebige OTP-Anwendung installiert: Google Authenticator, Authy, Duo, Lastpass, es wird installiert brew install oath-toolkit oder apt install oathtool openssl, dann wird eine zufällige base16-Zeichenfolge (Schlüssel) generiert. Diese wird in das Base32-Format umgewandelt, das mobile Authentifizierungsanwendungen verwenden, und direkt in die App importiert.
So können Sie sich mit dem Bastion verbinden und sicherstellen, dass er nun nicht nur ein Passwort, sondern auch einen OTP-Code zur Authentifizierung verlangt:
➜ ssh -A bastion
Passwort für den Schlüssel '[snip]' eingeben:
Einmalpasswort (OATH) für '[user]':
Willkommen bei Ubuntu 18.04.1 LTS...Die zweite Möglichkeit ist die Hardware-Authentifizierung.
In diesem Fall muss der Benutzer nicht jedes Mal einen OTP-Code eingeben, da das zweite Faktor ein Hardware-Gerät oder Biometrie ist.
Hier ist die Chef-Konfiguration etwas komplizierter und die Client-Konfiguration hängt vom Betriebssystem ab. Aber nach Durchführung aller Schritte können Clients auf MacOS die SSH-Authentifizierung durch die Eingabe des Passworts und die Verwendung des Fingerabdrucksensors (zweiter Faktor) bestätigen.
iOS- und Android-Besitzer bestätigen den Zugang . Dies ist eine spezielle Technologie von Krypt.co, die sogar sicherer ist als OTP.
Unter Linux/ChromeOS gibt es die Möglichkeit, mit USB-Tokens von YubiKey zu arbeiten. Natürlich kann ein Angreifer Ihr Token stehlen, aber er kennt dennoch nicht die Passwortphrase.
Quelle: habr.com
