Sapir Federovsky e Tomer Nahum

Nel suo intervento al TROOPERS19 ("I'm in your cloud ... reading everyone's email"), Dirk-jan Mollema ha discusso di un problema da lui scoperto che consentiva l'uso della corrispondenza SMTP (detta anche soft matching) per sincronizzare gli utenti di Active Directory (AD) su Azure AD, con l'obiettivo di dirottare gli account non sincronizzati. Jan ha dichiarato che Microsoft ha bloccato la possibilità di sincronizzare gli account on-prem che avevano assegnazioni attive a ruoli amministrativi in Azure AD.

Abbiamo indagato su questa dichiarazione. Brutte notizie: La nostra ricerca mostra che chiunque abbia i privilegi di creazione di un account in un ambiente AD può modificare la password di un utente Azure AD e, con alcuni prerequisiti, ottenere un accesso privilegiato tramite l'assegnazione di ruoli idonei.

Cosa porta a questa vulnerabilità di Azure AD?

La maggior parte delle organizzazioni utilizza Active Directory per gestire le autorizzazioni e l'accesso alle risorse di rete. Molte di queste organizzazioni stanno iniziando a utilizzare anche Azure AD, un servizio di gestione delle identità e degli accessi basato sul cloud, per gestire le identità degli utenti e i privilegi di accesso a risorse come il portale Azure e Office 365.

Nelle implementazioni di identità ibride, gli oggetti sono sincronizzati tra gli ambienti AD on-premises e i tenant di Azure AD. In questi ambienti, gli utenti possono utilizzare la stessa identità sia per l'AD on-premise che per Azure AD.

Azure AD Connect

Azure AD Connect è un'applicazione Microsoft progettata per ottenere un'identità ibrida sincronizzando gli oggetti AD on-prem con gli oggetti Azure AD. Azure AD Connect comprende molte funzionalità, le più importanti delle quali sono la sincronizzazione dell'hash della password, l'autenticazione pass-through, l'integrazione della federazione (con ADFS) e la sincronizzazione (con Azure AD Connect Sync). La sincronizzazione dell'hash della password e la sincronizzazione generale sono le più importanti per questa discussione.

Durante l'installazione di Azure AD Connect Express, vengono creati nuovi account per supportare la sincronizzazione.

  • Account del connettore AD DS:
    • Utilizzato per leggere e scrivere su AD
    • Sono state concesse le autorizzazioni Replicate Directory Changes e Replicate Directory Changes All per l'utilizzo di Password Hash Sync.
    • Prefisso con MSOL_########
  • Account del servizio ADSync: Utilizzato per la sincronizzazione e per l'accesso al database SQL.
  • Account Azure AD Connector:
    • Utilizzato per scrivere informazioni su Azure AD
    • Il ruolo speciale Directory Synchronization Accounts, che ha le autorizzazioni solo per eseguire le attività di sincronizzazione della directory, è stato assegnato.
    • Prefisso con Sync_*

In un'implementazione di identità ibrida, è importante l'integrità tra gli ambienti on-prem e i tenant di Azure AD. Per raggiungere questo obiettivo, Azure AD Connect abbina gli oggetti utente tra Azure AD e AD.

Durante la configurazione e la sincronizzazione iniziale di Azure AD Connect, viene scelto un attributo di ancoraggio dell'origine. Questo attributo identifica in modo univoco un oggetto utente tra AD e Azure AD. Azure AD Connect esegue la corrispondenza guardando a questo attributo e abbina gli oggetti utente tra Azure AD e AD utilizzando una delle due tecniche:

  • Corrispondenza difficile
  • Corrispondenza morbida (SMTP)

Corrispondenza difficile

Se si lascia che Azure gestisca l'ancora di origine, Azure AD Connect cerca uno dei due possibili attributi sourceAnchor:

  • Azure AD Connect versione 1.1.486.0 e precedenti utilizzano objectGUID.
  • Azure AD Connect versione 1.1.524.0 e successive utilizza mS-DS-ConsistencyGuid.

Quando l'attributo mS-DS-ConsistencyGuid non è popolato, Azure AD Connect scrive l'objectGUID dell'utente in tale attributo. ImmutableID è il valore corrispondente sull'oggetto Azure AD, in sostanza l'objectGUID codificato in base64. La Figura 1 mostra un esempio di ottenimento dell'ImmutableID di un oggetto Azure AD dall'objectGUID dell'utente on-prem AD.

Corrispondenza SMTP-Ancora sorgente PS
Figura 1

Corrispondenza morbida (SMTP)

La corrispondenza soft (SMTP) utilizza due attributi che esistono sia in AD che in Azure AD:

  • NomePrincipaleUtente
  • proxyAddress

