ADMIN

2023

06

2023-05-30T12:00:00

Automatisierung

PRAXIS

058

Open-Source-Tipp

Sicherheit

Authentifizierung

Passwortlose Authentifizierung mit FIDO2

Ausgedient

von Thorsten Scherf

Veröffentlicht in Ausgabe 06/2023 - PRAXIS

Immer mehr Unternehmen setzen in Ihrer IT-Umgebung auf Zero Trust, wozu eine ganze Reihe an Sicherheitsmaßnahmen gehört. Wir werfen im Open-Source-Tipp diesen Monat einen Blick auf den FIDO2-Standard. Dieser hilft beim Verzicht auf tendenziell unsichere Passwörter bei der Authentifizierung von Benutzern.

Die FIDO-Allianz (Fast IDentity Online) hat bereits in der Vergangenheit eine ganze Reihe an Standards veröffentlicht, die dabei helfen sollen, die Sicherheit bei der Authentifizierung von Benutzern zu verbessern. So haben wir bereits den damaligen Industriestandard U2F als Teil der FIDO1-Spezifikation vorgestellt. Dieser sieht vor, dass Benutzer mit geeigneten Tokens zusätzlich zum Passwort einen weiteren Faktor für eine erfolgreiche Authentifizierung benötigen.
FIDO2 wurde im März 2019 von der FIDO-Allianz in Zusammenarbeit mit dem World Wide Web Consortium (W3C) herausgegeben. Es hat allerdings einige Zeit gedauert, bis die Soft- und Hardwarehersteller diesen Standard unterstützt haben. Wie schon bei FIDO1 gehören diverse unterschiedliche Spezifikationen zu FIDO2.
Eine Kernkomponente stellt sicherlich die "Web Authentication"(WebAuthN) dar. Diese soll dafür sorgen, dass bei der Anmeldung von Benutzern an einem Webservice zukünftig keine Passwörter gefragt sind. Im Zuge der Zero-Trust-Strategie [1] möchten viele Unternehmen nämlich auf den Einsatz von Passwörtern so weit wie möglich verzichten. FIDO2 stellt somit einen wichtigen Baustein zur Umsetzung von Zero Trust dar.
Die FIDO-Allianz (Fast IDentity Online) hat bereits in der Vergangenheit eine ganze Reihe an Standards veröffentlicht, die dabei helfen sollen, die Sicherheit bei der Authentifizierung von Benutzern zu verbessern. So haben wir bereits den damaligen Industriestandard U2F als Teil der FIDO1-Spezifikation vorgestellt. Dieser sieht vor, dass Benutzer mit geeigneten Tokens zusätzlich zum Passwort einen weiteren Faktor für eine erfolgreiche Authentifizierung benötigen.
FIDO2 wurde im März 2019 von der FIDO-Allianz in Zusammenarbeit mit dem World Wide Web Consortium (W3C) herausgegeben. Es hat allerdings einige Zeit gedauert, bis die Soft- und Hardwarehersteller diesen Standard unterstützt haben. Wie schon bei FIDO1 gehören diverse unterschiedliche Spezifikationen zu FIDO2.
Eine Kernkomponente stellt sicherlich die "Web Authentication"(WebAuthN) dar. Diese soll dafür sorgen, dass bei der Anmeldung von Benutzern an einem Webservice zukünftig keine Passwörter gefragt sind. Im Zuge der Zero-Trust-Strategie [1] möchten viele Unternehmen nämlich auf den Einsatz von Passwörtern so weit wie möglich verzichten. FIDO2 stellt somit einen wichtigen Baustein zur Umsetzung von Zero Trust dar.
Asymmetrische Kryptographie
Das Prinzip von WebAuthN basiert auf asymmetrischer Kryptographie, wobei ein öffentlicher und ein privater Schlüssel für einen Benutzer zum Einsatz kommen. Der öffentliche ist jeweils an die Webservices zu übertragen, die WebAuthN unterstützen und auf denen sich der Benutzer anmelden möchte. Der private Schlüssel verbleibt hingegen lokal. Optional können Sie den Private Key zusätzlich mit einer PIN schützen. Für die Schlüsselerzeugung kommt zumeist ein Hardwaretoken in Form eines USB-Devices zum Einsatz. Sehr beliebt und oft eingesetzt sind die Tokens der Forma YubiKey [2], wobei es auch eine Vielzahl an anderen Herstellern gibt, die Hardwaretoken für FIDO2 anbieten.
In unserem Open-Source-Tipp möchten wir jedoch einen anderen Einsatzzweck von FIDO2 aufzeigen. Es geht dabei darum, wie Sie sich mithilfe eines entsprechenden Tokens und eines zentral verwalteten Benutzeraccounts an Ihrem Linux-System anmelden können. Das Konto kann dabei entweder in einem klassischen LDAP-Server oder einem FreeIPA-System vorliegen. Letzteres bietet den Vorteil, dass Sie bei der Anmeldung auch direkt ein Kerberos-Ticket für diesen Benutzer ausgestellt bekommen. Hiermit können Sie dann ohne die Eingabe des Passworts auf weitere Services zugreifen, solange diese Kerberos als Authentifizierungsmethode unterstützen.
Fedora 39, das im Herbst 2023 erscheint, wird eine der ersten Linux-Distributionen sein, die FIDO2 und WebAuthN von Haus aus unterstützt. Hierfür findet ein zusätzliches Softwarepaket namens sssd-passkey seinen Weg in die Distribution.
Vorab testen
Wer die neue Software schon jetzt testen möchte, kann diese über ein Fedora-COPR-Repository [3] beziehen. Die Aktivierung des Repositories erfolgt über den Befehl
dnf copr enable ipedrosa/passkey-auth
Im Anschluss haben Sie unmittelbar Zugriff auf sämtliche Pakete aus diesem Software-Repository und können die aktuelle Version des System Security Services Daemons (sssd) installieren. Und natürlich steht hierüber nun auch das neue Paket sssd-passkey zur Verfügung:
dnf install sssd sssd-passkey
Haben Sie ein FIDO2-kompatibles Token an Ihrem Rechner angeschlossen, erzeugen Sie mit dem folgenden Kommando einen öffentlichen und privaten Schlüssel für den gewünschten Benutzer. Die Domäne bezieht sich dabei auf den Bereich, in dem der Account im LDAP- oder FreeIPA-System verwaltet wird:
sssctl passkey-register --username= tscherf --domain=ipa.test
Das sssctl-Tool erzeugt nun einen Schlüsselbund und gibt als Ergebnis eine längere Zeichenkette auf dem Display aus. Diese können Sie dem jeweiligen Benutzerkonto hinzufügen. Abhängig davon, welches Backendsystem Sie verwenden, unterscheidet sich die Vorgehensweise hierfür. Stellen Sie zunächst aber auch sicher, dass die Konfigurationsdatei des SSSD-Services ("/etc/sssd/sssd.conf") über die passkey-Anweisung verfügt:
 
