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