Warum sollte ich die Public-Key-Authentifizierung für SSH verwenden?

26

Ich verwende einen SSH-Server und verwende weiterhin die einfache Kennwortauthentifizierung. Überall, wo ich über Sicherheit lese, wird empfohlen, die Public-Key-Authentifizierung zu verwenden. Aber ich verstehe die Vorteile nicht. Ihre Verwendung ist in meinen Augen entweder unsicher oder eine Menge praktischer Arbeit.

Wenn jemand versucht, die Anmeldung an meinem SSH-Server zu erzwingen, ist Public-Key natürlich viel sicherer als jedes andere Passwort. Aber davon abgesehen ist es völlig unsicher.

Die Berater argumentieren meistens, dass Sie sich kein Passwort merken müssen. Wie unsicher ist das? Wenn sich jemand in meinen Computer einhackt, bekommt er nicht nur meinen Computer, sondern auch meinen Server? Wenn ich SSH von verschiedenen Clients aus verwende, muss ich die öffentlichen Schlüssel jeweils einzeln speichern, was die Wahrscheinlichkeit vervielfacht, dass sie in falsche Hände geraten. Ich könnte sie auf einem USB-Stick speichern, den ich bei mir habe, aber er kann verloren gehen und der Finder hat Zugriff auf meinen Server.

Möglicherweise bin ich mit der Zwei-Faktor-Authentifizierung besser bedient.

Fehlt mir ein Argument? Was ist der beste Weg für mich?

Aroma
quelle
10
Wenn alles richtig gemacht, Public - Key - Authentifizierung ist eine Form von 2FA mit etwas , das Sie (das Passwort für den privaten Schlüssel) kennen und etwas , das Sie (der private Schlüssel) haben.
Sven
1
@EEAA Warum spielt es eine Rolle, solange Ihr privater Schlüssel einen hat?
user253751
6
Wenn Sie mit einem privaten Schlüssel versehentlich eine Verbindung zum falschen Server herstellen, geben Sie Ihr Kennwort nicht in meinen Server ein.
user253751
1
Viele Organisationen müssen (aus welchen Gründen auch immer) die Verwendung der Zwei-Faktor-Authentifizierung vorschreiben. Dies ist unmöglich, wenn Sie sich auf verschlüsselte private Schlüssel verlassen.
EEAA
6
Für das, was es wert ist, bin ich mit Sven zutiefst uneins über die Einstufung des privaten Schlüssels als etwas, das Sie haben . Der grundlegende Test eines Objekts, das Sie haben, wird nicht bestanden , da es willkürlich reproduzierbar ist und lediglich aus digitalen Daten besteht. Die Authentifizierung mit öffentlichem Schlüssel allein ist nicht 2FA. Wenn Sie es sich selbst sagen, täuschen Sie sich über Ihre Sicherheit.
MadHatter unterstützt Monica

Antworten:

32

Hackt sich jemand in meinen Computer ein, bekommt er nicht nur meinen Computer, sondern auch meinen Server?

Dies gilt möglicherweise auch für Keylogger: Sobald Sie sich vom infizierten Computer auf Ihrem Server anmelden, erhalten diese das Kennwort.

Schlüssel haben jedoch drei Vorteile:

1) Cacheable Authentifizierung. Geben Sie Ihre Passphrase einmal ein und führen Sie mehrere ssh-Befehle aus. Dies ist sehr nützlich, wenn Sie etwas verwenden, das ssh als Transport verwendet, z. B. scp, rsync oder git.

2) Skalierbare Authentifizierung. Geben Sie Ihre Passphrase einmal ein und melden Sie sich bei mehreren Computern an . Je mehr Maschinen Sie haben, desto nützlicher ist dies. Wenn Sie 100 Maschinen haben, was machen Sie dann? Sie können nicht dasselbe Kennwort verwenden (es sei denn, es ist eine Klonfarm), und Sie können sich nicht an so viele erinnern. Sie müssten also einen Passwort-Manager verwenden und sind wieder bei einem einzigen Kompromiss angelangt. Effektiv ist der Schlüssel Passwort ist Ihr Passwort - Manager.

2b) Die Skalierung ist umgekehrt, wenn Sie mehrere Administratoren auf demselben System haben, da Sie Benutzer A die Schlüssel entziehen können, ohne B, C, D, E, F ... mitteilen zu müssen, dass sich das Kennwort geändert hat.

(Dies kann auch mit einzelnen Konten und sudo geschehen, aber dann müssen Sie diese Konten irgendwie bereitstellen.)

