Al decimo Liferay Boot Camp 2022 è stato trattato il tema su ciò che Liferay offre in termini di sicurezza e come realizzare le proprie soluzioni sfruttando il framework che Liferay mette a nostra disposizione.
Restando quindi in tema di sicurezza, in questo articolo affronteremo come abilitare la Multi-Factor Authentication (MFA) configurando in particolare l'uso di FIDO2 (Fast Identity Online 2) con l'obiettivo di poter accedere al portale tramite il proprio dispositivo (token hardware).
Nell'ordine vedremo:
- Cos'è FIDO2
- Le due fasi di WebAuthn
- Quali sono i requisiti per usare FIDO2
- Configurazione Multi-Factor Authentication per FIDO2
- Procedura di registrazione dell'authenticator
- Test di autenticazione con FIDO2
Leggendo questo articolo fino alla fine, dovreste poi essere in grado di aggiungere senza difficoltà, l'ulteriore fattore di autenticazione al normale processo di login tramite username e password.
Come di consueto lascerò il bonus di fine articolo, ovvero, il riferimento GitHub del progetto che consentirà a voi di ricreare lo scenario che andremo a descrivere. Troverete inoltre un breve filmato che mostra tutte le attività che sono state eseguite sul portale Liferay.
1. Cos'è FIDO2: WebAuthn & CTAP
FIDO2 è uno standard aperto (lanciato da FIDO Alliance e W3C) il cui obiettivo è quello di offrire un metodo di autenticazione senza password (o password-less) per il login sicuro nell'ambito dell'autenticazione web, utilizzando hardware verificato per l'identificazione degli utenti.
Con FIDO2 l'autenticazione avviene tramite un dispositivo attendibile, che in termini tecnici è denominato autenticatore. La connessione tra l'autenticatore e il browser può essere stabilita in diversi modi, come per esempio: Bluetooth, USB o NFC. Questi dispositivi possono essere di vario tipo e in genere:
- Chiavette USB come quelle prodotte da Yubico e SecureClick
- Smart Card (anche contactless) come Wega 3DSA 2.0 Acoustic Card certificata dalla FIDO Alliance
- Chip Trusted Platform Module (TPM) già integrati nella maggior parte degli smartphone, laptop e PC
FIDO2 combina la specifica W3C Web Authentication (WebAuthn) e i protocolli Client to Authenticator (CTAP) della FIDO Alliance.
Il protocollo CTAP risiede al livello dell'applicazione ed è responsabile della comunicazione sicura tra il dispositivo hardware verificato (o autenticatore) e il client/piattaforma (solitamente il browser) nonchè garantire la trasparenza rispetto al metodo di connessione che può essere USB, NFC (Near-Field Communication) o Bluetooth.
Il protocollo WebAuthn, invece, rende possibile l'autenticazione definendo il processo con cui le applicazioni web possono integrare la crittografia a chiave pubblica/privata (o asimmetrica) in un browser. Ciò si verifica quando comunicano tramite protocollo CTAP con l'autenticatore (modulo TPM o chiavetta USB).
Questa API permette ai Relying Parties (o Service Providers) di registrare e autenticare gli utenti attraverso un processo di crittografia asimmetrica, quest'ultima molto sicura, anziché attraverso un classico processo di autenticazione tramite username e password.
Lo standard FIDO2 è attualmente supportato da Windows 10, Android e dai web browsers Google Chrome, Mozilla Firefox, Microsoft Edge e Apple Safari.
Potremmo quindi riassumere le principali caratteristiche di FIDO2 in:
- Autenticazione con chiavi hardware esterne o integrate (vedi Apple launches web authentication using FIDO standard with Touch ID or Face ID biometrics in Safari)
- Autenticazione a due fattori
- Crittografia a chiave pubblica/privata asimmetrica;
- Autenticatore archiviato localmente
Lascio a voi gli approfondimenti sull'argomento, partendo dalla lettura del documento How FIDO Works pubblicato sul portale della FIDO Alliance.
2. Le due fasi di WebAuthn
Il protocollo WebAuthn prevede essenzialmente due fasi, che sono:
- Il flusso di registrazione delle credenziali
- Il flusso di autenticazione delle credenziali
In un flusso di registrazione utente basato su password, all'utente viene presentato un modulo che richiede una username e una password, quest'ultima è poi inviata al server per l'archiviazione.
In WebAuthn, un server deve fornire dati che associano un utente a una credenziale (una coppia di chiavi privata-pubblica); questi dati includono identificatori per l'utente e l'organizzazione (noto anche come Relying Party). Il sito Web utilizzerà quindi l'API di WebAuthn per richiedere all'utente di creare una nuova coppia di chiavi. È importante sapere che abbiamo bisogno di una stringa generata casualmente dal server come sfida (o challenge) al fine di prevenire attacchi.
Il dialogo mostrato a seguire rende esattamente l'idea del flusso di registrazione delle credenziali WebAuthn descritto in precedenza.
Al termine della registrazione, l'utente potrà essere autenticato. Durante l'autenticazione sarà creata un'asserzione, che è la prova che l'utente è in possesso della chiave privata. Questa asserzione contiene una firma (o signature) creata utilizzando la chiave privata. Il server utilizza la chiave pubblica recuperata durante la registrazione per verificare questa firma.
Il dialogo mostrato a seguire rende esattamente l'idea del flusso di autenticazione delle credenziali WebAuthn descritto in precedenza.
Per approfondire l'argomento circa l'uso delle WebAuthn API di registrazione e autenticazione, consiglio di leggere WebAuthn: A better alternative for securing our sensitive information online.
Queste due fasi di registrazione e autenticazione le vedremo poi in maniera distinta dal punto di vista pratico proprio su Liferay.
3. Requisiti per usare FIDO2 con Liferay
Prima di procedere con l'attività di configurazione della Multi-Factor Authentication (MFA) tramite FIDO2, è necessario che abbiate la disponibilità di una Security Key o Token e quest'ultima sia certificata FIDO2 (vedi FIDO Certified Showcase).
Per il caso presentato in questo articolo, utilizzerò la Security Key (o Token) YubiKey 5 Series. Ho preferito optare per questo dispositivo hardware poiché offre il supporto multiprotocollo consentendo una forte sicurezza per ambienti legacy e moderni. Questa Security Key è inoltre consigliata da Liferay.
Le caratteristiche principali di questa serie di Security Key:
- Multi-protocol support; FIDO2, U2F, Smart Card, OTP, OpenPGP 3
- USB-A, USB-C, NFC, Lightning
- IP68 rated, crush resistant, no batteries required, no moving parts
4. Configurazione Multi-Factor Authentication per FIDO2
Lo standard Fast IDentity Online 2 o FIDO2 consente l'uso di dati biometrici (cioè lettori di impronte digitali), dispositivi mobili o altre chiavi di sicurezza per l'autenticazione senza password. Gli amministratori devono solo abilitare FIDO2 per la propria istanza, quindi gli utenti possono registrarsi e utilizzare i loro dispositivi compatibili con FIDO2.
Attenzione! La Multi-Factor Authentication è disponibile solo su Liferay DXP, non è possibile quindi attivare l'MFA sulla Community Edition.
Prima di poter configurare FIDO2, è necessario abilitare la Multi-Factor Authentication. Lo stato predefinito è abilitato a livello di sistema ma disabilitato nell'istanza predefinita. In effetti, ciò significa che l'MFA è difatti disabilitato sulle installazioni Liferay DXP standard.
Quello che occorre fare adesso, è l'abilitazione dell'MFA per l'istanza di portale.
Quest'attività richiede solo due passaggi:
- Andare su Control Panel → Instance Settings → Security → Multi-Factor Authentication → Multi-Factor Authentication One-Time Password Configuration
- Selezionare la casella Enabled e fare clic sul pulsante Save
Le due figure a seguire mostrano i passaggi esatti da compiere. Subito dopo aver salvato la configurazione, dovreste veder apparire sulla spalla sinistra le altre possibili configurazioni per MFA, di cui una è quella di FIDO2 (vedi figura 7).
Dal momento in cui è attiva l'MFA, dal prossimo accesso sarà necessario specificare il codice OTP (One-Time Password) inviato per email, per questo motivo è importante configurare correttamente il server SMTP d'invio email.
Una volta attivata la Multi-Factor Authentication, è possibile abilitare e configurare l'uso di FIDO2. Per compiere quest'operazione è sufficiente procedere nel seguente modo:
- Andare su Control Panel → Instance Settings → Security → Multi-Factor Authentication. Assicurarsi di aver abilitato l'autenticazione a più fattori prima di configurare FIDO2 (vedi step precedente)
- Fare clic su Fast IDentity Online 2 Configuration nella barra di navigazione a sinistra
- Fare clic sulla casella di controllo Enabled per abilitare FIDO2
Lasciando la configurazione con i valori di default, questa può andar bene per iniziare a fare i test sul proprio ambiente locale.
È possibile agire sulle seguenti impostazioni:
- Order: imposta la priorità per il controllo MFA via FIDO2. Maggiore è il numero, maggiore è la priorità. La priorità predefinita è impostata in modo che FIDO2 diventi il controllore di priorità più alta se abilitato.
- Relying Party Name: un nome arbitrario per il sito Web o installazione.
- Allowed Credentials Per User: ogni utente può avere il numero impostato di dispositivi FIDO2.
- Relying Party ID: l'identificatore di Relying Party di WebAuthn. In genere è impostato con il nome di dominio del portale.
- Origins: le risposte dell'autenticatore vengono confrontate con questo URL di origine, che dovrebbe puntare alla propria installazione o comunque al virtual host della specifica istanza Liferay. È possibile aggiungere diversi valori per questa configurazione. Per motivi di sicurezza è sempre consigliato l'uso di https per crittografare la connessione.
- Allow Origin Port: selezionare questa casella per includere qualsiasi numero di porta nella regola di corrispondenza dell'origine. Impostare quest'opzione potrebbe essere utile in ambiente di sviluppo/collaudo.
- Allow Origin Subdomain: selezionare questa casella per includere qualsiasi sottodominio di origine nella regola di corrispondenza dell'origine.
Ipotizzando un caso reale, potremmo pensare d'impostare i seguenti valori di configurazione:
- Relying Party Name: SMC Tech Blog
- Relying Party ID: techblog.portal.local
- Origins: https://techblog.portal.local
La figura a seguire mostra la configurazione di FIDO2 con applicati i valori indicati in precedenza.
La stessa configurazione è possibile utilizzando il file di
configurazione OSGi
(quelli che per intenderci sono posizionati in $LIFERAY_HOME/osgi/configs
).
A seguire il contenuto del file com.liferay.multi.factor.authentication.fido2.web.internal.configuration.MFAFIDO2Configuration.scoped~3da064c9-3224-405d-8dc6-677104a70170.config
che riporta la medesima configurazione mostrata dalla Figura 8.
4. Procedura di registrazione dell'authenticator
Una volta abilitato FIDO2, gli utenti potranno aggiungere gli autenticatori direttamente dalle impostazioni dell'account dell'utente seguendo i passi indicati a seguire. Questo processo implementa il flusso di registrazione delle credenziali WebAuthn descritto in precedenza e mostrato in Figura 1.
- Fare clic sull'immagine del profilo
- Fare clic su Account Settings
- Viene visualizzata una nuova scheda in alto, denominata Multi-Factor Authentication, quindi, cliccare su di essa
- Assicurarsi che il proprio dispositivo conforme a FIDO2 sia connesso al proprio PC (per esempio via USB)
- Per registrare l'autenticatore, fare clic sul grande pulsante blu con l'etichetta Register a FIDO2 Authenticator
Quando si procede con la registrazione, è possibile il vostro browser mostri degli avvisi di sicurezza, come per esempio quelli mostrati a seguire che fanno riferimento a Firefox (versione 100.0.1 64bit). Altri browser potrebbero avere comportamenti diversi ma con lo stesso intento.
Una volta che la procedura di registrazione è stata ultimata con successo, dovreste vedere la vostra Security Key o Authenticator (per restare nei termini di FIDO2) registrata sul proprio account. Da questo momento in poi sarà possibile accedere al portale Liferay utilizzando la vostra Security Key come altro fattore di autenticazione.
Al termine della registrazione, le informazioni sono memorizzate sulla tabella
mfafido2credentialentry
di Liferay la cui struttura è mostrata a seguire.
Tra le informazioni memorizzate è disponibile la chiave pubblica
(in credentialkey
).
A seguire sono invece mostrati i dati contenuti all'interno della tabella
mfafido2credentialentry
.
In alcuni casi potrebbe capitare che il processo di registrazione non vada a buon fine e i più comuni motivi sono in genere:
- La versione del browser non supporta il protocollo WebAuthn. In questo caso consiglio l'aggiornamento del browser e consultare il documento FIDO2: Web Authentication (WebAuthn) e in particolare il capitolo Support for FIDO2: WebAuthn and CTAP - Browsers and Platforms
- Il dispositivo hardware (o authenticator) non è supportato dal vostro sistema operativo. Fare riferimento alla documentazione tecnica della Security Key
- Il dispositivo hardware non è conforme alle specifiche FIDO2. Fare riferimento alla documentazione tecnica della Security Key
La figura a seguire mostra il messaggio visualizzato in caso di errori nel processo di registrazione. La consultazione del log file del portale dovrebbe aiutare a capire la causa dell'errore in fase di registrazione.
5. Test di autenticazione con FIDO2
Ora che l'autenticatore è registrato nel proprio profilo, è possibile usarlo per accedere al portale Liferay.
Dopo aver inserito correttamente la propria username e password (tramite il widget di login standard), sarà mostrato il pulsante che offre la possibilità di verificare l'identità utilizzando l'autenticatore FIDO2 registrato (vedi figura a seguire).
In caso di problemi con l'accesso via FIDO2, è comunque possibile richiedere l'OTP di accesso via email.
6. Il bonus
Immagino che avere la disponibilità di un Docker Compose con tutti i servizi configurati che implementi lo scenario descritto, sia un bel bonus; siete della stessa idea?
Il progetto how-to-configure-fido2 pubblicato sul repository GitHub di SMC, contiene il Docker Compose e tutte le configurazioni che consentono di implementare lo scenario descritto nel corso di questo articolo.
A seguire sono riportati i servizi che compongono lo stack.
- Liferay DXP 7.4
- PostgreSQL (database per Liferay)
- Server SMTP (servizio per l'invio email)
- Traefik (Load Balancer)
Il servizio del portale Liferay è configurato per essere accessibile attraverso Traefik su porta https e sull'FQDN techblog.portal.local.
Gli step necessari per eseguire l'intero stack sono:
- Verifica della versione di Docker (Docker Engine 20.10.x, Docker Compose 1.29.x)
- Clone del repository how-to-configure-fido2
- Aggiornamento del file di hosts (della macchina host) con le entry per Liferay
- Avvio dello stack via Docker Compose
Riguardo la versione di Docker, per questo articolo è stato fatto uso di Docker Desktop per macOS versione 4.8.0 (che include Docker Engine 20.10.14 e Docker Compose 1.29.2).
Ho comunque eseguito un test usando Docker su Linux. Stessa versione di Docker usata su macOS ma con una versione di Docker Compose inferiore, ovvero, la 1.28.6. Non ho riscontrato alcun problema, lo stack dei servizi è stato correttamente tirato su.
Non ho potuto fare test su Windows; lascio a qualcuno di voi la conduzione di questa prova.
A seguire è invece disponibile il video che mostra tutto il setup del portale Liferay che abbiamo visto nel corso dell'articolo.
7. Conclusioni
Durante lo speech Liferay Authentication: How to create a Token-based SSO system, abbiamo avuto modo di vedere le possibilità che Liferay offre circa i meccanismi di autenticazione e le modalità di estensione che consentono di sviluppare le proprie soluzioni.
Attenzione! È possibile scaricare tutto il materiale del Liferay Boot Camp 2022 seguendo il link https://bit.ly/download-materials-lrbc22
Nel corso di questo articolo abbiamo invece visto nel dettaglio come configurare e utilizzare la Multi-factor Authentication, meccanismo di autenticazione supportato OOTB (Out Of The Box) dall'edizione DXP. L'utilizzo del Security Tocken (hardware) è un secondo fattore di autenticazione, ovvero, dopo che l'utente ha inserito correttamente la coppia username e password. Attraverso opportune estensioni da sviluppare, sarebbe possibile rendere l'accesso al portale Liferay completamente password-less e questo potrebbe essere argomento di un altro articolo.