开发者生态
morning
SAML:不良设计的分形
摘要
Born out of academia and raised in corporate IT departments, the Security Assertion Markup Language (SAML) authentication protocol continues to be a staple in these organizations. However, it’s time f...
the
SAML
and
for
XML
its
that
protocol
design
security
2026-09-23
1 阅读
约6分钟阅读
aray07
字号:
安全断言标记语言 (SAML) 身份验证协议诞生于学术界并在企业 IT 部门中发展,仍然是这些组织的主要内容。然而,它是时候退休了。随着近年来软件即服务 (SaaS) 公司的兴起,IT 部门需要一种方法让用户能够对许多新的 Web 服务进行身份验证。 SAML 和蓬勃发展的单点登录 (SSO) 行业满足了这一需求。然而,SAML 正被其自身复杂性的重压所压垮。是时候弃用它并转向 OpenID Connect (OIDC) 等现代替代方案了。在这篇文章中,我将探讨 SAML 的委员会设计起源、它在学术和企业环境中的进步、它在安全研究社区手中的缓慢瓦解,以及它(满怀希望的)弃用以支持更新的协议。 SAML 101 SAML 的阴险之处在于,它实际上很容易理解,但它是建立在沙子、骨灰和灰烬的基础上的;它有效……如果您假设 XML 签名验证是可靠的。但是 XML 签名验证受到了深深的诅咒,并且非常复杂,以至于大多数现场 SAML 实现都包装了 libxmlsec,这是一个没人读的粗糙的 C 代码库。 — Thomas Ptacek,2023 SAML 和 SSO 行业的诞生 维基百科告诉我,“SAML 是一种基于 XML 的安全断言标记语言。”它由结构化信息标准促进组织 (OASIS) 安全服务技术委员会 (SSTC) 于 2002 年创建。好吧,以现代标准来看,我们并没有一个好的开始。 XML 尽管具有一些可取之处,但与 JSON 等较新的替代方案相比相当复杂,但我们稍后会详细介绍。此外,召开会议的小组委员会是“厨房-水槽”协议设计的秘诀(例如,瀑布方法、预先大设计等)。果然,我们现在已经将四种(!)基于 XML 的安全协议合而为一:……以下知识产权已贡献给 SSTC:来自 Netegrity 的安全服务标记语言 (S2ML) 来自 Securant 的 AuthXML 来自 Securant 的 XML 信任断言服务规范 (X-TASS) 来自 VeriSign 的信息技术标记语言 (ITML) 来自 Jamcracker — SAML:历史 然而,对这样一种协议的渴望是不可否认的。随着互联网从 20 世纪 90 年代的 Web 1.0 转向早期的 Web 2.0,用户和组织需要一种简单的方法来对许多新的 Web 服务进行身份验证。学术界是这一运动的最大推动者,但不是唯一的推动者:耶鲁大学 2002 年的中央身份验证服务 (CAS)、研究型大学联盟 Internet2(包括我的母校)于 2003 年推出的 Shibboleth IdP、微软于 2003 年推出的 ADFS,以及 2007 年左右与学术界关系密切的挪威国有公司 Uninett 推出的 simpleSAMLphp。所有这些身份验证项目最终都以某种方式支持 SAML。与之前的阿帕网一样,大学处于互联网发展的最前沿,也是网络服务最早的消费者。一旦协议可用性的基础层和新生的学术试验场建立起来,商业行业就会接受它并走向价值数十亿美元的行业。 SSO、身份和身份验证提供商行业也在早期起步,但几年后才真正取得成果:Ping Identity (2002)、OneLogin (2009)、Okta (2009) 和 Duo Security (2010)。这些公司基本上都是建立在 SAML 协议之上的,但 Duo 除外,他们于 2015 年推出了他们的第一个 SSO 产品,这也是我讲述这个故事的地方。我参与了 Duo 的第一个本地 Access Gateway 产品 (DAG),该产品基于 simpleSAMLphp 以及 SAML 协议构建。正是在这里,我开始熟悉 SAML 协议,并花了很多年的时间来消化它冗长的规范。当 Kelby Ludwig 发现 XML 注释绕过时我就在场,但稍后我们将遇到各种攻击和 SAML 缺陷。可以说,SSO 和身份验证提供商行业正在蓬勃发展,其中大部分都是基于 SAML 协议构建的。众所周知,XML 签名包装 (XSW) 攻击是 SAML 的致命一击。虽然早期对签名包装(2005 年、2008 年和 2009 年)和 SAML(2008 年)进行了安全研究,但我认为这一切的教父是“On Breaking SAML:Be Whoever You Want to Be”(2012 年)。它通过实践检验了理论,并产生了一种自动检查 XSW 攻击的方法。这是我们实施 DAG 时的北极星。这就是我们选择 simpleSAMLphp 作为构建块的原因。 PHP,尤其是在当时,并不因其安全记录而闻名,但 simpleSAMLphp 的安全性不言自明。 simpleSAMLphp 对 XSW 具有弹性,当时没有人真正知道那是什么:simpleSAMLphp 的安全跟踪记录(来源:On Breaking SAML)
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