2016年iOS公開可利用漏洞總結(jié)
0x00 序
iOS的安全性遠(yuǎn)比大家的想象中脆弱,除了沒有公開的漏洞以外,還有很多已經(jīng)公開并且可被利用的漏洞,本報(bào)告總結(jié)了2016年比較嚴(yán)重的iOS漏洞(可用于遠(yuǎn)程代碼執(zhí)行或越獄),希望能夠?qū)Υ蠹乙苿?dòng)安全方面的工作和研究帶來一些幫助。
0x01 iOS 10.1.1 公開的可利用漏洞
1. mach_portal攻擊鏈:該攻擊鏈?zhǔn)怯蒅oogle Project Zero的Ian Beer公布的。整個(gè)攻擊鏈由三個(gè)漏洞組成:損壞的內(nèi)核port的uref可導(dǎo)致任意進(jìn)程的port被越權(quán)替換(CVE-2016-7637),powerd任意port替換可導(dǎo)致DoS(CVE-2016-7661),因?yàn)閟et_dp_control_port沒有上鎖導(dǎo)致的XNU內(nèi)核UaF(CVE-2016-7644)。
攻擊者先使用CVE-2016-7637將launchd與”com.apple.iohideventsystem”系統(tǒng)服務(wù)具有發(fā)送權(quán)限的port替換成自己控制的進(jìn)程的port,并攻擊者還具有該port的接收權(quán)限。然后,攻擊者利用CVE-2016-7661對(duì)powerd這個(gè)進(jìn)程進(jìn)行DoS,使其重啟。在啟動(dòng)過程中,因?yàn)閜owerd的啟動(dòng)需要用到”com.apple.iohideventsystem”系統(tǒng)服務(wù),于是將task port發(fā)送給了這個(gè)系統(tǒng)服務(wù)。但因?yàn)楣粽呃弥暗腃VE-2016-7637漏洞獲取了”com.apple.iohideventsystem”系統(tǒng)服務(wù)port的接收權(quán)限,因此攻擊者獲得了powerd的task port,從而控制了具有root權(quán)限并且在沙盒外的powerd進(jìn)程。攻擊者隨后利用powerd進(jìn)程的task port獲取到了host_priv port,然后利用host_priv port觸發(fā)因set_dp_control_port沒有上鎖而導(dǎo)致的XNU內(nèi)核UaF(CVE-2016-7644)漏洞,從而控制了kernel task port。攻擊者在獲取了kernel task以后,就可以利用系統(tǒng)提供的mach_vm_read()和mach_vm_write()去進(jìn)行任意內(nèi)核讀寫了。
2016年12月22日,qwertyoruiop在Ian Beer公布的mach_portal攻擊鏈的基礎(chǔ)上,加入了KPP的繞過、內(nèi)核patch和cydia的安裝,并在自己的twitter上發(fā)布了iOS 10.1.*的越獄。
0x02 iOS 9.3.4 公開的可利用漏洞
1. PEGASUS 三叉戟攻擊鏈:該攻擊鏈?zhǔn)窃趯?duì)阿聯(lián)酋的一位人權(quán)活動(dòng)家進(jìn)行apt攻擊的時(shí)候被發(fā)現(xiàn)。整個(gè)攻擊鏈由三個(gè)漏洞組成:JSC遠(yuǎn)程代碼執(zhí)行(CVE-2016-4657),內(nèi)核信息泄露(CVE-2016-4655),內(nèi)核UAF代碼執(zhí)行(CVE-2016-4656)。
在瀏覽器漏洞方面,由于iOS系統(tǒng)的JavaScriptCore庫的MarkedArgumentBuffer類在垃圾回收的時(shí)候可能會(huì)造成內(nèi)存堆破壞,導(dǎo)致黑客可以使用該漏洞泄露對(duì)象地址以及執(zhí)行任意指令。在內(nèi)核漏洞方面,由于XNU內(nèi)核的OSUnserializeBinary()函數(shù)在反序列化用戶態(tài)傳入的數(shù)據(jù)時(shí)沒有對(duì)OSNumber的長(zhǎng)度進(jìn)行校驗(yàn),導(dǎo)致可以泄露內(nèi)核的棧信息。利用精心構(gòu)造的OSString對(duì)象,還可以觸發(fā)UAF漏洞并導(dǎo)致內(nèi)核代碼執(zhí)行。利用該攻擊鏈可以做到iOS上的遠(yuǎn)程完美越獄,可以說是近幾年來影響最大的iOS漏洞之一了。并且在未來,極有可能出現(xiàn)利用該漏洞的iOS大面積掛馬事件。
0x03 iOS 9.3.3 公開的可利用漏洞
1. IOMobileFramebuffer Heapoverflow 內(nèi)核漏洞: 該漏洞存在于IOMobileFramebuffer這個(gè)內(nèi)核服務(wù)中。在IOMobileFramebuffer::swap_submit(IOMFBSwap *)這個(gè)函數(shù)中,因?yàn)闆]有對(duì)用戶態(tài)傳入的IOMFBSwap數(shù)據(jù)進(jìn)行校驗(yàn),從而導(dǎo)致內(nèi)核堆溢出。利用該漏洞可以在沙盒內(nèi)(不需要沙盒逃逸)直接對(duì)內(nèi)核進(jìn)行攻擊,并完成非完美越獄。該漏洞在iOS 9.3.3盤古越獄(女媧石)中被使用。
0x04 iOS 9.3.2 公開的可利用漏洞
1. WebKit RCE heapPopMin 遠(yuǎn)程代碼執(zhí)行漏洞: 因?yàn)閃ebkit模塊中的WebCore ::TimerBase::heapPopMin()存在內(nèi)存破壞漏洞,利用該漏洞可以對(duì)iOS設(shè)備進(jìn)行遠(yuǎn)程攻擊。當(dāng)用mobile safari瀏覽有惡意攻擊代碼的網(wǎng)頁的時(shí)候,safari將會(huì)被黑客控制。但要注意的事,被控制的僅僅是safari,想要獲取用戶數(shù)據(jù)還需要進(jìn)行沙盒逃逸,想要控制手機(jī)還需要對(duì)內(nèi)核進(jìn)行攻擊。另外,因?yàn)閣ebkit不光存在于iOS中,因此該漏洞還被用于PS4,Kindle等設(shè)備的越獄。
2. GasGauge 條件競(jìng)爭(zhēng)內(nèi)核漏洞: 該漏洞存在于GasGauge這個(gè)內(nèi)核服務(wù)中,因?yàn)樵趂ree內(nèi)存的時(shí)候沒有進(jìn)行加鎖操作,黑客可以開多個(gè)線程進(jìn)行free操作,當(dāng)競(jìng)爭(zhēng)成功的時(shí)候可以造成double free的漏洞,隨后可以轉(zhuǎn)化為任意zone的UAF并控制內(nèi)核,并完成非完美越獄。需要注意的是,該內(nèi)核服務(wù)并不能在沙盒內(nèi)直接訪問,所以想要利用該漏洞,需要先做到沙盒逃逸。
0x05 iOS 9.3.1 公開的可利用漏洞
1. inpuTbag Heapoverflow 內(nèi)核漏洞: 該漏洞是阿里移動(dòng)安全的OverSky團(tuán)隊(duì)發(fā)現(xiàn)并公布的,該漏洞存在于IOHIDDevice這個(gè)內(nèi)核服務(wù)中,因?yàn)闆]有對(duì)Input report的szie做檢測(cè)從而造成內(nèi)核堆溢出。利用該漏洞可以對(duì)內(nèi)核進(jìn)行攻擊,并完成非完美越獄。需要注意的是,該內(nèi)核服務(wù)需要在沙盒外并擁有"com.apple.hid.manager.user-access-device"這個(gè)entilement才能訪問,所以想要利用該漏洞,需要先做到沙盒逃逸,然后繞過entilement的檢測(cè)才能利用。
0x06 iOS 9.1 公開的可利用漏洞
1. CVE-2015-7037 Photos 沙盒逃逸漏洞: 該漏洞存在于com.apple.PersistentURLTranslator.Gatekeeper這個(gè)系統(tǒng)服務(wù)中,在盤古越獄中被使用,通過利用改漏洞,一個(gè)在沙盒內(nèi)的app可以做到mobile權(quán)限的沙盒外任意文件讀寫,配合dyld的漏洞可以做到沙盒外的任意代碼執(zhí)行。
2. CVE-2015-7084 IORegistryIterator 內(nèi)核漏洞: 該內(nèi)核漏洞存在于IOKit中,因?yàn)镮ORegistryIterator對(duì)象沒有線程互斥的保護(hù),導(dǎo)致對(duì)成員進(jìn)行操作的時(shí)候可能出現(xiàn)錯(cuò)誤。該漏洞可以在沙盒內(nèi)直接通過race condition觸發(fā), 隨后轉(zhuǎn)化為內(nèi)核信息泄露以及內(nèi)核的代碼執(zhí)行,并做到非完美越獄。
0x07 iOS 9.0 公開的可利用漏洞
1. CVE-2015-6974 IOHIDFamily 內(nèi)核漏洞:該漏洞存在于IOHIDResource這個(gè)內(nèi)核服務(wù)中,在terminateDevice后,系統(tǒng)沒有將device設(shè)置為NULL, 從而造成UAF漏洞。該漏洞在盤古iOS 9.0越獄中被使用,利用該漏洞可以做到內(nèi)核的任意讀寫,并完成非完美越獄。需要注意的是,該內(nèi)核服務(wù)并不能在沙盒內(nèi)直接訪問,所以想要利用該漏洞,需要先做到沙盒逃逸。
0x08 總結(jié)
可以看到2016年的公開可利用的漏洞數(shù)量是非常巨大的,相對(duì)2015年可以說是有了一個(gè)指數(shù)級(jí)的增長(zhǎng)。雖然蘋果更新系統(tǒng)的速度非??觳⑶覠o法降級(jí),但隨著老設(shè)備(iPhone 4s及以下已無法升級(jí)iOS 10)越來越多,并且用戶對(duì)新系統(tǒng)期望越來越低,iOS設(shè)備的更新率已經(jīng)變得非常緩慢。
根據(jù)某專業(yè)移動(dòng)分析平臺(tái)2016年12月的數(shù)據(jù)可以看到,僅有3.28%的設(shè)備更新了最新版的iOS 10.2。這意味著96.72%的設(shè)備都有被最近剛發(fā)布的mach_portal漏洞攻擊的風(fēng)險(xiǎn)。我們相信,在新的一年,iOS的漏洞數(shù)量還會(huì)持續(xù)增加,并且隨著漏洞利用技術(shù)的公開,黑灰產(chǎn)也極有可能利用漏洞對(duì)用戶進(jìn)行攻擊,希望廣大用戶一定要注意自己iOS設(shè)備的安全。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
iOS自定義日期、時(shí)間、城市選擇器實(shí)例代碼
這篇文章主要介紹了iOS自定義日期、時(shí)間、城市選擇器實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05iOS在固定的label上動(dòng)態(tài)顯示所有文字
這篇文章給大家主要介紹了iOS中如何實(shí)現(xiàn),在固定的label上動(dòng)態(tài)顯示所有文字的方法,文中給出了示例和思路,對(duì)大家的理解很有幫助,感興趣的朋友們下面來一起看看吧。2016-10-10總結(jié)iOS App開發(fā)中控制屏幕旋轉(zhuǎn)的幾種方式
這篇文章主要介紹了iOS app開發(fā)中控制屏幕旋轉(zhuǎn)的方法總結(jié),分為自動(dòng)旋轉(zhuǎn)和手動(dòng)旋轉(zhuǎn)以及強(qiáng)制旋轉(zhuǎn)三種情況,代碼為Objective-C語言,需要的朋友可以參考下2016-02-02iOS UITableView 拖動(dòng)排序?qū)崿F(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了iOS UITableView 拖動(dòng)排序?qū)崿F(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09iOS10 App適配權(quán)限 Push Notifications 字體Frame 遇到的問題
這篇文章主要介紹了iOS10 App適配權(quán)限 Push Notifications 字體Frame 遇到的問題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09