2015年09月22日08:21新浪手機
微博 我有話說 收藏本文
本文來自:太平洋電腦網
一向以封閉安全著稱的蘋果iOS系統(tǒng),這次終于因為XcodeGhost事件在中國栽了一個大跟頭。要知道在這之前,蘋果的AppStore中只發(fā)現(xiàn)過5款惡意應用,但這次的規(guī)模顯然比以往發(fā)現(xiàn)的加起來還多幾十倍。究竟蘋果做錯了什么,才導致了這次的 XcodeGhost事件?
如果要厘清事情的本質,我們得先了解一種叫做源碼病毒的東西。
源碼病毒Ken Thompson Hack
在1984年的圖靈獎頒獎儀式上,Unix之父Ken Thompson發(fā)表了一篇名為“對深信不疑之信任的反思”(Reflections On Trusting Trust)的演說,現(xiàn)在你還可以在《前20年的ACM圖靈獎演說集》這本書中找到它。
Ken Thompson Hack源碼病毒圖示
Ken Thompson描述了這樣一種場景,假如黑客在某個編譯器中加入了兩段代碼:
第一段代碼:讓編譯器編譯出的程序都自然攜帶后門,黑客可以使用這些后門來做壞事。
第二段代碼:如果編譯器遇到疑似另一個編譯器的源代碼時,就加入第一段代碼和第二段代碼本身。
這樣一來,世界上所有由該編譯器編譯而成的程序都會自帶后門。假如你現(xiàn)在已經知道了該編譯器生成的程序都有后門,并且由于某些原因你只能使用這個編譯器 時,你可能會希望利用這個編譯器反編譯自身,然后刪掉讓生成程序具有后門的代碼,這樣就能夠拿回一個“干凈”的編譯器了。
但是第二段代碼正是為了這一操作而生。當你執(zhí)行上一個操作時,“干凈”的編譯器又會重新染上第一段代碼。如果你依然只采用這個編譯器作為工具,那么你永遠都無法打開這個死結。
源碼病毒泛濫的后果
如果這樣一種攜帶源碼病毒的編譯器成為了絕大多數人使用的工具,那么這種病毒就能夠悄無聲息地入侵所有使用該工具編譯成的操作系統(tǒng)和應用軟件。
這些軟件可以是QQ、微信等溝通工具,也可以是網銀、
支付寶等金融工具,又或是微軟Windows、蘋果OS X等操作系統(tǒng)。如果你想用殺毒軟件、debugger程序或新編譯程序等來制止它,你怎么知道這些程序不是由該源碼病毒的編譯器寫成的呢?
這種源碼病毒發(fā)展到最后,就是整個數字世界會不可抑制地被完全“污染”。如果你想找一片凈土?或許你只有用最原始的機器碼,重新造一個編譯器來構造新的數字世界了。
Ken Thompson想告訴我們什么?
Ken Thompson
這篇《對深信不疑之信任的反思》,實際上表達了Ken Thompson對當時軟件產業(yè)的擔憂。
我們是否對并非完全由我們書寫而成的代碼太過信任?
我們是否應該對編譯器等“代碼生成器”抱有一定疑問?
我如何確認我的編譯器是“正常的”而不是“加入了源碼病毒”?
這些問題在32年后的今天已經有了解決方案,譬如校驗數字簽名或是哈希值。但Ken Thompson這種抱有懷疑的態(tài)度,仍舊值得每一個程序員學習。
關于XcodeGhost
XcodeGhost就是類似Ken Thompson所說的那種源碼病毒。當然,它并不具備Ken Thompson Hack的第二段代碼特征,無法感染編譯器。
特定版Xcode編譯器被加入了XcodeGhost
但是XcodeGhost作者依然能夠通過這個被修改過的XCode,讓其編譯出的iOS應用都被插入了后門。(Ken Thompson Hack的第一段代碼)
由于Xcode幾乎是生成iOS應用的唯一工具,而且蘋果官方的下載源又因為眾所周知的原因下載極慢,再加上國內碼農在墻內生活養(yǎng)成的用百度搜索來下載各類應用工具的習慣,一起導致了這半年內該病毒的廣泛傳播。
XcodeGhost能干什么?
目前已經確認的XcodeGhost后門有如下兩個功能:
1.受感染App打開后會不斷向特定服務器發(fā)送收集到的系統(tǒng)信息,包括:時間,應用名稱及版本,本地語言,操作系統(tǒng)版本,設備類型,國家碼等等。
2.受感染App在受感染iPhone中彈出內容由服務器控制的對話框窗口。
XcodeGhost作者通過第一個功能獲得的信息來精確區(qū)分不同iPhone用戶,然后再通過第二個功能實現(xiàn)進一步地攻擊:可能是偽裝成內購頁面來套取你的iCloud密碼;也可能是偽裝成支付失敗,請到某某支付寶付款的字樣,來獲得金錢等等。
當然,這種攻擊也是非常好識破的。比如XcodeGhost在偽裝內購彈窗時,你會發(fā)現(xiàn)它需要你輸入Apple ID。但用過蘋果的朋友都知道,Apple ID在iOS系統(tǒng)內部屬于優(yōu)先級很高的信息,內購彈窗一般都會默認填好Apple ID賬號(除了AppStore之外),只需要你輸入密碼。所以一旦你發(fā)現(xiàn)需要手動輸入Apple ID賬號的應用彈窗,基本可以確定就是XcodeGhost的釣魚行為了。
Apple公司這次有多大責任?
可能絕大多數人都會責怪蘋果:不管你的護城河建得多么堅固,不管你的應用審核多么嚴格,不管你的硬件多么“自足”,最終你還是被攻破了呀。
對,這次XcodeGhost事件可以算是蘋果有史以來最大的安全事件。但蘋果這回確實比較“倒霉”,因為遇上了源碼病毒。
蘋果不可能逆向分析每一個應用
首先對于蘋果的AppStore而言,這種病毒是無法檢測出來的。為什么?蘋果的應用商店審核只能確定App調用了哪些系統(tǒng)API,而這些被允許調用的API都是經過了重重檢驗,基本不可能跳出系統(tǒng)沙盒去獲取非法信息。
但除此之外,蘋果根本無法通過有限的人力物力去靜態(tài)分析一個App到底能夠怎么彈窗,就算你給了它們源代碼也做不到。(如果可以的話,那就表示蘋果每上架一款程序,都會將其代碼整個逆向分析一遍,這個根本不可能做到)
那么有人會問了,這種攻擊難道就無法避免了?確實,這種程度上的安全我們只能寄托于開發(fā)者的素質,但顯然系統(tǒng)自身的沙盒隔離也是非常關鍵的一點。
譬如iOS開發(fā)者就將Apple ID設計成了很高優(yōu)先級的東西,病毒制造者無法獲取到該信息,那么他的釣魚彈窗就和真實的內購彈窗區(qū)別開來了,這就是系統(tǒng)沙盒的作用所在。
誠然,蘋果這回就算沒有問題也是有問題。但追究其XcodeGhost傳播的根源,國內封閉的網絡環(huán)境確實是主要因素。(當然,開發(fā)人員“不干凈不校驗”的習慣也存在問題)
現(xiàn)在我們該如何做?
說到這里,其實大家也發(fā)現(xiàn)這次的“大危機”其實并沒有我們想象中那么嚴重。
首先,XcodeGhost大面積獲取的信息都是常規(guī)信息,并不包含你個人的隱私資料。其次,包括各種彈窗在內的釣魚攻擊,其實也比較好分辨,你只要看哪個需要你輸入Apple ID就行了。
最后,筆者也忠告,假如你最近曾經遇到過在第三方應用輸入Apple ID的事情,請馬上修改。假如你現(xiàn)在不記得了,也請馬上修改,這樣比較保險。