對(duì)于iOS設(shè)備上的運(yùn)行控制權(quán)的爭奪,在公司和越獄者之間一直存在著類似貓和老鼠的游,這次是老鼠贏了。星期一,一組自稱evad3rs的黑客發(fā)布了evasi0n,這是第一個(gè)能對(duì)越獄的程序,它也可以對(duì)iPad3、 mini和其他最新版本的iOS設(shè)備越獄,可以讓用戶在幾分鐘內(nèi)去掉他們的蘋果和的所有安裝限制。
據(jù)用于越獄的Cydia應(yīng)用程序商店管理員JayFreeman說,在evasi0n剛上線6小時(shí)內(nèi),保守估計(jì)這個(gè)破解程序已經(jīng)被使用至少80萬次,因?yàn)樵诘谝惶斓脑诰€越獄過程中,如海嘯般涌來的流量把它的數(shù)次踢下線,導(dǎo)致統(tǒng)計(jì)數(shù)據(jù)偏少。到星期四,這個(gè)數(shù)據(jù)已上升到170萬。
每次蘋果發(fā)布新設(shè)備和對(duì)移動(dòng)升級(jí),和iPad的防破解的措施就變得更復(fù)雜,破解所需的技巧也更高。Evasi0n也不例外,據(jù)evad3rs的4名開發(fā)者之一王大為(David Wang)說,這個(gè)程序至少利用了iOS代碼里5個(gè)不同的新的漏洞。(與NSA開發(fā)的用于破換伊朗核濃縮工廠的離心機(jī)的惡意軟件Stuxnet相比,evasi0n更復(fù)雜)
我請(qǐng)王大衛(wèi)詳細(xì)解釋evasi0n是如何工作的,下面就是他告訴我的:Evasi0n開始運(yùn)行ibimobiledevice,這是一個(gè)iTunes的替代品,用和蘋果的程序相同的協(xié)議來和iOS設(shè)備通訊。 利用這個(gè)工具,Evasi0n對(duì)iOS的手機(jī)備份系統(tǒng)的一個(gè)漏洞進(jìn)行溢出,來獲得正常情況下不能獲得的某些設(shè)置的讀寫權(quán)限,即獲得對(duì)一個(gè)指定設(shè)備時(shí)間區(qū)的文件的讀寫權(quán)限。越獄程序在時(shí)間區(qū)文件里插入一個(gè)符號(hào)鏈接,這是操作系統(tǒng)中從一個(gè)地方到另一個(gè)地方的快捷方式。
這里這個(gè)鏈接指向一個(gè)特定的socket套接字,即一個(gè)在不同程序間受限的通訊通道,王大衛(wèi)把它描述成一種“到莫斯科的紅色專線”。Evasi0n修改了這個(gè)socket套接字,允許程序和一個(gè)叫做Launch Daemon的程序通訊,Launch Daemon簡稱為launchd程序,是一個(gè)主要的進(jìn)程,在iOS設(shè)備啟動(dòng)時(shí)首先運(yùn)行,能加載需要超級(jí)用戶root權(quán)限的應(yīng)用程序,這一步超出了操作系統(tǒng)默認(rèn)賦予用戶的權(quán)限。當(dāng)iPhone或iPad的備份程序運(yùn)行時(shí),它自動(dòng)賦予了所有程序讀取時(shí)間區(qū)的文件,由于上面講的符號(hào)鏈接的技巧,這意味著可以運(yùn)行l(wèi)aunchd程序。
iOS還有代碼簽名的防護(hù)機(jī)制,正常情況下能防止惡意應(yīng)用程序運(yùn)行l(wèi)aunchd程序。這個(gè)限制要求設(shè)備上運(yùn)行的代碼都有蘋果公司的防止偽造的簽名的批準(zhǔn)。所以Evasi0n運(yùn)行了一個(gè)新的應(yīng)用程序,在代碼都有簽名或沒有簽名時(shí)顯示出來。但當(dāng)用戶被提示去點(diǎn)擊應(yīng)用的圖標(biāo)時(shí),它利用了一個(gè)叫做“shebang”的技巧,能執(zhí)行其他簽名應(yīng)用的代碼。 在這里,它執(zhí)行了launchd程序,這是由于前面的socker套接字改變而能執(zhí)行的唯一程序,并用它執(zhí)行了“remount”命令,來改變只讀的root根文件系統(tǒng)的內(nèi)存設(shè)置,使它變成可寫?,F(xiàn)在root的根文件系統(tǒng)已經(jīng)可寫了,evasi0n接著就更改了launchd.conf文件,更改了launchd程序的設(shè)置,使得evasi0n的所做的更改在launchd每次運(yùn)行時(shí)都能重復(fù)。這就使得越獄能持久化,用戶就不需要每次在設(shè)備啟動(dòng)都要通過USB線連接到電腦上,并重復(fù)運(yùn)行程序。
在經(jīng)過這么多的修改后,設(shè)備還沒越獄完成,除非在內(nèi)核層面移除限制,內(nèi)核層面是操作系統(tǒng)最底層的部分,它執(zhí)行代碼簽名檢查,通過AMFID進(jìn)程(蘋果手機(jī)文件集成進(jìn)程)防止未批準(zhǔn)的應(yīng)用運(yùn)行。所以evasi0n利用launchd程序使每次程序運(yùn)行時(shí)往AMFID里加載一個(gè)函數(shù)庫,這個(gè)函數(shù)庫互換了代碼簽名的檢查函數(shù),總是返回批準(zhǔn)的應(yīng)答。
王大衛(wèi)沒有精確的說明越獄過程的如何進(jìn)行AMFID欺騙的部分,他說蘋果公司自己能找出來。iOS還有另外一種ASLR(地址空間隨機(jī)分布)機(jī)制來防止黑客修改操作系統(tǒng)內(nèi)核的內(nèi)存空間。這種防護(hù)技術(shù)是指移動(dòng)設(shè)備在每次啟動(dòng)時(shí),把閃存空間里的代碼隨機(jī)移動(dòng)一定的位置,來阻礙其他人對(duì)代碼的特定部分的覆蓋寫入。
但evasi0n使用一種的例外向量的內(nèi)存定位技巧,來準(zhǔn)確找到內(nèi)存的某個(gè)位置,而ARM的例外向量在基于ARM的設(shè)備里很難隱藏。在應(yīng)用發(fā)生崩潰時(shí),這部分內(nèi)核處理程序報(bào)告內(nèi)存的發(fā)生位置。所以evasi0n模擬發(fā)生一次崩潰,然后檢查ARM的例外向量來發(fā)現(xiàn)崩潰在哪里發(fā)生,這提供了足夠的信息來影射出設(shè)備內(nèi)存中內(nèi)核的其他部分。一旦打敗了ASLR,越獄程序最后利用一個(gè)iOS的USB界面的漏洞,在內(nèi)核空間里向一個(gè)程序傳送一個(gè)地址,按王大衛(wèi)說的,系統(tǒng)“天真的期待用戶順利的把它傳回”。這讓evasi0n可以改寫內(nèi)核的任意部分。它改寫的第一個(gè)地方是內(nèi)核對(duì)自身代碼修改的限制部分–這樣黑客獲得了最高的權(quán)限。