先来说一下什么是会话管理?在绝大多数web应用程序中,会话管理机制是一个基本的安全组件。它帮助应用程序从大量不同的请求中确认特定的用户,并处理它收集的关于用户与应用程序交互状态的数据。会话管理在应用程序执行登陆功能时显得特别重要,因为它可在用户通过请求提交他们的证书后,持续向应用程序保证任何用户身份的真实性。
由于会话管理机制所发挥的关键作用,它们成为针对应用程序的恶意攻击的主要目标。如果攻击者能够破坏应用程序的会话管理,他就能轻易避开其实施的验证机制,不需要用户证书即可伪装成其他应用程序用户。
一.状态要求
HTTP协议没有状态,它基于一种基本的请求-响应模型,其中每对消息代表一个独立的事物。协议本身并无将某位用户提出的各种请求联系起来的机制,并将它们与web服务器收到的所有其他请求区分开来。
前期访问的都是一些静态页面,对于会话没有要求,但是现在不同,各种各样的功能出现在web应用程序,例如需要用户登陆,记住用户的信息,往购物车中添加商品。这些功能要求应用程序知道它收到的那些请求来自同一个用户。会话管理机制就是为了解决这种问题。
执行会话最简单的方式就是向每名用户发布一个唯一的会话令牌或标识符。在大多数情况下,应用程序使用HTTP cookie作为在服务器与客户端间传送这些会话令牌的传输机制。
会话管理机制中存在漏洞主要分为两类:
1) 会话令牌生成过程中的薄弱环节
2) 在整个生命周期过程中处理会话令牌薄弱环节
二. 会话令牌过程中的薄弱环节
1) 令牌有一定的含义,例如一些令牌是通过用户的用户名或电子邮件地址通过一种的模糊处理(例如十六进制编码)得到的,可以通过猜测得到用户的令牌
2) 令牌可预测性
一些会话令牌并不包含与某个特定用户有关的任何有意义的数据,但由于他们包含某种顺序或模式,允许攻击者通过几个令牌样本即可推断出应用程序最近发布的其他有效令牌,因此具有可预测性。可预测的会话令牌通常来自3个方面:隐含序列,时间依赖,生成的数字随机性不强。
三. 会话令牌处理中的薄弱环节
1) 在网络上泄露令牌
如果通过网络以非加密方式传送会话令牌,就会产生这方面的漏洞。
2) 在日志中泄露令牌
各种系统日志也常常将令牌泄露给未授权方。除了由于处在网络适当位置的窃听者以外,还有其他各种潜在的攻击者都能查阅这些日志。
3) 令牌-会话映射易受攻击
允许给同一个用户账户同事分配几个有效的令牌。
4) 会话终止易受攻击
一些应用程序并不执行退出功能,这就给截获应用程序的令牌提供了可能。
5) 客户端暴露在令牌劫持风险之中
6) 宽泛的cookie范围
把cookie的作用于设置的过大或者不在正确的域中。
四. 保证会话管理的安全
1) 生成强大的令牌:使用数据极其庞大的一组可能值,包含强大的伪随机源,确保令牌以无法预测的方式平均分布在可能值范围内。
2) 在整个生命周期保障令牌的安全:令牌只能通过HTTPS传送,绝不能在URL中传送令牌,执行退出功能,会话处于非活动状态一段时间后,应执行会话终止;应防止并行登陆;应尽可能限定应用程序胡话和cookie的域和路径范围。