Aus Linux-Magazin 02/2020

Zwei-Faktor-Authentifizierung in der Praxis

© jippu2498, 123RF

Zwei- oder Mehrfaktorauthentifizierung zielt darauf ab, die Anmeldung an einem System sicherer zu machen. Der Filehosting-Anbieter Nextcloud arbeitet seit 2016 an einer Zwei-Faktor-Authentifizierung und gibt Einblicke in die Entwicklungsstufen.

Im September 2019 ist die zweite europäische Zahlungsdiensterichtlinie endgültig in Kraft getreten. Spätestens sei diesem Zeitpunkt hat jeder Europäer, der Online-Banking betreibt, eine Vorstellung, was eine Zwei-Faktor-Authentifizierung (2FA) ist. Die Richtlinie erfordert beim Online-Banking verbindlich einen zweiten Faktor beim Zugriff auf Kontoinformationen und erfüllt damit auch die Vorgaben zur Kundenauthentifizierung und zum Zugriff auf Konten durch Drittanbieter.

Niedrige Sicherheitsstufe

Seit 2016 arbeitet Christoph Wurst als Entwickler bei Nextcloud an der Zwei-Faktor-Authentifizierung. Das Ziel von Zwei- oder Mehrfaktorauthentifizierung ist es grundsätzlich, die Authentifizierung durch das Hinzufügen eines oder mehrerer weiteren Sicherheitsmerkmale gegen Angreifer besser abzusichern. “In Abgrenzung zu Autorisierung geht es nicht darum, wer auf welche Daten Zugriff hat, sondern wie eine Person ihre Identität nachweisen kann”, erklärt Wurst. Dafür kommen Kombinationen von bekannten Faktoren zum Einsatz, wie Tokens, Transaktionsnummern, Einmalkennwörter oder biometrische Merkmale. Die beiden Faktoren zur Authentifizierung müssen auf getrennten Kanälen übertragen werden.

Auf so gut wie allen System kennen wir derzeit als einen Faktor die Authentifizierung über (geheimes) Wissen: das gute alte Passwort. Dass es allein keinen nachhaltigen Schutz bietet, hat sich mittlerweile herumgesprochen. Datendiebstähle in teils erschreckenden Dimensionen sind fast schon an der Tagesordnung. Weil nicht alle Systeme die Passwörter sicher abspeichern und nicht alle Dienste zuverlässig administriert werden, stellen im Klartext gespeicherte Passwörter keine Seltenheit dar.

Trotzdem wäre auch das Verwenden eines einzelnen Passworts noch nicht unbedingt ein Super-GAU, sagt Christoph Wurst, würden die Anwender denn zumindest verschiedene, zufällige Passwörter für unterschiedliche Dienste benutzen. In der Realität seien Passwörter jedoch oft mehrfach im Einsatz, und somit ermögliche ein geleaktes Passwort für einen Dienst oft auch den Zugriff auf weitere. Eine von Google in Auftrag gegebene Studie hat ergeben, das über 30 Prozent der befragten deutschen Nutzer ihre Passwörter auf Zetteln notieren, 70 Prozent verwenden dasselbe Passwort auf unterschiedlichen Online-Accounts.

Bei Passwörtern besteht auch das Problem, dass sie sich erraten lassen, meist mittels technischer Hilfe. Nextcloud versucht solchen Angriffen mittels Brute-Force-Abwehr zu begegnen, berichtet Christoph Wurst. Die IP-Adressen fehlgeschlagener Login-Versuche speichert man in einer Datenbank, anschließend verlangsamt das System jeden weiteren Login-Versuch. Die Verzögerung reicht dabei von 200 Millisekunden bis zu 30 Sekunden. Erst eine erfolgreiche Anmeldung setzt die Verzögerung für die verwendete IP-Adresse wieder zurück.

Weitere Gefahren sieht Wurst im Mitloggen von Passwörtern im Transit, wenn kein HTTPS mit SSL zum Einsatz kommt, sowie durch Keylogger. Das gleichbleibende Passwort lasse sich so von einem Angreifer immer wieder verwenden, um sich am System anzumelden, da es von Login zu Login gleich bleibe, so Wurst. Es gibt zwar Tricks, diese illegalen Logins zu erkennen, aber der Angreifer ist dann meistens schon im System. Nextcloud etwa setzt eine Suspicious-Login-App [1] ein, die aus den IP-Adressen und der User-ID Muster lernt und so ungewollte Zugriffe vermeiden helfen soll. Der Nutzer bekommt dazu eine Benachrichtigung, dass es einen neuen Login gegeben hat.

