手機(jī)Root,一場輪回的密室逃脫
黑客的快感源于什么呢?
雖掘螻蟻之穴,卻蕩破千里之堤;麾下萬馬千軍,仍如入無人之境。
大抵如此。
2015年11月,在日本舉行的Pwn2Own Mobile 黑客大會(huì)上。龔廣面對一部Nexus 6手機(jī)。他輕輕點(diǎn)擊了一個(gè)網(wǎng)址,隨即一片沉靜,似乎什么都沒發(fā)生。然而短短片刻,桌面上突然出現(xiàn)了一個(gè)新的圖標(biāo)。原來,在電光火石間,系統(tǒng)已經(jīng)自動(dòng)從Google Play市場下載并且安裝了一個(gè)被他指定的App。這一切都靜靜地發(fā)生在水面之下,手機(jī)的主人根本無從發(fā)現(xiàn)。
現(xiàn)場短暫的沉默,繼以雷動(dòng)的掌聲,祝賀他優(yōu)雅地扒掉Android系統(tǒng)的底褲。
一個(gè)漏洞,優(yōu)雅地推倒Android
觀眾并不知道,這一系列流暢的進(jìn)攻,其實(shí)是龔廣的下策。他原本的計(jì)劃是通過相互配合的兩個(gè)漏洞,一舉拿下系統(tǒng)控制權(quán),讀出手機(jī)所連接的Wi-Fi密碼。
然而,無巧不成書。就在他動(dòng)身參加比賽的兩周前,谷歌發(fā)布了新的升級(jí)。閱讀升級(jí)日志之后,龔廣內(nèi)心一驚:本來準(zhǔn)備妥當(dāng)?shù)膬蓚€(gè)漏洞,其中一個(gè)看起來已經(jīng)被谷歌發(fā)現(xiàn)并且修復(fù)了。
他重演了一遍攻擊過程,果然失效。不過,作為江湖老手,一個(gè)優(yōu)雅的黑客,他也沒那么容易認(rèn)輸。在之前的研究中,他記得Google Play存在一個(gè)小的系統(tǒng)設(shè)計(jì)缺陷,于是用剩余的十多天時(shí)間重新寫攻擊代碼,最終在比賽開始之前一天完成了攻擊程序。這才有了前面發(fā)生的一切——僅僅使用一個(gè)漏洞就擊潰了 Android 系統(tǒng)的防線。
雖然這次攻擊看起來賞心悅目。但是龔廣表示,他的攻擊并沒有提取到系統(tǒng)的頂級(jí)權(quán)限,也就是“Root”。
密室逃脫,Root更像一種輪回
在Android系統(tǒng)安全中,Root就是皇冠上的明珠。如果能拿到它,就可以成為手機(jī)中的上帝,對所有的文件為所欲為,并且可以讀取手機(jī)主人的所有敏感信息。
雖說在日常生活中,我們普通人似乎都可以下載一個(gè)Root工具把自己的手機(jī)“干翻”,但是Root卻遠(yuǎn)比想象中艱難。龔廣告訴雷鋒網(wǎng),Root需要一連串漏洞(一般為3-4個(gè))的有效配合才可以實(shí)現(xiàn)。
如果打一個(gè)“優(yōu)雅”的比方,那大概就是:
黑客在制造一枚精確制導(dǎo)的導(dǎo)彈,穿過系統(tǒng)為進(jìn)攻者準(zhǔn)備的導(dǎo)彈防御系統(tǒng)——四道不同的關(guān)卡,最終準(zhǔn)確地?fù)糁袛橙说木栈ā?/p>
這四道關(guān)卡,就像四個(gè)暗箱。它們層層嵌套,每一個(gè)看上去都無懈可擊。而你想獲得自由,就必須沖破這四層枷鎖,少一個(gè)都不行。如果你愿意,就隨我變成一段復(fù)仇的代碼,享受一下鮮血四濺的樂趣吧。
故事馬上開始。
{反綁的繩索} 網(wǎng)頁腳本
手機(jī)的主人通過Chrome瀏覽器點(diǎn)擊了鏈接,于是我們成功地閃入了手機(jī)之中。但是,我們發(fā)現(xiàn):
自己不僅被困在Chrome這間宮殿當(dāng)中,還被反綁了手腳。
因?yàn)槲覀兗葲]有權(quán)限讀取Chrome之外的信息,也沒有權(quán)力對系統(tǒng)發(fā)號(hào)施令。
作為一個(gè)網(wǎng)頁腳本,我們最多有權(quán)調(diào)整一下網(wǎng)頁的布局、圖片的位置。顯然,作為一個(gè)刺客,這點(diǎn)權(quán)力是沒有卵用的。這個(gè)時(shí)候,我們突然發(fā)現(xiàn)了房間里的一張桌子,我們用桌角可以割開捆綁自己的繩子。
當(dāng)我們重新解放雙手的時(shí)候,我們已經(jīng)成功地利用了第一個(gè)漏洞。此時(shí)已經(jīng)沒有任何人可以阻擋我們從口袋里掏出“作案工具”了。
{無門的宮殿}Chrome
然而,我們的境況并沒有變得太好,因?yàn)檫@間叫做Chrome的宮殿是沒有門的。如果我們無法逃逸出去,將會(huì)困死在這里。
然而俗話說,上帝在關(guān)上一道門的時(shí)候,必定會(huì)打開一扇窗。天窗是宮殿里唯一和外界連通的渠道。這扇天窗顯然不是為了人進(jìn)出而設(shè)計(jì)的,而是為了房間內(nèi)外空氣流通(App內(nèi)外信息交互)之用。但是在我們眼里,它成為了一個(gè)絕好的漏洞。
我們用手中的工具,把屋里的家具改裝成了一把梯子,終于夠到天窗。此時(shí),我們完成了Root中的經(jīng)典動(dòng)作——沙箱逃逸。
{金色的鑰匙} 系統(tǒng)服務(wù)進(jìn)程權(quán)限
寶藏就在眼前的房間里,然而這個(gè)華麗的房間卻大門緊鎖。這扇大門擁有一個(gè)奇特的鎖,要想打開它,必須用找到一把金色的鑰匙:系統(tǒng)服務(wù)權(quán)限。
作為一個(gè)黑客,我當(dāng)然知道這把鑰匙藏在哪。只不過這把鑰匙被放在一個(gè)密碼箱中,一般人絕對沒有可能碰到。當(dāng)我成功地破解了密碼箱,拿到了金色鑰匙的一瞬間,我已經(jīng)成功利用了第三個(gè)漏洞。
推開門,我將要面對最終的水晶球——Android系統(tǒng)的內(nèi)核。
{迷之水晶} Linux 內(nèi)核
站在水晶球面前,我知道我們距離成功只有一步之遙。只要知道最終的咒語,我們就可以解開 Android 的秘密。水晶球向四周散射出耀眼的光芒,無數(shù)0和1交替閃爍在四周的墻壁上,這是Android系統(tǒng)Linux內(nèi)核的底層代碼。而我們要做的,就是在這數(shù)以億記的數(shù)字中,找到那一個(gè)微小的錯(cuò)誤。這個(gè)錯(cuò)誤可能是驅(qū)動(dòng)程序的漏洞,也可能是內(nèi)核本身的漏洞??傊?,它就是打開一切的咒語。
在審看了數(shù)萬行代碼之后,一個(gè)微小的錯(cuò)誤終究沒能逃脫我們的眼睛。
我們高聲喊出了最終的咒語,一道白光閃耀蒼穹。我們?nèi)俦家u,終于沖破了Android構(gòu)建的虛擬世界,霎那間回到了我們的天地。周遭景物依然熟悉,然而世界已經(jīng)日月新天。
這恰似輪回。
以上就是一次Root的全過程。當(dāng)我們完成了這個(gè)過程,就可以帶領(lǐng)千軍萬馬重新殺回手機(jī)之中。那時(shí)節(jié),將是金鼓齊鳴,片甲不留。
走上“絞刑架”,一個(gè)漏洞的宿命
然而,這些漏洞的命運(yùn)是悲慘的。因?yàn)樗麄儽静辉摯嬖谟谑郎?。曾?jīng)讓我們縱橫捭闔的漏洞免不了一個(gè)個(gè)走上絞刑架。
作為硬件生產(chǎn)廠商的高通和聯(lián)發(fā)科,還有作為軟件商的谷歌,會(huì)根據(jù)龔廣和諸多黑客提供的樣本進(jìn)行漏洞修復(fù)。如果手機(jī)廠商選擇跟進(jìn),升級(jí)到最新的硬件固件和 Android 系統(tǒng)版本(當(dāng)然很多廠商為了系統(tǒng)的穩(wěn)定和用戶體驗(yàn),并不會(huì)及時(shí)對所有的軟件進(jìn)行升級(jí)),那么一切都會(huì)變得更加困難。
未來的某一天,當(dāng)我們再次通過瀏覽器回到Android系統(tǒng)之中,也許會(huì)發(fā)現(xiàn):
桌子被抹去了棱角,天窗增加了守衛(wèi),密碼箱換了樣式,而水晶球的咒語不再靈驗(yàn)。
這個(gè)時(shí)候,就是“龔廣們”再次出發(fā)的季節(jié)了。
如今,龔廣去年用于攻破Android系統(tǒng)的漏洞已經(jīng)被谷歌修復(fù),他也再次受邀到Pwn2Own做演講,分享這次攻擊的技術(shù)細(xì)節(jié)和Android世界的驚心動(dòng)魄。
谷歌不斷地增加“漏洞緩解措施”,是否會(huì)讓漏洞利用或者 Root 越來越難呢?龔廣給出了肯定的答案。不過,沉思片刻之后,他說到:正是由于越來越難,這件事才變得越來越有意思。