Grundlegendes zum SSH-Verschlüsselungs- und Verbindungsprozess

Einführung

SSH oder Secure Shell ist ein sicheres Protokoll und die gebräuchlichste Methode zur sicheren Verwaltung von Remoteservern. Unter Verwendung einer Reihe von Verschlüsselungstechnologien bietet SSH einen Mechanismus zum Herstellen einer kryptografisch gesicherten Verbindung zwischen zwei Parteien, zum Authentifizieren beider Seiten und zum Weiterleiten von Befehlen und zum Hin- und Herbewegen von Ausgaben.

In diesem Handbuch werden die zugrunde liegenden Verschlüsselungstechniken von SSH und die Methoden zum Herstellen sicherer Verbindungen untersucht. Diese Informationen können hilfreich sein, um die verschiedenen Verschlüsselungsebenen und die verschiedenen Schritte zu verstehen, die zum Herstellen einer Verbindung und zum Authentifizieren beider Parteien erforderlich sind.

Symmetrische Verschlüsselung, asymmetrische Verschlüsselung und Hashes

Um die Übertragung von Informationen zu gewährleisten, verwendet SSH an verschiedenen Punkten der Transaktion verschiedene Arten von Datenmanipulationstechniken. Dazu gehören Formen der symmetrischen Verschlüsselung, der asymmetrischen Verschlüsselung und des Hashings.

Symmetrische Verschlüsselung

Die Beziehung der Komponenten, die Daten verschlüsseln und entschlüsseln, bestimmt, ob ein Verschlüsselungsschema symmetrisch oder asymmetrisch ist.

Symmetrische Verschlüsselung ist eine Art der Verschlüsselung, bei der ein Schlüssel zum Verschlüsseln von Nachrichten an den anderen Teilnehmer und zum Entschlüsseln der vom anderen Teilnehmer empfangenen Nachrichten verwendet werden kann. Dies bedeutet, dass jeder, der den Schlüssel besitzt, Nachrichten an jeden, der den Schlüssel besitzt, verschlüsseln und entschlüsseln kann.

Diese Art von Verschlüsselungsschema wird häufig als "gemeinsame geheime" Verschlüsselung oder "geheime Schlüsselverschlüsselung" bezeichnet. Es gibt normalerweise nur einen einzigen Schlüssel, der für alle Operationen verwendet wird, oder ein Schlüsselpaar, bei dem die Beziehung leicht zu erkennen ist und es trivial ist, den anderen Schlüssel abzuleiten.

Symmetrische Schlüssel werden von SSH verwendet, um die gesamte Verbindung zu verschlüsseln. Im Gegensatz zu der Annahme einiger Benutzer werden öffentlich / private asymmetrische Schlüsselpaare, die erstellt werden können, nur zur Authentifizierung verwendet, nicht zum Verschlüsseln der Verbindung. Durch die symmetrische Verschlüsselung kann auch die Passwortauthentifizierung vor Schnüffeln geschützt werden.

Sowohl der Client als auch der Server tragen zur Einrichtung dieses Schlüssels bei, und das resultierende Geheimnis ist externen Parteien niemals bekannt. Der geheime Schlüssel wird durch einen Prozess erstellt, der als Schlüsselaustauschalgorithmus bekannt ist. Dieser Austausch führt dazu, dass Server und Client unabhängig voneinander zum gleichen Schlüssel gelangen, indem bestimmte öffentliche Daten gemeinsam genutzt und mit bestimmten geheimen Daten bearbeitet werden. Dieser Vorgang wird später noch näher erläutert.

Der durch dieses Verfahren erstellte symmetrische Verschlüsselungsschlüssel ist sitzungsbasiert und stellt die eigentliche Verschlüsselung für die zwischen Server und Client gesendeten Daten dar. Sobald dies geschehen ist, müssen die restlichen Daten mit diesem gemeinsamen Geheimnis verschlüsselt werden. Dies erfolgt vor der Authentifizierung eines Clients.