Die Authentifizierung aber wirklich abzusichern, erfordert eine Kombination aus einer Wissensmethode (nur der Benutzer kennt das Passwort) und mindestens einem zweiten Faktor. In den meisten Fällen handelt es sich bei diesem zweiten Faktor um etwas, das sich im Besitz des Benutzers befindet. Derzeit setzen viele große Anbieter auf ein Time-based One-Time Password (TOTP) oder die Integration einer Universal-Two-Factor-Methode (U2F), erläutert Wurst.

Time-based One-Time Password

TOTP basiert auf einem offenen Standard der Internet Engineering Task Force [2] und stellt somit einen offenen Standard dar. Kommt ein TOTP zum Einsatz, generiert der Dienst beim Setup eine Zufallszahl, die er dann mit einer Client-Anwendung austauscht (“shared secret”).

Nextcloud generiert jedes Mal, wenn sich eine Person am System authentifizieren möchte, aus der Geheimzahl und dem aktuellen Zeitstempel eine sechsstellige Ziffernfolge, erläutert Wurst. Die stellt dann ein zusätzliches Passwort beim Login dar. Der Trick dabei: Das Passwort gilt nur für sehr kurze Zeit, da es vom Timestamp abhängt. Zusätzlich zeichnet der Dienst meist auch auf, welche Codes bereits zum Einsatz kamen, damit man einen Code nicht im selben Zeitfenster für eine weitere Anmeldung nutzen kann.

Der Begriff TOTP habe sich allerdings außerhalb der Tech-Bubble noch nicht etabliert und stifte deshalb öfter Verwirrung, kommentiert Wurst. Bekannter sei die TOTP-Methode schon eher unter dem Namen Google Authenticator. Das rühre schlicht daher, dass der eben eine sehr beliebte App sei, so Wurst. Außer dass die App von Google stammt und eben auch mit Google-Diensten funktioniere, habe sie im Einsatz aber nichts mit Google zu tun, betont Wurst. Bei Nextcloud habe die Unterstützung der Google-App sogar schon einige Nutzer abgeschreckt, die fälschlicherweise annahmen, dass die Daten über die Google-Server laufen würden.

Universal Two-Factor

Eine weitere weitverbreitete Methode für die Zwei-Faktor-Authentifizierung stellt Universal Two-Factor (U2F) dar, ebenfalls ein offener Standard [3]. Anders als TOTP nutzt U2F aber ein Hardware-Token sowie eine spezielle API im Webbrowser. Die Methode arbeite mit asynchroner Verschlüsselung, erläutert Wurst, wobei der Token für jeden Service ein eigenes Schlüsselpaar generiere. Der Private Key sollte dann theoretisch nie auslesbar sein. Den Public Key übergebe der Anwender an den Service und signiere beim Login eine Challenge, erklärt Wurst.

Bekanntgemacht haben das Verfahren vor allem die YubiKey-Tokens und die Unterstützung in Google Chrome. Heute gibt es schon mehr Anbieter solcher Tokens, und Firefox, Edge sowie andere Webbrowser haben nachgezogen. Der Ablauf: Der Benutzer meldet sich an. Der Service generiert die Challenge, die der Browser an den Token schickt. Der wiederum signiert die Challenge, was der Benutzer eventuell durch Anklicken eines Buttons bestätigen muss. Der Service überprüft diese Signatur mithilfe des Public Keys, was die Authentifizierung abschließt.

Das Bequeme an U2F sei, dass die Installation von Treibern für den Token entfalle, da er als HID-Gerät erkannt werde. Die Sache funktioniere also “einfach so”, sagt Wurst, auch wenn die Anmeldung auf einem anderen Gerät erfolge. Manche Token seien sogar mit NFC ausgerüstet, wodurch sie dann auch an entsprechend kompatiblen Smartphones nutzbar würden, erläutert er.

2FA in Nextcloud

Bei der Integration der Zwei-Faktor-Authentifizierung bei Nextcloud war Christoph Wurst von Anfang an dabei und durfte den Großteil der 2FA beziehungsweise die dafür notwendigen Features planen und umsetzen. Das ganze Projekt begann 2016, war also immer schon Teil von Nextcloud. Die Funktion habe sich über die Jahre laufend verbessert, resümiert Wurst, und die Entwicklung sei auch noch nicht abgeschlossen.

