应用安全:会话防劫持 – 作者:owensky

1. 背景

失效的身份认证在OWASP TOP 10 2017版中排名第二,它包括错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者利用其他开发缺陷来暂时或永久性冒充其他用户的身份。而会话令牌劫持是失效身份认证的关键因素。

2. 名词解释

Session-会话,维护用户状态。会话中关联了用户信息。

Token-令牌,是用户身份的验证方式,一般由uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名)组成。

3. 会话&令牌介绍

  • Session

session顾名思义就是会话,维护了用户的状态就是会话,这是为了解决HTTP无状态协议问题发明的东东。

session通常的用法是:

  • 用户使用账号+密码/手机号+验证码登录
  • 后台验证通过后会在Redis会话表里产生一条记录,这条记录就可以称为会话。记录里面有一个随机的唯一值和用户的信息,这个随机的唯一值会返回给客户端保存,以后的接口通过这个唯一值进行鉴权,这个唯一值可以称为sessionId。
  • 后台接口带上sessionId,服务器拿到后去表里校验是否存在且有效,有效则鉴权通过,无效则报错
  • token

token的状态是保存在客户端的,session是服务端在管理状态。session管理需要在后台存表,管理这个状态,而token后台不需要保存,因为token里自带了信息,比如用户基本信息、过期时间等,后台每次收到直接解密校验即可。

4. 会话令牌劫持

攻击者获取SessionID的方式有多种:

1、 暴力破解:尝试各种Session ID,直到破解为止。

2、 预测:如果SessionID使用非随机的方式产生,则可以通过分析SessionID的强度(长度、字符集以及平均信息量),将其计算出来,例如可以使用Burp Suite中的Sequencer模块对会话进行分析。

  • 捕获(劫持):使用网络嗅探,XSS攻击等方法获得。
  • 会话固定攻击:Session Fixation是攻击者预先计算一个SessionID,诱使用户使用此SessionID登陆,并使之合法。

会话令牌劫持攻击示意图:

5. 防劫持方案

  • 会话令牌生成
  1. 使用安全的随机函数(如/dev/urandom、security.SecureRandom、CryptGenRandom)生成会话标识。
  2. 会话标识包括字母、数字,长度不少于32个字符。
  • 会话令牌有效期
  1. 会话令牌有有效期控制,WEB服务有效期不超过4小时,手机/PC客户端有效期不超过7天。
  • 会话令牌传输
  1. 使用HTTPS信道加密传输会话令牌。
  2. 设置HttpOnly、Secure。通过设置Cookie的HttpOnly属性,可以防止客户端脚本访问这个Cookie,从而有效的防止XSS攻击。通过设置Cookie的Secure属性,可以防止会话令牌通过HTTP传输。

          html 代码示例:

Set-Cookie: foo=bar; Path=/; Secure;HttpOnly
  • 会话令牌使用
  1. 会话令牌不通过URL传输。
  2. 关闭dump request信息的页面,如phpinfo页面,Spring Boot Actuator的trace endpoint。
  3. 使用User-Agent检测请求的一致性。当User-Agent和客户端IP同时变化时,则使会话令牌失效,需重新登录。
  4. 使用MAC检测请求的一致性。当客户端MAC地址变化时,则使会话令牌失效,需重新登录。
  5. 登录前登录后使用不一样的会话令牌。

6. 参考链接

https://blog.csdn.net/Doraemon_wu/article/details/52448766?utm_source=blogxgwz7

https://www.jianshu.com/p/cd1b0a98d5a0

https://www.html.cn/archives/5010

https://cloud.tencent.com/developer/article/1043362

 

来源:freebuf.com 2020-08-11 16:51:54 by: owensky

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论