SSH kann so konfiguriert werden, dass verschiedene symmetrische Verschlüsselungssysteme verwendet werden, darunter AES, Blowfish, 3DES, CAST128 und Arcfour. Sowohl der Server als auch der Client können sich für eine Liste der unterstützten Chiffren entscheiden, die nach Präferenz sortiert sind. Die erste Option aus der Client-Liste, die auf dem Server verfügbar ist, wird in beide Richtungen als Verschlüsselungsalgorithmus verwendet.

Unter Ubuntu 14.04 sind sowohl der Client als auch der Server standardmäßig wie folgt eingestellt:aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,[email protected] ,[email protected],[email protected],aes128-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour.

Dies bedeutet, dass zwei Ubuntu 14.04-Computer, die eine Verbindung miteinander herstellen (ohne die Standard-Chiffren durch Konfigurationsoptionen zu überschreiben), immer dieaes128-ctr-Verschlüsselung verwenden, um ihre Verbindung zu verschlüsseln.

Asymmetrische Verschlüsselung

Die asymmetrische Verschlüsselung unterscheidet sich von der symmetrischen Verschlüsselung darin, dass zum Senden von Daten in eine Richtung zwei zugehörige Schlüssel erforderlich sind. Einer dieser Schlüssel ist alsprivate key bekannt, während der andere alspublic key bezeichnet wird.

Der öffentliche Schlüssel kann frei mit jeder Partei geteilt werden. Es ist seinem gepaarten Schlüssel zugeordnet, aber der private Schlüsselcannotwird vom öffentlichen Schlüssel abgeleitet. Die mathematische Beziehung zwischen dem öffentlichen Schlüssel und dem privaten Schlüssel ermöglicht es dem öffentlichen Schlüssel, Nachrichten zu verschlüsseln, die nur mit dem privaten Schlüssel entschlüsselt werden können. Dies ist eine Einwegfunktion, dh der öffentliche Schlüssel kann weder die Nachrichten entschlüsseln, die er schreibt, noch den privaten Schlüssel entschlüsseln, der ihn möglicherweise sendet.

Der private Schlüssel sollte absolut geheim gehalten und niemals mit einer anderen Partei geteilt werden. Dies ist eine wichtige Voraussetzung für das Funktionieren des Public-Key-Paradigmas. Der private Schlüssel ist die einzige Komponente, die Nachrichten entschlüsseln kann, die mit dem zugehörigen öffentlichen Schlüssel verschlüsselt wurden. Aufgrund dieser Tatsache hat jede Entität, die diese Nachrichten entschlüsseln kann, gezeigt, dass sie die Kontrolle über den privaten Schlüssel haben.

SSH verwendet an einigen Stellen eine asymmetrische Verschlüsselung. Während des anfänglichen Schlüsselaustauschprozesses, der fürset up der symmetrischen Verschlüsselung (zum Verschlüsseln der Sitzung) verwendet wird, wird eine asymmetrische Verschlüsselung verwendet. In dieser Phase erstellen beide Parteien temporäre Schlüsselpaare und tauschen den öffentlichen Schlüssel aus, um das gemeinsame Geheimnis zu erstellen, das für die symmetrische Verschlüsselung verwendet wird.

Die am besten diskutierte Verwendung der asymmetrischen Verschlüsselung mit SSH beruht auf der auf SSH-Schlüsseln basierenden Authentifizierung. SSH-Schlüsselpaare können verwendet werden, um einen Client gegenüber einem Server zu authentifizieren. Der Client erstellt ein Schlüsselpaar und lädt dann den öffentlichen Schlüssel auf einen beliebigen Remote-Server hoch, auf den er zugreifen möchte. Dies wird in einer Datei mit dem Namenauthorized_keys im Verzeichnis~/.ssh im Basisverzeichnis des Benutzerkontos auf dem Remote-Server abgelegt.

Nachdem die symmetrische Verschlüsselung eingerichtet wurde, um die Kommunikation zwischen Server und Client zu sichern, muss sich der Client authentifizieren, um Zugriff zu erhalten. Der Server kann den öffentlichen Schlüssel in dieser Datei verwenden, um eine Anforderungsnachricht an den Client zu verschlüsseln. Wenn der Client nachweisen kann, dass er diese Nachricht entschlüsseln konnte, hat er nachgewiesen, dass er den zugehörigen privaten Schlüssel besitzt. Der Server kann dann die Umgebung für den Client einrichten.

