应用安全:会话防劫持

  • A+
所属分类:安全文章

应用安全:会话防劫持

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. 登录前登录后使用不一样的会话令牌。


应用安全:会话防劫持


发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: