Das SSH-Protokoll ermöglicht es allen Client- und Serverprogrammen, die nach den Angaben des Protokolls erstellt wurden, auf sichere Weise zu kommunizieren und untereinander ausgetauscht zu werden.
Derzeit gibt es zwei verschiedene SSH-Protokolle: SSH-Version 1 enthält verschiedene patentierte Verschlüsselungsalgorithmen (mehrere Patente sind jedoch bereits abgelaufen) und eine Sicherheitslücke, die es potentiell ermöglicht, dass Daten in den Datenfluss eingegeben werden. Wenn möglich, wird empfohlen, Clients und Server zu verwenden, die mit SSH Version 2 kompatibel sind.
OpenSSH enthält den Support für Version 2 (sowie kostenlose DSA-Verschlüsselungen). Zusammen mit den OpenSSL-Verschlüsselungsbibliotheken bietet OpenSSH eine umfassende Bandbreite an Sicherheitsfunktionen.
Beide Versionen des SSH-Protokolls (1 und 2) verwenden ähnliche Sicherheitsschichten, um einen Rundum-Schutz der Kommunikation zu gewährleisten. Jede Schicht bedeutet eine bestimmte Schutzfunktion, die in Kombination mit den anderen die gesamte Sicherheit des Systems sowie die Benutzerfreundlichkeit verbessert.
Die wichtigste Aufgabe der Transportschicht ist es, die sichere und verschlüsselte Kommunikation zwischen zwei Rechnern bei und nach der Authentifizierung zu gewährleisten. Die gewöhnlich über TCP/IP ausgeführte Transportschicht verwaltet zu diesem Zweck die Verschlüsselung und Entschlüsselung der Daten und prüft, ob der Server der korrekte Rechner ist. Darüber hinaus sorgt sie dafür, dass die Datenpakete während des gesamten Übertragungsflusses geschützt sind. Weiterhin kann diese Schicht die Daten komprimieren und damit die Übertragungsgeschwindigkeit erheblich erhöhen.
Sobald ein Client über ein SSH-Protokoll mit einem Server in Verbindung tritt, erfolgen verschiedene wichtige Vorgänge, die dazu dienen, dass die beiden Systeme die Transportschicht korrekt aufbauen:
Austausch des Schlüssels
Zu verwendender Algorithmus für den allgemeinen Schlüssel
Zu verwendender Algorithmus für die symmetrische Verschlüsselung
Zu verwendender Algorithmus für die Authentifizierung der Mitteilungen
Zu verwendender Hash-Algorithmus
Beim Austausch der Schlüssel identifiziert sich der Server gegenüber dem Client mithilfe von Rechnerschlüssel. Wenn nie zuvor eine Verbindung zwischen dem Client und diesem Server bestanden hatte, erkennt er den Server als 'unbekannt' an. OpenSSH löst dieses Problem, indem es dafür sorgt, dass der Client den Rechnerschlüssel akzeptiert, wenn zum ersten Mal eine SSH-Verbindung hergestellt wird. Bei den nachfolgenden Verbindungen wird dieser Schlüssel mit der gespeicherten Version des Clients verglichen und auf diese Weise sichergestellt, dass der Client tatsächlich mit dem gewünschten Server kommuniziert.
Vorsicht | |
---|---|
Die von OpenSSH verwendete Kontrolle des Rechnerschlüssels ist nicht perfekt. Ein Hacker könnte sich zum Beispiel bei der ersten Verbindung als Server ausgeben, da der lokale Rechner zu diesem Zeitpunkt den gewünschten Server von einem unerlaubten Zugriff noch nicht unterscheiden kann. Bis eine verbesserte Methode zur Verfügung steht, ist jedoch diese Methode besser als nichts. |
Das SSH-Protokoll wurde konzipiert, um mit fast allen Algorithmen oder Formaten für allgemeine Schlüssel verwendet werden zu können. Nachdem ein erster Schlüsselaustausch zwei Werte erstellt hat (einen Hash-Wert für den Austausch und einen gemeinsam genutzten, geheimen Wert), berechnen die beiden Systeme sofort neue Schlüssel und Algorithmen, um die Authentifizierung und die in der Folge über die Verbindung gesendeten Daten zu schützen.
Nachdem die Transportschicht einen sicheren Tunnel geschaffen hat, in dem die Informationen zwischen den beiden Systemen übertragen werden, teilt der Server dem Client die verschiedenen unterstützten Authentifizierungsmethoden mit (beispielsweise eine private, verschlüsselte Unterschrift oder die Eingabe eines Passworts). Der Client wird anschließend versuchen, sich anhand einer der unterstützten Methoden gegenüber dem Server zu identifizieren.
Server können konfiguriert werden, um verschiedene Arten der Authentifizierung zu ermöglichen. Diese Methode bietet daher jeder Seite das ideale Maß an Kontrolle. Der Server kann entscheiden, welche Verschlüsselungsmethoden er auf der Grundlage seines Sicherheitsmodells unterstützen möchte, und der Client kann festlegen, in welcher Reihenfolge er die verschiedenen verfügbaren Authentifizierungsmethoden verwendet. Dank der Sicherheit der SSH-Transportschicht sind auch scheinbar unsichere Authentifizierungsmethoden (z.B. die rechnerbasierte Authentifizierung) sicher.
Die meisten Benutzer mit einer Secure Shell werden sich mithilfe eines Passworts authentifizieren. Im Gegensatz zu anderen Authentifizierungsmethoden wird das Passwort hierbei als normaler Text an den Server übertragen. Da das gesamte Passwort jedoch bei der Übertragung über die Transportschicht verschlüsselt wird, wird es auch sicher über jedes Netzwerk gesendet.
Nach der erfolgreichen Authentifizierung über die SSH- Transportschicht werden multiple Kanäle[1] geöffnet, wobei die einzelne Verbindung zwischen den beiden Systemen mehrfach genutzt wird. Jeder der Kanäle bearbeitet die Mitteilungen für eine andere Terminalsession, gesendete X11-Informationen oder jedes andere Gerät, das die SSH-Verbindung verwenden möchte.
Sowohl Clients als auch Server können einen neuen Kanal erstellen, wobei jedem Kanal an jedem Ende eine unterschiedliche Nummer zugewiesen wird. Wenn eine Seite einen neuen Kanal öffnen möchte, wird die Nummer der entsprechenden Seite des Kanals mit der Anforderung übermittelt. Diese Information wird von der anderen Seite gespeichert und verwendet, um eine bestimmte Mitteilung an diesen Kanal weiterzuleiten. Ziel ist zu vermeiden, dass sich verschiedene Arten Sessionen beeinflussen und die Kanäle geschlossen werden können, ohne die primäre SSH-Verbindung zwischen den beiden Systemen zu unterbrechen.
Kanäle unterstützen auch die Datenflusskontrolle, was es ihnen ermöglicht, Daten geordnet zu senden und zu empfangen. Auf diese Weise werden Daten erst dann über den Kanal gesendet, wenn der Host-Rechner die Meldung erhält, dass der Kanal empfangsbereit ist.
Kanäle sind insbesondere für das X11-Forwarding und das TCP/IP- Forwarding mit SSH von großem Nutzen. Es ist dabei möglich, separate Kanäle verschieden zu konfigurieren, beispielsweise um eine unterschiedliche maximale Paketgröße zu verwenden oder einen bestimmten Datentyp zu übertragen. Auf diese Weise ist SSH flexibel genug, um verschiedene Arten Fernverbindungen (z.B. Onlinedienste über öffentliche Netzwerke oder Hochgeschwindigkeit-LAN-Verbindungen) ohne die grundlegende Infrastruktur des Protokolls zu verändern. Der Client und der Server bearbeiten automatisch die Konfiguration jedes Kanals innerhalb der SSH-Verbindung für den Benutzer.
[1] | Eine Multiplex-Verbindung besteht aus verschiedenen Signalen, die über ein gemeinsam genutztes Medium gesendet werden. Mit SSH werden verschiedene Kanäle über eine gemeinsame, verschlüsselte Verbindung gesendet. |