Multi-Faktor-Authentifizierung in TYPO3 v11

Wir haben uns das neue Sicherheitsfeature von TYPO3 v11 genauer angeschaut

#ninja { color: black; visibility: hidden; }

Martin Alker
kennt TYPO3 wie seine Westentasche und entwickelt sich stets im Webumfeld weiter
Lesedauer: ca. 3 Minuten

Mit der TYPO3 Version 11 hat TYPO3 einige neue Sicherheitsfeatures mit an Board, wie z.B. seit v11.1 eine Multi-Faktor-Authentifizierung (MFA). Mit nur wenigen Griffen kann eine Multi-Faktor-Authentifizierung integriert werden. 

Des Weiteren können TYPO3-Entwickler eigene MFA-Provider entwickeln (MFA API) oder neben den in TYPO3 v11.1 mitgelieferten MFA-Providern weitere im TYPO3 Extension Repository (TER) finden.

In diesem Artikel liegt der Fokus auf der Administration der in v11.1 mitgelieferten MFA-Provider: Time-based one-time password und Recovery codes.

Einen MFA-Provider aktivieren

Time-based one-time password (Einmal-Passwort) und Recovery codes sind sogenannte MFA-Provider, die eine Möglichkeit bieten sich gegenüber dem System zu authentisieren. Es können außerdem mehrere MFA-Provider parallel aktiv sein und das für jeden BE-Benutzer individuell.

Damit auch Backend-Benutzer, die nicht TYPO3-Admin sind MFA-Provider verwenden können, muss ein TYPO3-Admin diese MFA-Provider in einer entsprechenden BE-Gruppe zulassen, die den relevanten BE-Benutzern zugewiesen wird:

Allowed multi-factor authentication providers

Benutzereinstellungen

Ein MFA-Provider wird im Modul Benutzereinstellungen administriert. Auch hier sollte der TYPO3-Administrator sicherstellen, dass dieses Modul dem BE-Benutzer zur Verfügung steht.

Im Tab Account security befindet sich die neue Option Multi-factor authentification, die je nach MFA-Status einen Button für das Einrichten oder einen Button für das Verwalten der MFA-Provider anbietet:

MFA enabled
Benutzereinstellungen

Setup

Der MFA-Provider Time-based one-time password verlangt beim Login einen sechsstelligen Code, der nur 30 Sekunden gültig ist. Hierbei wird eine OTP-Anwendung (One-Time Password) benötigt, wie z.B. der Google Authenticator oder 1Password, die diesen sechsstelligen Code anzeigt.

Der Recovery codes MFA-Provider ist als Fallback gedacht, falls der Standard-Provider, wie in diesem Fall der Time-based one-time password MFA-Provider in irgendeiner Form nicht verwendet werden kann (z.B. Smartphone oder OTP-Anwendung nicht funktionsfähig).

MFA Overview

Sollte der BE-Benutzer folgendes Bild sehen, hat er keine Berechtigung durch einen TYPO3-Administrator erhalten einen MFA-Provider zu aktivieren (siehe auch "Einen MFA-Provider aktivieren"):

Multi-factor Authentification Overview

Bei der Einrichtung des Time-based one-time password MFA-Providers wird eine OTP-Anwendung, wie z.B. der bereits erwähnte Google Authenticator benötigt, mit dem der QR-Code gescannt wird und daraufhin der sechsstellige Code zur Bestätigung im Feld Enter the generated six-digit code eingetragen wird:

Set up time-based one-time password

Beispielsweise sieht das im Google Authenticator so aus, dass der TYPO3 Sitename (TYPO3 v11) und der BE-Benutzer (user) in Klammern auftaucht:

Google Auth Example

Nach Beendigung der Einrichtung erscheint wieder die MFA-Übersicht und Du kannst weitere MFA-Provider aktivieren oder bereits aktive anpassen oder deaktivieren:

MFA Overview success

