2015年09月22日08:21新浪手機(jī)
微博 我有話說 收藏本文
本文來自:太平洋電腦網(wǎng)
一向以封閉安全著稱的蘋果iOS系統(tǒng),這次終于因?yàn)閄codeGhost事件在中國(guó)栽了一個(gè)大跟頭。要知道在這之前,蘋果的AppStore中只發(fā)現(xiàn)過5款惡意應(yīng)用,但這次的規(guī)模顯然比以往發(fā)現(xiàn)的加起來還多幾十倍。究竟蘋果做錯(cuò)了什么,才導(dǎo)致了這次的 XcodeGhost事件?

如果要厘清事情的本質(zhì),我們得先了解一種叫做源碼病毒的東西。
源碼病毒Ken Thompson Hack
在1984年的圖靈獎(jiǎng)?lì)C獎(jiǎng)儀式上,Unix之父Ken Thompson發(fā)表了一篇名為“對(duì)深信不疑之信任的反思”(Reflections On Trusting Trust)的演說,現(xiàn)在你還可以在《前20年的ACM圖靈獎(jiǎng)演說集》這本書中找到它。

Ken Thompson Hack源碼病毒圖示
Ken Thompson描述了這樣一種場(chǎng)景,假如黑客在某個(gè)編譯器中加入了兩段代碼:
第一段代碼:讓編譯器編譯出的程序都自然攜帶后門,黑客可以使用這些后門來做壞事。
第二段代碼:如果編譯器遇到疑似另一個(gè)編譯器的源代碼時(shí),就加入第一段代碼和第二段代碼本身。
這樣一來,世界上所有由該編譯器編譯而成的程序都會(huì)自帶后門。假如你現(xiàn)在已經(jīng)知道了該編譯器生成的程序都有后門,并且由于某些原因你只能使用這個(gè)編譯器 時(shí),你可能會(huì)希望利用這個(gè)編譯器反編譯自身,然后刪掉讓生成程序具有后門的代碼,這樣就能夠拿回一個(gè)“干凈”的編譯器了。
但是第二段代碼正是為了這一操作而生。當(dāng)你執(zhí)行上一個(gè)操作時(shí),“干凈”的編譯器又會(huì)重新染上第一段代碼。如果你依然只采用這個(gè)編譯器作為工具,那么你永遠(yuǎn)都無法打開這個(gè)死結(jié)。
源碼病毒泛濫的后果
如果這樣一種攜帶源碼病毒的編譯器成為了絕大多數(shù)人使用的工具,那么這種病毒就能夠悄無聲息地入侵所有使用該工具編譯成的操作系統(tǒng)和應(yīng)用軟件。

這些軟件可以是QQ、微信等溝通工具,也可以是網(wǎng)銀、
支付寶等金融工具,又或是微軟Windows、蘋果OS X等操作系統(tǒng)。如果你想用殺毒軟件、debugger程序或新編譯程序等來制止它,你怎么知道這些程序不是由該源碼病毒的編譯器寫成的呢?
這種源碼病毒發(fā)展到最后,就是整個(gè)數(shù)字世界會(huì)不可抑制地被完全“污染”。如果你想找一片凈土?或許你只有用最原始的機(jī)器碼,重新造一個(gè)編譯器來構(gòu)造新的數(shù)字世界了。
Ken Thompson想告訴我們什么?

Ken Thompson
這篇《對(duì)深信不疑之信任的反思》,實(shí)際上表達(dá)了Ken Thompson對(duì)當(dāng)時(shí)軟件產(chǎn)業(yè)的擔(dān)憂。
我們是否對(duì)并非完全由我們書寫而成的代碼太過信任?
我們是否應(yīng)該對(duì)編譯器等“代碼生成器”抱有一定疑問?
我如何確認(rèn)我的編譯器是“正常的”而不是“加入了源碼病毒”?
這些問題在32年后的今天已經(jīng)有了解決方案,譬如校驗(yàn)數(shù)字簽名或是哈希值。但Ken Thompson這種抱有懷疑的態(tài)度,仍舊值得每一個(gè)程序員學(xué)習(xí)。
關(guān)于XcodeGhost
XcodeGhost就是類似Ken Thompson所說的那種源碼病毒。當(dāng)然,它并不具備Ken Thompson Hack的第二段代碼特征,無法感染編譯器。

特定版Xcode編譯器被加入了XcodeGhost
但是XcodeGhost作者依然能夠通過這個(gè)被修改過的XCode,讓其編譯出的iOS應(yīng)用都被插入了后門。(Ken Thompson Hack的第一段代碼)
由于Xcode幾乎是生成iOS應(yīng)用的唯一工具,而且蘋果官方的下載源又因?yàn)楸娝苤脑蛳螺d極慢,再加上國(guó)內(nèi)碼農(nóng)在墻內(nèi)生活養(yǎng)成的用百度搜索來下載各類應(yīng)用工具的習(xí)慣,一起導(dǎo)致了這半年內(nèi)該病毒的廣泛傳播。
XcodeGhost能干什么?
目前已經(jīng)確認(rèn)的XcodeGhost后門有如下兩個(gè)功能:
1.受感染App打開后會(huì)不斷向特定服務(wù)器發(fā)送收集到的系統(tǒng)信息,包括:時(shí)間,應(yīng)用名稱及版本,本地語(yǔ)言,操作系統(tǒng)版本,設(shè)備類型,國(guó)家碼等等。

