Die sichere Verwaltung von SSH-Zugängen stellt für viele Nutzer und Administratoren eine Herausforderung dar. Die traditionelle Verwendung von Passworten oder privaten Schlüsseln auf dem Rechner birgt Sicherheitsrisiken, vor allem wenn diese Dateien kompromittiert werden. Die Integration von Hardware-Sicherheitsschlüsseln basierend auf dem FIDO2/U2F-Standard bietet eine innovative Lösung, die die Sicherheit und den Komfort der SSH-Authentifizierung deutlich verbessert. Diese Schlüssel, zu denen bekannte Modelle wie YubiKey, Nitrokey oder Google Titan gehören, arbeiten mit einem modernen Authentifizierungsprotokoll, das auch unter Namen wie Webauthn oder Passkey bekannt ist. Durch die Unterstützung von OpenSSH für FIDO2/U2F können Anwender einfacher und sicherer auf entfernte Systeme zugreifen – ohne Angst vor dem Diebstahl privater Schlüssel oder unbefugtem Zugriff.
FIDO2/U2F-Schlüssel zeichnen sich dadurch aus, dass sie die eigentlichen privaten SSH-Schlüssel nicht preisgeben. Stattdessen speichern sie einen sogenannten Schlüssel-Handle, der vom SSH-Client genutzt wird, um kryptografische Aktionen durchzuführen, ohne den Schlüssel selbst irgendwo auszulesen. Dies ist ein entscheidender Sicherheitsvorteil, denn selbst wenn ein Angreifer Zugriff auf den PC hat, kann er nicht ohne Weiteres durchreichen oder den Schlüssel abgreifen. Zusätzlich erfordert die Nutzung des Schlüssels eine physische Interaktion, meist das Berühren des Geräts, was eine weitere Schutzebene schafft. So wird verhindert, dass automatisierte Angriffe oder Remote-Exploits unbemerkt Zugang erhalten.
Für die Einrichtung eines solchen Systems ist vor allem wichtig, einen kompatiblen Hardware-Schlüssel zu besitzen. Die YubiKey 5-Serie ist hierbei eine beliebte Wahl, da sie weltweit verfügbar ist, sehr gute Unterstützung unter Linux bietet und viele weitere Funktionen wie TOTP oder OpenPGP mitbringt. Aber auch andere Hersteller wie Nitrokey oder Google mit ihrem Titan-Key bieten passende Geräte an. Sobald das passende Gerät bereitsteht, kann der Nutzer mit ssh-keygen einen „sk“-Key generieren, also einen Schlüssel, der speziell für die Verwendung mit FIDO2/U2F gedacht ist. Hierbei wird meistens der ed25519-sk-Typ empfohlen, wegen seiner starken Sicherheit und Performance.
Sollte das Gerät ed25519 nicht unterstützen, bietet sich alternativ der ecdsa-sk-Typ an. Der erzeugte Schlüssel unterscheidet sich von herkömmlichen SSH-Schlüsseln: Die .pub-Datei enthält den öffentlichen Schlüssel, wohingegen die private Schlüsseldatei nur den Schlüssel-Handle enthält, der verschlüsselt auf der Festplatte liegt. Der eigentliche private Schlüssel wird im Sicherheitsmodul des Geräts behalten und ist nicht zugänglich. Diese Trennung sorgt dafür, dass der private Schlüssel nie den Hardware-Schlüssel verlässt und somit nicht kopiert oder gestohlen werden kann.
Durch das Einbinden des Schlüssels in den ssh-agent verbessert sich zudem die Benutzerfreundlichkeit. Anders als bei normalen Schlüsseln muss man zwar weiterhin den Hardware-Schlüssel physisch berühren, um eine Authentifizierung zu bestätigen, aber man kann seine Schlüsselhandles im Agenten laden und muss Passwörter nicht repetitiv eingeben. Besonders interessant ist hier auch der Schutz beim Agent-Forwarding. Normalerweise kann es riskant sein, den Agenten auf einen fremden Host weiterzuleiten, da Angreifer dort den Agenten nutzen könnten, um sich als der Benutzer auszugeben. Mit einem FIDO2/U2F-Schlüssel ist dies jedoch deutlich sicherer, da die physische Bestätigung am Schlüssel erforderlich bleibt, welche immer am lokalen Rechner passieren muss.
Ebenfalls bemerkenswert ist die Flexibilität im Umgang mit mehreren Schlüsseln und mehreren Hardware-Geräten. Für Benutzer, die Vorsicht walten lassen, ist es sinnvoll, neben dem Hauptgerät mindestens einen Backup-Schlüssel zu besitzen. Für jeden Schlüssel muss ein eigenes Schlüsselpaar generiert und auf dem Zielserver die passenden öffentlichen Schlüssel eingetragen werden. Beim Verbindungsaufbau prüft SSH dann jeweils, ob der benötigte Hardware-Schlüssel auch tatsächlich angeschlossen ist. Fehlt ein Schlüssel, erzeugt SSH zwar eine Warnung, überspringt ihn aber und probiert den nächsten.
Auf diese Weise bleibt die Authentifizierung robust und für den Nutzer komfortabel. Auf der anderen Seite können auch Hardware-Schlüssel auf einer beliebigen Anzahl von Rechnern genutzt werden. Die nicht-residenten Schlüssel speichern wie erwähnt keine sensiblen Daten auf dem Gerät selbst, weshalb sie nicht an bestimmte Computer gebunden sind. Somit ist es möglich, dass ein Schlüssel mit unterschiedlichen Rechnern zusammenarbeitet, was besonders in diversifizierten Arbeitsumgebungen ein großer Vorteil ist. Eine weitere Ebene der Sicherheit lässt sich erreichen, indem man eine PIN für den Zugriff auf den Schlüssel einrichtet.
Diese PIN, die man über Tools wie fido2-tools oder Herstellerprogramme wie ykman setzen kann, fordert vor jeder Nutzung eine PIN-Eingabe, die eine zusätzliche Authentifizierung darstellt. Dies erschwert Diebstahlversuche zusätzlich, denn neben dem physischen Schlüssel wird auch noch ein Wissen vorausgesetzt. Die Eingabe der PIN erfolgt über ssh-askpass, ein Hilfsprogramm, welches bei Bedarf einen Dialog öffnet. Gerade unter grafischen Desktop-Umgebungen ist die Nutzung von ssh-askpass für PIN-geschützte Schlüssel wichtig. Bei der Wahl zwischen nicht-residenten und residenten Schlüsseln bietet der Standard klar Vorteile für die nicht-residenten Variante.
Resident Keys speichern nämlich den privaten Schlüssel direkt auf dem Hardware-Gerät. Wird das Gerät gestohlen, kann der Besitzer daher leichter Zugang erhalten. Jedoch bieten resident Keys den Komfort, dass lokale private Schlüsseldateien nicht mehr benötigt werden: Sie können direkt vom Schlüssel geladen werden. In der Praxis sollte man, wenn man resident Keys nutzt, aus Sicherheitsgründen mindestens eine PIN-Erfordernis aktivieren. Oft empfehlen Experten aber aus Sicherheitsgründen die Nutzung von non-resident Keys, da sie das Sicherheitsniveau höher halten.
Für die Anwendung in produktiven Umgebungen gibt es zudem praktische Einsatzszenarien über den direkten SSH-Zugriff hinaus. So können Root-Accounts etwa über das Anlegen von öffentlichen Schlüsseln, die an die Hardware gekoppelt sind, geschützt werden. Mithilfe von Agent-Forwarding und lokalen SSH-Verbindungen lässt sich so eine sichere und kontrollierte Eingabe für starke Privilegien implementieren, die das herkömmliche sudo-System zumindest ergänzen oder zum Teil ersetzen kann. Darüber hinaus sind auch spezielle Einsatzszenarien wie der Betrieb von headless Servern denkbar. Hier kann ein Hardware-Schlüssel für kontinuierliche Aufgaben wie Backups eingesetzt werden, eventuell sogar mit deaktivierter Touch-Bestätigung (no-touch-required Option), um automatisierte Abläufe zu ermöglichen.
Diese Variante sollte allerdings mit Vorsicht genutzt werden, da sie eine geringere Sicherheit aufweist als die klassische Touch-required Methode. Einige technische Tücken gibt es natürlich auch: Auf Systemen, die Wayland als Grafik-Server verwenden, können Start von ssh-agent und ssh-askpass umständlich sein, da die üblichen Session-Skripte nicht automatisch geladen werden. Hier helfen angepasste Startskripte, die dafür sorgen, dass ssh-agent frühzeitig startet, und ssh-askpass korrekt arbeitet. Auch müssen Zugriffsrechte auf die Schnittstellen des Hardware-Schlüssels wie die /dev/hidraw-Geräte eventuell angepasst werden. Dazu können Udev-Regeln für entsprechende Gruppen-Rechte sorgen, um Nicht-Root-Nutzern ordnungsgemäß Zugriff zu gewähren.
Zusätzlich zur reinen SSH-Nutzung eröffnen FIDO2/U2F Schlüssel noch weitere Einsatzmöglichkeiten. Sie lassen sich zum Beispiel mit PAM integrieren, um lokale Logins auf Systemen sicherer zu machen oder gar mit LUKS für das Verschlüsselungssystem der Festplattenverschlüsselung genutzt werden. Auch die Kombination mit anderen kryptographischen Systemen wie Age oder OpenPGP erlaubt Interessierten, die vielseitigen Funktionen der Hardware-Sicherheitsmodule auszuschöpfen – wobei letzteres allerdings meist nicht mehr direkt über den FIDO2-Standard, sondern andere Protokolle abgedeckt wird. Für mobile Nutzer gibt es ebenfalls Entwicklungen, wenngleich der Markt hier noch eingeschränkt ist. Unter Android beispielsweise unterstützt die SSH-App Termius die FIDO2-Authentifizierung, bei iOS finden sich Apps wie Prompt oder Blink, die dieses Feature ebenfalls implementieren.