Hashing

Eine andere Form der Datenmanipulation, die SSH ausnutzt, ist das kryptografische Hashing. Kryptografische Hash-Funktionen sind Methoden zum Erstellen einer kurzen „Signatur“ oder einer Zusammenfassung einer Reihe von Informationen. Ihre Hauptunterscheidungsmerkmale sind, dass sie niemals rückgängig gemacht werden sollen, dass sie praktisch unmöglich vorhersehbar zu beeinflussen sind und dass sie praktisch einzigartig sind.

Die Verwendung derselben Hashing-Funktion und -Nachricht sollte denselben Hash erzeugen. Das Ändern eines Teils der Daten sollte einen völlig anderen Hash ergeben. Ein Benutzer solltenotin der Lage sein, die ursprüngliche Nachricht aus einem bestimmten Hash zu erstellen, abershouldollte erkennen können, ob eine bestimmte Nachricht einen bestimmten Hash erzeugt hat.

Aufgrund dieser Eigenschaften werden Hashes hauptsächlich für Zwecke der Datenintegrität und zur Überprüfung der Authentizität der Kommunikation verwendet. Die Hauptverwendung in SSH ist die Verwendung von HMAC- oder Hash-basierten Nachrichtenauthentifizierungscodes. Diese werden verwendet, um sicherzustellen, dass der empfangene Nachrichtentext intakt und unverändert ist.

Als Teil der oben beschriebenen symmetrischen Verschlüsselungsverhandlung wird ein Nachrichtenauthentifizierungscode-Algorithmus (MAC-Algorithmus) ausgewählt. Der Algorithmus wird ausgewählt, indem die Liste der akzeptablen MAC-Optionen des Clients durchgearbeitet wird. Der erste aus dieser Liste, den der Server unterstützt, wird verwendet.

Jede Nachricht, die nach dem Aushandeln der Verschlüsselung gesendet wird, muss einen MAC enthalten, damit der andere Teilnehmer die Paketintegrität überprüfen kann. Der MAC wird aus dem symmetrischen gemeinsamen Geheimnis, der Paketsequenznummer der Nachricht und dem tatsächlichen Nachrichteninhalt berechnet.

Der MAC selbst wird als letzter Teil des Pakets außerhalb des symmetrisch verschlüsselten Bereichs gesendet. Im Allgemeinen empfehlen die Forscher diese Methode, um zuerst die Daten zu verschlüsseln und dann den MAC zu berechnen.

Wie funktioniert SSH?

Sie haben wahrscheinlich bereits ein grundlegendes Verständnis für die Funktionsweise von SSH. Das SSH-Protokoll verwendet ein Client-Server-Modell, um zwei Parteien zu authentifizieren und die Daten zwischen ihnen zu verschlüsseln.

Die Serverkomponente überwacht einen bestimmten Port auf Verbindungen. Es ist verantwortlich für die Aushandlung der sicheren Verbindung, die Authentifizierung des Verbindungspartners und das Erstellen der richtigen Umgebung, wenn die Anmeldeinformationen akzeptiert werden.

Der Client ist dafür verantwortlich, den ersten TCP-Handshake mit dem Server zu starten, die sichere Verbindung auszuhandeln, zu überprüfen, ob die Identität des Servers mit den zuvor aufgezeichneten Informationen übereinstimmt, und Anmeldeinformationen für die Authentifizierung bereitzustellen.

Eine SSH-Sitzung wird in zwei separaten Schritten eingerichtet. Die erste besteht darin, eine Verschlüsselung zu vereinbaren und einzurichten, um die zukünftige Kommunikation zu schützen. In der zweiten Phase müssen Sie den Benutzer authentifizieren und feststellen, ob der Zugriff auf den Server gewährt werden soll.

Aushandeln der Verschlüsselung für die Sitzung

