menu-icon
anue logo
澳洲房產鉅亨號鉅亨買幣
search icon

外匯

XcodeGhost探秘:蘋果栽在了源碼病毒手裏

鉅亨網新聞中心 2015-09-22 09:26


本文來自:太平洋電腦網

一向以封閉安全著稱的蘋果iOS系統,這次終於因為XcodeGhost事件在中國栽了一個大跟頭。要知道在這之前,蘋果的AppStore中只發現過5款惡意應用,但這次的規模顯然比以往發現的加起來還多幾十倍。究竟蘋果做錯了什麼,才導致了這次的 XcodeGhost事件?


源碼病毒Ken Thompson Hack

在1984年的圖靈頒獎儀式上,Unix之父Ken Thompson發表了一篇名為“對深信不疑之信任的反思”(Reflections On Trusting Trust)的演,現在你還可以在《前20年的ACM圖靈演集》這本書中找到它。

Ken Thompson描述了這樣一種場景,假如黑客在某個編譯器中加入了兩段代碼:

第一段代碼:讓編譯器編譯出的程序都自然攜帶后門,黑客可以使用這些后門來做壞事。

第二段代碼:如果編譯器遇到疑似另一個編譯器的原始碼時,就加入第一段代碼和第二段代碼本身。

這樣一來,世界上所有由該編譯器編譯而成的程序都會自帶后門。假如你現在已經知道了該編譯器生成的程序都有后門,並且由於某些原因你只能使用這個編譯器 時,你可能會希望利用這個編譯器反編譯自身,然后刪掉讓生成程序具有后門的代碼,這樣就能夠拿回一個“乾淨”的編譯器了。

但是第二段代碼正是為了這一操作而生。當你執行上一個操作時,“乾淨”的編譯器又會重新染上第一段代碼。如果你依然只採用這個編譯器作為工具,那麼你永遠都無法打開這個死結。

源碼病毒泛濫的后果

如果這樣一種攜帶源碼病毒的編譯器成為了大多數人使用的工具,那麼這種病毒就能夠悄無聲息地入侵所有使用該工具編譯成的作業系統和應用軟件。

這些軟件可以是QQ、微信等溝通工具,也可以是網銀、支付寶等金融工具,又或是微軟Windows、蘋果OS X等作業系統。如果你想用殺毒軟件、debugger程序或新編譯程序等來制止它,你怎麼知道這些程序不是由該源碼病毒的編譯器寫成的呢?

這種源碼病毒發展到最后,就是整個數字世界會不可抑制地被完全“污染”。如果你想找一片凈土?或許你只有用最原始的機器碼,重新造一個編譯器來構造新的數字世界了。

Ken Thompson想告訴我們什麼?

這篇《對深信不疑之信任的反思》,實際上表達了Ken Thompson對當時軟件業的擔憂。

我們是否對並非完全由我們書寫而成的代碼太過信任?

我們是否應該對編譯器等“代碼生成器”抱有一定疑問?

我如何確認我的編譯器是“正常的”而不是“加入了源碼病毒”?

這些問題在32年后的今天已經有了解決方案,譬如校驗數字簽名或是哈希值。但Ken Thompson這種抱有懷疑的態度,仍舊值得每一個程序員學習。

關於XcodeGhost

XcodeGhost就是類似Ken Thompson所的那種源碼病毒。當然,它並不具備Ken Thompson Hack的第二段代碼特徵,無法感染編譯器。

但是XcodeGhost作者依然能夠通過這個被修改過的XCode,讓其編譯出的iOS應用都被插入了后門。(Ken Thompson Hack的第一段代碼)

由於Xcode几乎是生成iOS應用的唯一工具,而且蘋果官方的下載源又因為所周知的原因下載極慢,再加上國內碼農在墻內生活養成的用百度搜索來下載各類應用工具的習慣,一起導致了這半年內該病毒的廣泛傳播。

XcodeGhost能幹什麼?

目前已經確認的XcodeGhost后門有如下兩個功能:

1.受感染App打開后會不斷向特定伺服器發送收集到的系統信息,包括:時間,應用名稱及版本,本地語言,作業系統版本,設備類型,國家碼等等。

XcodeGhost作者通過第一個功能獲得的信息來精確區分不同iPhone用戶,然后再通過第二個功能實現進一步地攻擊:可能是裝成內購頁面來套取你的iCloud密碼;也可能是裝成支付失敗,請到某某支付寶付款的字樣,來獲得金錢等等。

當然,這種攻擊也是非常好識破的。比如XcodeGhost在裝內購彈窗時,你會發現它需要你輸入Apple ID。但用過蘋果的朋友都知道,Apple ID在iOS系統內部屬於優先順序很高的信息,內購彈窗一般都會預設填好Apple ID賬號(除了AppStore之外),只需要你輸入密碼。所以一旦你發現需要手動輸入Apple ID賬號的應用彈窗,基本可以確定就是XcodeGhost的釣魚行為了。

Apple公司這次有多大責任?

可能大多數人都會責怪蘋果:不管你的護城河建得多麼堅固,不管你的應用審核多麼嚴格,不管你的硬件多麼“自足”,最終你還是被攻破了呀。

對,這次XcodeGhost事件可以算是蘋果有史以來最大的安全事件。但蘋果這回確實比較“倒霉”,因為遇上了源碼病毒。

首先對於蘋果的AppStore而言,這種病毒是無法檢測出來的。為什麼?蘋果的應用商店審核只能確定App調用了哪些系統API,而這些被允許調用的API都是經過了重重檢驗,基本不可能跳出系統沙盒去獲取非法信息。

但除此之外,蘋果根本無法通過有限的人力物力去靜態分析一個App到底能夠怎麼彈窗,就算你給了它們原始碼也做不到。(如果可以的話,那就表示蘋果每上架一款程序,都會將其代碼整個逆向分析一遍,這個根本不可能做到)

那麼有人會問了,這種攻擊難道就無法避免了?確實,這種程度上的安全我們只能寄托於開發者的素質,但顯然系統自身的沙盒隔離也是非常關鍵的一點。

譬如iOS開發者就將Apple ID設計成了很高優先順序的東西,病毒製造者無法獲取到該信息,那麼他的釣魚彈窗就和真實的內購彈窗區別開來了,這就是系統沙盒的作用所在。

誠然,蘋果這回就算沒有問題也是有問題。但追究其XcodeGhost傳播的根源,國內封閉的網絡環境確實是主要因素。(當然,開發人員“不幹凈不校驗”的習慣也存在問題)

現在我們該如何做?

到這裏,其實大家也發現這次的“大危機”其實並沒有我們想象中那麼嚴重。

首先,XcodeGhost大面積獲取的信息都是常規信息,並不包含你個人的隱私資料。其次,包括各種彈窗在內的釣魚攻擊,其實也比較好分辨,你只要看哪個需要你輸入Apple ID就行了。

最后,筆者也忠告,假如你最近曾經遇到過在第三方應用輸入Apple ID的事情,請馬上修改。假如你現在不記得了,也請馬上修改,這樣比較保險。

文章標籤


Empty