Nun aktivieren wir noch als Fallback den Recovery codes MFA-Provider. Hierbei werden achtstellige Codes generiert, die an einem sicheren Ort aufbewahrt werden sollten. Das Speichern der Recovery codes kann ein paar Sekunden dauern, da hier eine zusätzliche Verschlüsselung stattfindet - also nicht wundern, wenn es nicht sofort beim Speichern weitergeht:

Set up recovery codes

Backend-Login mit MFA

Nach der Aktivierung der beiden MFA-Provider erscheint beim Backend-Login nach der üblichen Abfrage des Benutzernamen und Passworts die Abfrage des Einmal-Passworts (Time-based one-time password). Des Weiteren werden auch weitere MFA-Provider angezeigt, in unserem Fall der Recovery codes MFA-Provider:

Recovery Codes
Time-based one-time password

Sollten zu viele Versuche fehlgeschlagen sein, sich mit den entsprechenden Codes zu verifizieren, dann informiert TYPO3 den Benutzer mit einer entsprechenden Meldung:

provider temporarily locked

Eine Entsperrung eines MFA-Providers kann entweder ein TYPO3-Admin vornehmen, z.B. in dem er über das Backend-Benutzer Modul zum entsprechenden Benutzer wechselt und in den Benutzereinstellungen den MFA-Provider entsperrt oder der BE-Benutzer kann sich mit einem alternativen Provider (z.B. Recovery codes) einloggen und dann auch in den Benutzereinstellungen den gesperrten MFA-Provider entsperren (Unlock):

MFA entsperren

Es sei noch erwähnenswert, dass ein TYPO3-Administrator im BE-Benutzer-Datensatz (Tab-Reiter: Allgemein) aktivierte MFA-Provider löschen/deaktivieren kann (aber nicht entsperren):

MFA activation

Offizielle TYPO3-Dokumentation / weitere MFA-Provider

In der offiziellen TYPO3-Dokumentation https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/Authentication/MultiFactorAuthentication.html werden weitere Konfigurationsmöglichkeiten aufgezeigt, sowie eine Anleitung zur Registrierung eines eigenen MFA-Providers über die MFA API.

Im TYPO3 Extension Repository findet man mit dem Suchbegriff "mfa" weitere MFA-Provider: https://extensions.typo3.org/?L=0&id=1&tx_solr%5Bq%5D=mfa

Bonus: Rate Limiter

Wie eingangs erwähnt wurden in TYPO3 v11 neue Sicherheitsfeatures integriert und eine weiteres über das ich gestolpert bin ist der Rate Limiter (Symfony-Bibliothek). Beim Testen des neuen MFA-Features wurden von mir zu oft Benutzername und Passwort falsch in kurzer Zeit hintereinander eingegeben und ich erhielt folgende Meldung:

Fehlermeldung

Durch ein Flush cache (Wartungsmodul / Maintenance) im TYPO3-Backend konnte ich diese Sperre wieder aufheben. Damit werden aber alle Login-Sperren aufgehoben - das nur als Randnotiz.

Das Backend-Login, sowie auch Frontend-Logins werden durch dieses Sicherheitsfeatures geschützt, sodass zu viele fehlgeschlagene Logins von der gleichen IP-Adresse eine Login-Sperre auslösen. Natürlich kann auch dieses Feature angepasst werden, sei es für das Backend- oder Frontend-Login. Ein Beispiel für das Backend-Login:

$GLOBALS['TYPO3_CONF_VARS'][BE][loginRateLimit] = 5;
$GLOBALS['TYPO3_CONF_VARS'][BE][loginRateLimitInterval] = '15 minutes';
$GLOBALS['TYPO3_CONF_VARS'][BE][loginRateLimitIpExcludeList] = '';

Eine Rate Limiter Dokumentation findet ihr hier: 
https://docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/11.3/Feature-93825-RateLimitingForFailedLogins.html

Teilen:

Weitere Beiträge

Code gestaltet Zukunft – Unsere Leidenschaft für Innovation
Fahim Nasirzadeh, Entwicklung bei punkt.de
Arbeiten bei punkt.de