浅谈SSO认证原理及常见安全问题

2025-03-26 1 0

前言

在一次测试过程中,遇到了一个公司的应用全部采用SSO登录的情况,所以就了解了一下SSO系统的原理以及可能存在的安全问题。

简介

单点登录是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的保护资源,若用户在某个应用系统中进行注销登录,所有的应用系统都不能再直接访问保护资源,像一些知名的大型网站,如:淘宝与天猫、新浪微博与新浪博客等都用到了这个技术。

原理

单点登录有一个独立的认证中心,只有认证中心才能接受用户的用户名和密码等信息进行认证,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,当用户提供的用户名和密码通过认证中心认证后,认证中心会创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌即得到了授权,然后创建局部会话。

下面为图示:

浅谈SSO认证原理及常见安全问题插图

下面对上图进行解释:

1. 当用户还没进行用户登录的时候

  • 用户去访问系统1的保护资源 ,系统1检测到用户还没登录,跳转至SSO认证中心,SSO认证中心也发现用户没有登录,就跳转到用户至认证中心的登录页面
  • 用户在登录页面提交用户相应信息后,认证中心会校验用户信息,如果用户信息正确的话认证中心就会创建与该用户的全局会话(全局会话过期的时候,用户就需要重新登录了。全局会话中存的信息可能有令牌,用户信息,及该在各个系统的一些情况),同时创建授权令牌,然后进行下一步,否则认证中心给出提示(用户信息有误),待用户再次点击登录的时候,再一次进行校验用户信息
  • 认证中心带着令牌跳转到用户最初请求的地址(系统1),系统1拿到令牌后去SSO认证中心校验令牌是否有效,SSO认证中心校验令牌,若该令牌有效则进行下一步
  • 注册系统1,然后系统1使用该令牌创建和用户的局部会话(若局部会话过期,跳转至SSO认证中心,SSO认证中心发现用户已经登录,然后执行第3步),返回受保护资源

2. 用户已经通过认证中心的认证后

用户访问系统2的保护资源,系统2发现用户未登录,跳转至SSO认证中心,SSO认证中心发现用户已经登录,就会带着令牌跳转回系统2,系统2拿到令牌后去SSO认证中心校验令牌是否有效,SSO认证中心返回有效,注册系统2,系统2使用该令牌创建与用户的局部会话,返回受保护资源。

3. 如果系统1的局部会话存在的话,当用户去访问系统1的保护资源时,就直接返回保护资源,不需要去认证中心验证了

单点注销的原理与此类似,在一个子系统中注销,全局会话也会被注销,所有子系统的会话都会被注销

整体概述

  1. 单点登录涉及SSO认证中心与多个子系统,子系统与SSO认证中心需要通信(交换令牌、校验令牌及发起注销请求等),子系统中包含SSO的客户端,SSO认证中心是服务端
  2. 认证中心与客户端通信可通过 httpClient、web service、rpc、restful api(url是其中一种) 等实现
  3. 客户端与服务器端的功能

客户端

  • 拦截子系统未登录用户请求,跳转至sso认证中心
  • 接收并存储sso认证中心发送的令牌
  • 与服务器端通信,校验令牌的有效性
  • 建立局部会话
  • 拦截用户注销请求,向sso认证中心发送注销请求
  • 接收sso认证中心发出的注销请求,销毁局部会话

服务器端:

  • 验证用户的登录信息
  • 创建全局会话
  • 创建授权令牌
  • 与客户端通信发送令牌
  • 校验客户端令牌有效性
  • 系统注册
  • 接收客户端注销请求,注销所有会话

单点登录的本质就是在多个应用系统中共享登录状态。如果用户的登录状态是记录在 Session 中的,要实现共享登录状态,就要先共享 Session,比如可以将 Session 序列化到 Redis 中,让多个应用系统共享同一个 Redis,直接读取 Redis 来获取 Session。当然仅此是不够的,因为不同的应用系统有着不同的域名,尽管 Session 共享了,但是由于 Session ID 是往往保存在浏览器 Cookie 中的,因此存在作用域的限制,无法跨域名传递,也就是说当用户在 app1.com 中登录后,Session ID 仅在浏览器访问 app1.com 时才会自动在请求头中携带,而当浏览器访问 app2.com 时,Session ID 是不会被带过去的。实现单点登录的关键在于,如何让 Session ID(或 Token)在多个域中共享。

浅谈SSO认证原理及常见安全问题插图1

SSO登录可能存在的风险

SSO认证人们一般可能认为比简单的单系统登录安全漏洞少,其实不是,越是复杂的登录系统越有可能出现安全问题。

