普及会话与令牌的作用以及针对令牌的常用攻击手段
会话令牌
HTTP协议本身是“无状态”,“无连接”的,也就是说HTTP协议本身并不会记住客户端访问的上下文,也无法保存客户端的各种状态,这其中就包括登录状态。如果HTTP不能保存用户的登录状态,那就意味着用户在每次访问需要身份验证的网站时都必须填写用户名及密码,这里的“每次访问”是指每个单次的HTTP请求包括刷新一次页面。为了解决上述的问题,Web应用程序就需要使用会话这个概念,即用户登录成功后为其建立一个会话,通过会话记录用户的各种状态,通常使用Cookie、Session及Token实现会话机制。令牌就是这一类用于维持用户会话状态的方法。
执行会话最简单、最常见的方式是向每名用户发布一个唯一的会话令牌或标识符,
用户在每一个请求中提交这个令牌。
确定会话令牌
多个数据共同表示一个会话令牌,包括Cookie、URL参数以及隐藏的表单参数
标准的会话Cookie可能存在但是Web应用程序未对其进行使用
观察用户登录前后客户端保存数据的变化,这些变化中包含了建立新会话的令牌
通过删除客户端向服务器端发送的参数来进行判断,比如在删除了某个参数后无法正常访问用户的个人资料,那么这个参数应该与会话令牌有关
令牌使用情景
发送到用户注册邮箱的密码恢复令牌
防止CSRF的会话令牌
用于一次性访问受保护资源的令牌
未使用验证的购物应用程序的消费者用于检索现有订单状态的令牌
会话令牌生成过程中的缺陷
令牌有含义
我们常规抓取http数据包所观察到的令牌内容多是杂乱无序的字符串,不同用户之
间的令牌也无任何规律。但是也不排除有些系统会有意设置具有含义的令牌字符,如:
用户名称:如user、admin、system
用户标识:如0001、0002、0003
用户权限:admin、00101、01000
用户姓/名:zhangsan
日期/时间截
电子邮箱
可预测数字
令牌可预测
隐含序列:有时我们并不能直接的通过观察令牌来发现其隐含的序列或者规律,我们可以通过对令牌进行解码,然后发挥想象力通过各种运算或者操作来发现解密后令牌中所蕴含的规律或者隐含的序列。
时间依赖:一些Web服务器和应用程序使用时间来参与令牌的生成。如果使用时间生成令牌的算法没有合并足够的滴,攻击者就可能推测出其他用户的令牌。
生成数字的随机性不强:计算机生成的随机数都是伪随机数,如果伪随机数的算法强度较弱,那么生成随机数很可能被预测。
令牌加密函数对外开放或暴露:如果攻击者可以接触到会话令牌生成函数的源码、算法过程或者相应加密过程的入口(即攻击者可以通过此入口获得任何数据经过和令牌相同的加密方式后的数据),那么攻击者就可以详细的了解令牌生成的过程,从而模仿此过程对令牌进行伪造。
令牌可预测
常见的cookie(令牌)一般都是无序的字符串,并不能看出其中有何含义
令牌可预测
但有些网站系统开发者喜欢用自己制定的策略生成令牌字段,同时策略过于简单的话,就会使令牌包含一定规律,可以被攻击者预测到令牌的内容,如:
有含义的编号:身份证号、学号、员工号、手机号等
Unix时间截:当前系统时间、注册时间、时间截的变形等
令牌可获取
在网络上泄露令牌
应用程序在登录阶段那使用HTTPS,但是登录成功后转为使用HTTP或者可以访问验证前使用HTTP的链接,这样尽管保护了用户的证书,却保护不了用户的会话令牌
用户在首次访问某一网站时使用HTTP协议,往往此时服务器已经给客户端发布了会话令牌,当用户进行登录时,即使网站转换使用HTTPS,那么在令牌不改变的情况下,原先处于暴露环境中的令牌此刻升级为具有通过验证的令牌
如果登录界面允许使用HTTP协议登录,那么攻击者可以通过各种方式使用户在登录时使用HTTP协议
在用户使用HTTPS协议登录后,如果网页在加载像图片等静态资源时使用的是HTTP协议,用户的会话令牌还是可以通过此泄露
在日志中泄露令牌
协助网络管理人员的系统日志如果记录了最近的会话日志,且未对访问控制进行严格管理,那么在此种情况下,攻击者可能通过日志获得登录会话。
如果应用程序将会话置于URL中,那么这些会话会被记录在:
用户浏览器的日志中
Web服务器日志
企业或ISP代理服务器日志
反向代理服务器日志
任何站外服务器的Referer(高危)
会话令牌与会话的映射易受到攻击
允许并行登录
使用静态令牌,即一个用户令牌发布后不再改变
客户端暴露在令牌动持风险中
网站存在如下攻击,容易造成会话令牌被动持
XSS、CSRF、会话固定
认证前就发布令牌
认证后获得的会话令牌可重新用于其他用户认证
应用程序接受伪造令牌
令牌不失效
令牌有效期过长
是否需要在一段时间后使令牌失效
是否需要在关闭浏览器时使令牌失效
令牌尝试次数过多
可以考虑在令牌提交次数过多时候使令牌失效
无效的令牌重置的手段
注销后令牌是否还有效
会话管理问题
cookie的属性值expires,就是用于设置cookie过期时间,如果设置一个时间,到期后cookie则失效,如果默认不设置,则为浏览器关闭后cookie失效。令牌的有效时间设置比较重要,时间设置过短,用户还没有访问完就要重新登录,时间设置过长会存在安全问题。令牌失效时间过长,当用户结束访问网站后,令牌仍然有效,那么攻击者动持成功令牌的概率就会增加。用户注销后,令牌是否有设置失效,如没有该逻辑,那么注销后的令牌仍然合法,攻击者依旧可以以用户身份登录。
案例:会话固定攻击
会话固定攻击(sessionfixationattack)是利用应用系统在服务器的会话ID固定不变机制,借助他人用相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会话以成功冒充他人,造成会话固定攻击。