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