[pam]
pam_passkey_auth=true
Starten Sie im Anschluss den Dienst erneut, um die Konfigurationsanweisung zu aktivieren: systemctl restart sssd.
Benutzerkonto mit FIDO2-Schlüssel
Am einfachsten erfolgt die Konfiguration mit FreeIPA als zentrales Identity-Management-System. Für einen bereits vorhandenen Benutzer können Sie hier einfach auf das Kommando ipa user-add-passkey zurückgreifen, um den FIDO2-Schlüssel einem Benutzer-Account hinzuzufügen:
ipa user-add-passkey tscherf passkey:<Schlüssel>
Mittels ipa user-show überzeugen Sie sich dann davon, dass der Schlüssel nun auch Teil des Benutzer-Objektes im LDAP ist:
ipa user-show tscherf
 
User login: tscherf
First name: tscherf
Last name: doe
Home directory: /home/tscherf
Login shell: /bin/sh
Principal name: tscherf@IPA.TEST
Principal alias: tscherf@IPA.TEST
Email address: tscherf@ipa.test
UID: 805400005
GID: 805400005
Passkey mapping: passkey:<Schlüssel>
Account disabled: False
Password: False
Member of groups: ipausers
Kerberos keys available: False
Melden Sie sich nun am System an oder wechseln mittels su zu einem Konto, das über einen FIDO2-Schlüssel verfügt, fängt das Hardwaretoken an zu blinken. Nach einem Tastendruck auf dem Token startet der Authentifizierungsvorgang und Sie werden angemeldet, ohne ein Passwort eingeben zu müssen.
Listing 1: LDAP-passkey-Schema
attributeTypes: ( 2.16.840.1.113730.3.8.24.27 NAME 'passkey' DESC 'Passkey mapping' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
objectclasses: ( 2.16.840.1.113730.3.8.24.9 NAME 'passkeyUser' DESC 'Passkey user' AUXILIARY MAY passkey)
LDAP-Server im Backend
Setzen Sie im Backend einen regulären LDAP-Server ein, müssen Sie im ersten Schritt sicherstellen, dass dieser über die notwendige Objektklasse verfügt, damit Sie das passkey-Attribut im nächsten Schritt einem Benutzerobjekt zuweisen können.
Die Vorgehensweise unterscheidet sich je nach eingesetztem LDAP-Server. Für den 389 Directory Server [4] können Sie beispielsweise die Datei "/etc/dirsrv/slapd-backend/schema/60base.ldif" um die beiden Einträge aus Listing 1 erweitern und dann im nächsten Schritt mittels dsconf die Schemaänderungen aktivieren:
dsconf -D "cn=Directory Manager" -W backend schema reload
Grundsätzlich können Sie natürlich ebenso ldapmodify einsetzen, um Anpassungen am Schema vorzunehmen. Gleiches gilt für den Benutzeraccount, den Sie im LDAP-Server anlegen – ob Sie hierfür auf ein grafisches Frontend zurückgreifen oder auch wieder ldapmodify oder ldapadd einsetzen, spielt keine Rolle. Wichtig ist lediglich, dass das LDAP-Objekt über das Attribut "passkey" verfügt, indem Sie den öffentlichen Schlüssel des Benutzers speichern, den Sie zuvor mithilfe von sssctl passkey-register erzeugt haben. Listing 2 zeigt ein Besipiel für eine einfache LDIF-Datei, die Sie mittels ldapadd in den LDAP-Server laden können:
ldapadd -D "cn=Directory Manager" -W -H ldap://localhost -x -f /tmp/user.ldif
Hat alles geklappt, können Sie nun ebenfalls eine Anmeldung mit diesem Konto durchführen, ohne hierfür ein Passwort zu verwenden.
Listing 2: LLDIF-Datei user.ldif
dn: uid=foobar,dc=example,dc=com
mail: foobar@example.com
uid: foobar
givenName: Foo
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
objectClass: posixAccount
objectClass: inetuser
objectclass: passkeyUser
sn: Bar
cn: Foo Bar
uidNumber: 5000
gidNumber: 5000
homeDirectory: /home/foobar
loginShell: /bin/bash
gecos: foobar
passkey: passkey: "Schlüssel"
Fazit
Mittels FIDO2 und eines passenden Hardwaretokens können sich zentral verwaltete Benutzer ohne die Eingabe eines Passworts an einem System anmelden. Der vom Token erzeugte Schlüssel ist hierfür dem Benutzerobjekt im LDAP in einem zusätzlichen Attribut hinzuzufügen. FIDO2 ist somit ein hilfreicher Baustein bei der Umsetzung einer Zero-Trust-Strategie.
(dr)
Link-Codes
[3] Fedora-COPR-Repositories: https://copr.fedorainfracloud.org/
[4] 389 Directory Server: https://directory.fedoraproject.org/