XCode病毒事件之XCodeGhost樣本分析
0x00 序
事情的起因是@唐巧_boy在微博上發了一條微博說到:一個朋友告訴我他們通過在非官方渠道下載的 Xcode 編譯出來的 app 被注入了第三方的代碼,會向一個網站上傳數據,目前已知兩個知名的 App 被注入。

隨后很多留言的小伙伴們紛紛表示中招,@誰敢亂說話表示:”還是不能相信迅雷,我是把官網上的下載URL復制到迅雷里下載的,還是中招了。我說一下:有問題的Xcode6.4.dmg的sha1是:a836d8fa0fce198e061b7b38b826178b44c053a8,官方正確的是:672e3dcb7727fc6db071e5a8528b70aa03900bb0,大家一定要校驗。”另外還有一位小伙伴表示他是在百度網盤上下載的,也中招了。
0x01 樣本分析
在@瘋狗 @longye的幫助下,@JoeyBlue_ 為我們提供了病毒樣本:CoreService庫文件,因為用帶這個庫的Xcode編譯出的app都會中毒,所以我們給這個樣本起名為:XCodeGhost。CoreService是在”/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/Library/Frameworks/CoreServices.framework/”目錄下發現的,這個樣本的基本信息如下:
12345678910$shasum CoreService
f2961eda0a224c955fe8040340ad76ba55909ad5 CoreService
$file CoreService
CoreService: Mach-O universal binary with 5 architectures
CoreService (for architecture i386): Mach-O object i386
CoreService (for architecture x86_64): Mach-O 64-bit object x86_64
CoreService (for architecture armv7): Mach-O object arm
CoreService (for architecture armv7s): Mach-O object arm
CoreService (for architecture arm64): Mach-O 64-bit object
用ida打開,發現樣本非常簡單,只有少量函數。主要的功能就是先收集一些iPhone和app的基本信息,包括:時間,bundle id(包名),應用名稱,系統版本,語言,國家等。如圖所示:

隨后會把這些信息上傳到 init.icloud-analysis.com。如圖所示:

http://init.icloud-analysis.com并不是apple 的官方網站,而是病毒作者所申請的仿冒網站,用來收集數據信息的。

目前該網站的服務器已經關閉,用whois查詢服務器信息也沒有太多可以挖掘的地方。這說明病毒作者是個老手,并且非常小心,在代碼和服務器上都沒有留下什么痕跡,所以不排除以后還會繼續做作案的可能。
0x02 檢測方法
為了防止app被插入惡意庫文件,開發者除了檢測”/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs” 目錄下是否有可疑的framework文件之外,還應該檢測一下Target->Build Setting->Search Paths->Framework Search Paths中的設置。看看是否有可疑的frameworks混雜其中:

另外因為最近iOS dylib病毒也十分泛濫,為了防止開發者中招,支付寶的小伙伴還提供了一個防止被dylib hook的小技巧:在Build Settings中找到“Other Linker Flags”在其中加上”-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null”即可。

最后的建議是:以后下載XCode編譯器盡可能使用官方渠道,以免app被打包進惡意的病毒庫。如果非要用非官方渠道,一定要在下載后校驗一下哈希值。
0x03 思考&總結
雖然XCodeGhost并沒有非常嚴重的惡意行為,但是這種病毒傳播方式在iOS上還是首次。也許這只是病毒作者試試水而已,可能隨后還會有更大的動作,請開發者務必要小心。這個病毒讓我想到了UNIX 之父 Ken Thompson 的圖靈獎演講 “Reflections of Trusting Trust”。他曾經假設可以實現了一個修改的 tcc,用它編譯 su login 能產生后門,用修改的tcc編譯“正版”的 tcc 代碼也能夠產生有著同樣后門的 tcc。也就是不論 bootstrap (用 tcc 編譯 tcc) 多少次,不論如何查看源碼都無法發現后門,真是細思恐極啊。
0x04 追加更新
1 很多開發者們擔心最近下載的Xcode 7也不安全。這里筆者沒有使用任何下載工具的情況在蘋果官網上下載了Xcode_7.dmg并計算了sha1的值。
http://adcdownload.apple.com/Developer_Tools/Xcode_7/Xcode_7.dmg
$ shasum Xcode_7.dmg
4afc067e5fc9266413c157167a123c8cdfdfb15e Xcode_7.dmg

所以如果在非App Store下載的各位開發者們可以用shasum校驗一下自己下載的Xcode 7是否是原版。
2 @FlowerCode同學通過分析流量發現病毒開發者的服務器是搭建在Amazon EC2的云上的。服務器已經關閉 。

3 根據palo alto networks公司爆料,被感染的知名App Store應用為”網易云音樂”!該app應用在AppStore上的最新版本2.8.3已經確認被感染。并且該應用的Xcode編譯版本為 6.4(6E35b),也就是XcodeGhost病毒所感染的那個版本。網易云音樂在AppStore上目前的狀態:


"網易云音樂"逆向后的函數列表,可以找到XcodeGhost所插入的函數:

受感染的"網易云音樂"app會把手機隱私信息發送到病毒作者的服務器”init.icloud-analysis.com”上面:

4 根據熱心網友舉報,投毒者網名為”coderfun”。他在各種iOS開發者論壇或者weibo后留言引誘iOS開發者下載有毒版本的Xcode。并且中毒的版本不止Xcode 6.4,還有6.1,6.2和6.3等等。



5 根據熱心網友提醒,我們在中信銀行信用卡的應用”動卡空間”中也發現了被插入的XcodeGhost惡意代碼,受感染的版本為3.4.4。


被插入的部分惡意代碼如下:
