總結(jié)Twitter蠕蟲(chóng)事件 學(xué)習(xí)五條安全經(jīng)驗(yàn)
2010年8月14日,一名來(lái)自日本的軟件開(kāi)發(fā)人員正人鬼怒川報(bào)告在推特的自動(dòng)網(wǎng)址鏈接功能中存在腳本漏洞。根據(jù)當(dāng)時(shí)的報(bào)告,推特修復(fù)了這一問(wèn)題,但在九月份服務(wù)升級(jí)后,該問(wèn)題似乎又出現(xiàn)了。
綜合測(cè)試覆蓋率是開(kāi)發(fā)人員用來(lái)確保代碼質(zhì)量的一種措施。這就意味著在測(cè)試驅(qū)動(dòng)開(kāi)發(fā)過(guò)程中,程序員必須在開(kāi)始編寫(xiě)代碼之前就建立好測(cè)試模式,然后才能編寫(xiě)代碼來(lái)滿足測(cè)試的要求。在實(shí)際工作中,不那么極端的測(cè)試覆蓋率可能更常見(jiàn),對(duì)于具體的開(kāi)發(fā)項(xiàng)目來(lái)說(shuō),它們的效果或許更好。而對(duì)于推特代碼庫(kù)維護(hù)工作之類的重大項(xiàng)目來(lái)說(shuō),至少應(yīng)用某些類型的測(cè)試覆蓋措施是很重要的,尤其是在進(jìn)行回歸測(cè)試和對(duì)新代碼進(jìn)行檢查以防止重新出現(xiàn)以前修復(fù)過(guò)的錯(cuò)誤時(shí)。
通常情況下,以前的錯(cuò)誤再次出現(xiàn)說(shuō)明在版本控制方面的管理非常不到位。對(duì)于版本控制系統(tǒng)來(lái)說(shuō),防止以前的錯(cuò)誤重新出現(xiàn)是最基本的功能。對(duì)于那些不了解其作用的人來(lái)說(shuō),版本控制軟件就象一種經(jīng)過(guò)高度優(yōu)化的備份措施,可以在軟件開(kāi)發(fā)過(guò)程中進(jìn)行消除可能導(dǎo)致問(wèn)題出現(xiàn)的更新返回到原來(lái)版本,保證項(xiàng)目中的所有開(kāi)發(fā)人員都了解最新的情況,合并不同獨(dú)立分支開(kāi)發(fā)導(dǎo)致的變化以及對(duì)補(bǔ)丁進(jìn)行管理之類的工作。如果新代碼與舊代碼的合并方式不正確,就可能出現(xiàn)不同步的問(wèn)題,從而導(dǎo)致以前的補(bǔ)丁出現(xiàn)問(wèn)題,或者在版本控制過(guò)程中出現(xiàn)管理不善的情況,或者由于采用的是人工而不是自動(dòng)化方式對(duì)版本進(jìn)行控制,以前修復(fù)過(guò)的錯(cuò)誤都可能很容易被重新引入新代碼中。
鬼怒川發(fā)現(xiàn)同樣的錯(cuò)誤再次出現(xiàn),于是就開(kāi)發(fā)了一個(gè)概念工具,它可以將“tweets”或者推特信息以彩虹色顯示出來(lái)。當(dāng)時(shí),他沒(méi)有意識(shí)到這會(huì)成為嚴(yán)重的缺陷,但在其它人也了解到這一漏洞后,他們也開(kāi)始利用相應(yīng)模式了。不久以后,就出現(xiàn)了tweets開(kāi)始自動(dòng)回復(fù)任何將鼠標(biāo)移動(dòng)到鏈接上的用戶的情況。它從一個(gè)簡(jiǎn)單的搞怪行為變成了病毒。很快,該漏洞已經(jīng)進(jìn)化到可以感應(yīng)鼠標(biāo)在瀏覽器網(wǎng)頁(yè)內(nèi)的全部活動(dòng)了,現(xiàn)在,只要在瀏覽器窗口內(nèi)出現(xiàn)鼠標(biāo)就可能被病毒利用。
由于該病毒是直接針對(duì)推特網(wǎng)站處理網(wǎng)絡(luò)地址的方式,所以并沒(méi)有影響到RSS速遞、第三方客戶端以及利用其它方式而不是推特標(biāo)準(zhǔn)網(wǎng)絡(luò)界面閱讀和發(fā)送tweets信息的應(yīng)用。
從這起事件中,我們應(yīng)當(dāng)?shù)玫綆c(diǎn)很重要的教訓(xùn):
1、對(duì)所有輸入信息都要進(jìn)行審核,在其它條件相同的情況下,堅(jiān)持提供審核模式已經(jīng)被證明總是有效的。
2、對(duì)輸出信息進(jìn)行詳細(xì)檢查,以確保它不會(huì)以在網(wǎng)絡(luò)瀏覽器客戶端里鼠標(biāo)懸停效果之類令人驚訝的方式影響到最終用戶。
3、在軟件開(kāi)發(fā)過(guò)程中應(yīng)用版本控制措施,防止由于源代碼管理不善出現(xiàn)的潛在錯(cuò)誤。
4、采用自動(dòng)化測(cè)試套件,防止出現(xiàn)回歸和其它可能被開(kāi)發(fā)人員忽略的錯(cuò)誤。
5、不要低估已知漏洞可能帶來(lái)的影響,尤其是在它落入可能比你更危險(xiǎn)的人手里時(shí)間。
從自己犯下的錯(cuò)誤中學(xué)習(xí)經(jīng)驗(yàn),永遠(yuǎn)是一個(gè)好主意。而從其它人的錯(cuò)誤中學(xué)習(xí),則是更好的主意,這樣你自己就不會(huì)犯下同樣的錯(cuò)誤。
原文出處:http://security.zdnet.com.cn/security_zone/2011/0111/1985913.shtml