一、SAML协议介绍
SAML(Security Assertion Markup Language)是一种基于XML的开放式标准,用于在不同的安全域之间交换认证和授权数据。
1.SAML发展历史
SAML协议由结构化信息标准促进组织(OASIS)安全服务技术委员会在2002年提出,已经经历了1.0、1.1、2.0三个版本。目前国内外的主流云服务平台、SaaS应用以及一些常见软件系统,例如阿里云、AWS、Saleforce、Jira、Confluence、Sonarqube等,都支持通过SAML协议实现单点登录。
2.SAML相关概念
- Asserting Party,即断言签发方,是签发断言的业务系统。
- Relying Party,即断言依赖方,是消费断言的业务系统。
- Principal,即认证主体,一般通过Web浏览器与两个业务系统进行交互。
- AuthnRequest,AuthnRequest由断言依赖方向认证主体签发,主要包含了断言依赖方的需要的一些信息。
- Response,Response由断言签发方向认证主体签发,包含了最为重要的断言(Assertion)信息。
- Assertion,Assertion包含了认证主体的名称、id、所属组等重要认证信息。
3.SAML Web SSO
在SAML Web SSO场景中,认证有以下几个流程:
- 用户通过Web浏览器访问受保护资源
- 资源提供方(SP)向用户发出SAML断言请求,该请求包含了需要用户进行身份验证的相关信息
- 用户的身份提供方(IdP)接收到请求,并请求用户提供身份验证信息
- 用户提供身份验证信息给身份提供方
- 身份提供方向用户颁发SAML断言,该断言包含有关用户身份的信息
- 用户将SAML断言发送回资源提供方
- 资源提供方验证SAML断言的有效性,如果断言有效,则向用户授权访问所请求的资源
- 用户被授权访问资源
二、SAML协议攻击面
SAML是一个基于XML的认证协议,由于XML数据格式灵活、处理复杂,导致实现过程非常容易造成逻辑漏洞,并且XML本身也存在XXE、XSLT等安全风险,这一攻击面也由SAML所继承。
1.XXE攻击
XXE(XML External Entity Injection)攻击是OWASP TOP10中的常客,其本身是XML的攻击面,但由于SAML基于XML