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