La corrispondenza morbida ha successo quando gli oggetti utente vengono abbinati, a condizione che si verifichino due condizioni:

  • L'attributo userPrincipalName in Azure AD corrisponde a quello di AD.
  • L'attributo proxyAddress primario in AD corrisponde al proxyAddress in Azure AD.

Quando una corrispondenza rigida o morbida ha successo, l'oggetto utente corrispondente viene aggiornato. Se non esiste alcuna corrispondenza, nel tenant Azure AD viene creato un oggetto utente che corrisponde all'oggetto utente di AD on-prem, utilizzando gli attributi dell'account.

Sincronizzazione dell'hash della password

La sincronizzazione dell'hash della password è un metodo di autenticazione implementato negli ambienti di identità ibrida Azure AD. Questo metodo, che è abilitato per impostazione predefinita, sincronizza l'hash della password dell'utente su AD on-prem ad Azure AD ogni due minuti. La sincronizzazione dell'hash della password consente agli utenti di utilizzare la stessa password per accedere sia ad AD che ad Azure AD. (Per una spiegazione più dettagliata della sincronizzazione dell'hash della password, vedere Semperis - Capire la sincronizzazione dell'hash della password di Azure AD).

Ruoli attivi e ruoli idonei

Agli utenti di Azure AD possono essere assegnati ruoli che concedono autorizzazioni per gestire varie risorse di Azure AD. I ruoli possono essere assegnati in modo attivo o ammissibile.

Le assegnazioni ammissibili richiedono l'attivazione del ruolo da parte dell'utente. A tal fine, l'utente deve eseguire un'azione MFA, fornire una giustificazione aziendale o richiedere l'approvazione degli approvatori designati. I ruoli idonei possono essere assegnati in modo permanente o per un periodo specifico(Figura 2). Non esiste un limite di tempo per l'attivazione di un ruolo idoneo assegnato in modo permanente.

Corrispondenza SMTP: ruolo ammissibile
Figura 2

Le assegnazioni attive non richiedono alcuna azione da parte dell'utente per l'utilizzo del ruolo. Gli utenti hanno i privilegi associati a un ruolo per tutto il tempo in cui rimangono assegnati a quel ruolo(Figura 3).

Corrispondenza SMTP: ruolo attivo
Figura 3

Come la corrispondenza SMTP diventa una vulnerabilità di Azure AD

Un oggetto in Azure AD può essere gestito in Azure AD o in on-prem AD. Ogni oggetto ha un flag che indica se l'account è stato sincronizzato con un account on-prem. L'esempio seguente mostra questo flag nel pannello Utenti Azure. L'utente Lee Gu è sincronizzato(Figura 4), mentre l'utente Lynne Robbins non lo è(Figura 5).

Corrispondenza SMTP: conto sincronizzato
Figura 4
Corrispondenza SMTP: utente sincronizzato
Figura 5

Figura 5Questeimpostazioni sono visibili anche nel pannello Utenti attivi di Office 365, nella colonna Stato della sincronizzazione(Figura 6 e Figura 7).

Corrispondenza SMTP: utenti attivi, stato di sincronizzazione
Figura 6

Corrispondenza SMTP: utenti attivi, stato di sincronizzazione

Figura 7

A volte è possibile trasferire l'origine dell'autorità di un account utente gestito nel cloud. Ad esempio, supponiamo che un account utente sia stato creato direttamente da Office 365, il che rende l'utente gestito nel cloud. Ma si desidera gestire l'utente tramite AD on-prem, come gli altri utenti.

A tal fine, è possibile utilizzare la sincronizzazione della directory. Questo metodo utilizza la corrispondenza SMTP per sincronizzare l'account utente di Office 365 con un account utente on-prem, in base all'attributo proxyAddress.

Per sincronizzare gli account utilizzando la corrispondenza SMTP, sono necessari due passaggi:

  1. Creare un account AD con lo stesso userPrincipalName dell'account Azure AD.
  2. Configurare l'attributo proxyAddress in modo che corrisponda al proxyAddress dell'utente di Azure AD.

La Figura 8 mostra le proprietà dell'utente Lee Gu in AD on-prem. Qui si crea l'utente e gli si assegnano gli stessi proxyAddress e userPrincipalName dell'utente Lee Gu gestito nel cloud.

Corrispondenza SMTP: proprietà dell'utente AD on-premise
Figura 8

La Figura 9 mostra le proprietà dell'utente Lee Gu su Azure AD.

Corrispondenza SMTP: proprietà dell'utente di Azure AD
Figura 9

Se Azure AD Connect trova un oggetto in Azure AD con gli attributi userPrincipalName e proxyAddress corrispondenti, si verifica la corrispondenza SMTP. Se la sincronizzazione dell'hash della password è configurata, come di default, questo processo sovrascrive la password esistente per l'account Azure AD con la password dell'account on-prem.

