摘要:然而,處理器的某些特殊硬件特性能夠打破這種保護,使得普通程序在用戶態(tài)能夠直接訪問內(nèi)核空間,直接打破內(nèi)核空間與用戶空間的隔離,修改內(nèi)核代碼,開啟上帝模式。假設(shè)某臺安卓終端擁有內(nèi)存。至此,上帝模式已經(jīng)開啟。
文/圖 阿里安全潘多拉實驗室 團控
編者按:團控,阿里安全潘多拉實驗室研究人員,該實驗室主要聚焦于移動安全領(lǐng)域,包括對iOS和Android系統(tǒng)安全的攻擊和防御技術(shù)研究。團控的主攻方向為安卓系統(tǒng)級漏洞的攻防研究。在今年3月的BlackHat Asia和4月份的HITB上,團控受邀做了主題為《內(nèi)核空間鏡像攻擊》的演講。以下為團控該研究主題的技術(shù)分析文章。
一、前言在現(xiàn)代操作系統(tǒng)中,系統(tǒng)運行的內(nèi)核空間和應(yīng)用程序的用戶空間相互隔離,以保證操作系統(tǒng)的穩(wěn)定性。以運行Linux內(nèi)核的ARM終端為例,內(nèi)核空間和用戶空間擁有不同的頁表信息,并保存于不同的硬件寄存器。另外,內(nèi)核運行時的特權(quán)等級高于用戶態(tài)程序,無論何時內(nèi)核空間對普通程序是不可見的。然而,ARM處理器的某些特殊硬件特性能夠打破這種保護,使得普通程序在用戶態(tài)能夠直接訪問內(nèi)核空間,直接打破內(nèi)核空間與用戶空間的隔離,修改內(nèi)核代碼,開啟上帝模式。下文以安卓8終端為載體,介紹阿里安全潘多拉實驗室成員研究并提出的內(nèi)核空間鏡像攻擊利用技巧。
二、正文背景
2017年下,Google發(fā)布了Android 8(奧利奧)系統(tǒng)。新系統(tǒng)在安全方面引入了多種內(nèi)核安全加固特性,以對抗漏洞程序獲取手機的最高權(quán)限。其中,最為重要的安全特性就是PAN(Privileged Access Never)和KASLR(Kernel Address Space Layout Randomization)??梢?,利用一個漏洞來獲取眾多最新手機系統(tǒng)的最高權(quán)限是非常有挑戰(zhàn)性的。
在詳述內(nèi)核空間鏡像攻擊之前,首先簡單介紹ReVent通用ROOT方案。該方案基于@林雷雷(Aliaba Group)發(fā)現(xiàn)的一個linux內(nèi)核BUG。
這個BUG存在與notification內(nèi)核系統(tǒng)調(diào)用:
[1]處計算文件名的長度,并根據(jù)長度在[2]分配相應(yīng)的存儲buffer,在[3]拷貝文件名字符串。這個BUG在于,從[1]到[3]的代碼路徑上,此文件能夠被重命名,導(dǎo)致[3]發(fā)生內(nèi)核堆越界覆蓋。
通過巧妙的堆布局并覆蓋適合的內(nèi)核對象(eg: iovs),能夠?qū)⑵滢D(zhuǎn)化為在條件競爭下,幾乎任意內(nèi)核地址的一次寫操作。堆布局實例如下:
為了向普通應(yīng)用程序提供服務(wù),用戶程序的地址空間對操作系統(tǒng)內(nèi)核是可見的。為了防止內(nèi)核直接執(zhí)行用戶程序提供的惡意代碼,早些年ARM處理器就引入了PXN(Privileged Execute Never)安全特性來緩解漏洞利用。雖然內(nèi)核不能直接執(zhí)行用戶態(tài)代碼,但可以直接訪問用戶態(tài)數(shù)據(jù)。利用一次寫內(nèi)核地址的機會,劫持內(nèi)核數(shù)據(jù)指針。在Android 7及以下的安卓終端上,一種常見的繞過PXN防御機制的方法如圖所示。
Android 8引入了PAN防御機制,使得內(nèi)核無法直接訪問用戶態(tài)數(shù)據(jù),上述繞過PXN防御機制的方法立即失效。
雖然多次觸發(fā)上述條件競爭漏洞將payload數(shù)據(jù)寫入內(nèi)核可以用于繞過PAN,但exploit代碼執(zhí)行成功率急劇下降。另外,借助其他內(nèi)核漏洞(eg: CVE-2017-13164)可以將數(shù)據(jù)穩(wěn)定寫入內(nèi)核,但在漏洞急劇減少的情況下,能否通過新的利用技巧同時繞過PXN和PAN防御機制,并獲取系統(tǒng)最高權(quán)限?借助ARM處理器的MMU硬件特性,答案是肯定的。
1、內(nèi)核空間鏡像攻擊
Linux內(nèi)核經(jīng)典的三級頁表(PGDPMDPTE)布局和遍歷關(guān)系如下圖所示。
絕大多數(shù)的現(xiàn)代處理器已帶有地址管理單元MMU,上述虛擬地址轉(zhuǎn)換關(guān)系實際由其自動完成。ARM處理器也不例外,其通用的的地址轉(zhuǎn)換關(guān)系如圖所示。安卓系統(tǒng)采用三級頁表,Level 0頁表并未使用。
各級頁表中的描述符不僅包含了下一級起始物理地址,還包含了對這段內(nèi)存的訪問屬性。ARM有兩種描述符block和table。
最后一級頁表多帶帶表示。
上述頁表描述符中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è)計,該內(nèi)存能夠被用戶態(tài)和內(nèi)核態(tài)同時訪問,對應(yīng)的虛擬地址既可以是用戶地址,也可是內(nèi)核地址。如果某個內(nèi)核虛擬地址的訪問權(quán)限被設(shè)定為此組合,所有的普通應(yīng)用程序都能夠直接此內(nèi)核地址。顯然這個地址已超出任何普通應(yīng)用程序自身的地址范圍。由于虛擬地址空間的相互隔離,內(nèi)核地址對應(yīng)用程序本就不可見。而這個組合直接違反了二者隔離的安全設(shè)計,且操作系統(tǒng)內(nèi)核對此是無法感知的。
按照上述頁表遍歷的方式,修改任意內(nèi)核虛地址的訪問屬性需要內(nèi)核任意地址讀寫原語(Arbitray R/W Primitive),這個條件是非常強的。如果攻擊者已經(jīng)擁有了這種原語,可直接獲取系統(tǒng)最高權(quán)限。上述漏洞給予一次幾乎任意內(nèi)核地址寫入的機會,在此條件下,常規(guī)的頁表攻擊方式基本失效。
假設(shè)某臺安卓終端擁有3GB內(nèi)存。在沒有開啟內(nèi)核地址隨機化防御機制時,常見的一級頁表布局如下。
以"0xFFFFFFC000000000"起始的1GB內(nèi)核虛地址空間為例,內(nèi)核Image被加載到此范圍。內(nèi)核代碼段的訪問屬性是R-X,而內(nèi)核數(shù)據(jù)段的訪問屬性是RW-。因此,一級頁表描述符一定是TABLE類型。
64位內(nèi)核空間的虛擬地址絕大多數(shù)是無效的,比如"[0xFFFFFFC200000000, 0xFFFFFFC23FFFFFFF]"范圍的地址都是無效的,其對應(yīng)的一級頁表項為空。假設(shè)此頁表項不為空,存在一個BLOCK類型的頁表項。其AP組合為"01",output address指向第一塊1GB的物理內(nèi)存,如圖所示。
通常情況下,“0xFFFFFFC03000200”內(nèi)核地址只能夠被內(nèi)核訪問。而此時,“0xFFFFFFC230002000”內(nèi)核地址能夠被用戶態(tài)和內(nèi)核態(tài)同時訪問。上述內(nèi)核虛地址訪問是同一塊物理內(nèi)存,二者的訪問權(quán)限可完全不同。即可實現(xiàn)代碼段在原有的虛擬地址范圍是R-X權(quán)限,而在鏡像虛擬地址范圍是RW-權(quán)限且能夠被所有的應(yīng)用程序所訪問。換句話說,內(nèi)核所運行代碼都能被直接篡改,內(nèi)核層面的檢測根本無從談起。此時,根本不需要去獲取系統(tǒng)的最高權(quán)限,因為系統(tǒng)內(nèi)核代碼已經(jīng)完全可控,開啟真正的上帝模式。
結(jié)合上述漏洞,攻擊者已經(jīng)可以將一個用于開啟上帝模式的一級頁表項寫入到指定的位置,這個指定位置是需要精確計算的。Linux內(nèi)核一級頁表的起始地址保存在內(nèi)核數(shù)據(jù)段的swapper_pg_dir,那么頁表項的地址可以通過簡單公式計算。對于開啟內(nèi)核地址隨機化的系統(tǒng),只需修正swapper_pg_dir的真實地址即可。
swapper_pg_dir + (Kernel_Mirroring_Base / 1G) * 8
至此,上帝模式已經(jīng)開啟。攻擊者可以運行如下的攻擊代碼。這段攻擊代碼直接修改內(nèi)核數(shù)據(jù),patch內(nèi)核代碼。而對于普通C開發(fā)程序員或者Linux內(nèi)核開發(fā)人員來說,已經(jīng)違背了現(xiàn)代操作系統(tǒng)的常識,絕對是無稽之談。然而在上帝模式下,這段代碼就能真實的運行。
在上帝模式下,攻擊者已經(jīng)可以在用戶態(tài)直接操作內(nèi)核,上述代碼的攻擊演示視頻(http://v.youku.com/v_show/id_...,此時Android 8終端的PXN和PAN內(nèi)核防御機制已對攻擊者完全無效。完整地獲取Pixel 2XL手機的最高權(quán)限攻擊的視頻鏈接](http://v.youku.com/v_show/id_...。
結(jié)尾
內(nèi)核空間鏡像攻擊除了能夠直接攻破安卓8重要的防御機制外,還能夠?qū)⒁恍┛此撇荒鼙焕茫:υu級較低的漏洞賦予重生的能力,典型的例子CVE-2017-0583。
同時,這個漏洞被Google作為有效防御的案例在zer0conf2017(Your Move: Vulnerability Exploitation and Mitigation in Android)上舉例。關(guān)于如何100%成功率的利用這個漏洞的相關(guān)內(nèi)容參看BlackHatAisa2018(KSMA: Breaking Android kernel isolation and Rooting with ARM MMU features)的后部分內(nèi)容。
硬件設(shè)計的不合理危害性遠(yuǎn)高于軟件層面,且修補更新更為困難。在設(shè)計之初就將安全性作為一項重要的指標(biāo)是最佳的選擇。
本文作者:華蒙
閱讀原文
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/11395.html
摘要:年,中科院計算所半導(dǎo)體所有關(guān)研制大規(guī)模集成電路的單位和廠合并,成立中科院微電子中心。目前是國資比例最高通過中國長城控股的國產(chǎn)企業(yè),是聚焦國家戰(zhàn)略需求和重大項目的國家隊。年,海光信息同達(dá)成合作,共同合資成立兩家子公司,引入架構(gòu)授權(quán)。本文將重點圍繞國產(chǎn)CPU的發(fā)展歷程與當(dāng)前產(chǎn)業(yè)鏈各領(lǐng)軍企業(yè)的布局情況作詳盡解讀(并包含特大號獨家整理的最新進展),具體如下:1、國產(chǎn)CPU發(fā)展歷程回溯2、飛騰:PK生...
摘要:當(dāng)互聯(lián)網(wǎng)概念在中國資本市場上方興未艾之時,互聯(lián)網(wǎng)巨頭谷歌公司的執(zhí)行董事長埃里克施密特在前段時間舉行的座談會上大膽預(yù)言互聯(lián)網(wǎng)即將消失,一個高度個性化互動化的有趣世界物聯(lián)網(wǎng)即將誕生。他說我可以非常直接地說,互聯(lián)網(wǎng)將消失。 當(dāng)互聯(lián)網(wǎng)概念在中國資本市場上方興未艾之時,互聯(lián)網(wǎng)巨頭谷歌公司的執(zhí)行董事長埃里克?施密特在前段時間舉行的座談會上大膽預(yù)言:互聯(lián)網(wǎng)即將消失,一個高度個性化、互動化的有趣世界——物聯(lián)...
摘要:在區(qū)塊鏈上,虛擬機就是智能合約的運行環(huán)境,是一個可以完全對外隔離的完整計算機體系。區(qū)塊鏈通過虛擬機來調(diào)用和執(zhí)行智能合約,并要求所有節(jié)點都達(dá)成一致。當(dāng)區(qū)塊鏈遇見在很多科技領(lǐng)域都得到了運用,目前,也開始在區(qū)塊鏈領(lǐng)域逐漸的得以發(fā)展。 showImg(https://segmentfault.com/img/bVbsfi2?w=2779&h=1179); 區(qū)塊鏈的出現(xiàn)使得智能合約得到了更好的實...
閱讀 3170·2021-09-22 15:54
閱讀 4097·2021-09-09 11:34
閱讀 1832·2019-08-30 12:48
閱讀 1220·2019-08-30 11:18
閱讀 3512·2019-08-26 11:48
閱讀 976·2019-08-23 17:50
閱讀 2181·2019-08-23 17:17
閱讀 1312·2019-08-23 17:12