一、概述
CSRF(Cross-site Request Forgery:跨站请求伪造),利用受害者尚未失效的身份信息(cookie/会话),创建恶意的web页面产生伪造请求,在受害者不知情的情况下,向服务器发送请求完成非法操作(增删改查用户信息或业务数据、转账、改密、评论、点关注、点赞等),对用户和企业的数据安全造成了非常严重的威胁。本文从攻击者的攻击手法进行研究,站在攻击者的角度研究CSRF攻击,并同步给出了有效的阻击方法,正所谓未知攻,焉知防。
CSRF攻击原理如图1所示。
图1 漏洞原理图
解读:
1>User访问存在CSRF漏洞的站点A
2>User登录成功,在用户浏览器中产生A的Cookie
3>User未登出网站A ,攻击者设法 (点击链接、xss方式) 让受害者访问自己的站点B
4>受害者中招访问了攻击者构造的站点B
5>攻击者带着User的Cookie发送伪造的请求给站点A(实现非法操作)
6>站点A检测到为User的Cookie信息便执行了请求
7>攻击者达到目的,一次CSRF攻击完成。
针对CSRF,一般的防护做法是在后端添加“Referer”和“token”限制。如图2、图3所示。
图2 添加Referer
图3 添加Token
以上两种传统的防御方法虽然能够在一定程度上防范CSRF攻击,但攻击者仍然有办法来绕过这些限制,对用户和企业的数据安全造成了非常严重的威胁。
二、CSRF的Bypass思路
CSRF Token Tracker 可以自动获取Csrf-token,对于一些有Csrf 限制的请求,它可以绕过该限制。实战攻防演
示如下:
1>安装CSRF Token Tracker
图4 Extender BApp Store-CSRF Token Tracker
自动获取Csrf-token,如图5、图6。
图5
图6 同步token
修改成功,如图7。
图7 修改密码成功
图8 请求包中的TOKEN自动更新可在Logger中查看
Note: 这种方法是最简单的,然而在如下场景并不适用。
②Define宏
1>现状:
CSRF Token Tracker 在有些情况下也无法自动更新获取CSRF-token。
图9 Response:无效的CSRF token
2>Bypass思路:
配置过程:
图10
图11 选择获取token的请求
图12 Response不再返回无效CsrfToken
三、阻击方法
除去以上token校验存在威胁的情况,还存在:
①token-置空令牌
原因:应用程序仅在token应用程序不为空的情况下检查token
Bypass:删除请求中的token令牌即可
②token-仅静态验证
原因:token令牌由静态和动态两部分组成,程序仅验证静态部分
Bypass: 删除动态部分,仅用静态部分绕过
③token-令牌易构造
原因:生成的token令牌过于简单有规律可循
Bypass:研究令牌的生成方式,构造令牌进行绕过
因此想要彻底阻击CSRF威胁需要使用双因子认证,缺点是用户体验不友好,所以在一些关键敏感操作上建议使用双因子认证来保护用户和企业的数据安全。