Wenn ein Client eine TCP-Verbindung herstellt, antwortet der Server mit den von ihm unterstützten Protokollversionen. Wenn der Client mit einer der zulässigen Protokollversionen übereinstimmt, wird die Verbindung fortgesetzt. Der Server stellt auch seinen öffentlichen Hostschlüssel bereit, mit dem der Client überprüfen kann, ob dies der beabsichtigte Host war.

Zu diesem Zeitpunkt verhandeln beide Parteien einen Sitzungsschlüssel unter Verwendung einer Version des Diffie-Hellman-Algorithmus. Dieser Algorithmus (und seine Varianten) ermöglichen es jeder Partei, ihre eigenen privaten Daten mit öffentlichen Daten des anderen Systems zu kombinieren, um zu einem identischen geheimen Sitzungsschlüssel zu gelangen.

Der Sitzungsschlüssel wird zum Verschlüsseln der gesamten Sitzung verwendet. Die für diesen Teil der Prozedur verwendeten öffentlichen und privaten Schlüsselpaare unterscheiden sich vollständig von den SSH-Schlüsseln, mit denen ein Client gegenüber dem Server authentifiziert wird.

Die Basis dieses Verfahrens für den klassischen Diffie-Hellman ist:

  1. Beide Parteien einigen sich auf eine große Primzahl, die als Startwert dient.

  2. Beide Parteien einigen sich auf einen Verschlüsselungsgenerator (normalerweise AES), mit dem die Werte in vordefinierter Weise manipuliert werden.

  3. Unabhängig davon erfindet jede Partei eine andere Primzahl, die von der anderen Partei geheim gehalten wird. Diese Nummer wird als privater Schlüssel für diese Interaktion verwendet (anders als der für die Authentifizierung verwendete private SSH-Schlüssel).

  4. Der generierte private Schlüssel, der Verschlüsselungsgenerator und die gemeinsam genutzte Primzahl werden verwendet, um einen öffentlichen Schlüssel zu generieren, der vom privaten Schlüssel abgeleitet ist, der jedoch mit der anderen Partei geteilt werden kann.

  5. Beide Teilnehmer tauschen dann ihre generierten öffentlichen Schlüssel aus.

  6. Die empfangende Entität verwendet ihren eigenen privaten Schlüssel, den öffentlichen Schlüssel der anderen Partei und die ursprüngliche gemeinsame Primzahl, um einen gemeinsamen geheimen Schlüssel zu berechnen. Obwohl dies von jeder Partei unabhängig unter Verwendung entgegengesetzter privater und öffentlicher Schlüssel berechnet wird, führt dies zum gemeinsamen geheimen Schlüssel vonsame.

  7. Das gemeinsame Geheimnis wird dann zum Verschlüsseln der gesamten folgenden Kommunikation verwendet.

Die gemeinsam genutzte geheime Verschlüsselung, die für den Rest der Verbindung verwendet wird, wird als binäres Paketprotokoll bezeichnet. Der obige Prozess ermöglicht es jeder Partei, gleichermaßen an der Erzeugung des gemeinsamen Geheimnisses teilzunehmen, wodurch ein Ende das Geheimnis nicht kontrollieren kann. Es erfüllt auch die Aufgabe, ein identisches gemeinsames Geheimnis zu erzeugen, ohne diese Informationen jemals über unsichere Kanäle senden zu müssen.

Das generierte Geheimnis ist ein symmetrischer Schlüssel, dh der gleiche Schlüssel, der zum Verschlüsseln einer Nachricht verwendet wird, kann zum Entschlüsseln der Nachricht auf der anderen Seite verwendet werden. Damit soll die gesamte weitere Kommunikation in einem verschlüsselten Tunnel zusammengefasst werden, der von Außenstehenden nicht entschlüsselt werden kann.

Nachdem die Sitzungsverschlüsselung eingerichtet wurde, beginnt die Benutzerauthentifizierungsphase.

Authentifizierung des Benutzerzugriffs auf den Server

In der nächsten Phase wird der Benutzer authentifiziert und der Zugriff festgelegt. Je nachdem, was der Server akzeptiert, können für die Authentifizierung verschiedene Methoden verwendet werden.