Note importanti sul processo di abbinamento SMTP:

  • L'utente AD deve essere nuovamente sincronizzato.
  • Dirk-jan ha scoperto che se l'utente Azure AD è un utente attivo con privilegi elevati, la sincronizzazione non funziona. Ad esempio, non è possibile sincronizzare un utente on-premise con un utente Azure AD amministratore globale attivo. (Questo problema è stato risolto dopo che Dirk-jan lo ha scoperto).
  • Se l'userPrincipalName dell'utente on-prem non corrisponde all'utente nel cloud, viene creato un nuovo utente nel cloud. Questo utente è sincronizzato con l'utente on-prem e ha un indirizzo e-mail Office 365 valido, determinato dall'attributo userPrincipalName anziché dal proxyAddress.

Ad esempio, se si tenta di sincronizzare l'utente Megan Bowen utilizzando l'attributo proxyAddress ma un userPrincipalName diverso, il risultato è un nuovo utente Azure AD, anche se non si dispone di alcun accesso o autorizzazione su Azure AD(Figura 10).

Corrispondenza SMTP: nuovo utente
Figura 10

Se si crea un nuovo utente on-premise con lo stesso attributo proxyAddress ma con un userPrincipalName diverso(Figura 11), si ottengono due oggetti utente denominati Megan Bowen, ciascuno con un userPrincipalName diverso. L'oggetto più recente è sincronizzato e l'oggetto originale è gestito nel cloud da Azure AD(Figura 12).

SMTP Matching: oggetto utente 1
Figura 11

SMTP Matching: oggetto utente 2

Figura 12

È possibile accedere con il nuovo account utente cloud e la password on-premise e configurare l'MFA (Figura 13).

Corrispondenza SMTP: configurazione dell'MFA
Figura 13

Come la corrispondenza SMTP può portare ad abusi

Il team di ricerca Semperis ha scoperto che è possibile utilizzare la corrispondenza SMTP per sincronizzare gli utenti on-premise con gli utenti di Azure AD idonei per i ruoli amministrativi. Gli aggressori che hanno ottenuto l'accesso on-prem possono utilizzare questo approccio per compromettere Azure AD.

Il processo di abbinamento SMTP funziona per gli utenti con privilegi elevati che sono idonei per un privilegio che non è stato attivato. L'abuso è possibile sia che il ruolo amministrativo sia stato reso idoneo direttamente all'utente, sia che sia stato attivato da un gruppo Azure.

Per abusare del matching SMTP, l'MFA deve essere inutilizzato oppure l'attivazione del ruolo non deve richiedere una verifica MFA. Abbiamo creato un elenco di tutti i ruoli ad alto privilegio che non richiedono la verifica MFA per l'attivazione del ruolo(Tabella 1).

Tabella 1. Ruoli ad alto privilegio e requisiti di verifica MFA

Richiedere l'AMF  Non richiede l'MFA 
Amministratore della protezione delle informazioni di Azure
Amministratore di fatturazione
Amministratore di applicazioni cloud
Amministratore della conformità
Amministratore accesso condizionato
Approvare l'accesso alla LockBox del cliente
Scrittori di directory
Amministratore Dynamics 365
Amministratore di Exchange
Amministratore globale
Amministratore Intune
Assistenza partner di livello 1
Assistenza partner di livello 2
Amministratore Power BI
Amministratore di ruoli privilegiati
Amministratore della sicurezza
Amministratore SharePoint
Amministratore di Skype for Business
Amministratore utente
Utente ospite
Utente ospite limitato
Invitatore ospite
Amministratore Helpdesk
Amministratore del servizio di assistenza
Utente
Lettori della directory
Utenti del dispositivo
Azure AD Dispositivo unito Amministratore locale
Adesione al dispositivo
Adesione al dispositivo del luogo di lavoro
Account di sincronizzazione della directory
Gestori di dispositivi
Amministratore dell'applicazione
Sviluppatore di applicazioni
Lettore di sicurezza
Lettore di rapporti
Lettore del centro messaggi
Amministratore Desktop Analytics
Amministratore di licenze
Amministratore dispositivi cloud
Amministratore dell'autenticazione
Amministratore di autenticazione privilegiata
Amministratore comunicazioni Teams
Ingegnere di supporto per le comunicazioni di Teams
Specialista dell'assistenza per le comunicazioni di team
Amministratore di team
Amministratore Insights
Lettore della privacy del centro messaggi
Amministratore del flusso di utenti con ID esterno
Amministratore del flusso di utenti con ID esterno
Amministratore Keyset B2C IEF
Amministratore dei criteri IEF B2C
Amministratore di Identity Provider esterni
Amministratore dei dati di conformità
Operatore della sicurezza
Amministratore Kaizala
Lettore globale
Amministratore di ricerca
Editor di ricerca
Amministratore password
Amministratore della stampante
Tecnico della stampante
Amministratore dei criteri di autenticazione
Amministratore gruppi
Amministratore di Power Platform
Amministratore DevOps Azure
Amministratore di identità ibride
Amministratore di Office Apps
Amministratore di rete
Leader aziendale Insights
Amministratore di dispositivi di team
Amministratore di simulazione di attacco
Autore di payload di attacco
Rapporti di riepilogo sull'uso Lettore
Amministratore della conoscenza
Gestore delle conoscenze
Amministratore del nome di dominio
Amministratore definizione attributi
Amministratore dell'assegnazione degli attributi
Lettore della definizione di attributo
Lettore dell'assegnazione degli attributi
Amministratore destinatario di Exchange
Amministratore della governance dell'identità
Amministratore sicurezza app cloud
Amministratore distribuzione Windows Update
Amministratore Windows 365
Amministratore Edge
Amministratore visite virtuali
Analista di approfondimenti

