黑雲壓城城欲摧 - 2016年iOS公開可利用漏洞總結

黑雲壓城城欲摧 - 2016年iOS公開可利用漏洞總結html

做者:蒸米,耀刺,黑雪 @ Team OverSkygit

 

 

0x00 序

iOS的安全性遠比你們的想象中脆弱,除了沒有公開的漏洞之外,還有不少已經公開而且可被利用的漏洞,本報告總結了2016年比較嚴重的iOS漏洞(可用於遠程代碼執行或越獄),但願可以對你們移動安全方面的工做和研究帶來一些幫助。github

 

0x01 iOS 10.1.1 公開的可利用漏洞

1. mach_portal攻擊鏈:該攻擊鏈是由Google Project Zero的Ian Beer公佈的。整個攻擊鏈由三個漏洞組成:損壞的內核port的uref可致使任意進程的port被越權替換(CVE-2016-7637),powerd任意port替換可致使DoS(CVE-2016-7661),由於set_dp_control_port沒有上鎖致使的XNU內核UaF(CVE-2016-7644)。web

攻擊者先使用CVE-2016-7637將launchd與」com.apple.iohideventsystem」系統服務具備發送權限的port替換成本身控制的進程的port,並攻擊者還具備該port的接收權限。而後,攻擊者利用CVE-2016-7661對powerd這個進程進行DoS,使其重啓。在啓動過程當中,由於powerd的啓動須要用到」com.apple.iohideventsystem」系統服務,因而將task port發送給了這個系統服務。但由於攻擊者利用以前的CVE-2016-7637漏洞獲取了」com.apple.iohideventsystem」系統服務port的接收權限,所以攻擊者得到了powerd的task port,從而控制了具備root權限而且在沙盒外的powerd進程。攻擊者隨後利用powerd進程的task port獲取到了host_priv port,而後利用host_priv port觸發因set_dp_control_port沒有上鎖而致使的XNU內核UaF(CVE-2016-7644)漏洞,從而控制了kernel task port。攻擊者在獲取了kernel task之後,就能夠利用系統提供的mach_vm_read()和mach_vm_write()去進行任意內核讀寫了。瀏覽器

2016年12月22日,qwertyoruiop在Ian Beer公佈的mach_portal攻擊鏈的基礎上,加入了KPP的繞過、內核patch和cydia的安裝,並在本身的twitter上發佈了iOS 10.1.*的越獄。安全

 

0x02 iOS 9.3.4 公開的可利用漏洞

1. PEGASUS 三叉戟攻擊鏈:該攻擊鏈是在對阿聯酋的一位人權活動家進行apt攻擊的時候被發現。整個攻擊鏈由三個漏洞組成:JSC遠程代碼執行(CVE-2016-4657),內核信息泄露(CVE-2016-4655),內核UAF代碼執行(CVE-2016-4656)。app

