Warum ist die SSH-Schlüsselauthentifizierung besser als die Kennwortauthentifizierung?

45

Dies ist weniger eine technische als vielmehr eine konzeptionelle Frage. Ich verstehe, dass die in einem SSH-Schlüssel verwendete Kryptografie weitaus sicherer ist als ein normales Kennwort, aber ich verstehe nicht, warum sie als sicherer angesehen wird.

In den meisten von mir gelesenen Tutorials wird die Verwendung der SSH-Schlüsselauthentifizierung anstelle der Kennwortauthentifizierung empfohlen. Ich verstehe jedoch, dass jeder, der Zugriff auf einen vorab genehmigten Clientcomputer hat, dann eine Verbindung zum Server herstellen kann, was bedeutet, dass die vom SSH-Schlüssel bereitgestellte Sicherheitsstufe nur so hoch ist wie die Sicherheitsstufe des physischen Computers Client-Maschine.

Wenn ich zum Beispiel einen SSH-Schlüssel für die Verbindung zu meinem Heimcomputer auf meinem Telefon einrichte, kann sich jemand mit meinem Heimcomputer verbinden, falls ich mein Telefon verliere und es entsperren kann. Ich weiß, dass ich den Schlüssel für mein Telefon von meinem Heimcomputer abziehen kann, aber ich bin so lange verwundbar, bis ich feststelle, dass das Clientgerät verloren gegangen ist / beschädigt wurde.

Habe ich etwas falsch verstanden oder sind das berechtigte Bedenken?

BoomShaka
quelle
10
Beides tun - ein Schlüssel, für den ein Passwort erforderlich ist. Auf diese Weise müssen zwei Dinge identifiziert werden, nicht nur eines. Sie können auch verlorene Schlüssel ganz einfach ungültig machen und mehrere autorisierte Schlüssel haben, um mehr Kontrolle darüber zu haben.
Phoshi
2
Dies sollte wahrscheinlich zur Sicherheit verschoben werden.
10
@ DKGasser: Nein, sollte es nicht. Das ist hier eine absolut berechtigte Frage. Nur weil etwas auf eine andere SE-Site verschoben werden kann , heißt das nicht, dass es dies sollte .
Wuffers
4
@DKGasser: Es könnte auf diese Seite gehen, es ist eine vollkommen gültige Frage dort. Aber es ist auch hier eine berechtigte Frage, daher gibt es keinen Grund, sie zu migrieren. Wenn diese Frage hier nicht thematisiert werden sollte, dann könnte sie dort migriert werden. Es ist jedoch ein aktuelles Thema auf dieser Site und sollte daher nicht migriert werden.
Wuffers
3
UND nicht vergessen, der SSH-Schlüssel geht nie über das Netzwerk. Der Remote-Server erhält NIEMALS den Schlüssel anstelle eines Kennworts, das nicht nur über das Netzwerk, sondern auch an den Remote-Server gesendet wird. Denken Sie darüber nach, wenn Sie das nächste Mal nicht sicher sind, welches Kennwort Sie verwenden sollen, und probieren Sie einige aus, die möglicherweise für andere Konten verwendet werden. Welche Passwörter hast du an diesen Server geschickt ???
18.

Antworten:

40

Wenn Ihr SSH-Dienst eine kennwortbasierte Authentifizierung zulässt, wird Ihr mit dem Internet verbundener SSH-Server Tag und Nacht von Bot-Netzen gehämmert, die versuchen, Benutzernamen und Kennwörter zu erraten. Das Bot-Netz benötigt keine Informationen, es kann nur beliebte Namen und beliebte Passwörter ausprobieren. Es gibt eine Menge Leute namens John mit dem Passwort qwerty123. Abgesehen von allem anderen verstopft dies Ihre Protokolle.

Wenn Ihr SSH-Dienst nur die Authentifizierung mit öffentlichem Schlüssel zulässt, benötigt ein Angreifer eine Kopie eines privaten Schlüssels, der einem auf dem Server gespeicherten öffentlichen Schlüssel entspricht. Sie können nicht nur zufällige Angriffe ausführen, sondern müssen über Vorkenntnisse Ihrer Benutzer verfügen und in der Lage sein, einen privaten Schlüssel vom PC eines autorisierten Benutzers Ihres SSH-Servers zu stehlen.

Die Tatsache, dass private Schlüssel häufig durch eine lange Passphrase geschützt sind, ist von untergeordneter Bedeutung.

Aktualisieren:

Wie aus den Kommentaren hervorgeht und wie ich erfahren habe, bewirkt das Verschieben Ihres SSH-Dienstes von Port 22 auf einen Port mit hoher Nummer einen dramatischen Unterschied in der Anzahl der nicht autorisierten Anmeldeversuche, die in Ihren Protokollen angezeigt werden. Dies lohnt sich, aber ich betrachte es als eine Form der Sicherheit durch Unbekanntheit (ein falsches Sicherheitsgefühl) - Bot-Netze implementieren früher oder später ein langsames, heimliches Port-Scannen, oder Sie werden gezielt angegriffen. Besser vorbereitet zu sein.

