浅谈SAML攻击与防御

SAML(Security Assertion Markup Language)是一个XML框架,也就是一组协议和规范,可以用来传输企业用户身份证明, 主要是企业外的身份跨域传递。比如,公司(idp)的用户要访问SAAS 应用(sp)。

概要

SAML安全是SSO应用程序常常忽视的领域。成功的SAML攻击会导致严重的危害,例如重放会话和获得未经授权的访问应用程序功能。SAML攻击有所不同,但SAML Raider等工具可以帮助检测和利用常见的SAML问题。通过使用这些技术,你可以检测和更正你的应用程序中的SAML漏洞。

由于SAML在两个拥有共享用户的站点间建立了信任关系,所以安全性是需考虑的一个非常重要的因素。SAML中的安全弱点可能危及用户在目标站点的个人信息。SAML依靠一批制定完善的安全标准,包括SSL和X.509,来保护SAML源站点和目标站点之间通信的安全。源站点和目标站点之间的所有通信都经过了加密。为确保参与SAML交互的双方站点都能验证对方的身份,还使用了证书。

SAML消息是base64编码的,但很容易解码以查看消息内容。SAML消息中容易被篡改的两个最常见的区域是签名和assertions。

签名可能被强制实施IP和SP之间的信任关系。assertions能允许攻击者作为特定用户访问应用程序。

可参考:利用 XML Signature 攻击绕过 SAML 2.0 单点登录

img_589a448b32451

常见的实现错误和测试提示

消息过期: SAML消息应包含发出请求的时间,到期时间或两者的时间戳。如果SAML消息永不过期,或者如果没有到期条件,那么消息落入攻击者的风险将会很大。我们想防御攻击应该检查消息的时间戳,例如IssueInstant或NotOnOrAfter assertion,同时暂停请求直到过期后,然后允许请求通过到SP。还要确保到期时间是合理的,如1-5分钟。

消息重放:assertion应包含一个唯一的ID,它只被应用程序接受一次。攻击者可能会尝试重播SAML消息以创建多个会话。

缺少签名:攻击者可以随意编辑无签名的邮件,以篡改SP应用程序的权限。我们要确保SAML中存在签名,并且应用程序需要签名。

签名无效:没有的真实CA签名很容易被克隆。要确保签名有真实CA签名。如果证书是自签名的,攻击者可以克隆证书或创建自己的自签名证书来替换它。

来自不同收件人的SAML:应用程序应该只接受用于SP应用程序的SAML消息。如果应用程序没有执行此检查,它可以授予从另外的应用程序验证生成的SAML消息,并允许你从另外的应用程序作为用户进入你的应用程序。如果你有使用相同IP的另一个应用程序的有效登录凭证,请登录到其他SP应用程序并记录该消息。否则攻击者有可能使用其他SP的消息重播到目标SP。

XML外部实体(XXE):SAML消息仅仅是由服务提供商处理的用户所提供的XML消息。一定要检查所有标准的XML攻击向量。XXE是一种非常常见的XML攻击,攻击者可以通过SAML消息找到它。

签名包装:一些检查有效的签名可以将其匹配到有效的assertion,但不用检查多个assertion,多个签名,或根据assertion的顺序不同来修改。以下是八个最常见的XML签名包装攻击。XSW1指映射到SAML Raider工具中使用的名称。

  • XSW1 – 适用于SAML Response消息。在现有签名之后添加响应的克隆的未签名副本。
  • XSW2 – 适用于SAML Response消息。在现有签名之前添加响应的克隆的未签名副本。
  • XSW3 – 适用于SAML Assertion消息。在现有Assertion之前添加Assertion的克隆未签名副本。
  • XSW4 – 适用于SAML Assertion消息。在现有Assertion之后添加Assertion的克隆未签名副本。
  • XSW5 – 适用于SAML Assertion消息。更改Assertion签名副本中的值,并添加原始Assertion的副本,并在SAML消息末尾删除签名。
  • XSW6 – 适用于SAML Assertion消息。更改Assertion签名副本中的值,并添加原始Assertion的副本,并在原始签名后删除签名。
  • XSW7 – 适用于SAML Assertion消息。添加具有克隆的无符号Assertion的“扩展”块。
  • XSW8 – 适用于SAML Assertion消息。添加一个“对象”块,其中包含删除了签名的原始Assertion的副本。

一些攻击,例如重播过期的消息或者在另一个应用程序重放消息,会产生有限的结果。上述大多数漏洞允许Assertion被篡改,这需要最后一步来充分利用发现的漏洞。如果你能够以发送自己的Assertion的方式篡改SAML邮件,你可以尝试以下操作:

  • 更改已过期邮件的过期日期,使其再次有效
  • 将这个用户Id改成一个与其不一样的有效用户的id——最幸运的是改变之后的用户id是admin的权限
  • 将这个用户Id改成一个与其不一样的无效用户的id——有时,应用程序将向未映射的用户授予默认权限或更高权限

Burp Suite扩展工具

你可以手动编辑原始SAML文件以执行这些攻击,但使用工具可以更快捷简单。下面是一些关于SAML的Burp Suite扩展:

BApp details: SAML Encoder / Decoder

描述:此扩展程序向Burp的主UI添加了一个新选项卡,允许对SAML格式的邮件进行编码和解码。

SAMLReQuest

描述:此扩展使安全测试人员能够查看,解码和修改SAML身份验证请求,并测试IdP’s对其操作的响应。

功能:

  • 解码SAML身份验证请求,无论是在URL(HTTP重定向绑定)中压缩还是没在POST正文中压缩(HTTP POST绑定)。
  • 在代理拦截、代理历史记录和中继器选项卡中显示解码的SAML身份验证请求。

SAML Raider

描述:SAML Raider是用于测试SAML基础架构的Burp Suite扩展。它包含两个核心功能 – 一个SAML消息编辑器和一个X.509证书管理器。

消息编辑器提供以下功能:

  • 签署SAML邮件
  • 签署SAML声明
  • 删除签名
  • 编辑SAML邮件(支持的邮件:SAMLRequest和SAMLResponse)
  • 预览八个常见的XSW攻击
  • 执行八个常见的XSW攻击
  • 将证书发送到SAML Raider的证书管理
  • 撤消SAML邮件的所有更改
  • 支持的配置文件:SAML Webbrowser单点登录配置文件,Web服务安全SAML令牌配置文件
  • 支持的绑定:POST绑定,重定向绑定,SOAP绑定,URI绑定

证书管理器提供以下功能:

  • 导入X.509证书(PEM和DER格式)
  • 导入X.509证书链
  • 导出X.509证书(PEM格式)
  • 删除导入的X.509证书
  • 显示X.509证书的信息
  • 导入私钥(采用DER格式的PKCD#8和采用PEM格式的传统RSA)
  • 导出私钥(传统RSA密钥PEM格式)
  • 克隆X.509证书
  • 克隆X.509证书链
  • 创建新的X.509证书
  • 编辑和自签名现有X.509证书

参考文献

 

*转载请注明来自MottoIN,未经允许不得转载!

原创文章,作者:exp1oi7ss,如若转载,请注明出处:http://www.mottoin.com/98030.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code