您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 招标投标 > 01CSRF基础与进阶
CSRF基础与进阶王朋涛深信服北京安全团队1.CSRF简介2.CSRF实例讲解3.CSRF真实案例4.CSRF进阶5.探求本质——CSRF深入解析6.CSRF防御7.CSRF与XSS8.总结培训提纲CSRF简介什么是CSRF?•CSRF(Cross-siteRequestForgery),中文名称:跨站点请求伪造,也被称为:OneClickAttack/SessionRiding,缩写为:CSRF/XSRF;•CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度Hi......而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。CSRF简介一句话概括CSRF:•攻击者盗用(伪造)了受害者的身份,以受害者的名义发送恶意请求,而这种恶意请求在服务端看起来只不过是正常请求。CSRF简介CSRF能做什么:•以受害者名义发送邮件,发消息,盗取受害者的账号,甚至购买商品,虚拟货币转账,修改受害者的网络配置(比如修改路由器DNS、重置路由器密码)......造成的问题包括:个人隐私泄露、机密资料泄露、用户甚至企业的财产安全;•一句话概括CSRF的危害:盗用受害者身份,受害者能做什么,攻击者就能以受害者的身份做什么。CSRF简介一张图了解CSRF攻击过程:CSRF简介Web(A)(Trusted)Web(B)(Hacked)BrowserUserC1.浏览并登录信任网站A2.验证通过,在用户C处产生A的Cookie3.用户在没有退出A的情况下,访问危险网站B4.B要求访问第三方站点A,发出一个请求request5.根据B在4的请求,浏览器带着2处产生的Cookie访问ACSRF攻击满足的【必要】条件:•用户C登录受信任网站A,并在本地生成Cookie;•在不登出A的情况下,访问危险网站B。CSRF简介CSRF实例讲解用虚拟的银行转账操作的例子演示CSRF的攻击过程:•银行网站A,它以GET请求来完成银行转账的操作,如:=11&money=1000(当然真实的银行网站不会这样做);•危险网站B,它里面有一段HTML的代码如下:CSRF实例讲解用虚拟的银行转账操作的例子演示CSRF的攻击过程:•用户C先登录银行网站A(A网站会在浏览器本地生成Cookie);•用户C不关闭A,新开一个浏览器标签页紧接着再访问危险网站B(网站B中加载的图片会向网站A发送一个转账请求,这个请求带着银行网站A的Cookie);•用户C的1000元钱在C不知情的情况下被转到了黑客的账户中。CSRF实例讲解为什么会这样?•银行网站A违反了HTTP规范,使用GET请求更新资源;•在访问危险网站B的之前,你已经登录了银行网站A,A网站在与浏览器的会话中生成了Cookie;•B中的img以GET的方式请求银行网站A(是一个转账请求,并附带着A的Cookie);•银行网站A收到请求后,认为这是一个更新资源操作(转账操作),所以就立刻进行转账操作。CSRF实例讲解为了杜绝上面的问题,银行决定改用POST请求完成转账操作:•银行网站A将前端的转账Web表单改成如下形式:CSRF实例讲解为了杜绝上面的问题,银行决定改用POST请求完成转账操作:•银行网站A的后端PHP实现,如下:CSRF实例讲解而恶意网页B,仍然只是那一条HTML代码:•带恶意img标签的HTML代码:CSRF实例讲解重复之前的操作过程:•先登录银行网站A;•不关闭网站A,打开新的标签页访问网页B;1000元又不翼而飞!CSRF实例讲解为什么?•银行后台使用了PHP的$_REQUEST去获取请求的数据;•而$_REQUEST既可以获取GET请求的数据,也可以获取POST请求的数据;•后台处理程序无法区分这到底是GET请求的数据还是POST请求的数据,所以用GET请求的数据发到银行网站A的后台,数据一样被视为正常的。CSRF实例讲解怎么办?•在PHP中,可以使用$_GET和$_POST分别获取GET请求和POST请求的数据;•经过前面的惨痛教训,银行网站A决定把后端PHP获取数据的方式也强制改为$_POST,如下:CSRF实例讲解然而恶意网页B,也随着A的改动而改了成用POST发送数据的方式:CSRF实例讲解结果?•如果用户C还是按照前面的流程依次访问A和B,结果仍会是账户莫名其妙地少1000元!CSRF实例讲解CSRF真实案例昵图网某处CSRF可设置用户支付密码:CSRF真实案例昵图网某处CSRF可设置用户支付密码:CSRF真实案例暴走漫画刷金币CSRF漏洞:CSRF真实案例暴走漫画刷金币CSRF漏洞:CSRF真实案例PHPSHE关键位置CSRF增加管理员账号:CSRF真实案例PHPSHE关键位置CSRF增加管理员账号:CSRF真实案例TP-Link家用路由器CSRF致DNS劫持:CSRF真实案例CSRF进阶浏览器的Cookie策略:•前面的例子之所以成功,是因为浏览器访问恶意网页B时,在B的域内向银行网站A发送请求,附带了A的Cookie;•浏览器持有的Cookie分两种:“SessionCookie”(临时Cookie)和“第三方Cookie”(本地Cookie);•“第三方Cookie”被服务器设置了Expire时间,到了指定时间才会失效;•“SessionCookie”没有指定失效时间,浏览器关闭就会失效。CSRF进阶浏览器的Cookie策略:•不同的浏览器对待这两种不同的Cookie,有不同的安全策略:-IE6、IE7、IE8、Safari处于安全考虑,默认禁止在img、iframe、script、link等标签中发送第三方Cookie;-Firefox2、Firefox3、Opera、Chrome、Android等浏览器默认允许在以上标签中发送第三方Cookie;-但上面的浏览器都会发送SessionCookie。CSRF进阶P3P头:•W3C制定的一项关于用户隐私的标准;•无论任何浏览器类型,P3P头可以指定允许在危险标签中发送“第三方Cookie”CSRF进阶CSRF蠕虫:•CSRF攻击方式的终极形式:自我复制、迅速传播;•2008年百度Hi的CSRF蠕虫:•漏洞出现在百度用户中心发送短消息功能中:•只需要指定sn参数为发送消息的用户,co参数为消息内容,就可以成功发送短消息。CSRF进阶CSRF蠕虫:•如何成为蠕虫?•此处配合了另外一个漏洞:百度空间的好友功能数据是使用json格式实现的,此接口没有做任何的安全限制,只需将un参数设定为任意用户账号,就可以获得指定用户的百度好友数据,如下CSRF进阶CSRF蠕虫:•蠕虫思路:•将上面两个漏洞结合起来:让一个百度用户查看恶意页面后,将会给他的所有好友发送一条短消息,消息中包含一张图片,图片地址再次指向CSRF漏洞利用的恶意页面,这些好友再次将同样的消息发送给他们所有好友•蠕虫得以呈指数方式传播。CSRF进阶CSRF深入解析本质是什么?•由上面的原理简介和案例解析可知:CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的;•再深入一点,其本质原因是重要操作的所有参数都可以被攻击者猜测到。CSRF深入解析CSRF防御验证码•验证码被认为是对抗CSRF攻击【最简洁有效】的防御方法;CSRF防御RefererCheck(请求来源检查)•检查HTTP请求头部的Referer字段,该字段标明请求来源URLCSRF防御AntiCSRFToken•CSRF的本质是:重要操作的所有参数都可以被攻击者猜测到。•最容易想到的,【防猜测】的措施?加密!=blank_id&count=1000=md5(salt+blank_id)&count=1000CSRF防御AntiCSRFToken•【防猜测】的改进方案:随机Token(令牌)=blank_id&count=1000=blank_id&count=1000&token=[random(seed)]CSRF防御AntiCSRFToken注意事项•真随机•Token泄露:直接在URL后面附带Token,可能会造成Token泄露•XSS攻击也可以获取到Token的值CSRF防御CSRF与XSSCSRF的防御方案仅用于对抗CSRF攻击•但如果网站还同时存在XSS漏洞,则CSRF的防御措施就形同虚设;•XSS可以模拟浏览器执行大部分操作,在XSS攻击下,攻击者可以请求页面后,读出页面内容里的Token,然后再构造一个合法请求,这个过程称为——XSRF;•XSS带来的问题,应由XSS的防御方案予以解决。•安全防御的体系相辅相成,缺一不可。CSRF与XSS总结总结•概述CSRF攻击基本原理•示例演示CSRF攻击•展示真实的CSRF攻击案例•CSRF高级攻击技术•CSRF防御
本文标题:01CSRF基础与进阶
链接地址:https://www.777doc.com/doc-6684290 .html