介绍
这次我们来分享一些可用于测试基于 SAML 的 SSO 的方法。 现在很多 SSO 都使用 SAML 作为身份验证过程的一部分,在正常情况下是不会引起安全问题的,但是当 SSO 的配置出错时就可能会导致较大危害。
什么是SSO
SSO 是 Single Sign On
的简称,其定义是在多个应用系统中,用户只需要登陆一次就可以访问所有互相信任的应用系统,简单说就是,一些有关联的网站通常会共享用户信息, 那么用户只需要注册一个账号, 就可以对所有相关联的网站使用该账户来进行登录操作。比如说 Google,你可以使用 Google 账户去登陆 GMail, Blogger, iGoogle 等多个应用。
SAML简述
SAML-安全声明标记语言,是一个XML框架,也是一组协议和规范,用于在不同的安全域之间交换认证和授权数据。SAML标准定义了身份提供者(IP)和服务提供者(SP),这两者构成了前面所说的不同的安全域。
比如,两台远程机器之间要通讯,为了保证安全,我们可以采用加密等措施,也可以采用SAML来传输,传输的数据使用符合SAML
规范的XML
格式,这样我们就可以不要求两台机器采用什么样的系统,只要求能理解 SAML 规范即可。
SAML 主要包括三个方面:
- 认证申明:表明用户是否已经认证,通常用于
SSO
。 - 属性申明:表明某个
Subject
的属性。 - 授权申明:表明某个资源的权限。
传统的应用程序可以在允许用户访问之前会进行检验。但在基于 SAML 的 SSO 模型中, 认证功能被移动到执行认证的外部身份提供者(IP)应用程序中。如下图所示:
由上图可以看到 IP
、SP
和用户
三者之间的关系。
用户通过浏览器向IP
发送发送请求,IP
进行身份验证,验证成功之后将数据采用SAML
传输回来, 浏览器再将这个数据转发给SP
,让用户成功登陆,并且让IP
和SP
之间建立信任关系。在传递数据的时候必须通过用户的浏览器,这为用户提供了修改信息的机会,这是一个可以利用的点。
SAML数据
是由base64
编码的,其中最容易被篡改的两个最常见的区域就是签名和断言。签名可以让 IP 和 SP 之间产生信任关系,断言则使 SP 执行信任操作,允许您以特定用户身份访问应用程序。
## 测试技巧
消息到期
SAML 消息应包含发出请求的时间、过期时间。如果 SAML 消息永远不会过期,或者到期不被执行,那么会存在信息落入攻击者手中的风险。所以在测试时。可以检查消息的时间戳,例如 IssueInstant 或 NotOnOrAfter 断言。发出请求之后,暂停请求,直到到期结束再允许请求通过 SP ,同时还要确保到期窗口是合理的,比如1-5分钟。
重复请求消息
断言应包含只能被应用程序接受一次的唯一 ID。所以我们可以尝试重复请求SAML 消息以创建多个会话。
签名
- 在邮件缺少签名的情况下,可以篡改 SP 应用程序的权限。(签名是否必须,saml raider 中 remove sigatures)
- 签名是否经过验证(要测试一个签名是否有效,方法很简单。我们可以在已签名的内容中修改一些地方,并观察是否会导致中断)
- 当 CA 证书是属于自签名的时候,可以选择克隆证书或者创建证书来达到替换原来证书的目的。(签名是否来自正确的签署人?saml raider 中 send certificate to SAML Raider Certs)
是否已经对响应中正确的部分进行签名?(XSW,我们就可以将签名引用到文档的不同位置,并且让接受者认为签名是有效的。)
来自不同收件人的 SAML(感觉像一个token多用)
应用程序应仅接受用于 SP 应用程序的 SAML 消息。如果应用程序不执行此检查,它可能会对从另一个应用程序进行身份验证,并对生成的 SAML 消息进行备份,允许您从其他应用程序以用户身份进入该应用程序。如果您成功登录了使用相同 IP(外部身份提供者)的其他应用程序,在登录之后记录消息,然后将记录的消息重新发送到您的目标 SP。
XML 外部实体(XXE)
SAML 消息只是由服务提供商处理用户提供的 XML 消息。确保检查所有标准的 XML 攻击向量。XXE 是一种非常普遍的 XML 攻击,可以通过 SAML 消息找到它。
利用SAML漏洞
一些攻击,例如重新请求过期消息或重新请求另一个应用程序的消息,是可以产生一定的效果的。上述大多数漏洞是允许修改断言的,这需要充分利用所发现的漏洞。如果您能够以发送自己的断言的方式篡改 SAML 消息,试试以下操作:
更改过期邮件的有效期,使其再次生效
- 将 UserId 更改为不同的有效用户 - 如果可以更改为管理员的用户,就相当有趣了
- 将 UserId 更改为无效用户 - 有时,应用程序将会向无效用户授予默认权限或更高权限
SAML Raider
用于测试 SAML 的一个非常有用的工具是 Burp Suite 的 SAML Raider 扩展。它自动突显包含SAML 消息的代理请求,并向已解码的有效载荷添加代理选项卡。SAML Raider 还向 Repeater添加了一个窗格,允许您快速发布受欢迎的签名包装(XSW)攻击。最后,SAML Raider 添加了一个 Certs 选项卡,使克隆证书变得容易。您可以直接克隆证书或创建证书的自签名版本。可以参考这篇文章:Bypassing SAML 2.0 SSO with XML Signature Attacks总结
SAML 的安全性是 SSO 应用领域中经常被忽视的地方。成功的 SAML 攻击会导致严重的漏洞,例如重新请求会话,获得访问未经授权的应用程序的权限。攻击 SAML 有很多手段,但SAML Raider 等工具可以帮助检测和利用常见的 SAML 问题。所以你可以通过使用这些工具,进行检测,从而去避免自己的应用程序被攻击。参考文档