Bei der ersten Planung zur 2FA lautete die allgemeine Zielvorgabe, die Anmeldung allein per Passwort abzulösen. Es galt also, die Authentifizierung generell zu überarbeiten und zu erneuern, erinnerst sich Wurst. Da Nextcloud ein sehr modulares System sei, wofür schon die Nextcloud-Apps stünden, sei eine der Anforderungen gewesen, bei der Entwicklung soviel wie möglich “pluggable” und austauschbar zu machen.

Den einfachste Weg dazu biete das Umsetzen der konkreten 2FA-Implementierung durch Apps, so Wurst. Das habe auch den Vorteil, dass sich die Codebasis der Kernkomponente nicht unnötig vergrößere, wenn nicht alle Nextcloud-Instanzen dann tatsächlich jede 2FA-Methode aktivieren. Ein weiterer Vorteil bestehe darin, dass die Entwickler beliebige 2FA-Implementierungen für Nextcloud schreiben können, ohne dass man diese dann in den Code aufnehmen und pflegen müsse, erklärt der Entwickler.

Probleme

Dass Nextcloud nicht allein über eine Weboberfläche genutzt werde, sondern auch von Client-Anwendungen, wie etwa dem Sync-Client und den mobilen Apps, sei eine Herausforderung gewesen, erinnert sich Wurst. Das Problem dabei: Diese Anwendungen wollen eine konstante Verbindung zu Nextcloud haben, trotzdem soll der Benutzer aber nicht alle fünf Minuten nach dem Password und einem zweiten Faktor gefragt werden.

Um das zu umgehen, haben die Entwickler App-Passwörter eingeführt, die sich – wie auch auf anderen Plattformen üblich – für jeden Client spezifisch generieren lassen. Nextcloud setzt das in Form eines automatisch erzeugten Strings um, den die Clients dann als Passwort verwenden. “Die Clients selbst wissen das aber nicht. Sie verwenden das App-Passwort ganz einfach, als wäre es das Login-Passwort. Das war wichtig, da wir die Kompatibilität mit bestehenden Clients nicht brechen wollten”, sagt Wurst. Außerdem sollten nicht nur Clients aus der Nextcloud-Schmiede zum Einsatz kommen, sondern beliebige Tools, die die offenen Standards WebDAV, CalDAV, CardDAV sprechen.

Die App-Passwörter bieten laut Wurst auch den Vorteil, dass der Nutzer nun eine Übersicht über die verbundenen Clients hat und diese auch individuell entfernen kann. Verliert ein Anwender also sein Handy, lässt sich dessen Zugriff ganz einfach zurücksetzen, und es besteht damit nicht die Gefahr, dass ein Angreifer das Passwort ausliest und möglicherweise wiederverwendet.

Erste Lösungen

Da die 2FA-Umsetzung modular sein sollte, setzten die Entwickler sie mit einer Abstraktion um, den 2FA-Providern. Dabei handelt es sich um Implementierungen in Form von über Apps bereitgestellten PHP-Klassen. “Das lässt sich dann als Umsetzung einer 2FA-Methode sehen”, erläutert Wurst. Nextcloud selbst habe von der Funktionsweise konkreter 2FA-Methoden keinen Plan, sondern regle nur die Abläufe; die Apps übernehmen dann die Implementierung. Die TOTP-App liefert also einen TOTP-Provider, die U2F-App einen U2F-Provider.

Die Apps können ihre Provider dann über die »info.xml« mit den Metadaten jeder Nextcloud-App registrieren, woraus Nextcloud dann eine Liste erstellt. Meldet sich ein Benutzer an, wird abgefragt, ob Provider verfügbar sind. Falls ja, erfolgt nach der Eingabe des Passworts noch die Abfrage der Challenge des jeweiligen Providers. Existiert mehr als ein Provider, zeigt Nextcloud eine Auswahlseite (Abbildung 1).

<a href="#artRef-f1">Abbildung 1</a>: Ist mehr als ein Authentifizierungsprovider verf&uuml;gbar, zeigt Nextcloud die M&ouml;glichkeiten an. Quelle: Nextcloud

Abbildung 1: Ist mehr als ein Authentifizierungsprovider verfügbar, zeigt Nextcloud die Möglichkeiten an. Quelle: Nextcloud

