6月28日晚,新浪微博突然出现大范围“中毒”,微博用户中招后会自动向自己的粉丝发送含毒私信和微博,有人点击后会再次中毒,形成恶性循环。
大量用户自动发送“建党大业中穿帮的地方”、“个税起征点有望提到4000”、“郭美美事件的一些未注意到的细节”、“3D肉团团高清普通话版种子”等带链接的微博与私信,并自动关注一位名为hellosamy的用户。
一、事件的经过如下:
20:14,开始有大量带V的认证用户中招转发蠕虫
20:30,2kt.cn中的病毒页面无法访问
20:32,新浪微博中hellosamy用户无法访问
21:02,新浪漏洞修补完毕
二、 攻击分析
导致的原因是新浪名人堂部分XSS过滤不严所致:
下面的脚本被执行了:www.2kt.cn/images/t.js
一般来说这样的网址会被载入404页面,而这个网址的结果是脚本被执行了。据分析,攻击是反射型XSS, JS脚本不够安全导致的恶意脚本被载入页面。
攻击原理分析图
攻击者既能发私信,又能发微博,还能评论。而最难的地方,在于如何执行脚本,因为一旦那个页面可移植性脚本,其他的就好做了,简单分析原理:
1) 所有的攻击都是背后偷偷执行Ajax,通过仿造提交表单来完成发布微博等。
2) 但这也有一个问题,就是Ajax的跨域,由于Ajax的same domain的要求,无法跨域名执行脚本,厉害的地方在于,在微博中植入了这个脚本,这样就伪造了same domain,可以执行所有的Ajax。以上可以通过post()这个函数看出来,很简单的XHR调用,并没有使用cross domain的技巧。
3) 发微博:publish(),向weibo.com/mblog/publish.php通过Ajax提交数据,由于是需要登陆的,所以服务器端session还在,直接就可以成功发布微博。
4) 发私信:发私信多了一个步骤,获取粉丝的user id。其中的关键函数getappkey()可能就是从weibo.com/YOURID/follow页面扒取所有的user id,或者通过API获取到粉丝信息,获取之后然后通过一个for loop语句来发送。
三、 攻击者是谁?
病毒作者微博
通过whois查询,2kt.cn的域名拥有者信息如下:
Domain Name: 2kt.cn
Registrant Organization: 北京新网数码信息技术有限公司
Registrant Name: 张志
hellosamy这不是一个简单的昵称,samy是有名的通过SNS的XSS攻击传播的病毒,最初在mySpace上面进行传播。说明攻击者对于网络安全领域有一定的“功力”,攻击方式和之前的人人网的攻击有些区别,人人网是只要打开私信就会「中毒」,更严重。这次攻击如果打开私信是没问题的,如果警觉的话,不去点击那个链接,也不会中招。严重程度稍微低于人人网的攻击。