Ad esempio, supponiamo che l'utente gestito dal cloud Lidia Holloway sia idoneo al ruolo di Amministratore globale(Figura 14).

Corrispondenza SMTP: ruolo di amministratore globale
Figura 14

Si utilizza la corrispondenza SMTP per sincronizzare questo utente con un nuovo utente on-premise(Figura 15).

Corrispondenza SMTP: uso della corrispondenza SMTP
Figura 15

Dopo aver utilizzato la password on-premise di Lidia per accedere ad Azure AD, è possibile attivare il ruolo di amministratore globale(Figura 16). Per farlo, è necessario utilizzare l'MFA ("Verifica aggiuntiva richiesta"). Se l'utente cloud originale non richiedeva l'MFA, è sufficiente configurarlo e poi attivare il ruolo (Figura 17).

Figura 16

Figura 17

È possibile attivare un ruolo che non richiede la verifica aggiuntiva MFA ma che può essere elevato ad Amministratore globale, ad esempio Amministratore di applicazioni. Come descritto da Dirk-jan, questo ruolo può essere elevato direttamente al ruolo di Amministratore globale.

Utilizzo di Semperis DSP per rilevare questa vulnerabilità di Azure AD

Semperis Directory Services Protector ( DSP) raccoglie i dati di modifica di Azure AD. Per rilevare un tentativo di sfruttare questa vulnerabilità, DSP cerca lo schema di attacco specifico, che comprende la sincronizzazione di un utente AD con un utente Azure AD idoneo per un ruolo ad alto privilegio, seguita dall'attivazione di tale ruolo. DSP security indicator (SI) "Azure AD Role activation after synchronization" identifica questo schema. DSP identifica anche l'indicatore di sicurezza "Utente AAD idoneo per un ruolo ad alto privilegio non sincronizzato con AD", che indica gli utenti Azure AD idonei per un ruolo ad alto privilegio e dotati dell'attributo proxyAddress, ma non sincronizzati con un account on-premises, rendendoli vulnerabili a questo attacco.

Altri rilevamenti di abusi di corrispondenza SMTP

Un'altra opzione è quella di utilizzare i registri di audit di Azure per cercare qualsiasi sincronizzazione e attivazione di ruoli nel vostro ambiente(Figura 18).

Corrispondenza SMTP: registri di Azure AD
Figura 18

In questo esempio, si può notare che il nome del client dell'azione è "DirectorySync" e che il vecchio valore per LastDirSyncTime è vuoto. Queste informazioni indicano che è la prima volta che l'utente si sincronizza con AD on-prem.

Il seguente log mostra l'attivazione del ruolo(Figura 19). Utilizzando l'attributo RoleDefinitionOriginId, è possibile cercare il ruolo attivato.

SMTP Matching: individuazione dell'attivazione dei ruoli
Figura 19

Correzione dell'abuso di corrispondenza SMTP

Per evitare questo exploit, Microsoft consiglia di richiedere l'MFA per tutti gli utenti ("Harden your Azure AD Connect server"). La mitigazione si ottiene assicurandosi che gli utenti abbiano l'MFA configurato prima di concedere loro un ruolo idoneo. È inoltre possibile disattivare l'opzione di utilizzo della corrispondenza morbida per la sincronizzazione.

Divulgazione

Questo problema è stato segnalato tramite il Microsoft Security Response Center (MSRC) il 10 giugno 2022. Microsoft ha risposto il 13 luglio: "[In base alla nostra valutazione, esistono controlli mitigativi che un utente può utilizzare per evitare questa vulnerabilità". Abbiamo stabilito che il comportamento è stato progettato".

Per saperne di più

Per saperne di più sulla protezione dell'organizzazione dalle vulnerabilità di AD e Azure AD, consultare le seguenti risorse: