內(nèi)存噴射在安卓Root中的應(yīng)用_第1頁(yè)
內(nèi)存噴射在安卓Root中的應(yīng)用_第2頁(yè)
內(nèi)存噴射在安卓Root中的應(yīng)用_第3頁(yè)
內(nèi)存噴射在安卓Root中的應(yīng)用_第4頁(yè)
內(nèi)存噴射在安卓Root中的應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、內(nèi)存噴射在安卓Root中的應(yīng)用技術(shù)創(chuàng)新,變革未來(lái)議程內(nèi)存噴射技術(shù)介紹內(nèi)存噴射與安卓Root利用案例分析:漏洞介紹利用策略?xún)?nèi)存噴射技術(shù)的歷史最早提出于2001年被廣泛應(yīng)用于瀏覽器漏洞利用Heap Spraying系統(tǒng)內(nèi)核提權(quán)(例如Windows)Pool Spray為什么要內(nèi)存噴射內(nèi)存隨機(jī)化機(jī)制的引入棧、堆的隨機(jī)ASLR的引入大大降低了傳統(tǒng)利用的成功率內(nèi)存噴射技術(shù)通過(guò)特定軟件的機(jī)制,分配大量?jī)?nèi)容可控內(nèi)存使特定位置填入預(yù)期的內(nèi)容安卓Root利用技術(shù)漏洞方面安卓/Linux核心漏洞較少出現(xiàn),但三方驅(qū)動(dòng)漏洞較多直接實(shí)現(xiàn)任意地址寫(xiě)的漏洞較多(相對(duì)瀏覽器漏洞)利用方面利用任意寫(xiě)漏洞改寫(xiě)syscall ta

2、ble(大多數(shù)品牌的安卓手機(jī))Patch setresuidDKOM (修改task_struct-cred)無(wú)ASLR許多機(jī)器無(wú)PXN(32位機(jī)型)安卓Root與內(nèi)存噴射過(guò)去并不需要內(nèi)存噴射技術(shù)漏洞品質(zhì)較好,任意內(nèi)存讀+寫(xiě)配合可以寫(xiě)出穩(wěn)定性很好的Root提權(quán)近兩年Android內(nèi)核安全有所改進(jìn)Kernel TEXT只讀 (patch setresuid等方法無(wú)效)Syscall table的地址無(wú)法輕易獲取容易利用的漏洞大幅減小結(jié)果:內(nèi)存噴射技術(shù)逐漸應(yīng)用于安卓Root例如:Wen XuKeenTeam Blackhat USA 2015 議題案例分析:mtk漏洞漏洞介紹由nforestKee

3、nTeam發(fā)現(xiàn),已于2015年年初報(bào)給廠(chǎng)商適用所有mt658x & mt6592機(jī)型的 安卓手機(jī)目前許多設(shè)備最新ROM上能觸發(fā)0day!/dev/graphics/0shell可打開(kāi)crw-rw- system graphics 29, 0 2015-07-09 15:08 0In mtk.c問(wèn)題在哪里?mtkb漏洞細(xì)節(jié)Cmd與arg通過(guò)ioctl調(diào)用傳入displayid是一個(gè)有符號(hào)整數(shù)displayid的值可由用戶(hù)態(tài)傳入?yún)?shù)控制當(dāng)displayid是個(gè)負(fù)數(shù)的時(shí)候,即可繞過(guò)檢查 越界寫(xiě)8字節(jié)的0越界數(shù)據(jù)可傳回用戶(hù)態(tài)mtkb漏洞細(xì)節(jié)數(shù)組index可為負(fù)數(shù)偏移0 x20與0 x24的兩個(gè)unsi

4、gned int被置為0DISP_GetPhysicalHeight() 與DISP_GetPhysicalWidth()并不能控制,只 能是0其余Field內(nèi)容可泄漏到用戶(hù)態(tài)泄漏的同時(shí),副產(chǎn)品是其中8個(gè)連續(xù)字節(jié)被置為00 x34大小的結(jié)構(gòu)問(wèn)題一:可以寫(xiě)任意值?顯然不是,只能連續(xù)8字節(jié)寫(xiě)0如果是瀏覽器,存在許多利用方法和手段利用Type Confusion或者某些結(jié)構(gòu)的巧妙特性例如: hhp:/resources/blog/windows-miigaton-bypass/安卓下結(jié)構(gòu)體并沒(méi)有瀏覽器豐富,存在這種特性thread_info-addr_limit 是個(gè)比較好的選擇Linux系統(tǒng)對(duì)每個(gè)

5、task可以訪(fǎng)問(wèn)的內(nèi)存范圍是有限制的對(duì)于32位安卓4+,thread_info-addr_limit 為0 xbf000000addr_limit Internals可置0,意為該task執(zhí)行時(shí),可被內(nèi)核搶占初始0 xbf000000,置為0的意義? 不可置0,會(huì)直接內(nèi)核panic33位操作,置0意味著userland可讀寫(xiě)全地址,包括kernel!結(jié)論:可選擇寫(xiě)thread_info-preempt_count和addr_limit這8字節(jié)為0,實(shí)現(xiàn)kernel任意地址讀寫(xiě)!問(wèn)題2:任意地址寫(xiě)?thread_info以0 x2000字節(jié)對(duì)齊即(addr & 0 x1f) = 0漏洞必須具備任

6、意地址寫(xiě)0的能力,或者具備任意(addr & 0 x1f) = 4 的地址連續(xù)寫(xiě)8字節(jié)的能力能以0 x34字節(jié)為單位,寫(xiě)偏移0 x20的位置的8字節(jié)?可寫(xiě)范圍有限?需滿(mǎn)足 (addr - dispif_info) 0 x20 mod 0 x3432位系統(tǒng),addr + 0 x1,0000,0000 = addr !0 x1,0000,0000 -4 mod 0 x340 x1,0000,0000 = 0 x34 * 4EC4EC5 4結(jié)論:dispif_infodisplayid.physicalHeight 如果寫(xiě)到地址A,那么寫(xiě)地址A+4只需dispif_infodisplayed + 0

