Configurare Active Directory Federation Services 2016 e Azure Multi-Factor Authentication
Tra le novità introdotte in Active Directory Federation Services (AD FS) in Windows Server 2016 c’è la possibilità di integrare l’autenticazione con Microsoft Azure Multi-Factor Authentication (MFA), in modo tale da inserire una One-Time Password (OTP) invece che la password di dominio.
Tra le problematiche più note, infatti, si riscontra quella dovuta al blocco dell’account in Active Directory dopo che qualcuno ha tentato di indovinare la password e l’ha sbagliata diverse volte.
Figura 1: Numero massimo di tentativi di accesso falliti prima che l’account venga bloccato
Figura 2: Account bloccato dopo 10 tentativi di accesso falliti
Come avrete modo di leggere nell’articolo Azure AD and ADFS best practices: Defending against password spray attacks, utilizzare ADFS 2016 ed Azure MFA con sistema principale di autenticazione permette di ottenere un sistema passwordless, basato esclusivamente su un OTP.
Ho già avuto modo di farvi vedere come Configurare Active Directory Federation Services in Windows Server 2016 e come Configurare AD FS 2016 ed Office 365 con Azure AD Connect nei miei precedenti articoli. Oggi vi voglio mostrare quanto sia facile integrare ADFS 2016 con Azure MFA.
Registrazione degli utenti in Azure MFA
AD FS non permette che avvenga la registrazione degli utenti in Azure MFA (proofup), ma gli utenti devono essersi già registrati e aver attivato l’MFA. Per farlo possono collegarsi a https://account.activedirectory.windowsazure.com/Proofup.aspx oppure in alternativa a https://aka.ms/mfasetup ed eseguire la procedura di registrazione, in cui possono inserire il numero di telefono a cui ricevere messaggi SMS, le chiamate oppure posso collegare l’App per il cellulare (Azure Authenticator)
Figura 3: Configurazione della Multi-factor authentication
Azure MFA come autenticazione principale
Se si utilizza Azure MFA come Primary Authentication in AD FS si può evitare di inserire la password durante il login ad Azure AD, ad Office365 oppure ad altre applicazioni SaaS ed utilizzare un codice temporaneo OTP. Se stiamo utilizzando un pc sconosciuto per autenticarci allora è il caso di prendere il massimo delle precauzioni (potrebbe esserci un keylogger sulla macchina oppure qualcuno potrebbe vedere la password che digitiamo).
Prerequisiti
Per poter connettere ADFS a Azure MFA dovete accertarvi di avere i seguenti prerequisiti:
- Installazione on-premises di un’infrastruttura AD FS basa su Windows Server 2016
- Federazione dell’infrastruttura con Azure AD
- Aver installato il modulo PowerShell per Azure AD (Msoline)
- Permessi di Global Administrator nella sottoscrizione di Azure AD
- Credenziali di Enterprise Administrator per configurare la Farm ADFS per Azure MFA
Configurazioni dei server ADFS
Come prima operazione creeremo un certificato digitale da utilizzare per MFA. Il certificato dovrà essere creato su TUTTI i server AD FS della vostra Farm. Per creare un certificato relativo alla nostra Azure AD useremo la cmdlet di PowerShell
1 |
$certbase64=New-AdfsAzureMfaTenantCertificate -TenantId nicolaferrini.onmicrosoft.com |
Ovviamente sostituite il TenantID con quello della vostra directory di Azure AD
Figura 4: Creazione del certificato da utilizzare per Azure MFA
Il certificato verrà salvato nello store Local Computer
Figura 5: Certificato da utilizzare per Azure MFA creato
Connettetevi al vostro tenant di Azure AD con il comando Connect-MsolService e successivamente aggiungete le credenziali al Service Principal Name (SPN) del client di Azure Multi-Factor Auth utilizzando il comando PowerShell
1 |
New-MsolServicePrincipalCredential -AppPrincipalId 981f26a1-7f43-403b-a875-f8b09b8cd720 -Type asymmetric -Usage verify -Value $certBase64 |
981f26a1-7f43-403b-a875-f8b09b8cd720 è il guid dell’ Azure Multi-Factor Auth Client
Figura 6: Aggiunta delle credenziali al Service Principal Name (SPN) del client di Azure Multi-factor Auth
Configurazione della Farm AD FS
Dopo aver completato i passaggi precedenti in ogni server della Farm ADFS, è necessario impostare il servizio Azure MFA come fattore di autenticazione. Lanciate, una sola volta e su un server ADFS qualsiasi, il comando PowerShell
1 |
Set-AdfsAzureMfaTenant -TenantId nicolaferrini.onmicrosoft.com -ClientId 981f26a1-7f43-403b-a875-f8b09b8cd720 |
Ovviamente sostituite il TenantID con quello della vostra directory di Azure AD.
Riavviate il Servizio di Active Directory Federation Service su tutte le macchina ADFS della vostra Farm.
Figura 7: Impostazione del servizio Azure MFA come fattore di autenticazione
Verificate che il nuovo metodo di autenticazione Azure MFA sia presente ed abilitato nella console AD FS Management, come mostrato in figura:
Figura 8: Azure MFA è adesso un Primary Authentcation method per la nostra Farm ADFS
Nel mio caso ho abilitato Azure MFA solo per l’accesso dall’esterno e non dall’interno dell’infrastruttura.
NOTA: Se volete utilizzare SOLO la Multi-Factor Authentication per loggarvi, vi basterà rimuovere il segno di spunta da Form Authentication e lasciare inalterate le altre impostazioni. Al momento del login riceverete direttamente la pagina mostrata in Figura 13: Inserimento della One-Time Password (OTP) per l’autenticazione
Verifica della presenza di Azure MFA come Primary Authentication method
Per verificare che tutto funzioni perfettamente è possibile collegarsi alla pagina di login del vostro server ADFS (nel mio caso è https://sts.nicolaferrini.cloud/adfs/ls/idpinitiatedsignon.htm)
Poiché ho federato la mia ADFS con Office 365, vado sul portale di autenticazione https://portal.office.com ed inserisco le credenziali di un utente del dominio e testo l’autenticazione dall’ESTERNO della mia infrastruttura.
Figura 9: Connessione al portale di Office 365
Figura 10: Il dominio di Azure AD è federato e vengo reindirizzato al mio Federation Server
Nella pagina di login è apparso un nuovo link che mi permette di utilizzare la Azure Multi-Factor Authentication.
Figura 11: Nella pagina di login del Federation Server è presente il link per utilizzare la Azure Multi-Factor Authentication
Cliccando però sul link ricevo un messaggio di errore. L’utente che sta tentando di connettersi non ha infatti effettuato il ProofUp, cioè la registrazione di Azure MFA. Per poter accedere deve prima collegarsi a https://account.activedirectory.windowsazure.com/Proofup.aspx oppure in alternativa a https://aka.ms/mfasetup ed eseguire la procedura di registrazione. Successivamente potrà riprovare a loggarsi con ADFS e Azure MFA.
Figura 12: Pagina di errore se l’accesso viene effettuato da un utente che non si è registrato in Azure MFA
Se invece tento di accedere con un utente che si è precedentemente registrato in Azure MFA, mi viene presentata una pagina dove posso inserire il codice di verifica che ho sulla mia App Azure Authenticator oppure posso utilizzare altre opzioni (SMS, telefonata, notifica sull’App)
Figura 13: Inserimento della One-Time Password (OTP) per l’autenticazione
Personalizzazione del portale di accesso di AD FS
AD FS non permette che avvenga la registrazione degli utenti in Azure MFA (proofup) e abbiamo visto che se un utente non si è precedentemente registrato non riuscirà ad utilizzare Azure MFA. È possibile però apportare delle modifiche alle pagine del portale di autenticazione ADFS e fare in modo di venire rediretti automaticamente alla pagina a https://account.activedirectory.windowsazure.com/Proofup.aspx oppure in alternativa a https://aka.ms/mfasetup per eseguire la procedura di registrazione.
Per poter personalizzare l’aspetto della pagina di Sign-In di ADFS è possibile seguire la procedura descritta nell’articolo Advanced Customization of AD FS Sign-in Pages
In questo esempio farò apparire un errore personalizzato, che avvisa gli utenti che devono prima registrarsi ad Azure MFA e successivamente provare a loggarsi al portale.
Come prima operazione clonerò il tema di default delle pagine di Sign-In (che chiamerò AzureMFA) e lo esporterò in modo tale da poterne modificare il file onload.js. La procedura deve essere effettuata da PowerShell su tutti i server ADFS della vostra Farm utilizzando i comandi:
1 2 3 4 5 |
#Creazione di un nuovo tema per il portale ADFS New-AdfsWebTheme –Name AzureMFA –SourceName default #Esportazione del tema per poter effettuare le modifiche Export-AdfsWebTheme –Name AzureMFA –DirectoryPath c:\AzureMFAtheme |
Figura 14: Creazione di un nuovo tema per la pagina di Sign-In di ADFS
Nella cartella C:\AzureMFATheme\script troverete il file onload.js, che dovrete modificare inserendo alla fine del file le seguenti righe:
1 2 3 4 5 |
// Se Azure MFA non è disponibile per l'utente si riceve un messaggio che fornisce la procedura corretta per la registrazione if (document.getElementById('errorMessage').innerHTML.search("The selected authentication method is not available") ) { // Show message with redirect link errorMessage.innerHTML = 'E\' necessario prima registrarsi per la Multi-Factor Authentication. Collegarsi al portale <a href="https://aka.ms/mfasetup">https://aka.ms/mfasetup</a>, inserire per l\'autenticazione la propria password, registrarsi ad Azure MFA e riprovare successivamente a loggarsi a questa pagina utilizzando la Multi-Factor Authentication.'; } |
Figura 15: Modifica del file onload.js con il messaggio di errore personalizzato
Terminata la modifica del file è necessario inserirlo nel tema che avete clonato (nel mio caso si chiama AzureMFA) eseguendo il comando PowerShell
1 2 |
#Aggiornamento del tema con il file onload.js personalizzato Set-AdfsWebTheme -TargetName AzureMFA -AdditionalFileResource @{Uri='/adfs/portal/script/onload.js';path="c:\AzureMFAtheme\script\onload.js"} |
Successivamente rendete il tema attivo, sostituendo quello di default, con il comando:
1 2 |
#Applicazione del tema personalizzato Set-AdfsWebConfig -ActiveThemeName AzureMFA |
Figura 16: Modifiche apportate al tema di ADFS
Adesso se un utente non ha effettuato il ProofUp, cioè non si è registrato ad Azure AD, invece che ricevere un messaggio di errore che gli indica la procedura corretta di registrazione ad Azure MFA.
Figura 17: Accesso al portale con le credenziali di un utente che non ha effettuato il ProofUp
Figura 18: Messaggio di errore che avvisa l’utente che non può usare la Azure MFA perché deve prima registrarsi (proofup)
Figura 19: L’utente si deve autenticare con la password per poter attivare Azure MFA
Figura 20: L’utente viene reindirizzato al portale di registrazione di Azure MFA
Conclusioni
Per rendere più sicura l’infrastruttura, per evitare che gli utenti vengano bloccati in Active Directory per troppi tentativi di indovinare la password e per stare più tranquilli quando si autenticano utilizzando AD FS da un computer che non è il loro, la soluzione di integrare AD FS 2016 con Azure MFA ed utilizzare un OTP per l’autenticazione è decisamente la migliore e vi permette di sfruttare al massimo le tecnologie disponibili per impedire attacchi di password spray o di password guessing.