Ihre Eigenschaften speichert eine Nextcloud-App in der Datei »info.xml«. Neben Abhängigkeiten (Nextcloud-und PHP-Version, Datenbanken) finden sich dort auch Deklarationen für 2FA-Implementierungen. Es ist erlaubt, mehrere solcher Implementierungen zu listen (Listing 1).

Listing 1

Providerauswahl

<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
        <id>twofactor_totp</id>
        <name>Two-Factor TOTP Provider</name>
        [...]
        <two-factor-providers>
            <provider>OCA\TwoFactorTOTP\Provider\TotpProvider</provider>
        </two-factor-providers>
</info>

Der Einsatz der Zwei-Faktor-Authentifizierung war bei Nextcloud mit verschiedenen Methoden geplant. Die erste konkrete Implementierung erfolgte aber über TOTP. Dieser Schritt sei auch relativ einfach umzusetzen gewesen, weil es bereits bestehende TOTP-Bibliotheken [4] für PHP gegeben habe, erklärt Wurst. Da mit diesen Bibliotheken Einschränkungen einhergingen, habe ein Kollege dann später eine eigene Library [5] entwickelt.

Mit den Bibliotheken lässt sich das Shared Secret generieren und der Client-Anwendung übergeben. In den meisten Fällen erfolgt die Übergabe per QR-Code, damit der Benutzer nichts tippen muss. Beim Login generiert die TOTP-App die sechsstellige Ziffernfolge und gibt sie in das Login-Formular ein. Zu guter Letzt prüft die TOTP-Bibliothek dann auf Basis des aktuellen Zeitstempels, ob die Ziffernfolge zum Shared Secret passt.

Zeitverschiebungen

Die Methode habe soweit auch funktioniert, erinnert sich der Entwickler. Im Betrieb stießen einige Nextcloud-Nutzer aber auf Probleme, da gelegentlich die Zeit am Smartphone von der am Server abdriftete. Solche unterschiedlichen Zeiten können verschiedene Ursachen haben. Für die TOTP-Methode stellen sie in jedem Falls ein Problem dar, weil die generierte Ziffernfolge nicht mehr gilt, wenn sie am Server eintrifft. Das Dilemma lässt sich nur lösen, indem man sicherstellt, dass sowohl Server als auch Smartphone die Zeit von einem (vertrauenswürdigen) Zeitserver abrufen.

Aber damit nicht genug: Einige Benutzer hatten von Haus aus eine falsche Zeit; trotz Konfiguration der TOTP-App kamen sie schon beim ersten Login nicht mehr ins System, beschreibt der Entwickler das Problem. Als Lösung dafür fragt Nextcloud bereits beim Setup von TOTP nach einer generierten Ziffernfolge (Abbildung 2). Kann der Benutzer schon zu diesem Zeitpunkt die Challenge nicht lösen, schaltet Nextcloud den gewählten Provider gar nicht erst aktiv.

<a href="#artRef-f2">Abbildung 2</a>: Nextcloud fragt bereits beim Setup von TOTP nach einer Ziffernfolge. Quelle: Nextcloud

Abbildung 2: Nextcloud fragt bereits beim Setup von TOTP nach einer Ziffernfolge. Quelle: Nextcloud

Handy verloren

Hin und wieder verlieren Nutzer ihr Smartphone, was auch der Zugriff zu den Services mit TOTP gefährdet. Abhilfe schaffen hier sogenannte Backup Codes. Diese Einmal-Passwörter lassen sich beim Setup von 2FA generieren. Der Nutzer speichert sie dann an einem sicheren Ort ab oder druckt sie aus (Abbildung 3).

<a href="#artRef-f3">Abbildung 3</a>: Beim 2FA-Setup generiert der Nutzer Backup Codes. Quelle: Nextcloud

Abbildung 3: Beim 2FA-Setup generiert der Nutzer Backup Codes. Quelle: Nextcloud

Falls man den Zugriff auf TOTP oder auch andere implementierte und ausgewählte 2FA-Methoden bei Nextcloud verliert, kann man die Passwörter verwenden, um wieder Zugriff zum System zu erlangen und später die Authentifizierungsmethode mit einem neuen Smartphone zu konfigurieren. “Bei Nextcloud werden auch die Backup Codes von einer 2FA-App generiert. Die ist aber fester Bestandteil der Nextcloud-Codebasis und somit auf jeder Instanz verfügbar”, merkt Wurst an.

