译者:興趣使然的小胃
预估稿费:200RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
一、前言
在本文中,我们介绍了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所示。
图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的常见结构如下所示(结构中的动态参数部分已用紫色标注出来):
响应断言可能会经过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公共证书:
获取IdP名称:
获取角色名称:
获取所需的所有数据后,我们可以直接进入攻击流程。首先,我们来看一下目标主机中是否已保存有效的AWS凭据。
不出所料,目标主机中没有保存任何凭据,但这种状态即将被我们改变。现在,我们可以使用shimit来生成SAMLResponse并对其进行签名。
该工具的工作过程如下所示:
图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解决方案),以阻止攻击者染指类似令牌签名证书之类的重要资产。
五、参考资料