Web会话安全测试 - 知乎
1、会话ID不可预测性
【要求】
会话ID必须采用安全随机算法(如SecureRandom)生成,并且强度不得低于256位(32字符),如采用Tomcat原生JSESSIONID
【描述】
密码与证书等认证手段,一般仅仅用于登录(Login)的过程。当登陆完成后,用户访问网站的页面,不可能每次浏览器请求页面时,都再使用密码认证一次。因此,当认证完成后,就需要替换一个对用户透明的凭证。这个凭证就是SessionID
【指导】
1、测试中可以通过重复登录6次,查看每次登录成功后的会话ID是否是随机生成
2、会话ID强度不得低于256位(32字符)
【判断标准】
1、控制台中jsessionid(sessionid)值长度大于等于32位
2、jsessionid(sessionid)参数无规律生成
2、防止会话固定
【要求】
在用户登录成功后,必须重新设置SESSIONID,避免使用登录前的SESSIONID
【描述】
会话固定攻击(session fixation attack)是利用应用系统在服务器的会话ID固定不变机制,借助他人用相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会话以成功冒充他人,造成会话固定攻击
【指导】
1、造成会话固定攻击的原因,主要是会话ID在登录后没有重新生成,测试中需要查看登录后会话ID生成情况,使用burpsuite对登录抓包
2、登录成功后重新生成会话ID,可以防止会话固定攻击
【判断标准】
登录前,和登录成功后Set-Cookie相同则存在会话固定漏洞
3、会话超时退出机制
【要求】
会话必须存在超时机制,当用户在一定时间内不操作,则需要主动注销会话,如管理后台系统一般要求30min,面向互联网用户的系统一般要求24H
【描述】
检查会话是否有超时退出机制,无会话超时机制存在用户信息泄露风险,A用户登录平台后若忘记注销登录,后面B用户访问改平台可以直接查看A用户的信息
【指导】
- 对已登录授权的系统页面使用Burp Suite工具进行请求数据截取,例如个人信息页面
2、在数据截取窗口中使用鼠标右击,在弹出菜单中选择"Send Repeater",将请求数据发送至Repeater模块中。
3、在此后30分钟内不再使用该授权会话与服务器进行交互访问。30分钟过后在 Repeater 模块相应授权数据信息页面中单击"Send"按钮,查看服务器返回数据
【判断标准】
业务会话,没有超时退出机制则存在问题
4、会话注销
【要求】
用户退出登录后,必须强制session/token过期,并清空服务端session属性标识
【描述】
在用户注销或退出登录系统时,系统应将客户端session/token等认证属性标识清空,如果未能清空,该认证会话持续有效,此时攻击者获得该认证会话会导致用户权限被盗取
【指导】
1、使用burpsuite抓取一个登录成功后的会话,并发送到repeater,登录状态重放服务器返回200OK
2、注销登录后,点击Send进行重放
【判断标准】
用户退出登录后,必须强制session/token过期。注销登录后,会话未失效可被正常调用则存在问题
5、限制并发登录检查
【要求】
1、 限制用户的并发登录数量,如管理类系统一般要求禁止并发登录,同一帐号同一时间只允许在同一设备登录
2、如果无法限制并发登录,建议提供并发登录提醒功能,提示用户当前帐号正在并发登录,如提供登录的IP、时间、地点等信息
【描述】
若不限制并发登录,很容易造成条件竞争漏洞,并且在登录状态可以感知账号密码泄露后,攻击者恶意登录
【指导】
1、使用不同设备(例如手机、电脑,设备间未授权)同一账号登录同一平台,查看登录情况
2、若平台有做限制并发登录,后登录的设备无法登录成功,登录成功的设备会提示异常登录,提醒用户账号密码可能泄露
【判断标准】
相同账户,可在不同未授权设备间登录,则存在问题