导语:GOLDEN SAML的发现 近日,以色列的CyberArk实验室团队新发现了一种全新的攻击技术,他们将其命名为“GOLDEN SAML”,攻击者通过使用该技术,不但可以伪造一个云端应用的身份验证对象,而且还能对使用SAML 2.0协议作为SSO(单点登录)机制的每
GOLDEN SAML的发现
近日,以色列的CyberArk实验室团队新发现了一种全新的攻击技术,他们将其命名为“GOLDEN SAML”,攻击者通过使用该技术,不但可以伪造一个云端应用的身份验证对象,而且还能对使用SAML 2.0协议作为SSO(单点登录)机制的每个服务进行身份验证。
在攻击中,攻击者不但可以获得任何支持SAML身份验证的应用程序(例如Azure,AWS,vSphere等)的任何权限,而且还可以伪装成目标应用程序的用户。
目前,CyberArk实验室团队已经发布一个实现这个攻击的渗透测试工具——shimit。
当越来越多的企业基础构架设施被放在云端时,Active Directory(AD)已不再是对用户进行身份验证和授权的最高方案了,它现在只属于联合身份验证服务 (AD FS) 的一部分。
AD FS可以在不同的环境之间建立信任关系,这与微软的Azure Active Directory,Microsoft AD, AWS等都有很大不同。例如,该信任关系会允许AD中的用户享受SSO对AD FS中的所有可信环境的好处。在AD FS中,攻击者将不再满足于控制其受害者的域控制器。
说到“GOLDEN SAML”你一定会想到另一个臭名昭着的攻击方式——Golden Ticket(黄金票据),Mimikatz工具就是利用的该攻击技术,如果你想了解更多关于Golden Ticket的信息请点此。由名字的相似性可知这两个攻击技术之间一定有着某些相似性,没错,由于Golden Ticket可以生成任意的Kerberos票据,且攻击者可以对这些伪造的票据使用很长一段时间,所以GOLDEN SAML也采用了这一攻击特性。
如何使用SAML
由于有些读者可能不熟悉SAML 2.0协议,所以我想简要地介绍一下它是如何工作的?
SAML即安全声明标记语言,英文全称是Security Assertion Markup Language。它是一个基于XML的标准,用于在不同的安全域(security domain)之间交换认证和授权数据。SAML标准定义了身份提供者(identity provider,IdP)和服务提供者(service provider,SP),这两者构成了前面所说的不同的安全域。 SAML是OASIS组织安全服务技术委员会(Security Services Technical Committee)的产品。
SAML协议或安全声明标记语言是用于在各方之间,特别是在身份提供者和服务提供者之间交换认证和授权数据的开放标准。SAML的作用 主要包括三个方面:
1.认证申明,表明用户是否已经认证,通常用于SSO。
2.属性申明,表明 某个Subject 的属性。
3.授权申明,表明 某个资源的权限。
下图是SAML协议工作的认证示意图:
1.用户会尝试访问一个应用程序即服务提供者,它可能是一个AWS控制台或vSphere Web客户端。根据实现方式的不同,客户端可能会先直接访问IdP,然后跳过上图中的第一步。
2.应用程序会检测IdP以认证用户,生成SAML AuthnRequest并将客户端重定向到IdP。IdP即身份提供者,它可能是AD FS或Okta。
3.IdP会对用户进行身份验证,创建SAMLResponse并通过用户将其发布到SP。
4.SP会检查SAMLResponse和登录用户,SP必须与IdP建立信任关系。
这几步完成后,用户就可以使用SAML协议了。
SAML的响应架构
对于SAML攻击,研究者最感兴趣的部分就是SAML的响应架构,因为他们会把这个过程复制下来,然后对攻击行为进行渗透测试。为了能够正确执行此操作,我们首先要来看看在这部分发送的请求对象——SAMLResponse。 SAMLResponse对象就是IdP发送给SP的内容,而这实际上就是使SP识别和验证用户的数据(类似于在Kerberos中KDC生成的TGT)。 SAML 2.0中的SAMLResponse的一般结构如下所示(写成紫色的部分表示的是结构的所有动态参数):
根据特定的IdP实现,响应断言(Response Assertion)可能是由IdP的私钥进行签名或加密的。通过这种方式,SP可以验证SAMLResponse确实是由受信任的IdP创建的。
类似于Golden Ticket,如果我们能够获取用于对象签名的密钥,那么研究者就可以伪造这样一个“认证对象”( TGT或SAMLResponse)并冒充任何用户以获得对SP的未经授权的访问。该密钥包含用户身份及权限信息,它对应黄金票据中的KRBTGT以及Golden SAML中的令牌签名私钥。不过我们在此要提一下另外一种关于Kerberos票据的观点,在2014年,微软安全专家Roger Grimes对Golden Ticket进行了重新定义,他认为Golden Ticket并不是一般所理解的Kerberos票据伪造攻击,而是Kerberos密钥分发中心(Key Distribution Center)实施的伪造攻击。如果按照Roger Grimes的理解,那Golden SAML攻击也可以定义为IdP伪造攻击。
在IdP伪造攻击中,攻击者可以控制SAMLResponse对象的每个字段(例如用户名,权限集,有效期等)。另外,Golden SAML还具有以下4个攻击优势:
1.伪造对象可以在任何位置生成,攻击者无需使用AD FS即可生成所需的Golden SAML。
2.即使攻击目标启用了双因素验证,也不会影响攻击的实现。
3.令牌签名私钥(token-signing private key)不会自动更新。
4.如果攻击目标的登录密码发生了修改,是不会影响已生成的SAML。
综上所述,AWS + AD FS + Golden SAML就等于成功的攻击行为。
假设你是一个攻击者,且眼下已经确定了你的目标域,而你现在急需的就是找出下一步攻击该如何实施?,如果我是你,我就会使用Golden SAML,进一步发起攻击。
AD FS是微软提出的一种标准域服务,允许可信业务合作伙伴之间安全共享身份信息。该服务是域环境中的一种服务,可以为联邦环境中的其他SP提供域用户身份认证服务。
假设AWS认为你已经攻破了域环境,那么你就可以通过Golden SAML手法轻松获取云环境中的任意权限。要执行Golden SAML攻击,你还需要对SAML对象的私钥进行签名,这类似于需要在Golden Ticket中使用KRBTGT。所以攻击者无需获取域管理员访问权限,只需掌握AD FS用户账户,就能获取这个私钥。
在对Golden SAML进行渗透攻击测试时,研究者首先掌握了如下7个关键信息:
1.令牌签名私钥; 2.IdP公共证书; 3.IdP名称; 4.角色(Role)名称; 5.域名及用户名; 6.AWS中的角色会话名(Role session name); 7.Amazon账户ID。
其中又以前4项信息最为关键。
那问题来了,你如何才能得到这些信息呢?就拿私钥来说吧,为了得到你需要访问的AD FS帐户的私钥,你需要从个人存储区中导出私钥数据,也可以使用诸如mimikatz之类的工具来导出这段数据。而对于其它信息,你可以导入PowerShell管理单元(snapin)的Microsoft.Adfs.Powershell并按以下方式进行操作,不过前提是你必须使用ADFS用户身份。
获取ADFS公共证书:
获取IdP名称:
获取角色名称:
一旦获取了必备的信息,你就可以直接实施攻击。首先,你要来检查一下目标设备上是否有有效的AWS凭据。
如上图所示,经过检查,目标设备上没有有效的AWS凭据,不过接下来你要做的就是在目标设备上生成有效的AWS凭据。现在,你可以使用shimit来生成SAMLResponse并对其进行签名。
下图就是使用shimit.py执行Golden SAML攻击的过程:
具体过程的解释如下:
1. shimit首先会生成一个与用户提供的参数相匹配的断言。在本文的渗透测试中,研究者提供了用户名,Amazon账户ID和角色名称。然后,shimit会使用用户指定的私钥文件来对该断言进行签名。最后,通过连接到SP上,然后调用AWS提供的AssumeRoleWithSAML API。
2.从AWS STS获取访问密钥和会话令牌,STS可以为AD FS提供临时凭证。
3. 将该会话应用于命令行环境,其中已包含aws-cli环境变量,以便用户使用AWS命令行接口(CLI)。
不过,要注意的是,本文所列举的Golden SAML攻击情境具有一定的实验局限性。尽管研究者可以生成一个SAMLResponse,且在使用-SamlValidity设置的攻击时间段都有效,但在其它攻击环境中,AWS会专门检查这个响应是否是在五分钟之内生成的,如果是,就不会验证用户,如果超过五分钟,AWS会拒绝用户的认证请求。正常情况下,服务器在执行正常检测过程之前,会先执行这一响应检查,以确保数据没有过时。
总结
Golden SAML并不依赖SAML 2.0协议中的漏洞,它不是AWS/ADFS中的漏洞,也不是其他SP或IdP中存在的漏洞。
研究者认为,Golden Ticket并不是漏洞,因为攻击者必须具有域管理员权限才能执行。这就是为什么设备供应商一直没有解决此问题的原因。退一步讲,即使把这个问题解决了,攻击者还是可以通过各种方法获得所需的访问权限(域管权限),然后通过Golden Ticket进行持久性攻击。
Golden SAML与Golden Ticket很相似,也意味着它本身并不是一个漏洞。但攻击者还是可以利用Golden SAML,在未经授权访问的AD FS中,获取所需的任何权限,然后进行持久性攻击。
所以,目前还没有什么方法能很好地发现此类攻击行为。如果攻击者进入了网络环境,那很可能会对最有价值的目标,如DC、AD FS以及其他IdP设施进行破坏。因此,通过本文的测试案例,研究者的安全建议有两个方面:
1.密切监视并严格管理AD FS账户的访问权限,除此之外,还应周期性地更新签名密钥。
2.在部署端点安全解决方案时,把防御重点放在权限管理方面,以阻止攻击者对令牌签名证书等重要信息进行利用。
对于防御者来说,我们知道如果这个攻击是正确的,那么在你的网络中检测是非常困难的。此外,根据“假设违约”范式,攻击者可能会瞄准组织中最有价值的资产(DC,AD FS或任何其他IdP)。这就是为什么我们建议更好地监视和管理AD FS帐户(针对此处提到的环境)的访问权限,并且如果可能,定期自动滚动签名私钥,从而使攻击者很难。
另外,以CyberArk的Endpoint Privilege Manager为中心,实施以权限管理为中心的端点安全解决方案将极大地有利于阻止攻击者摆脱重要资产,如令牌签名证书。