Secure Shell

Abkürzung: SSH

Entstanden ist SSH 1995 als Ersatz für Telnet und die verwandten Werkzeuge, die Anmeldedaten und Nutzdaten im Klartext übertrugen. Geblieben ist es, weil es mehr leistet als eine verschlüsselte Sitzung: Es ist ebenso Dateiübertragung, Tunnel und Transport für automatisierte Zugriffe.

Die heute verwendete Fassung ist SSH-2, eine vollständige Neuentwicklung. SSH-1 hatte eine Schwäche in der Integritätsprüfung und ist seit Jahren aus den gängigen Programmen entfernt.

Drei Schichten

Das Protokoll ist in drei Lagen aufgeteilt, was erklärt, warum sich Verschlüsselung, Anmeldung und Nutzung unabhängig voneinander betrachten lassen:

SchichtAufgabe
Transport LayerSchlüsseleinigung, Verschlüsselung, Integrität, Serverauthentifizierung
User Authentication LayerNachweis des Benutzers
Connection Layermehrere Kanäle über eine Verbindung — Sitzung, Dateiübertragung, Tunnel

Dass mehrere Kanäle über eine Verbindung laufen, ist der Grund, warum sich in einer bestehenden SSH-Sitzung nachträglich ein Tunnel öffnen lässt, ohne sich erneut anzumelden.

Die Schlüsseleinigung erfolgt über Diffie-Hellman, heute meist auf einer elliptischen Kurve. Die Standardportnummer ist 22.

Der Host Key

Beim ersten Verbindungsaufbau zeigt SSH den Fingerprint des Serverschlüssels und fragt, ob er akzeptiert wird. Nach der Bestätigung landet er in der Datei known_hosts und wird bei jedem weiteren Aufbau verglichen.

Das ist der entscheidende Punkt und gleichzeitig die bekannteste Schwachstelle: Die Abfrage beim ersten Mal ist die einzige Gelegenheit, den Server zu prüfen. Wer sie bestätigt, ohne den Fingerprint über einen zweiten Kanal verglichen zu haben, vertraut darauf, dass gerade kein Angreifer dazwischensitzt. Anders als bei TLS steht keine Zertifizierungsstelle dahinter, die die Zuordnung bestätigt.

Umgekehrt ist die spätere Warnung über einen geänderten Schlüssel ernst zu nehmen. In den meisten Fällen wurde der Server neu aufgesetzt — aber genau dieselbe Meldung erscheint bei einem Angriff.

Für größere Umgebungen gibt es zwei Auswege: known_hosts zentral verteilen, oder mit einer SSH-eigenen Zertifizierungsstelle arbeiten, die Hostschlüssel signiert. Letzteres nutzt ein eigenes, kompaktes Zertifikatsformat und hat mit X.509 nichts zu tun.

Anmeldeverfahren

Kennwort. Einfach, aber dem Erraten von außen ausgesetzt. Ein über das Internet erreichbarer Port 22 sieht dauerhaft automatisierte Versuche.

Public Key. Der Client beweist den Besitz eines privaten Schlüssels; der zugehörige öffentliche Schlüssel steht auf dem Server in authorized_keys. Das ist das empfohlene Verfahren — es überträgt kein Geheimnis und ist gegen Erraten unempfindlich.

Zertifikat. Eine signierte Bestätigung mit Ablaufdatum, ausgestellt von einer SSH-Zertifizierungsstelle. Erspart das Verteilen einzelner Schlüssel auf jeden Server und löst das Problem, ausgeschiedene Zugänge überall zu entfernen.

Tastatur-interaktiv. Der Rahmen für Rückfragen, über den unter anderem Einmalkennwörter als zweiter Faktor eingebunden werden.

Bei den Schlüsselarten gilt: Ed25519 ist die heutige Wahl — kurz, schnell, ohne Parameterfallen. RSA ist weiterhin verbreitet und mit mindestens 3072 Bit vertretbar. DSA mit 1024 Bit ist abgekündigt und in aktuellen Fassungen von OpenSSH nicht mehr enthalten.

Tunnel

Drei Betriebsarten, die regelmäßig verwechselt werden:

Lokale Weiterleitung. Ein Port auf dem eigenen Rechner wird auf einen Dienst hinter dem SSH-Server gelegt. So erreicht man eine Datenbank, die nur im entfernten Netz erreichbar ist.

Entfernte Weiterleitung. Umgekehrte Richtung: Ein Port auf dem Server zeigt auf einen Dienst im eigenen Netz. Das macht einen lokalen Dienst von außen erreichbar — und umgeht damit absichtlich eine Firewall, was eine betriebliche Entscheidung und keine technische Nebensache ist.

Dynamische Weiterleitung. SSH gibt einen SOCKS-Zugang, über den Anwendungen beliebige Ziele ansprechen können.

Die Weiterleitung des Authentifizierungsagenten ist ein verwandtes Hilfsmittel mit eigenem Risiko: Wer auf dem Zwischenserver Verwaltungsrechte hat, kann den weitergeleiteten Zugang für eigene Anmeldungen verwenden, solange die Sitzung besteht.

Dateiübertragung

SFTP ist das heute übliche Verfahren — ein eigenes Protokoll über einen SSH-Kanal, mit Verzeichnisauflistung und dem Fortsetzen abgebrochener Übertragungen. Trotz des Namens hat es mit FTP nichts gemeinsam und auch nichts mit FTPS, das FTP über TLS bezeichnet.

SCP ist der ältere Weg und kopiert über eine entfernte Shell. Seit 2019 wurden mehrere Schwachstellen in dieser Bauweise bekannt, bei denen ein bösartiger Server Dateien außerhalb des Zielverzeichnisses ablegen konnte; aktuelle Fassungen von OpenSSH setzen scp deshalb intern auf SFTP um.

Absichern

Vier Maßnahmen deckten in der Praxis das meiste ab:

  • Kennwortanmeldung abschalten, sobald Schlüssel verteilt sind
  • direkte Anmeldung als root unterbinden
  • den Dienst nicht ungefiltert ins Internet stellen, sondern auf bekannte Herkunftsnetze begrenzen oder hinter ein VPN legen
  • veraltete Verfahren bei Schlüsseleinigung, Verschlüsselung und Integrität aus der Konfiguration entfernen

Das Verlegen auf einen anderen Port als 22 verringert die Zahl der Einträge im Protokoll, ist aber keine Sicherheitsmaßnahme.

Erstellt: · Überarbeitet: