一向以封閉安全著稱的蘋果iOS系統,這次終于因為XcodeGhost事件在中國栽了一個大跟頭。要知道在這之前,蘋果的AppStore中只發現過5款惡意應用,但這次的規模顯然比以往發現的加起來還多幾十倍。究竟蘋果做錯了什么,才導致了這次的 XcodeGhost事件?
如果要厘清事情的本質,我們得先了解一種叫做源碼病毒的東西?! ≡创a病毒Ken Thompson Hack
在1984年的圖靈獎頒獎儀式上,Unix之父Ken Thompson發表了一篇名為“對深信不疑之信任的反思”(Reflections On Trusting Trust)的演說,現在你還可以在《前20年的ACM圖靈獎演說集》這本書中找到它。
Ken Thompson Hack源碼病毒圖示 Ken Thompson描述了這樣一種場景,假如黑客在某個編譯器中加入了兩段代碼:
第一段代碼:讓編譯器編譯出的程序都自然攜帶后門,黑客可以使用這些后門來做壞事。
第二段代碼:如果編譯器遇到疑似另一個編譯器的源代碼時,就加入第一段代碼和第二段代碼本身。
這樣一來,世界上所有由該編譯器編譯而成的程序都會自帶后門。假如你現在已經知道了該編譯器生成的程序都有后門,并且由于某些原因你只能使用這個編譯器 時,你可能會希望利用這個編譯器反編譯自身,然后刪掉讓生成程序具有后門的代碼,這樣就能夠拿回一個“干凈”的編譯器了。
但是第二段代碼正是為了這一操作而生。當你執行上一個操作時,“干凈”的編譯器又會重新染上第一段代碼。如果你依然只采用這個編譯器作為工具,那么你永遠都無法打開這個死結。
源碼病毒泛濫的后果
如果這樣一種攜帶源碼病毒的編譯器成為了絕大多數人使用的工具,那么這種病毒就能夠悄無聲息地入侵所有使用該工具編譯成的操作系統和應用軟件。
這些軟件可以是QQ、微信等溝通工具,也可以是網銀、支付寶等金融工具,又或是微軟Windows、蘋果OS X等操作系統。如果你想用殺毒軟件、debugger程序或新編譯程序等來制止它,你怎么知道這些程序不是由該源碼病毒的編譯器寫成的呢?
這種源碼病毒發展到最后,就是整個數字世界會不可抑制地被完全“污染”。如果你想找一片凈土?或許你只有用最原始的機器碼,重新造一個編譯器來構造新的數字世界了。
Ken Thompson想告訴我們什么?
Ken Thompson 這篇《對深信不疑之信任的反思》,實際上表達了Ken Thompson對當時軟件產業的擔憂。
我們是否對并非完全由我們書寫而成的代碼太過信任?
我們是否應該對編譯器等“代碼生成器”抱有一定疑問?
我如何確認我的編譯器是“正常的”而不是“加入了源碼病毒”?
這些問題在32年后的今天已經有了解決方案,譬如校驗數字簽名或是哈希值。但Ken Thompson這種抱有懷疑的態度,仍舊值得每一個程序員學習。
關于XcodeGhost
XcodeGhost就是類似Ken Thompson所說的那種源碼病毒。當然,它并不具備Ken Thompson Hack的第二段代碼特征,無法感染編譯器。
特定版Xcode編譯器被加入了XcodeGhost 但是XcodeGhost作者依然能夠通過這個被修改過的XCode,讓其編譯出的iOS應用都被插入了后門。(Ken Thompson Hack的第一段代碼)
由于Xcode幾乎是生成iOS應用的唯一工具,而且蘋果官方的下載源又因為眾所周知的原因下載極慢,再加上國內碼農在墻內生活養成的用百度搜索來下載各類應用工具的習慣,一起導致了這半年內該病毒的廣泛傳播。
XcodeGhost能干什么?
目前已經確認的XcodeGhost后門有如下兩個功能:
原文轉自:http://tech.sina.com.cn/mobile/n/n/2015-09-22/doc-ifxhytwp5513912.shtml