下面从认证以及会话管理方面来看一下SSO系统可能存在的安全问题。

认证阶段

1)弱密码与暴力破解

如果系统没有对密码进行限制,应用程序常常使用下列形式的密码:

  • 非常短或空白的密码;
  • 以常用的字典词汇或名称为密码;
  • 密码和用户名完全相同;
  • 仍然使用默认密码。

需要注意的是,不是符合了密码规则的就是强密码,例如Passw0rd,虽然看起来复杂,但一般都会在爆破的密码库中。

知道了系统的密码规则就可以进行暴力破解,在这种情况下,精明的攻击者会根据冗长的常用密码列表,使用自动技巧尝试猜测出密码。依赖今天的带宽和处理能力,攻击者每分钟就可以发出数千个登录尝试。

2)详细的失败信息

可以从返回的信息中获取到具体的失败信息,在最简单的情况下,如果只需要用户名和密码登录,应用程序可能会通过指出失败的原因(用户名无效或密码错误)来响应失败的登录尝试。这样攻击者就可以批量获取到一批用户名,降低了攻击成本。

3)忘记密码功能

忘记密码功能也是SSO中经常见到的功能,但是这里如果没有经过严格的校验,经常会出现严重的安全问题,如任意有用户密码修改。

忘记密码功能可能出现的安全问题如下:

  • 用户名枚举

输入账号信息时返回具体的错误信息,可以用来爆破用户名

  • 密保问题过于简单

有的忘记密码功能通过密保问题来进行,但是密保设置的过于简单,如母亲的娘家姓、纪念日、最喜欢的颜色等问题。这些问题几次尝试可能就会得到正确答案

  • 多步阶段中逻辑漏洞

忘记密码功能往往有多个阶段,如第一步输入账户名,第二步根据账号名发送手机验证码输入验证码以后在更改密码。如果下一步没有严格检验上一步是否已经完成,就有可能直接跳到修改密码阶段。

  • 发送重置邮件中的token可预测

有的重置密码是通过发送邮件链接,如果这个链接包含某种规律或者可以预测,那么也可以修改其它账号的密码。

4)绑定第三方登录

目前很多的系统都有绑定第三方登录的功能,例如绑定微信

浅谈SSO认证原理及常见安全问题插图2

这种最有可能出现的问题就是可以绑定任意账号的微信,在测试的时候一定要注意这一点。

5)可预测的初始密码

一些应用程序一次性或大批量创建用户,并自动指定初始密码,然后以某种方式将密码分配给所有用户。这种生成密码的方式可让攻击者能够预测其他应用程序用户的密码。基于内联网的企业应用程序常常存在这种漏洞。例如,应用程序为每位雇员创建一个账户,并向其发送一份打印好的密码通知。

如果所有用户收到相同的密码,或者根据其用户名或工作职能创建的密码,这种密码最容易被攻破。另外,生成的密码可能包含某种顺序,攻击者查看少数几个初始密码样本即可确定或猜测出其他用户的密码。

会话管理

认证以后就会分配一个会话,一般是返回一个会话ID,接下来看看在会话管理中可能存在的问题。

1)会话令牌可预测

由于生成令牌的过程不安全,攻击者能够确定发布给其他用户的令牌,致使会话管理机制易于受到攻击。

主要可能有下面的一些情况

  • 令牌有一定的含义

如下面的令牌只是简单的通过base64进行编码,解码以后就可以看到令牌并伪造其它用户的令牌

dXNlcj1hZG1pbjtkYXRhPTIwMjUwMzI1

  • 加密方式过于简单

简单的使用用户名进行MD5得到的值用做会话令牌

2)网络中泄露令牌

如在日志,url中记录了令牌并暴露在网络上,并攻击者发现并利用

如何设计安全的SSO认证

1)强制使用强密码

2)防止暴力破击

3)多阶段过程中要注意逻辑缺陷,下一步要校验上一步是否已经完成

4)SSO生成的令牌一定要随机并且不能被猜测

5)完善的日志,监控与警报

6)使用安全的方式传送令牌

总结

本文简单介绍了一下SSO认证系统以及常见的一些安全问题,越复杂的认证系统其逻辑越复杂,就越可能出现安全问题。

参考链接

https://blog.csdn.net/modi000/article/details/141330350


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

Java PriorityQueue的深度利用技巧
Java漏洞在黑盒实战中的技巧——反序列化篇
Java反序列化链CommonsCollections的绕过技巧
Java webshell的绕过
记一次SQL注入绕WAF实战:exp函数和burp爆破模块的巧妙运用
BlackCloak发布数字高管保护框架,为企业高管提供全面防护

发布评论