安全路透社
当前位置:安全路透社 > 安全客 > 正文

【技术分享】Golden SAML:针对云应用认证机制的新型攻击技术

http://p9.qhimg.com/t01be8d25c50bcec80f.png

一、前言


在本文中,我们介绍了CyberArk实验室发现的名为“Golden SAML”(黄金SAML)的一种新型攻击技术。利用这种技术,攻击者可以创建一个Golden SAML,这实际上是一个伪造的SAML“身份认证对象”,以SAML 2.0协议作为SSO(单点登录)认证机制的任何服务都受此攻击方法影响。

在这种攻击场景中,如果应用支持SAML认证(这类应用包括Azure、AWS、vSphere等),那么攻击者可以获得该应用的所有访问权限,也能伪装成目标应用上的任何用户(即使某些情况下该应用中并不存在这个用户)。

我们公布了一款工具:shimit,我们可以借助该工具实施此类攻击。

随着云平台的兴起,越来越多的企业将基础架构迁移到云平台上,这种情况下,活动目录(Active Directory,AD)已经不再是用户认证及授权的首选方案。AD现在是大型架构中的一个组成部分,比如联邦(federation)环境中就会用到AD机制。

互不相关的不同环境(如Microsoft AD、Azure、AWS以及其他环境等)可以通过联邦机制建立信任关系。在这种信任关系背景下,AD中的某个用户可以使用SSO认证方式来访问联邦环境中所有可信的目标域。同样,在联邦环境中,攻击者也不再满足只控制受害者所属的域控制器(domain controller)。

Golden SAML这个名字可能会让读者想起另一种臭名昭著的攻击方法,即黄金票据(Golden Ticket),黄金票据是Benjamin Delpy提出的攻击手法,他还开发了Mimikatz这款大名鼎鼎的工具。Golden SAML可以将Kerberos环境中的黄金票据特性引入联邦环境中,获得所有类型的访问权限,也能悄无声息达成持久化目标。


二、SAML简介


如果读者对SAML 2.0协议并不了解,这里稍微介绍一下相关背景知识。

SAML的全称是Security Assertion Markup Language(安全声明标记语言),是不同安全域之间交换认证及授权数据的一种开放标准协议,更具体一些,SAML中定义了身份提供商(identity provider,IdP)以及服务提供商(service provider,SP),安全域由这两者共同构成。除名字所代表的含义以外,SAML也具备如下几种身份:

1、基于XML的一种标记语言(用于断言(assertion)等场景);

2、基于XML的一组协议信息;

3、一组协议信息的绑定(binding);

4、一组配置信息(涵盖以上所有内容)。

根据维基百科的说法,Web浏览器的单点登录(single sign-on,SSO)是SAML解决的最为重要的一种使用场景。

SAML协议的工作流程如图1所示。spacer.gif

t018d75d01b6d28ae86.jpg

图1. SAML认证过程

具体步骤如下:

1、首先,用户尝试访问某个应用(即SP,服务提供商),比如AWS控制台、vSphere web客户端等。根据具体实现方式的不同,客户端可能会直接访问IdP,跳过图1中的第一个步骤。

2、随后,应用检测IdP(即身份提供商,如AD FS、Okta等)以认证用户身份,生成SAML身份认证请求(AuthnRequest),将客户端重定向至IdP。

3、IdP对用户进行身份认证,生成响应数据(SAMLResponse),通过用户将响应数据发送给SP。

4、SP检查SAMLResponse,检查通过后允许用户登录。SP与IdP之间必须建立信任关系。此时,用户可以正常使用目标服务。


三、SAML响应结构


在Golden SAML攻击场景中,我们最感兴趣的是SAML认证过程中的第3个步骤,作为攻击者,我们可以复现这一过程,完成攻击任务。为了成功实施攻击,我们先来看看这一步骤中发送的数据:SAMLResponse。IdP会将SAMLResponse对象发送给SP,然后SP使用这一数据来识别并认证用户身份(这类似于Kerberos中KDC生成的TGT票据)。在SAML 2.0协议中,SAMLResponse的常见结构如下所示(结构中的动态参数部分已用紫色标注出来):spacer.gif

http://p4.qhimg.com/t01163ed00d9c53ac76.jpg

spacer.gif

http://p7.qhimg.com/t0194214909e4f7dd31.jpg

响应断言可能会经过IdP私钥的签名或者加密,具体使用哪种方案由IdP的实现方式所决定。通过这种方式,SP可以验证SAMLResponse是否由可信IdP所生成。

黄金票据攻击场景类似,如果我们能够获取用于对象签名的密钥(对象中包含用户身份及权限信息,该密钥对应黄金票据中的KRBTGT以及Golden SAML中的令牌签名私钥),那么我们就可以伪造这种“身份认证对象”(即TGT或SAMLResponse),冒充任何用户身份,未经授权访问SP。Roger Grimes在2014年定义了一种黄金票据攻击方法,这种方法与Kerberos票据伪造攻击不同,为Kerberos KDC(Key Distribution Center,密钥分发中心)伪造攻击技术。与此类似的是,我们也可以将Golden SAML攻击定义成一种IdP伪造攻击。

在这种攻击场景中,攻击者可以控制SAMLResponse对象中的任何字段(如用户名、权限集、有效期等)。此外,Golden SAML还具备如下优势:

1、可以在任何位置生成伪造对象。攻击者无需参与目标域、联邦环境中,即可生成所需的Golden SAML。

2、即使目标启用了2FA(双因素认证)功能,也能发挥作用。

3、令牌签名私钥(token-signing private key)并不会自动更新。

4、用户密码的修改并不会影响已生成的SAML。

