Sean Deuby | Tecnologo principale, Americhe

Ora che le aziende stanno adottando il cloud computing come parte integrante del proprio modello di business, una percentuale significativa di esse sta scegliendo di collegare il proprio ambiente Active Directory on-premise alla sua controparte nel cloud, ovvero Azure Active Directory di Microsoft. Quando si estende l’AD locale ad Azure AD, si hanno due opzioni per determinare come gli utenti locali debbano autenticarsi al servizio cloud: la federazione delle identità e l’autenticazione diretta con Azure AD. Sebbene l’autenticazione diretta sia tecnicamente il metodo più semplice tra i due, richiede l’abilitazione di una funzionalità nota come sincronizzazione delle password. E ritengo che la sincronizzazione delle password sia una funzionalità piuttosto poco compresa che merita ulteriori spiegazioni.

Microsoft offre due modalità per gestire l'autenticazione ad Azure AD: la federazione delle identità o l'autenticazione diretta tramite Azure AD stesso. La federazione delle identità con un servizio di federazione come AD FS o PingFederate fornisce il Single Sign-On (SSO) ad Azure AD reindirizzando gli utenti dal servizio cloud al proprio AD locale per l’autenticazione. L’altra opzione, l’autenticazione diretta in Azure AD, richiede che l’ID utente e la password siano memorizzati localmente nel servizio cloud. Per le aziende, ciò deve essere effettuato tramite la funzionalità di sincronizzazione delle password del servizio AD Connect di Microsoft; nessun fornitore terzo offre una funzionalità equivalente.

Che cos'è la sincronizzazione dell'hash della password e perché usarla?

A un livello molto semplice, quasi uno schizzo su un tovagliolo da cocktail, la sincronizzazione dell’hash delle password (una descrizione più accurata, che spiegherò di seguito) copia la password dell’utente da AD ad Azure AD ogni due minuti. Ciò consente agli utenti di accedere ad Azure AD con lo stesso ID utente e la stessa password che utilizzano per l’accesso ad AD. Microsoft definisce questo modello “same sign-on”. È diverso dal “single sign-on” perché, con la sincronizzazione dell’hash della password, agli utenti verrà richiesto di effettuare l’accesso ad Azure AD oltre a qualsiasi accesso aziendale già effettuato.

Perché si dovrebbe utilizzare la sincronizzazione degli hash delle password? Principalmente perché è più semplice da implementare rispetto a un servizio di federazione. Microsoft aveva bisogno di fornire un modo semplice per integrare gli utenti AD on-premise con Azure AD, e la sincronizzazione degli hash delle password consente di farlo senza la necessità di un servizio di federazione ad alta disponibilità che richieda più server.

La soluzione più semplice ha dimostrato di essere popolare: circa il 50% delle organizzazioni che sincronizzano con Azure AD utilizza la sincronizzazione con hash password. Di questo 50%, la metà sono organizzazioni di piccole e medie dimensioni. La sincronizzazione dell'hash della password offre a queste organizzazioni un percorso agevole per passare a un'infrastruttura IT cloud-first o cloud-only, perché gli utenti si autenticano già direttamente con il servizio Azure AD.

Un altro vantaggio della sincronizzazione degli hash delle password è che, a differenza della federazione, non dipende da un servizio di federazione esterno per elaborare le autenticazioni. Infatti, Microsoft offre la sincronizzazione degli hash delle password in aggiunta alla federazione, in modo che possa essere utilizzata come soluzione alternativa in caso di interruzione del servizio di federazione.

Quanto è sicura la sincronizzazione dell'hash delle password?

Si noti che descrivo questa funzionalità come “sincronizzazione degli hash delle password” – non come “sincronizzazione delle password”. È una distinzione importante. Le password in chiaro non vengono sincronizzate tra AD DS e Azure AD. Non solo non è una buona idea, ma non è nemmeno tecnicamente possibile, poiché Active Directory non dispone delle password in chiaro. Quando un utente crea o aggiorna la propria password in AD, questa viene memorizzata come hash MD5 unidirezionale sui DC del dominio. È proprio questo hash che viene sincronizzato con Azure AD e memorizzato nell’archivio delle credenziali del servizio.

Come funziona, esattamente? Ho raccolto i seguenti passaggi dal post sul blog di Alex Simon intitolato “AAD Password Sync, Encryption, and FIPS Compliance” e da alcune altre fonti:

  1. Le password degli utenti sono memorizzate come hash non reversibile nei controller di dominio (DC) di Windows Server Active Directory. Quando l'agente di sincronizzazione delle password su AD Connect tenta di sincronizzare l'hash della password, il DC cripta l'hash. La crittografia viene eseguita con una chiave derivata dalla chiave di sessione RPC mediante salatura. La derivazione della chiave è la seguente [dove SaltedEncryptionKey = MD5 (RPC session Key, 128 bit random salt)]. Il DC passa il sale anche all'agente di sincronizzazione utilizzando il protocollo di replica.
  2. L'hash della password originale viene replicato (utilizzando il protocollo di replica del DC) dal DC al Password Sync Agent.
  3. L'agente di sincronizzazione delle password decifra l'hash crittografato ricavando la chiave come descritto sopra. L'agente di sincronizzazione delle password utilizza MD5 per eseguire la derivazione della chiave, in quanto la derivazione deve essere identica a quella eseguita dal DC (quando ha crittografato i dati). Inoltre, MD5 è il livello più alto disponibile per questa azione nel protocollo di replica dei DC delle implementazioni esistenti di Windows Server Active directory.
  4. Una volta effettuata la decodifica, l'agente di sincronizzazione prende l'hash della password originale risultante e lo ri-incide in un hash SHA256 utilizzando l'algoritmo di derivazione delle chiavi PKDF2, definito in RFC 2898.
  5. L'Agente di sincronizzazione password sincronizza quindi l'hash della password con hash SHA256 attraverso il filo (un relay Service Bus crittografato dedicato al tenant Azure AD) con Azure AD.
  6. Una volta che la copia con hash SHA256 della password originale raggiunge Azure AD, Azure AD cripta l'hash con l'algoritmo AES prima di memorizzarlo nel database del cloud.

L'unica cosa che attraversa il filo nel percorso verso Azure AD è una copia con hash SHA256 dell'hash della password originale. L'uso di MD5 da parte dell'agente di sincronizzazione delle password è strettamente legato alla compatibilità del protocollo di replica con il DC e viene utilizzato solo tra il DC e l'agente di sincronizzazione delle password.

Svantaggi della sincronizzazione dell'hash della password

Dal punto di vista dell’utente, lo svantaggio più evidente è che questi deve inserire le proprie credenziali aziendali una seconda volta, indipendentemente dal fatto che sia connesso alla rete aziendale o si trovi all’esterno su una rete pubblica. È tuttavia possibile ridurre il numero di accessi selezionando la casella di controllo “Resta connesso” (KMSI). Selezionando questa opzione viene impostato un cookie di sessione che bypassa l’autenticazione per un breve periodo. Il team di sicurezza dovrà valutare questa opzione e il comportamento KMSI può essere abilitato o disabilitato dall’amministratore di Azure AD.

Dal punto di vista di un professionista della gestione delle identità, il problema della sincronizzazione degli hash delle password è che si distribuiscono le password in più di un luogo ai fini dell'autenticazione. Al contrario, la federazione reindirizza tutte le richieste di autenticazione al provider di identità. Microsoft ha fatto di tutto per garantire che il processo sia sicuro, ma è legittimo porsi delle domande sul ciclo di vita delle password.

Quando è necessario utilizzare la sincronizzazione dell'hash della password?

Esiste un caso d'uso in cui è necessario utilizzare la sincronizzazione dell'hash della password: se si sceglie di implementare Azure AD Domain Services. Questa funzione crea un controller di dominio come servizio che le applicazioni Azure (come le macchine virtuali che eseguono applicazioni dipendenti da AD) possono utilizzare. Affinché questi DC siano funzionalmente equivalenti ai DC on-premises, tuttavia, devono avere gli hash delle password degli utenti e quindi richiedono la sincronizzazione degli hash delle password per essere inseriti in Azure.

La sincronizzazione degli hash delle password è una soluzione diffusa per integrare le identità on-premise con Azure AD. Non è elegante come l'utilizzo della federazione delle identità, ma è più semplice. Come per qualsiasi decisione progettuale, assicurati di aver valutato attentamente i punti di forza e di debolezza di questa soluzione e come si applicano alla tua situazione specifica.