Ich verwende immer eine lange Passphrase, um meinen privaten Schlüssel zu schützen. Ich denke, dies ist besonders wichtig bei mobilen Geräten, die leichter verloren gehen oder gestohlen werden können.

Auch http://xkcd.com/538/

Sicherheit

RedGrittyBrick
quelle
7
+1, außer dass die Authentifizierung mit öffentlichem Schlüssel nichts dafür tut, dass Ihre Protokolle mit Bots verstopft werden, die versuchen, eine Verbindung herzustellen. Um dies zu stoppen, führen Sie Ihren SSH-Server an einem hohen Port aus (z. B. 9876 statt 22). Wenn sie dich dann schlagen wollen, müssen sie dich zuerst
scannen
3
Sie scherzen nicht mit der Protokollgröße - mein / var / log / secure hat sich von Megabyte Anmeldeversuchen auf Kilobyte (nur mit meinen Anmeldedatensätzen) verlagert.
John C
2
+1 Interessant, ich arbeite seit 10 Jahren mit passwortbasierter Authentifizierung. Zugegeben, meine öffentlich freigegebenen SSH-Ports sind nie Port 22. Ich denke, die Botnets werden mich nach Ports durchsuchen und versuchen, bei jedem einzudringen Hafen können sie? Gute Infos, danke.
James T Snell
2
@ExUmbris anstatt den Port zu ändern, sollten Sie fwknop verwenden: Single Packet Authorization und Port Knocking . Der Vorteil hierbei sollte offensichtlich sein: Wenn Sie niemandem erlauben, zu sehen, dass der Port irgendwo offen ist, es sei denn, er hat durch Klopfen mit SPA Zugriff auf den Port erhalten, kann er nicht einmal versuchen, ihn mit nmap und zu finden es ausnutzen. Das ist viel besser als einfache Sicherheit durch Dunkelheit.
ACULICH
@aculich Das Ändern des Ports ist nicht "Sicherheit durch Unbekanntheit". Ich verhindere nur, dass sich die Protokolle mit Warnungen füllen. Sie haben jedoch ein berechtigtes Argument für die Verbesserung der Sicherheit mit SPA.
Ex Umbris
8

Die Logik ist, dass es viel mehr Kombinationen von SSH-Schlüsseln als Passwörter gibt, so dass es sehr viel schwieriger ist, sie zu erraten. Mithilfe von SSH-Schlüsseln können Sie auch die Kennwortauthentifizierung deaktivieren, sodass die meisten automatisierten Angriffe im Internet unbrauchbar werden.

In Bezug auf die physische Sicherheit gibt es keinen Unterschied zwischen dem Speichern eines Kennworts und dem Vorhandensein eines unverschlüsselten SSH-Schlüssels auf Ihrem Gerät, wenn es verloren geht oder gestohlen wird. Der einzige Vorteil ist, dass niemand Ihr Passwort hat und Sie theoretisch sicherstellen können, dass alle Geräte über unterschiedliche SSH-Zertifikate verfügen, sodass Sie das für Ihr Telefon deaktivieren können.

Ich glaube, es ist auch möglich, SSH-Schlüssel mit einem Passwort zu schützen.

Matthew Steeples
quelle
Es ist jedoch erwähnenswert, dass Versuche zur erzwungenen Eingabe von Passwörtern gegen sshd erkannt und geschützt werden können (z. B. durch fail2ban), während jemand, der Ihren privaten Schlüssel gestohlen hat, Passwörter darauf ausprobieren kann, so schnell sein Computer (oder Cluster) dies zulässt Sie. Dies ist immer noch kein großartiger Angriff , aber sie haben ihre Chancen gegenüber einer vernünftigen Fail2Ban-Richtlinie drastisch verbessert.
Xiong Chiamiov
Weitere
Informationen
1

Passwörter können auch kompromittiert werden, indem Ihre Tastatur "über die Schulter" überwacht wird. Darüber hinaus ist die Verwendung ähnlicher Kennwörter an vielen Stellen eine Schwachstelle, insbesondere wenn das Kennwort manchmal auf einem weniger sicheren Computer mit potenziellen Keyloggern verwendet wird.

Sie haben Recht, dass ein unverschlüsselter Schlüssel von der Festplatte gelesen werden kann, wenn der Computer gestohlen wird. Verschlüsseln Sie ihn daher mit einem Kennwort.

Wenn Ihr Computer von Malware befallen ist, sind Sie trotzdem voll. - Jemand kann den verschlüsselten Schlüssel erhalten und Ihr Kennwort protokollieren.

EU G
quelle
1
Hinweis: Sie können Ihren Schlüssel jedoch nicht mit einem Kennwort verschlüsseln, wenn er programmgesteuert verwendet werden soll (z. B. in einem Skript).
TheStoryCoder