Am einfachsten ist wahrscheinlich die Kennwortauthentifizierung, bei der der Server den Client einfach zur Eingabe des Kennworts des Kontos auffordert, mit dem er sich anmelden möchte. Das Passwort wird durch die ausgehandelte Verschlüsselung gesendet, so dass es von außen sicher ist.

Obwohl das Kennwort verschlüsselt wird, wird diese Methode aufgrund der Einschränkungen hinsichtlich der Komplexität des Kennworts im Allgemeinen nicht empfohlen. Durch automatisierte Skripte können Passwörter normaler Länge im Vergleich zu anderen Authentifizierungsmethoden sehr leicht geknackt werden.

Die beliebteste und empfohlene Alternative ist die Verwendung von SSH-Schlüsselpaaren. SSH-Schlüsselpaare sind asymmetrische Schlüssel, was bedeutet, dass die beiden zugeordneten Schlüssel unterschiedliche Funktionen erfüllen.

Mit dem öffentlichen Schlüssel werden Daten verschlüsselt, die nur mit dem privaten Schlüssel entschlüsselt werden können. Der öffentliche Schlüssel kann frei geteilt werden, da es keine Methode gibt, den privaten Schlüssel vom öffentlichen Schlüssel abzuleiten, obwohl er für den privaten Schlüssel verschlüsselt werden kann.

Die Authentifizierung mit SSH-Schlüsselpaaren beginnt, nachdem die symmetrische Verschlüsselung wie im letzten Abschnitt beschrieben eingerichtet wurde. Der Vorgang läuft folgendermaßen ab:

  1. Der Client sendet zunächst eine ID für das Schlüsselpaar, mit dem er sich beim Server authentifizieren möchte.

  2. Der Server überprüft dieauthorized_keys-Datei des Kontos, bei dem der Client versucht, sich für die Schlüssel-ID anzumelden.

  3. Wenn ein öffentlicher Schlüssel mit der entsprechenden ID in der Datei gefunden wird, generiert der Server eine Zufallszahl und verschlüsselt die Zahl mit dem öffentlichen Schlüssel.

  4. Der Server sendet diese verschlüsselte Nachricht an den Client.

  5. Wenn der Client tatsächlich über den zugehörigen privaten Schlüssel verfügt, kann er die Nachricht mit diesem Schlüssel entschlüsseln und dabei die ursprüngliche Nummer preisgeben.

  6. Der Client kombiniert die entschlüsselte Nummer mit dem gemeinsamen Sitzungsschlüssel, der zum Verschlüsseln der Kommunikation verwendet wird, und berechnet den MD5-Hash dieses Werts.

  7. Der Client sendet dann diesen MD5-Hash als Antwort auf die Nachricht mit der verschlüsselten Nummer an den Server zurück.

  8. Der Server verwendet denselben gemeinsamen Sitzungsschlüssel und die ursprüngliche Nummer, die er an den Client gesendet hat, um den MD5-Wert selbst zu berechnen. Es vergleicht seine eigene Berechnung mit der, die der Client zurückgesendet hat. Wenn diese beiden Werte übereinstimmen, ist der Client im Besitz des privaten Schlüssels und der Client ist authentifiziert.

Wie Sie sehen, kann der Server aufgrund der Asymmetrie der Schlüssel Nachrichten mit dem öffentlichen Schlüssel an den Client verschlüsseln. Der Client kann dann nachweisen, dass er den privaten Schlüssel besitzt, indem er die Nachricht korrekt entschlüsselt. Die beiden verwendeten Verschlüsselungstypen (symmetrischer gemeinsamer geheimer Schlüssel und asymmetrischer öffentlich-privater Schlüssel) können jeweils ihre spezifischen Stärken in diesem Modell nutzen.

Fazit

Wenn Sie sich mit den Schritten für die Verbindungsaushandlung und den Verschlüsselungsebenen bei der Arbeit in SSH vertraut machen, können Sie besser verstehen, was passiert, wenn Sie sich bei einem Remoteserver anmelden. Hoffentlich haben Sie jetzt eine bessere Vorstellung von der Beziehung zwischen verschiedenen Komponenten und Algorithmen und wissen, wie all diese Teile zusammenpassen.