也就是说,我们能得到一个公式:

AWS + AD FS + Golden SAML = 成功的攻击行为

假设我们的身份是攻击者,已突破目标域环境,正在探索如何继续前进以搞定最终目标。那么接下来应该怎么做?我们可以选择使用Golden SAML来继续突破目标环境设施。

活动目录联合服务(Active Directory Federation Services,AD FS)是微软提出的一种标准域服务,允许可信业务合作伙伴(即联邦实体)之间安全共享身份信息。该服务是域环境中的一种服务,可以为联邦环境中的其他SP提供域用户身份认证服务。

假设在联邦环境中,AWS信任我们已突破的那个域环境,那么我们可以利用这种攻击方法,获取云环境中的任意权限。为了实施这种攻击,我们需要掌握能够签名SAML对象的那个私钥(如同黄金票据攻击中需要获取KRBTGT)。我们无需具备域管访问权限,只需掌握AD FS用户账户就能获取这个私钥。

实施Golden SAML攻击时,我们需要掌握如下信息:

1、令牌签名私钥;

2、IdP公共证书;

3、IdP名称;

4、角色(Role)名称;

5、域名及用户名;

6、AWS中的角色会话名(Role session name);

7、Amazon账户ID。

前4项为必须满足的条件,对于其他选项,我们随便输入一个值即可。

那么如何才能满足这些条件?为了得到私钥,我们需要具备AD FS账户的访问权限,然后从个人存储区中导出私钥数据(可以使用诸如mimikatz之类的工具来导出这段数据)。我们可以使用Microsoft.Adfs.Powershell这个PowerShell管理单元(snapin),以ADFS用户身份运行如下命令来得到其他数据:

获取ADFS公共证书:spacer.gif

http://p9.qhimg.com/t01cd157f0ae3182b3e.jpg

获取IdP名称:spacer.gif

http://p0.qhimg.com/t012345b383b786e38a.jpg

获取角色名称:spacer.gif

http://p3.qhimg.com/t01790766bf6f865dc9.jpg

获取所需的所有数据后,我们可以直接进入攻击流程。首先,我们来看一下目标主机中是否已保存有效的AWS凭据。spacer.gif

http://p1.qhimg.com/t01678e64d66c861b4f.jpg

不出所料,目标主机中没有保存任何凭据,但这种状态即将被我们改变。现在,我们可以使用shimit来生成SAMLResponse并对其进行签名。spacer.gif

http://p2.qhimg.com/t0140c21cc4125753ad.jpg

该工具的工作过程如下所示:spacer.gif

t01d454bc1946cd2de0.jpg

图2. 使用shimit.py执行Golden SAML攻击

1、准备过程。

(1)生成与用户提供的参数匹配的一个断言(assertion)。在本文的演示案例中,我们提供的参数中包含用户名、Amazon账户ID以及所需的角色(使用的是第一个角色)。

(2)使用用户提供的私钥文件签名该断言。

(3)连接到SP上,然后调用AWS提供的AssumeRoleWithSAML API。

2、通过AWS STS服务获得访问密钥以及会话令牌(STS服务可以为联邦用户提供临时凭据)。

3、将该会话应用于命令行环境(其中已包含aws-cli环境变量),以便用户使用AWS命令行接口(CLI)。

在这种环境中,实施Golden SAML攻击仍存在一些限制条件,虽然我们可以生成SAMLResponse,使用–SamlValidity来设置该对象的有效时间,但AWS会检查响应数据的生成时间是否在5分钟以内,如果超过这个时长,AWS会拒绝用户的身份认证请求。服务器在执行正常检测流程之前,会先执行这一检查流程,以确保响应数据没有过期。


四、总结


这种攻击方法不需要依赖SAML 2.0协议中的漏洞,它不是AWS/ADFS中的漏洞,也不是其他SP或IdP中存在的漏洞。

我们认为黄金票据并不属于漏洞范围,因为攻击者首先需要获得域管权限才能执行此类攻击,这也是厂商不修复这一问题的原因所在。然而问题在于,攻击者还是可以通过各种方法获得所需的访问权限(域管权限),然后通过黄金票据连续数年潜伏在目标域环境中。

Golden SAML与黄金票据非常类似,也不属于漏洞范畴,但攻击者可以利用这种方法未经授权访问联邦环境中的任何服务(当然前提是联邦环境使用了SAML协议),获取所需的任何权限,潜伏在目标环境中达成持久化目的。

如果攻击者以正确的方式实施此类攻击,防御方很难在网络环境中找到这种攻击行为的蛛丝马迹。此外,攻击者一旦突破目标网络环境,很有可能会瞄准环境中最有价值的目标(如DC、AD FS以及其他IdP设施)。因此,对于本文的演示案例,我们建议防御方严密监视及严格管理AD FS账户的访问权限,如果条件允许,应周期性地自动更新签名密钥,使攻击者难以完成任务。

此外,防御方应部署端点安全解决方案,重点关注权限管理方面内容(比如可以部署CyberArk生产的Endpoint Privilege Manager解决方案),以阻止攻击者染指类似令牌签名证书之类的重要资产。


五、参考资料


https://aws.amazon.com/blogs/security/how-to-set-up-federated-api-access-to-aws-by-using-windows-powershell

https://aws.amazon.com/blogs/security/enabling-federation-to-aws-using-windows-active-directory-adfs-and-saml-2-0/

https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-single-sign-on-protocol-reference


原文链接:https://www.cyberark.com/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-cloud-apps/

未经允许不得转载:安全路透社 » 【技术分享】Golden SAML:针对云应用认证机制的新型攻击技术

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册