7、 x4EC4EC5.physicalHeight任意地址寫(xiě)!初步利用策略泄漏dispif_info地址計(jì)算出所有displayid取值,displayid取值需滿(mǎn)足:displayid為負(fù)數(shù)(&(dispif_infodisplayid.physicalHeight) & 0 x1f = 4 (thread_info-preempt_count位置)(&(dispif_infodisplayid.physicalHeight)地址在0 xc8000000與0 xef0000之間 (通常此地址范圍存放thread_info的可能 性較大)起盡可能多的線(xiàn)程使其處于睡眠狀態(tài)隨機(jī)選取步驟2中的disp

8、layid取值,并觸發(fā)漏洞有機(jī)會(huì)修改到thread_info-addr_limit并置0喚醒所有線(xiàn)程,并試探這些線(xiàn)程是否可以讀kernelland地址空間如果不可以,則重復(fù)4-6步驟,知道可以為止一旦可以,kernel任意內(nèi)存讀寫(xiě)即已實(shí)現(xiàn),可很容易實(shí)現(xiàn)Root例如:修改task_struct-cred泄漏dispif_info地址根據(jù)大量機(jī)型測(cè)試, dispif_info在0 xc0000000-0 xc3000000之間可借助在用戶(hù)態(tài)Map內(nèi)存的方法,獲取dispif_info地址:選取display_id為0 xA04EC4EC,因?yàn)? xA04EC4EC*0 x34 =0 x208FFF

9、FFF0 = 0 x8FFFFFF0,可確保寫(xiě)0操作 落在map的地址范圍內(nèi)。display_id取值的計(jì)算算法可以更優(yōu)化,但不是重點(diǎn)thread_info噴射A.起線(xiàn)程,進(jìn)行內(nèi)存噴射B. 進(jìn)入睡眠C. 觸發(fā)漏洞D. 喚醒線(xiàn)程E. 試探是否Kernel內(nèi)存可讀初步結(jié)果大約1/5 Root成功率Panic幾率很大原因: 很容易將系統(tǒng)重要數(shù)據(jù)結(jié)構(gòu)破壞改進(jìn)思路配合信息泄露漏洞判斷dispif_infodisplayid.physicalWidth的原值,如為0 xbf000000再觸發(fā)內(nèi)存寫(xiě)可實(shí)現(xiàn)100%成功率的Rootmtk漏洞的讀內(nèi)存特性回顧:可以實(shí)現(xiàn)任意地址讀每讀一次帶來(lái)寫(xiě)8字節(jié)的副產(chǎn)品越界寫(xiě)

10、8字節(jié)的0越界數(shù)據(jù)可傳回用戶(hù)態(tài)非完美讀內(nèi)存addreld0 xCFE34000ags0 xCFE34004preempt_count0 xCFE34008addr_limit0 xCFE3400Ctask0 xCFE34010exec_domainthread_info:mtk_dispif_info:eldphysicalWidthphysicalHeightisConnectedlcmOriginalWidthlcmOriginalHeight寫(xiě) 0寫(xiě) 0讀值讀值讀值若讀出isConnect值為0 xbf000000,再將displayid值增加0 x4EC4EC5,改addr_limit

11、為0結(jié)果:還是1/5 Root成功率Panic問(wèn)題根源?每次讀內(nèi)存帶來(lái)8字節(jié)寫(xiě)0的副產(chǎn)品寫(xiě)0必然造成Panic?當(dāng)然不是什么時(shí)候?qū)?不會(huì)造成Panic內(nèi)存地址本身值為0內(nèi)存地址本身存的是純數(shù)據(jù),不是一些特別重要的信息(例如:本身是指針,寫(xiě)0后panic 概率很大)Panic問(wèn)題根源(續(xù))?我們選擇了寫(xiě)0每個(gè)page前8字節(jié)(0 xXXXXX000-0 xXXXXX008)通常是數(shù)據(jù)結(jié)構(gòu)的起始字段重要指針、metadata 在數(shù)據(jù)結(jié)構(gòu)前端次要數(shù)據(jù)放在數(shù)據(jù)結(jié)構(gòu)末尾預(yù)留字段放末尾 (通常是0)什么位置一般是數(shù)據(jù)結(jié)構(gòu)的末尾頁(yè)尾!例如:hy_buer重要的metadata相對(duì)次要的數(shù)據(jù)優(yōu)化內(nèi)存讀mtk_

12、dispif_info:eldthread_info:寫(xiě) 0addreldphysicalWidth0 xCFE33FF8N/A (頁(yè)尾數(shù)據(jù)相對(duì)次要)寫(xiě) 0physicalHeight0 xCFE33FFCN/A(頁(yè)尾數(shù)據(jù)相對(duì)次要)讀值isConnected0 xCFE34000ags讀值lcmOriginalWidth0 xCFE34004preempt_count讀值lcmOriginalHeight0 xCFE34008addr_limit0 xCFE3400Ctask0 xCFE34010exec_domain若讀出lcmOriginalHeight值為0 xbf000000,再將di

13、splayid值增加0 x4EC4EC5 * 3,改addr_limit為0優(yōu)化后的策略泄漏dispif_info地址計(jì)算出所有displayid取值,displayid取值需滿(mǎn)足:displayid為負(fù)數(shù)(&(dispif_infodisplayid.physicalHeight) & 0 x1f = 0 x18 (thread_info上一頁(yè)的頁(yè)尾)(&(dispif_infodisplayid.physicalHeight)地址在0 xc8000000與0 xef0000之間 (通常此地址范圍存放thread_info的可能 性較大)起盡可能多的線(xiàn)程使其處于睡眠狀態(tài)隨機(jī)選取步驟2中的displayid取值,并觸發(fā)漏洞讀出dispif_infodisplayid.physicalHeight的值如果不是0 xbf000000,重復(fù)步驟5直至dispif_infodisplayid.lcmOriginalHeight是0 xbf000000,進(jìn)入第6步將displayid增加0 x4EC4EC5 * 3,再次觸發(fā)漏洞喚醒所有線(xiàn)程,并試探這些線(xiàn)程是否可以讀kernelland地址空

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論