SAML
SAML 是什么?
SAML基于 XML 的开放标准,用于在身份提供方与服务提供方之间交换认证与授权断言。
SAML(Security Assertion Markup Language,安全断言标记语言)于 2005 年被标准化为 OASIS SAML 2.0,它定义了可信的**身份提供方(IdP)如何向服务提供方(SP)**发布带数字签名的 XML 断言,以描述用户的身份与属性,从而在不同安全域之间实现 Web 单点登录。SAML 2.0 支持 HTTP-Redirect 与 HTTP-POST 绑定;SP 在创建会话之前,必须校验断言的 XML 签名、Audience、NotOnOrAfter 时间条件以及 InResponseTo。
攻击与弱点
主要有两类失效方式。**XML 签名包装攻击(XSW)**与注释注入(comment-injection)缺陷可让攻击者将其可控的数据绕过签名验证偷偷带入。2018 年 2 月,Duo Labs 披露了跨多个流行工具包的一大类此类漏洞——CVE-2017-11427(python-saml)、CVE-2017-11428(ruby-saml)、CVE-2017-11429(saml2-js)以及 CVE-2017-11430(omniauth-saml)——其中在 NameID 中插入的 <!-- --> 注释会截断被解析的主体(subject),从而让已认证用户以另一个用户的身份登录。Golden SAML 由 CyberArk 于 2017 年提出,属于攻陷后(post-compromise)手法:窃取了 AD FS 令牌签名私钥的攻击者可以伪造任意断言,绕过密码与 MFA。APT29 在 2020 年的 SolarWinds/SUNBURST 行动中正是利用这一手法,铸造出看似正常登录的联合身份令牌。
防御措施:同时对响应和断言强制签名、严格校验受众/接收方(audience/recipient)、用硬件(HSM)保护令牌签名密钥并对其进行轮换,以及监控异常的联合登录。对于新的集成项目,通常更倾向于采用 OpenID Connect。
flowchart LR U[用户浏览器] -->|1 访问资源| SP[服务提供方] SP -->|2 AuthnRequest 重定向| IdP[身份提供方] IdP -->|3 对用户进行认证| IdP IdP -->|4 已签名的 SAML 断言| U U -->|5 POST 提交断言| SP SP -->|6 校验签名 + 条件| SP SP -->|7 授予会话| U
● 示例
- 01
企业 IdP 通过 SAML 断言让员工登录 Salesforce。
- 02
服务提供方验证由 Microsoft Entra ID 签名的 AuthnResponse。
● 常见问题
SAML 是什么?
基于 XML 的开放标准,用于在身份提供方与服务提供方之间交换认证与授权断言。 它属于网络安全的 身份与访问 分类。
SAML 是什么意思?
基于 XML 的开放标准,用于在身份提供方与服务提供方之间交换认证与授权断言。
如何防御 SAML?
针对 SAML 的防御通常结合技术控制与运营实践,详见上方完整定义。
SAML 还有哪些其他名称?
常见的别称包括: SAML 2.0, Security Assertion Markup Language。