內(nèi)核空間鏡像攻擊揭秘:ARM 硬件特性罢绽,竟能開(kāi)啟安卓8終端的上帝模式偎漫?

阿里安全潘多拉實(shí)驗(yàn)室,主要聚焦于移動(dòng)安全領(lǐng)域有缆,包括對(duì)iOS和Android系統(tǒng)安全的攻擊和防御技術(shù)研究象踊。在今年3月的BlackHat Asia和4月份的HITB上,該實(shí)驗(yàn)室成員團(tuán)控(主攻方向?yàn)榘沧肯到y(tǒng)級(jí)漏洞的攻防研究)棚壁,受邀做了主題為《內(nèi)核空間鏡像攻擊》的演講杯矩。

以下為相關(guān)主題的技術(shù)分析文章,希望與同仁一起研究探討袖外。

一史隆、前言

在現(xiàn)代操作系統(tǒng)中,系統(tǒng)運(yùn)行的內(nèi)核空間和應(yīng)用程序的用戶空間相互隔離曼验,以保證操作系統(tǒng)的穩(wěn)定性泌射。以運(yùn)行Linux內(nèi)核的ARM終端為例粘姜,內(nèi)核空間和用戶空間擁有不同的頁(yè)表信息,并保存于不同的硬件寄存器熔酷。另外孤紧,內(nèi)核運(yùn)行時(shí)的特權(quán)等級(jí)高于用戶態(tài)程序,無(wú)論何時(shí)內(nèi)核空間對(duì)普通程序是不可見(jiàn)的拒秘。然而号显,ARM處理器的某些特殊硬件特性能夠打破這種保護(hù),使得普通程序在用戶態(tài)能夠直接訪問(wèn)內(nèi)核空間躺酒,直接打破內(nèi)核空間與用戶空間的隔離押蚤,修改內(nèi)核代碼,開(kāi)啟上帝模式羹应。


阿里安全潘多拉實(shí)驗(yàn)室研究人員團(tuán)控在BlackHat Asia上演講


下文以安卓8終端為載體揽碘,介紹阿里安全潘多拉實(shí)驗(yàn)室成員研究并提出的內(nèi)核空間鏡像攻擊利用技巧。

二园匹、正文

1. 背景

2017年下钾菊,Google發(fā)布了Android 8(奧利奧)系統(tǒng)。新系統(tǒng)在安全方面引入了多種內(nèi)核安全加固特性偎肃,以對(duì)抗漏洞程序獲取手機(jī)的最高權(quán)限煞烫。其中,最為重要的安全特性就是PAN(Privileged Access Never)和KASLR(Kernel AddressSpace Layout Randomization)累颂≈拖辏可見(jiàn),利用一個(gè)漏洞來(lái)獲取眾多最新手機(jī)系統(tǒng)的最高權(quán)限是非常有挑戰(zhàn)性的紊馏。

在詳述內(nèi)核空間鏡像攻擊之前料饥,首先簡(jiǎn)單介紹ReVent通用ROOT方案。該方案基于@林雷雷(Aliaba Group)發(fā)現(xiàn)的一個(gè)linux內(nèi)核BUG朱监。

這個(gè)BUG存在與notification內(nèi)核系統(tǒng)調(diào)用:

[1]處計(jì)算文件名的長(zhǎng)度岸啡,并根據(jù)長(zhǎng)度在[2]分配相應(yīng)的存儲(chǔ)buffer,在[3]拷貝文件名字符串赫编。這個(gè)BUG在于巡蘸,從[1]到[3]的代碼路徑上,此文件能夠被重命名擂送,導(dǎo)致[3]發(fā)生內(nèi)核堆越界覆蓋悦荒。

通過(guò)巧妙的堆布局并覆蓋適合的內(nèi)核對(duì)象(eg: iovs),能夠?qū)⑵滢D(zhuǎn)化為在條件競(jìng)爭(zhēng)下嘹吨,幾乎任意內(nèi)核地址的一次寫操作搬味。堆布局實(shí)例如下:

為了向普通應(yīng)用程序提供服務(wù),用戶程序的地址空間對(duì)操作系統(tǒng)內(nèi)核是可見(jiàn)的。為了防止內(nèi)核直接執(zhí)行用戶程序提供的惡意代碼碰纬,早些年ARM處理器就引入了PXN(Privileged Execute Never)安全特性來(lái)緩解漏洞利用萍聊。雖然內(nèi)核不能直接執(zhí)行用戶態(tài)代碼,但可以直接訪問(wèn)用戶態(tài)數(shù)據(jù)悦析。利用一次寫內(nèi)核地址的機(jī)會(huì)寿桨,劫持內(nèi)核數(shù)據(jù)指針。在Android 7及以下的安卓終端上她按,一種常見(jiàn)的繞過(guò)PXN防御機(jī)制的方法如圖所示。