2.受感染App在受感染iPhone中彈出內(nèi)容由服務(wù)器控制的對(duì)話框窗口。
XcodeGhost作者通過第一個(gè)功能獲得的信息來精確區(qū)分不同iPhone用戶,然后再通過第二個(gè)功能實(shí)現(xiàn)進(jìn)一步地攻擊:可能是偽裝成內(nèi)購(gòu)頁(yè)面來套取你的iCloud密碼;也可能是偽裝成支付失敗,請(qǐng)到某某支付寶付款的字樣,來獲得金錢等等。
當(dāng)然,這種攻擊也是非常好識(shí)破的。比如XcodeGhost在偽裝內(nèi)購(gòu)彈窗時(shí),你會(huì)發(fā)現(xiàn)它需要你輸入Apple ID。但用過蘋果的朋友都知道,Apple ID在iOS系統(tǒng)內(nèi)部屬于優(yōu)先級(jí)很高的信息,內(nèi)購(gòu)彈窗一般都會(huì)默認(rèn)填好Apple ID賬號(hào)(除了AppStore之外),只需要你輸入密碼。所以一旦你發(fā)現(xiàn)需要手動(dòng)輸入Apple ID賬號(hào)的應(yīng)用彈窗,基本可以確定就是XcodeGhost的釣魚行為了。
Apple公司這次有多大責(zé)任?
可能絕大多數(shù)人都會(huì)責(zé)怪蘋果:不管你的護(hù)城河建得多么堅(jiān)固,不管你的應(yīng)用審核多么嚴(yán)格,不管你的硬件多么“自足”,最終你還是被攻破了呀。
對(duì),這次XcodeGhost事件可以算是蘋果有史以來最大的安全事件。但蘋果這回確實(shí)比較“倒霉”,因?yàn)橛錾狭嗽创a病毒。

蘋果不可能逆向分析每一個(gè)應(yīng)用
首先對(duì)于蘋果的AppStore而言,這種病毒是無法檢測(cè)出來的。為什么?蘋果的應(yīng)用商店審核只能確定App調(diào)用了哪些系統(tǒng)API,而這些被允許調(diào)用的API都是經(jīng)過了重重檢驗(yàn),基本不可能跳出系統(tǒng)沙盒去獲取非法信息。
但除此之外,蘋果根本無法通過有限的人力物力去靜態(tài)分析一個(gè)App到底能夠怎么彈窗,就算你給了它們?cè)创a也做不到。(如果可以的話,那就表示蘋果每上架一款程序,都會(huì)將其代碼整個(gè)逆向分析一遍,這個(gè)根本不可能做到)
那么有人會(huì)問了,這種攻擊難道就無法避免了?確實(shí),這種程度上的安全我們只能寄托于開發(fā)者的素質(zhì),但顯然系統(tǒng)自身的沙盒隔離也是非常關(guān)鍵的一點(diǎn)。
譬如iOS開發(fā)者就將Apple ID設(shè)計(jì)成了很高優(yōu)先級(jí)的東西,病毒制造者無法獲取到該信息,那么他的釣魚彈窗就和真實(shí)的內(nèi)購(gòu)彈窗區(qū)別開來了,這就是系統(tǒng)沙盒的作用所在。
誠(chéng)然,蘋果這回就算沒有問題也是有問題。但追究其XcodeGhost傳播的根源,國(guó)內(nèi)封閉的網(wǎng)絡(luò)環(huán)境確實(shí)是主要因素。(當(dāng)然,開發(fā)人員“不干凈不校驗(yàn)”的習(xí)慣也存在問題)
現(xiàn)在我們?cè)撊绾巫觯?/b>
說到這里,其實(shí)大家也發(fā)現(xiàn)這次的“大危機(jī)”其實(shí)并沒有我們想象中那么嚴(yán)重。
首先,XcodeGhost大面積獲取的信息都是常規(guī)信息,并不包含你個(gè)人的隱私資料。其次,包括各種彈窗在內(nèi)的釣魚攻擊,其實(shí)也比較好分辨,你只要看哪個(gè)需要你輸入Apple ID就行了。
最后,筆者也忠告,假如你最近曾經(jīng)遇到過在第三方應(yīng)用輸入Apple ID的事情,請(qǐng)馬上修改。假如你現(xiàn)在不記得了,也請(qǐng)馬上修改,這樣比較保險(xiǎn)。