3) Automatisierung und Teildelegation. Sie können SSH so einrichten, dass bei einer Schlüsselverbindung ein bestimmter Befehl ausgeführt wird . Auf diese Weise kann ein automatisierter Prozess auf System A auf System B etwas tun, ohne dass zwischen beiden eine vollständige Vertrauensstellung ohne Kennwort besteht.

(Es ist ein Ersatz für rlogin / rsh, was unglaublich unsicher war)

Bearbeiten: Ein weiterer Vorteil von öffentlichen Schlüsseln anstelle von Kennwörtern ist das häufige Szenario, in dem der Server durch eine Sicherheitsanfälligkeit gefährdet wird. In diesem Fall wird das Kennwort sofort gefährdet, wenn Sie sich mit einem Kennwort anmelden. Mit einem Schlüssel einloggen geht nicht! Ich würde sagen, dass dies häufiger vorkommt, als dass der ursprüngliche Desktop des Administrators gefährdet wird.

pjc50
quelle
2
2b ist sehr wichtig. Autorisierte Schlüssel können einfach zentral verwaltet werden. Das Ändern eines Kennworts und das Verteilen dieses Kennworts an alle Benutzer erfordert mehr Arbeit.
Jonas Schäfer
Welche Techniken zur zentralen Verwaltung autorisierter Schlüssel gibt es? (Ich bin vertraut damit, authorised_keys-Dateien auf einem gemeinsam genutzten Dateisystem
abzulegen
1
An dem Punkt, an dem Sie mehrere Dutzend oder Hunderte von Servern haben, verwenden Sie wahrscheinlich Chef, Ansible, Puppet, Holo oder etwas Ähnliches, das diese verwaltet. Oder Sie haben die autorisierten Schlüssel in einer LDAP- oder einer anderen Datenbank.
Jonas Schäfer
1
Vergessen Sie nicht die Agentenweiterleitung: Sie können sich mit ssh -Aund von dort aus bei Computern anmelden, die es der Öffentlichkeit ermöglichen, Ihren ursprünglichen Host zu konfigurieren.
Halfgaar
@Halfgaar ... ohne dass auf dem Host, von dem aus Sie eine Verbindung herstellen, etwas geändert wird. Ich habe gerade diese Funktion gelernt und ich liebe es!
Canadian Luke REINSTATE MONICA
12

Wenn Sie gute Passwörter verwenden, kann dies ausreichend sicher sein. Normalerweise beschränke ich die Anzahl der öffentlich zugänglichen Server auf ein Minimum und erlaube SSH von bestimmten IP (s), wann immer dies möglich ist.

Sie können Ihre Schlüssel auch durch eine Passphrase (Passwort) schützen. Diese Passphrase muss also immer dann eingegeben werden, wenn Sie sich bei Ihren Servern anmelden müssen. Niemand kann dann Ihren Schlüssel verwenden, wenn nicht die richtige Passphrase angegeben ist.

Es gibt ähnliche Beiträge:

  1. Beitrag von Serverfehler .
  2. Beitrag von Security StackExchange .
  3. Beitrag vom Superuser .
Khaled
quelle
2
Stichwort ist ein Muss IMHO. Wenn Sie ssh-agent verwenden, sehen Sie sich die Option -t von ssh-add an, damit dieser nach einer bestimmten Zeit die Schlüssel entlädt.
Füro
12

Eine Möglichkeit, wie die Autorisierung öffentlicher Schlüssel sicherer ist, besteht darin, dass der Angreifer es schafft, zwischen dem Client-Computer und dem Server eine Man-in-the-Middle-Verbindung (MitM) herzustellen, und dass Sie den sich ändernden Host-Schlüssel nicht bemerken (möglicherweise, weil Sie dies nicht getan haben) Sie haben den alten Schlüssel nicht (z. B. weil dies das erste Mal ist, dass Sie diesen bestimmten Client-Computer verwenden).

(Dasselbe gilt, wenn der Angreifer die Kontrolle über den Server übernimmt und es andere Server gibt, auf denen dieselben Anmeldeinformationen funktionieren.)

Bei der standardmäßigen passwortbasierten Authentifizierung übermitteln Sie Ihr Passwort (innerhalb der verschlüsselten Verbindung) im Klartext. Normalerweise wird es vom Originalserver gehasht und das Ergebnis mit einem in der Passwortdatenbank gespeicherten Hash verglichen. Ein MitM-Angreifer könnte stattdessen dieses Kennwort verwenden, eine Verbindung zum realen Server herstellen und sich dort anmelden ... und entweder den Inhalt an Sie weiterleiten (damit Sie nichts bemerken) oder einfach seine eigenen bösen Dinge auf Ihrem Server tun .

Bei der Authentifizierung mit öffentlichem Schlüssel signiert der Client im Grunde genommen einige Daten, die sowohl dem Server als auch dem Client bekannt sind, um zu beweisen, dass er im Besitz des privaten Schlüssels ist, und sendet die Signatur an den Server. Diese signierten Daten enthalten eine Sitzungskennung, die von Zufallszahlen abhängt, die sowohl vom Client als auch vom Server ausgewählt werden, und daher für jede Sitzung unterschiedlich ist. Wenn die MitM eine eigene SSH-Verbindung zum realen Server herstellt, hat dieser eine andere Sitzungs-ID, und daher funktioniert die vom Client bereitgestellte Signatur dort nicht.

Wie bereits in anderen Antworten erwähnt, müssen Sie Ihren privaten Schlüssel natürlich sicher aufbewahren, z. B. mit einer Passphrase verschlüsselt, oder auf einem separaten Gerät, das nur nach Eingabe einer PIN Signaturen erstellt.

Paŭlo Ebermann
quelle
2

OpenSSH kann seine eigene Zertifizierungsstelle für die Verwaltung von SSH-Host- und Clientschlüsseln behalten und Sperrlisten verwenden. Dies könnte die Sicherheit erhöhen, die durch die schlüsselbasierte Authentifizierung bereitgestellt wird.

fuero
quelle
2

Sie haben Recht mit der Behauptung "Sie brauchen kein Passwort". Das ist auf Kundenseite wirklich unsicher.

Wenn Sie nur öffentliche Schlüssel für die Anmeldung zulassen, ist dies wesentlich sicherer, da Sie keinen Brute-Force-Zugriff auf Ihren Server erzwingen können. Alles, was ein Angreifer erreichen kann, ist eine gewisse Auslastung Ihres Servers - Sie können fail2ban einsetzen , um dies in Schach zu halten.

Für die Sicherheit auf der Clientseite müssen Sie den privaten Schlüssel mit einer guten Passphrase schützen. Natürlich ist die Verbindung zum Server jetzt umständlicher als mit einem Passwort. Um dies zu umgehen, können Sie den privaten Schlüssel mit ssh agent im Speicher ablegen, wenn Sie mehrmals hintereinander eine Verbindung zum Server herstellen möchten. Es wird empfohlen, die Zeit zu begrenzen, die ein Schlüssel im Speicher aufbewahrt werden soll.

guntbert
quelle
3
Keine Möglichkeit, den Zugriff mit Gewalt zu erzwingen ... Ich würde nicht sagen, auf keine Weise ... Sie können den privaten Schlüssel auf dieselbe Weise wie das Kennwort mit Gewalt erzwingen , aber der private Schlüssel enthält mehr Entropie als das allgemeine Kennwort ziemlich nutzlos (bisher ohne Quantencomputer).
Jakuje
0

Möglicherweise bin ich mit der Zwei-Faktor-Authentifizierung besser bedient.

Eine Möglichkeit für 2FA für SSH (und eine, die relativ wenig Einrichtung / Komplexität erfordert) ist die Verwendung eines öffentlichen Schlüssels und eines Kennworts.

Ich glaube, dass etwas in der Art AuthenticationMethods publickey,keyboard-interactivehinzugefügt werden kann /etc/ssh/sshd_config, damit das funktioniert.

Allgemeiner ist das Problem eher, dass Passwörter (allein) keine großartige Methode zur Authentifizierung sind, da sie oft von zweifelhafter Qualität sind. Ein sehr einfaches Argument für Schlüssel im Vergleich zu Passwörtern ist, dass ein Schlüssel im Allgemeinen mindestens 2048 Bit und häufig mehr umfasst (bei EC-Schlüsseln ist dies eher die effektive Stärke als die tatsächliche Größe). Diese Bits werden auch durch einen kryptologisch sicheren (oder geeigneten) Mechanismus erzeugt.

Ein Kennwort hat häufig weniger als 2048 Bit und wird häufig nicht von einer kryptografisch sicheren Quelle abgeleitet.

Sie können Ihre Schlüssel auch mit einem Passwort sichern, um Probleme beim Verlust zu vermeiden (obwohl jemand versuchen könnte, dieses Passwort brutal zu erzwingen).

Im Grunde genommen können die Unterschiede zwischen Schlüsseln und Passwörtern ziemlich transparent gemacht werden, und durch die Verwendung von Schlüsseln erhalten Sie ein besseres Passwort, als es ein Mensch handhaben könnte. Das soll nicht heißen, dass sie ein Allheilmittel sind, aber im Durchschnitt bieten sie mehr Sicherheit als Passwörter.

Ich wurde von Agrue gegessen
quelle