Android 8引入了PAN防御機(jī)制炕柔,使得內(nèi)核無(wú)法直接訪問(wèn)用戶態(tài)數(shù)據(jù)酌泰,上述繞過(guò)PXN防御機(jī)制的方法立即失效。

雖然多次觸發(fā)上述條件競(jìng)爭(zhēng)漏洞將payload數(shù)據(jù)寫入內(nèi)核可以用于繞過(guò)PAN匕累,但exploit代碼執(zhí)行成功率急劇下降陵刹。另外,借助其他內(nèi)核漏洞(eg: CVE-2017-13164)可以將數(shù)據(jù)穩(wěn)定寫入內(nèi)核欢嘿,但在漏洞急劇減少的情況下衰琐,能否通過(guò)新的利用技巧同時(shí)繞過(guò)PXN和PAN防御機(jī)制,并獲取系統(tǒng)最高權(quán)限炼蹦?借助ARM處理器的MMU硬件特性羡宙,答案是肯定的。


2. 內(nèi)核空間鏡像攻擊

Linux內(nèi)核經(jīng)典的三級(jí)頁(yè)表(PGD\PMD\PTE)布局和遍歷關(guān)系如下圖所示掐隐。

絕大多數(shù)的現(xiàn)代處理器已帶有地址管理單元MMU狗热,上述虛擬地址轉(zhuǎn)換關(guān)系實(shí)際由其自動(dòng)完成。ARM處理器也不例外虑省,其通用的的地址轉(zhuǎn)換關(guān)系如圖所示匿刮。安卓系統(tǒng)采用三級(jí)頁(yè)表,Level 0頁(yè)表并未使用探颈。


各級(jí)頁(yè)表中的描述符不僅包含了下一級(jí)起始物理地址熟丸,還包含了對(duì)這段內(nèi)存的訪問(wèn)屬性。ARM有兩種描述符block和table伪节。

最后一級(jí)頁(yè)表單獨(dú)表示光羞。

上述頁(yè)表描述符中output address保存物理地址,兩端比特位保存內(nèi)存屬性信息怀大。


內(nèi)存的執(zhí)行屬性由XN比特決定狞山,PXN比特決定該內(nèi)存的代碼能否在內(nèi)核態(tài)執(zhí)行。而AP[2:1]兩比特的組合決定了內(nèi)存的讀寫權(quán)限叉寂。

其中萍启,'01'組合比較奇怪。按照此種設(shè)計(jì),該內(nèi)存能夠被用戶態(tài)和內(nèi)核態(tài)同時(shí)訪問(wèn)勘纯,對(duì)應(yīng)的虛擬地址既可以是用戶地址局服,也可是內(nèi)核地址。如果某個(gè)內(nèi)核虛擬地址的訪問(wèn)權(quán)限被設(shè)定為此組合驳遵,所有的普通應(yīng)用程序都能夠直接此內(nèi)核地址淫奔。顯然這個(gè)地址已超出任何普通應(yīng)用程序自身的地址范圍。由于虛擬地址空間的相互隔離堤结,內(nèi)核地址對(duì)應(yīng)用程序本就不可見(jiàn)唆迁。而這個(gè)組合直接違反了二者隔離的安全設(shè)計(jì),且操作系統(tǒng)內(nèi)核對(duì)此是無(wú)法感知的竞穷。

按照上述頁(yè)表遍歷的方式唐责,修改任意內(nèi)核虛地址的訪問(wèn)屬性需要內(nèi)核任意地址讀寫原語(yǔ)(Arbitray R/W Primitive),這個(gè)條件是非常強(qiáng)的瘾带。如果攻擊者已經(jīng)擁有了這種原語(yǔ)鼠哥,可直接獲取系統(tǒng)最高權(quán)限。上述漏洞給予一次幾乎任意內(nèi)核地址寫入的機(jī)會(huì)看政,在此條件下朴恳,常規(guī)的頁(yè)表攻擊方式基本失效。

假設(shè)某臺(tái)安卓終端擁有3GB內(nèi)存允蚣。在沒(méi)有開(kāi)啟內(nèi)核地址隨機(jī)化防御機(jī)制時(shí)于颖,常見(jiàn)的一級(jí)頁(yè)表布局如下。


以"0xFFFFFFC000000000"起始的1GB內(nèi)核虛地址空間為例嚷兔,內(nèi)核Image被加載到此范圍恍飘。內(nèi)核代碼段的訪問(wèn)屬性是R-X,而內(nèi)核數(shù)據(jù)段的訪問(wèn)屬性是RW-谴垫。因此章母,一級(jí)頁(yè)表描述符一定是TABLE類型。

64位內(nèi)核空間的虛擬地址絕大多數(shù)是無(wú)效的翩剪,比如"[0xFFFFFFC200000000,0xFFFFFFC23FFFFFFF]"范圍的地址都是無(wú)效的乳怎,其對(duì)應(yīng)的一級(jí)頁(yè)表項(xiàng)為空。假設(shè)此頁(yè)表項(xiàng)不為空前弯,存在一個(gè)BLOCK類型的頁(yè)表項(xiàng)蚪缀。其AP組合為'01',output address指向第一塊1GB的物理內(nèi)存恕出,如圖所示询枚。



通常情況下,“0xFFFFFFC03000200”內(nèi)核地址只能夠被內(nèi)核訪問(wèn)浙巫。而此時(shí)金蜀,“0xFFFFFFC230002000”內(nèi)核地址能夠被用戶態(tài)和內(nèi)核態(tài)同時(shí)訪問(wèn)刷后。上述內(nèi)核虛地址訪問(wèn)是同一塊物理內(nèi)存,二者的訪問(wèn)權(quán)限可完全不同渊抄。即可實(shí)現(xiàn)代碼段在原有的虛擬地址范圍是R-X權(quán)限尝胆,而在鏡像虛擬地址范圍是RW-權(quán)限且能夠被所有的應(yīng)用程序所訪問(wèn)。換句話說(shuō)护桦,內(nèi)核所運(yùn)行代碼都能被直接篡改含衔,內(nèi)核層面的檢測(cè)根本無(wú)從談起。此時(shí)二庵,根本不需要去獲取系統(tǒng)的最高權(quán)限贪染,因?yàn)橄到y(tǒng)內(nèi)核代碼已經(jīng)完全可控,開(kāi)啟真正的上帝模式催享。

結(jié)合上述漏洞杭隙,攻擊者已經(jīng)可以將一個(gè)用于開(kāi)啟上帝模式的一級(jí)頁(yè)表項(xiàng)寫入到指定的位置,這個(gè)指定位置是需要精確計(jì)算的睡陪。Linux內(nèi)核一級(jí)頁(yè)表的起始地址保存在內(nèi)核數(shù)據(jù)段的swapper_pg_dir寺渗,那么頁(yè)表項(xiàng)的地址可以通過(guò)簡(jiǎn)單公式計(jì)算匿情。對(duì)于開(kāi)啟內(nèi)核地址隨機(jī)化的系統(tǒng)兰迫,只需修正swapper_pg_dir的真實(shí)地址即可。

swapper_pg_dir+ (Kernel_Mirroring_Base / 1G) * 8

至此炬称,上帝模式已經(jīng)開(kāi)啟汁果。攻擊者可以運(yùn)行如下的攻擊代碼。這段攻擊代碼直接修改內(nèi)核數(shù)據(jù)玲躯,patch內(nèi)核代碼据德。而對(duì)于普通C開(kāi)發(fā)程序員或者Linux內(nèi)核開(kāi)發(fā)人員來(lái)說(shuō),已經(jīng)違背了現(xiàn)代操作系統(tǒng)的常識(shí)跷车,絕對(duì)是無(wú)稽之談棘利。然而在上帝模式下,這段代碼就能真實(shí)的運(yùn)行朽缴。

在上帝模式下善玫,攻擊者已經(jīng)可以在用戶態(tài)直接操作內(nèi)核,上述代碼的攻擊演示視頻(http://v.youku.com/v_show/id_XMzY0NjU3MTA1Mg==.html?spm=a2hzp.8244740.0.0)密强,此時(shí)Android 8終端的PXN和PAN內(nèi)核防御機(jī)制已對(duì)攻擊者完全無(wú)效茅郎。完整地獲取Pixel 2XL手機(jī)的最高權(quán)限攻擊的視頻鏈接](http://v.youku.com/v_show/id_XMzU0MjA0NjY5Mg==.html?spm=a2h3j.8428770.3416059.1)。

3. 結(jié)尾

內(nèi)核空間鏡像攻擊除了能夠直接攻破安卓8重要的防御機(jī)制外或渤,還能夠?qū)⒁恍┛此撇荒鼙焕孟等撸:υu(píng)級(jí)較低的漏洞賦予重生的能力,典型的例子CVE-2017-0583薪鹦。