Neue Provider

Als nächste Implementierung folgte dann U2F. Auch für dieses Vorhaben ließen sich vorhandene PHP-Bibliotheken [6] nutzen, die beim Setup und Login mit U2F hilfreich seien, erzählt der Entwickler. Das Ganze habe man in eine neue Nextcloud-App gepackt, die einen U2F-Provider registriert (Abbildung 4).

<a href="#artRef-f4">Abbildung 4</a>: Die U2F-App fragt nach Authentifizierung. Quelle: Nextcloud

Abbildung 4: Die U2F-App fragt nach Authentifizierung. Quelle: Nextcloud

In der ersten Implementierung konnte man sich nur mit Google Chrome und Chromium anmelden, erinnert sich Wurst, für Firefox sei damals noch ein Plugin nötig gewesen. Firefox habe dann aber eine zuerst experimentelle Unterstützung über die »about:config« angeboten. Der entsprechende Eintrag »security.webauth.u2f« stehe immer noch in der Konfigurationsdatei von Firefox, so Wurst, sei mittlerweile aber standardmäßig auf »true« gesetzt.

Später kam bei Firefox native Unterstützung für das Protokoll hinzu. “Im Browser verwenden wir jetzt auch eine Javascript-Bibliothek [7], die die U2F-API abstrahiert und von den konkreten Implementierungen unabhängig macht, die theoretisch standardisiert, aber tatsächlich leicht unterschiedlich sind”, beschreibt Wurst den aktuellen Stand (Abbildung 5).

<a href="#artRef-f5">Abbildung 5</a>: Die &Uuml;bersicht zu den gew&auml;hlten Authentifizierungen in Nextcloud. Quelle: Nextcloud

Abbildung 5: Die Übersicht zu den gewählten Authentifizierungen in Nextcloud. Quelle: Nextcloud

In manchen Umgebungen lässt sich 2FA noch über SMS abwickeln, wovon Sicherheitsexperten wie Bruce Schneier allerdings schon länger abraten [8]. Bei Nextcloud habe man jedoch eine App entwickelt, die nicht nur über SMS senden könne, sondern über beliebige Nachrichtenkanäle, relativiert Wurst die Angelegenheit. Neben gängigen SMS-API-Anbietern habe man auch Telegram und Signal integriert. Gehe man davon aus, dass die Nachricht (Ende-zu-Ende-)verschlüsselt übertragen werde, sei dies dann im Vergleich zu SMS auch sicher, so Wurst.

Eigengewächse

Die Nextcloud-Entwickler hatten anschließend noch die Idee, 2FA mit den bestehenden mobilen Apps zu verknüpfen. Die Überlegung dabei: “Warum nicht einfach beim Login eine Nachricht an die Apps schicken, mit der man dann die Anmeldung bestätigt?”

Das ganze Verfahren basiert auf Nextcloud Notifications, einer App, die Nextcloud mit jeder Instanz ausliefert. Beim Login werde eine Push Notification an alle Clients gesendet, erklärt Wurst. Darin befinde sich ein Button, mit dem der Benutzer sein OK geben könne. Die Webseite mit dem Login warte auf das Anklicken des Schalters, danach gelange der Nutzer automatisch weiter ins System. Der Vorteil bei dieser Methode: Sie erfordert keine zusätzlichen Geräte oder Apps.

Ausblick

Nextcloud hat sich von Anfang an kontinuierlich mit 2FA auseinandergesetzt. “Wird sind noch nicht am Ziel”, sagt Christoph Wurst. Der nächste Schritt erfolge vermutlich in Richtung WebAuthn oder eben einer passwortlosen Authentifizierung. Damit könnte in Zukunft etwa das Smartphone die ganze Authentifizierung erledigen. Das Verfahren mit WebAuthn [9] sei in mancher Hinsicht eine Weiterentwicklung von U2F und obendrein standardisiert, erklärt Wurst. “Es gibt von unserer Community dafür auch schon eine Proof-of-Concept-App [10], mit der man WebAuthn in Nextcloud als zweiten Faktor verwenden kann”, freut sich der Nextcloud-Entwickler.

Zur Person

Christoph Wurst beteiligt sich seit 2013 aktiv an der Entwicklung freier Software. Seit 2016 ist er bei der Nextcloud GmbH beschäftigt, wo er an Zwei-Faktor-Authentifizierung, Machine Learning und der Mail-App arbeitet.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben