会话管理疏忽引发的安全漏洞

492 阅读3分钟

1 会话劫持
会话劫持是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的。
具有认证功能的web应用,使用会话ID的会话管理机制,作为管理认证状态的主流方式。会话Id中记录客户端的Cookie等信息,服务器端会将会话ID与认证状态进行一对一匹配管理。
下面列举一些常见的获取会话ID的途径。
1 通过非正规生成方法推测会话ID
2 通过窃听或XSS攻击盗取会话ID
3 通过会话固定攻击(Session Fixation) 强行获取会话ID
案列:
下面以认证功能为列讲解会话劫持。这里的认证功能通过会话管理机制,会将成功认证的用户的会话ID(SID)保存在用户的浏览器Cookie中。

攻击者在得知该web网站存在可跨站攻击(XSS)的安全漏洞后,就设置好用javaScript 脚本调用document。cookie以窃取Cookie 信息的陷阱,一旦用户访问了该脚本,攻击者就会获取含有会话ID的Cookie。即可伪装成会话ID遭窃的用户,访问web网站。
2 会话固定攻击
会话固定攻击会强制用户使用攻击者指定的会话ID,属于被动攻击。
案列;
web 网站的认证功能会在认证前发布一个会话ID,若认证成功,就会在服务器内改变认证状态。

攻击者准备陷阱,先访问web网站拿到会话ID(SID=3sab2ie),此时会话ID在服务器上的记录仍是(未认证)的状态。(见步骤1~2)
攻击者设置好强制用户使用该会话ID的陷阱,并等待用户拿着这个会话ID前去认证。一旦用户触发陷阱并完成认证会话ID(SID=3sab2ie)
在服务器上的状态(用户A已经认证)就会被记录下来.(步骤3) 攻击者估计用户差不多已触发陷阱后,再利用之前这个会话ID访问网站。由于该会话ID目前已是(用户A认证的状态),于是攻击者作为用户A的身份顺利登录网站。(步骤4)
Session Adoption
Session Adoption 是指 PHP 或ASP.NET能够接受处理的未知会话ID的功能。
恶意使用该功能便可跳过会话固定攻击的准备阶段,从web 网站获得发行的会话ID的步骤。即攻击者可私自创建会话ID构成陷阱,中间件却误以为该会话ID是未知会话ID 而接受。
3 跨站点请求伪造
跨站点请求伪造(CSRF)攻击是指攻击者通过设计好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息的某些状态更新,属于被动攻击。
跨站点请求伪造可能会造成以下等影响:
1 利用已通过认证的用户权限更新设备信息等
2 利用已通过认证的用户权限购买商品
3 利用已通过认证的用户权限 发表评论
案例

在该留言板系统上,受害者用户A是已经认证的状态。它的浏览器中的Cookie持有已认证的会话ID(步骤1)
攻击者一旦设置好用户访问,即会发送在留言板上的非主观行为产生的评论的留言陷阱。用户A的浏览器执行完陷阱中的请求后,留言板上也就会留下那条评论(步骤2)
触发陷阱之际,如果A用过户尚未通过认证,则无法利用A的身份权限在留言板上发表内容。

更多免费技术资料可关注:annalin1203