同時(shí)掌敬,這個(gè)漏洞被Google作為有效防御的案例在zer0conf2017([Your Move: Vulnerability Exploitation and MitigationinAndroid](https://source.android.com/security/reports/zer0-conf-2017-Your-Move.pdf))上舉例惯豆。關(guān)于如何100%成功率的利用這個(gè)漏洞的相關(guān)內(nèi)容參看BlackHatAisa2018([KSMA: Breaking Android kernel isolation and Rooting with ARM MMUfeatures](https://www.blackhat.com/docs/asia-18/asia-18-WANG-KSMA-Breaking-Android-kernel-isolation-and-Rooting-with-ARM-MMU-features.pdf))的后部分內(nèi)容。

硬件設(shè)計(jì)的不合理危害性遠(yuǎn)高于軟件層面涝开,且修補(bǔ)更新更為困難循帐。在設(shè)計(jì)之初就將安全性作為一項(xiàng)重要的指標(biāo)是最佳的選擇。

值得一提的是舀武,雖然這種攻擊技巧的危害很大拄养,不過(guò)該技巧還是有很高的技術(shù)門檻的。我們希望硬件方案商和制造商能夠重視這個(gè)問(wèn)題银舱,并從硬件層面將其封堵掉瘪匿。

在阿里安全潘多拉實(shí)驗(yàn)室,類似于團(tuán)控這樣的白帽黑客還有很多寻馏。這些年輕人都出生于1990年前后棋弥,他們致力于從攻擊的視角去發(fā)現(xiàn)安全漏洞,并提出相應(yīng)的解決方案诚欠,以此來(lái)提升整個(gè)安全行業(yè)的安全水位顽染。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市轰绵,隨后出現(xiàn)的幾起案子粉寞,更是在濱河造成了極大的恐慌,老刑警劉巖左腔,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唧垦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡液样,警方通過(guò)查閱死者的電腦和手機(jī)振亮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鞭莽,“玉大人坊秸,你說(shuō)我怎么就攤上這事∨炫” “怎么了褒搔?”我有些...
    開(kāi)封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)丹拯。 經(jīng)常有香客問(wèn)我站超,道長(zhǎng),這世上最難降的妖魔是什么乖酬? 我笑而不...
    開(kāi)封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任死相,我火速辦了婚禮,結(jié)果婚禮上咬像,老公的妹妹穿的比我還像新娘算撮。我一直安慰自己生宛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布肮柜。 她就那樣靜靜地躺著陷舅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪审洞。 梳的紋絲不亂的頭發(fā)上莱睁,一...
    開(kāi)封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音芒澜,去河邊找鬼仰剿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛痴晦,可吹牛的內(nèi)容都是我干的南吮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼誊酌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼部凑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起碧浊,我...
    開(kāi)封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤涂邀,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后辉词,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體必孤,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猾骡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年瑞躺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兴想。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幢哨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嫂便,到底是詐尸還是另有隱情捞镰,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布毙替,位于F島的核電站岸售,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏厂画。R本人自食惡果不足惜凸丸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袱院。 院中可真熱鬧屎慢,春花似錦瞭稼、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至集灌,卻和暖如春悔雹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背欣喧。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工荠商, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人续誉。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓莱没,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親酷鸦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子饰躲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 如果你看完書中的所有例子,你很可能已經(jīng)做完你的實(shí)驗(yàn)和在已經(jīng)越獄的iPhone上的研究臼隔。因?yàn)楹驮S多人一樣嘹裂,幾乎所有的...
    fishmai0閱讀 16,037評(píng)論 2 42
  • 1. 傳值 不詳細(xì)介紹傳值方法,只是列一下可用的 1.1 路由傳值 1.2 編程式傳值 1.3 props傳值(父...
    帥氣的昵禾爾_閱讀 209評(píng)論 0 0
  • 1.我來(lái)奶奶家了 上午摔握,我和老公回老家了寄狼,在電飯鍋里給兒子準(zhǔn)備好了飯。晚飯時(shí)氨淌,兒子用奶奶的電話打過(guò)來(lái)說(shuō):我來(lái)奶奶家...
    雪霽晴空喜迎春閱讀 255評(píng)論 2 3
  • 上海瀚銀信息技術(shù)有限公司(簡(jiǎn)稱“瀚銀科技”)成立于2006年1月盛正,公司總部位于上海删咱,業(yè)務(wù)范圍覆蓋全國(guó)。瀚銀科技是國(guó)...
    5452e382e782閱讀 649評(píng)論 0 0