Die erste offizielle Version einer experimentellen Implementierung des SSH3-Protokolls für Server und Client ist jetzt verfügbar. Diese wurde als Erweiterung des HTTP/3-Protokolls gestaltet und verwendet QUIC (basierend auf UDP) und TLS 1.3 zur Einrichtung eines sicheren Kommunikationskanals sowie HTTP-Mechanismen zur Benutzerauthentifizierung. Das Projekt wird von François Michel, einem Doktoranden an der Katholischen Universität Leuven (Belgien), in Zusammenarbeit mit Olivier Bonaventure, Professor an derselben Universität und bekannt für die Entwicklung des Multipath TCP-Subsystems sowie dem Code für die segmentierte IPv6-Routing in den Linux-Kern, geleitet. Zudem ist er Mitautor von 10 RFC und Entwürfen von über 60 Netzwerkspezifikationen. Der Code der Referenzimplementierung für Client und Server ist in Go geschrieben und wird unter der Apache 2.0-Lizenz verbreitet.
Die Entwicklung von SSH3 war das Ergebnis einer umfassenden Überarbeitung des SSH-Protokolls, die von einer separaten Forschungsgruppe unabhängig von OpenSSH und anderen Projekten durchgeführt wurde, die klassische SSH-Protokollimplementierungen weiterentwickeln. In SSH3 wird die Semantik des klassischen SSH-Protokolls über HTTP-Mechanismen realisiert, was zusätzliche Funktionen ermöglicht und die SSH-Aktivität unter anderen Verkehrsmustern versteckt.
Bei der Verwendung von SSH3 ist der Server nicht von einem HTTP-Server zu unterscheiden und akzeptiert Anfragen über den Netzwerkport 443 (HTTPS), während der SSH3-Traffic mit dem typischen HTTP-Traffic vermischt wird, was es erschwert, Angriffe zu führen, die mit Portscanning und der Identifizierung von SSH-Servern zum Knacken von Passwörtern zusammenhängen. Um Angriffe zu erschweren. Server Neben dem Wissen um die Verfügbarkeit des Servers unter einer bestimmten IP-Adresse kann SSH3 auch einen geheimen Identifikationspfad für den SSH3-Server festlegen. Ohne den korrekten Identifikator zu verwenden, behandelt der Server die Anfragen wie ein normaler HTTPS-Server und gibt nicht an, dass eine SSH3-Verbindung möglich ist. Wenn beispielsweise der Identifikator "e6ae772cbdaafd6918865cc2ce449dae" angegeben wird, kann auf den Server nur über die URL "https://192.0.2.0:443/e6ae772cbdaafd6918865cc2ce449dae" zugegriffen werden. Ist der Identifikator nicht korrekt, gibt der Server einen regulären Fehler "404" aus.
Zu den erweiterten Funktionen von SSH3 gehört die Möglichkeit, zur Authentifizierung X.509-Zertifikate und OAuth 2.0/OpenID Connect-Methoden zu verwenden, zusätzlich zu den klassischen SSH-Methoden; die Unterstützung der Weiterleitung von UDP-Ports über ein SSH-Tunnel neben der Möglichkeit, TCP-Ports weiterzuleiten (z. B. für QUIC-, DNS- und RTP-Forwarding); die Nutzung erweiterter Funktionen des QUIC-Protokolls, wie z. B. die Verlagerung von Verbindungen ohne Unterbrechung und die Einrichtung von Multipath-Verbindungen zur Parallelisierung des Verkehrs über mehrere Routen.
Eine wesentliche Verkürzung der Verbindungsaufbauzeit beim Einsatz von SSH3 wird besonders hervorgehoben. Bei der Verbindung zu einem SSH3-Server sind lediglich 3 Netzwerkiterationen (Round Trip) erforderlich, während bei SSHv2 5-7 Pakettransfers nötig sind. Die Reaktionszeit auf Tastatureingaben für bereits etablierte Sitzungen liegt bei SSH3 und SSHv2 auf einem ähnlichen Niveau.

Für die Verschlüsselung der Verbindung wird in SSH3 das Protokoll TLS 1.3 eingesetzt, während bei der Authentifizierung klassische Methoden auf Basis von Passwörtern und öffentlichen Schlüsseln (RSA und EdDSA/ed25519) verwendet werden können. Zudem können in SSH3 auch Methoden verwendet werden, die auf dem OAuth 2.0-Protokoll basieren, um die Authentifizierung auf Drittanbieter zu übertragen, beispielsweise zur Durchführung von Anmeldungen mit Bestätigung über Konten bei Google, Microsoft und GitHub. Zusätzlich zu SSH-Schlüsseln können auch X.509-Zertifikate, die für HTTPS verwendet werden, zur Verbindung mit den Servern eingesetzt werden.
Die veröffentlichte Implementierung des SSH3-Clients und -Servers unterstützt viele grundlegende Funktionen von OpenSSH, darunter:
- Unterstützung der Datei ~/.ssh/authorized_keys mit den Key-Einstellungen für Server.
- Möglichkeit zur Nutzung der Konfigurationsdatei ~/.ssh/config auf der Client-Seite. Derzeit werden die Parameter Hostname, User, Port und IdentityFile unterstützt, während andere ignoriert werden.
- Unterstützung der Zertifikat-basierten Authentifizierung für die Verbindung zum Server.
- Unterstützung des Mechanismus known_hosts (in Situationen, in denen keine X.509-Zertifikate verwendet werden).
- Unterstützung der Zusammenarbeit des Clients mit OpenSSH Agent (ssh-agent) und automatische Nutzung des Agents für die Authentifizierung mit öffentlichen Schlüsseln.
- Unterstützung der SSH-Agent-Umleitungsfunktion zur Verwendung lokaler Schlüssel auf einem externen Server.
- Direktes TCP-Portforwarding.
Quelle: opennet.ru