在瀏覽器漏洞方面,因爲iOS系統的JavaScriptCore庫的MarkedArgumentBuffer類在垃圾回收的時候可能會形成內存堆破壞,致使黑客可使用該漏洞泄露對象地址以及執行任意指令。在內核漏洞方面,因爲XNU內核的OSUnserializeBinary()函數在反序列化用戶態傳入的數據時沒有對OSNumber的長度進行校驗,致使能夠泄露內核的棧信息。利用精心構造的OSString對象,還能夠觸發UAF漏洞並致使內核代碼執行(具體的分析能夠參考咱們以前的文章:基於PEGASUS的OS X 10.11.6本地提權:https://jaq.alibaba.com/community/art/show?articleid=531)。利用該攻擊鏈能夠作到iOS上的遠程完美越獄,能夠說是近幾年來影響最大的iOS漏洞之一了。而且在將來,極有可能出現利用該漏洞的iOS大面積掛馬事件。ide

 

 

利用PEGASUS對iOS 9.3.* 32位設備越獄的DEMO:     函數

http://v.youku.com/v_show/id_XMTg4NzA5OTEwOA==.html學習

 

0x03 iOS 9.3.3 公開的可利用漏洞

1. IOMobileFramebuffer Heapoverflow 內核漏洞: 該漏洞存在於IOMobileFramebuffer這個內核服務中。在IOMobileFramebuffer::swap_submit(IOMFBSwap *)這個函數中,由於沒有對用戶態傳入的IOMFBSwap數據進行校驗,從而致使內核堆溢出。利用該漏洞能夠在沙盒內(不須要沙盒逃逸)直接對內核進行攻擊,並完成非完美越獄。該漏洞在iOS 9.3.3盤古越獄(女媧石)中被使用。

 

0x04 iOS 9.3.2 公開的可利用漏洞

1. WebKit RCE heapPopMin 遠程代碼執行漏洞: 由於Webkit模塊中的WebCore ::TimerBase::heapPopMin()存在內存破壞漏洞,利用該漏洞能夠對iOS設備進行遠程攻擊。當用mobile safari瀏覽有惡意攻擊代碼的網頁的時候,safari將會被黑客控制。但要注意的事,被控制的僅僅是safari,想要獲取用戶數據還須要進行沙盒逃逸,想要控制手機還須要對內核進行攻擊。另外,由於webkit不光存在於iOS中,所以該漏洞還被用於PS4,Kindle等設備的越獄。

2. GasGauge 條件競爭內核漏洞: 該漏洞存在於GasGauge這個內核服務中,由於在free內存的時候沒有進行加鎖操做,黑客能夠開多個線程進行free操做,當競爭成功的時候能夠形成double free的漏洞,隨後能夠轉化爲任意zone的UAF並控制內核,並完成非完美越獄。須要注意的是,該內核服務並不能在沙盒內直接訪問,因此想要利用該漏洞,須要先作到沙盒逃逸。

 

0x05 iOS 9.3.1 公開的可利用漏洞

 

1. inpuTbag Heapoverflow 內核漏洞: 該漏洞是阿里移動安全的OverSky團隊發現並公佈的,該漏洞存在於IOHIDDevice這個內核服務中,由於沒有對Input report的szie作檢測從而形成內核堆溢出。利用該漏洞能夠對內核進行攻擊,並完成非完美越獄。須要注意的是,該內核服務須要在沙盒外並擁有"com.apple.hid.manager.user-access-device"這個entilement才能訪問,因此想要利用該漏洞,須要先作到沙盒逃逸,而後繞過entilement的檢測才能利用。

 

0x06 iOS 9.1 公開的可利用漏洞

1. CVE-2015-7037 Photos 沙盒逃逸漏洞: 該漏洞存在於com.apple.PersistentURLTranslator.Gatekeeper這個系統服務中,在盤古越獄中被使用,經過利用改漏洞,一個在沙盒內的app能夠作到mobile權限的沙盒外任意文件讀寫,配合dyld的漏洞能夠作到沙盒外的任意代碼執行。

2. CVE-2015-7084 IORegistryIterator 內核漏洞: 該內核漏洞存在於IOKit中,由於IORegistryIterator對象沒有線程互斥的保護,致使對成員進行操做的時候可能出現錯誤。該漏洞能夠在沙盒內直接經過race condition觸發, 隨後轉化爲內核信息泄露以及內核的代碼執行,並作到非完美越獄。

 

0x07 iOS 9.0 公開的可利用漏洞

1. CVE-2015-6974 IOHIDFamily 內核漏洞:該漏洞存在於IOHIDResource這個內核服務中,在terminateDevice後,系統沒有將device設置爲NULL, 從而形成UAF漏洞。該漏洞在盤古iOS 9.0越獄中被使用,利用該漏洞能夠作到內核的任意讀寫,並完成非完美越獄。須要注意的是,該內核服務並不能在沙盒內直接訪問,因此想要利用該漏洞,須要先作到沙盒逃逸。

 

0x08 總結

能夠看到2016年的公開可利用的漏洞數量是很是巨大的,相對2015年能夠說是有了一個指數級的增加。雖然蘋果更新系統的速度很是快而且沒法降級,但隨着老設備(iPhone 4s及如下已沒法升級iOS 10)愈來愈多,而且用戶對新系統指望愈來愈低,iOS設備的更新率已經變得很是緩慢。

 

根據某專業移動分析平臺2016年12月的數據能夠看到,僅有3.28%的設備更新了最新版的iOS 10.2。這意味着96.72%的設備都有被最近剛發佈的mach_portal漏洞攻擊的風險。咱們相信,在新的一年,iOS的漏洞數量還會持續增長,而且隨着漏洞利用技術的公開,黑灰產也極有可能利用漏洞對用戶進行攻擊,但願廣大用戶必定要注意本身iOS設備的安全。

最後,對本文提到的漏洞感興趣的同窗能夠在咱們的github上學習相關的資料:https://github.com/zhengmin1989/GreatiOSJailbreakMaterial

 

更多阿里安全類技術文章及報告,請訪問阿里聚安全博客