谷歌“Project Zero”團(tuán)隊近日發(fā)現(xiàn)一個嚴(yán)重的 Wi-Fi晶片漏洞,目前涉及到的機(jī)型包括iPhone7、三星S7edge等各大主流機(jī)型,這些手機(jī)搭載的博通Wi-Fi芯片存在的后門安全漏洞,非常容易被黑客入侵。考慮到這個漏洞對上億部手機(jī)所產(chǎn)生的影響,美國國家標(biāo)準(zhǔn)和技術(shù)研究所為補丁嚴(yán)重性的評級高達(dá)9.8分(滿分10分)。下面這篇文章就對 iOS 系統(tǒng)的 Wi-Fi 晶片漏洞細(xì)節(jié)進(jìn)行了詳細(xì)剖析, 做了不改變原意的整理。
1. 摘要
隨著iOS 11的發(fā)布,多個BroadCom WiFi 芯片的高危漏洞被公開[1]。這些漏洞對上億臺未來得及更新的iOS設(shè)備造成了嚴(yán)重的安全威脅。黑客可對同一WiFi網(wǎng)絡(luò)下的設(shè)備發(fā)起攻擊,遠(yuǎn)程控制受害設(shè)備的 WiFi 芯片,甚至進(jìn)一步攻破 iOS 內(nèi)核。本文對 iOS 設(shè)備 WiFI 芯片相關(guān)漏洞進(jìn)行簡要技術(shù)分析,然后根據(jù) iOS設(shè)備的系統(tǒng)版本統(tǒng)計出受影響的規(guī)模。
截至9月27日,國內(nèi)92.3%的iOS用戶都受到相關(guān)高危漏洞的威脅。我們 呼吁用戶盡快升級iOS系統(tǒng)到最新版本,并號召手機(jī)廠商采用更有效的防護(hù)技術(shù),避免用戶受到已知高危漏洞的威脅。
2. BroadCom WiFi芯片漏洞技術(shù)分析
本文著重分析兩個BroadCom WiFi芯片漏洞:CVE-2017-11120和CVE-2017-11121。這兩個漏洞都是WiFi 芯片固件代碼在處理數(shù)據(jù)幀時缺乏對特定字段的嚴(yán)格校驗。攻擊者可以利用它們制造內(nèi)存破壞,實現(xiàn)任意代碼執(zhí)行,獲得對設(shè)備的遠(yuǎn)程控制。
2.1 漏洞CVE-2017-11120
iOS設(shè)備搭載的BroadCom WiFi芯片采用了快速基本服務(wù)設(shè)置轉(zhuǎn)換(Fast BSS Transition)和無線資源管理(Radio Resource Management)標(biāo)準(zhǔn)。在接入無線接入點(Access Point,簡稱AP)后,iOS設(shè)備會發(fā)送相鄰接入點請求(Neighbor Report Request),AP則返回相鄰接入點應(yīng)答(Neighbor Report Response),包含當(dāng)前無線局域網(wǎng)內(nèi)的相鄰AP以及各自的BSSID,Operating Class和Channel Number等信息。在處理Neighbor Report Response數(shù)據(jù)幀時,BroadCom WiFi芯片將每一種Operating Class和Neighbor Report信息保存在一個456字節(jié)的內(nèi)存塊中(如圖1所示),并且將這些塊通過指針串接起來。其中,Neighbor Count Array記錄了各個Channel Number的Neighbor數(shù)量。Array長度為450字節(jié),每2個字節(jié)記錄一個Channel Number,所以最大可記錄的Channel Number為224(0xE0)。
▲圖1:BroadCom WiFi芯片記錄Neighbor Report Response信息的內(nèi)存塊結(jié)構(gòu)[2]
▲圖2:BroadCom WiFi芯片處理Neighbor Report Response信息的函數(shù)[2]
如圖 2 所示,WiFi 芯片固件里位于地址 0xAC0A8 的函數(shù)(簡稱function_AC0A8,下同)首先在串聯(lián)的內(nèi)存塊中查找Operating Class對應(yīng)的條目,如果沒有找到,則會動態(tài)創(chuàng)建一個條目 ,然后從數(shù)據(jù)幀中讀出Channel Number作為數(shù)組索引,定位到 Neighbor Count Array 中元素,將其值加一。此過程并沒有對Channel Number做出校驗,當(dāng)偽造的數(shù)據(jù)幀中 Channel Number大于0xE0(如0xFF)時,上述過程將會造成內(nèi)存越界寫。攻擊者可以通過內(nèi)存越界寫改變關(guān)鍵指針數(shù)據(jù)或者控制流元素,一步步接管代碼執(zhí)行。值得一提的是,BroadCom WiFi 芯片里沒有 ASLR、DEP 等防護(hù),攻擊者可以很容易做代碼改寫,注入任意代碼執(zhí)行。
此漏洞影響 iOS 11.0 以前的設(shè)備。目前此漏洞的利用代碼已公開[2], 攻擊者能直接復(fù)用這一利用代碼攻擊漏洞設(shè)備,在WiFi芯片中插入后門,并在用戶無感知的情況下實現(xiàn)對設(shè)備的遠(yuǎn)程控制。
2.2 漏洞CVE-2017-11121
根據(jù) Fast BSS Transition 標(biāo)準(zhǔn),當(dāng)設(shè)備在無線網(wǎng)絡(luò)環(huán)境下進(jìn)行快速漫游(fast roaming)時,會觸發(fā)校驗和重關(guān)聯(lián)(reassociation)操作。Reassociation操作會對組臨時秘鑰(Group Temporal Key,簡稱GTK)進(jìn)行解密和安裝。這兩個過程中存在多處 memcpy 調(diào)用,調(diào)用前都缺少對 copy 長度的校驗,可能導(dǎo)致內(nèi)存破壞。
▲圖3:BroadCom WiFi芯片重關(guān)聯(lián)操作時GTK解密和安裝的相關(guān)函數(shù)[3]
如圖3所示,reassociation 由 function_8462C 函數(shù)負(fù)責(zé),它調(diào)用 function_6D8對GTK 解密,然后會繼續(xù)調(diào)用 function_C9C14對GTK 進(jìn)行安裝。相關(guān)代碼片段如下:
上述處理過程中,有兩處 memcpy 調(diào)用存在問題:
1)GTK解密函數(shù) function_6D8 中,當(dāng)構(gòu)造的畸形數(shù)據(jù)幀中 gtk_subelem[1]為11時,函數(shù)參數(shù)input_length為0。在第二處調(diào)用 memcpy 時,input_length-8為0xfffffff8,這將導(dǎo)致大量數(shù)據(jù)被 copy,破壞 stack上的數(shù)據(jù);
2)GTK安裝函數(shù) function_C9C14,參數(shù) gtk_len 取值為 gtk_subelem[4]。攻擊者可以構(gòu)造畸形數(shù)據(jù)幀,使 gtk_subelem[4]大于164,函數(shù)中 memcpy 調(diào)用前沒有檢查 gtk_len 取值,可能導(dǎo)致堆溢出。
攻擊者同樣可以攻擊此漏洞造成內(nèi)存破壞,實現(xiàn)遠(yuǎn)程任意代碼執(zhí)行。此漏洞影響系統(tǒng)版本在11.0以前的iOS設(shè)備。
3. 通過WiFi芯片漏洞可進(jìn)一步攻擊iOS內(nèi)核
攻擊者可將WiFi芯片漏洞作為跳板,進(jìn)一步攻擊 iOS 內(nèi)核。iOS 設(shè)備進(jìn)行 WiFi 通信時,內(nèi)核的 WiFi 驅(qū)動會向 WiFi 芯片發(fā)送 ioctl 請求。如果WiFi芯片被攻擊者控制,攻擊者能夠篡改 ioctl 返回的結(jié)果數(shù)據(jù),觸發(fā)內(nèi)核WiFi驅(qū)動中結(jié)果處理函數(shù)的漏洞,從而實現(xiàn)對 iOS 內(nèi)核的攻擊。
▲表1: 當(dāng)攻擊者控制WiFi芯片后,可用于攻擊iOS內(nèi)核驅(qū)動的漏洞
表1中列舉了可由WiFi芯片作為跳板攻擊內(nèi)核的漏洞。漏洞原理簡要說明如下:
●CVE-2017-7103:驅(qū)動AppleBCMWLANBusInterfacePCIe中的函數(shù)completeFirmwareTimestampMsg,在Firmware Timestamp消息完成后會被回調(diào)。函數(shù)內(nèi)部將Timestamp消息封裝為mbuf,交由processFirmwareTimeSyncMessage處理,mbuf pkthdr_len設(shè)置為消息中timestamp_length字段的值。processFirmwareTimeSyncMessage函數(shù)內(nèi)部存在一處memmove調(diào)用,長度參數(shù)為pkthdr_len。程序沒有對pkthdr_len進(jìn)行檢查,構(gòu)造過大的pkthdr_len會使memmove調(diào)用產(chǎn)生內(nèi)存溢出。
●CVE-2017-7105:驅(qū)動AppleBCMWLANCore中的函數(shù)assembleBGScanResults,在處理WLC_GET_VAR ioctl返回的結(jié)果時,會調(diào)用IOMalloc分配一塊堆內(nèi)存,內(nèi)存分配長度根據(jù)返回結(jié)果中的字段計算得出。代碼中缺少對分配長度的溢出校驗,在WiFi芯片被控制情況下,攻擊者可通過篡改ioctl返回數(shù)據(jù),使IOMalloc分配長度在計算時產(chǎn)生整型溢出,進(jìn)而導(dǎo)致過小的內(nèi)存分配,后續(xù)對分配內(nèi)存的copy操作可能引起堆溢出。
●CVE-2017-7108:驅(qū)動AppleBCMWLANCore中的updateRateSetAsyncCallback函數(shù),在處理WLC_GET_CURR_RATESET ioctl請求結(jié)果時,首先將0x14字節(jié)的結(jié)果數(shù)據(jù)中讀到棧中buffer。rate數(shù)目由buffer中前4字節(jié)獲得,接著函數(shù)從buffer+4處循環(huán)讀出rate數(shù)據(jù)。由于在循環(huán)操作前缺少對rate數(shù)目的校驗,攻擊者可以篡改ioctl返回的rate結(jié)果,將rate數(shù)目字段改為過大的值,實現(xiàn)對buffer數(shù)據(jù)的越界讀,造成棧上數(shù)據(jù)信息泄露。
●CVE-2017-7110:設(shè)備向WiFi芯片發(fā)送獲得所有Vendor IE列表信息的ioctl請求,返回結(jié)果交由驅(qū)動AppleBCMWLANCore中setVendorIE函數(shù)處理。setVendorIE內(nèi)部調(diào)用obvcopy時,length參數(shù)根據(jù)ioctl返回結(jié)果中字段的計算得出。然而程序中缺乏對length值的校驗,在WiFi芯片受控下,攻擊者可以構(gòu)造畸形請求結(jié)果,使得obvcopy的length過大,導(dǎo)致堆溢出。
●CVE-2017-7112:驅(qū)動AppleBCMWLANCore中handleTraceEvent函數(shù),在處理WLC_E_TRACE消息時,缺少對消息頭中l(wèi)en字段的檢查。而后根據(jù)len計算得到的數(shù)組索引,進(jìn)而改寫數(shù)組內(nèi)容時,可能對數(shù)組以外的內(nèi)存寫入NULL byte。
4. 絕大多數(shù)iOS用戶受到WiFi高危漏洞威脅
截至2017年9月27日,通過對國內(nèi)上億臺iOS設(shè)備的系統(tǒng)版本進(jìn)行的統(tǒng)計,排除虛假設(shè)備干擾結(jié)果后,詳細(xì)系統(tǒng)版本比例分布如圖4所示。從左半部分開始,逆時針方向按新舊版本次序依次為最新的iOS 11.x到iOS 7.x。其中,最新的iOS 11.x設(shè)備占比為7.7%,iOS 10.3.3系統(tǒng)占比50.8%,此版本之外的iOS 10.x版本(10.0.0至10.3.2)占比23.8%。早期的iOS 9.x設(shè)備占比11.2%,iOS 8.x 占比 5.8%,更早期的iOS 7占比 0.7%。
從圖中可以看到, 目前國內(nèi)升級到最新的iOS 11.x系統(tǒng)的設(shè)備僅占7.7%,有近半的iOS設(shè)備系統(tǒng)版本為10.3.3。 其余設(shè)備停留在10.3.2到更早的7.x等不同的版本。這些舊版iOS系統(tǒng)的設(shè)備(高達(dá)92.3%)面臨著文中列舉的WiFi芯片高危漏洞帶來的安全威脅。
▲圖4:國內(nèi)iOS設(shè)備系統(tǒng)版本分布(2017年9月27日)
此外,我們統(tǒng)計了從2017年9月11日到2017年9月27日(iOS 11的升級推出于9月19日)iOS各個系統(tǒng)版本的升級情況。結(jié)果如圖5所示。可以看到,從9月19日開始推送iOS 11.0升級至9月27日期間,iOS 11.x用戶占比緩慢遞增至7.7%,升級主要來源于iOS 10.3.3。整個統(tǒng)計期間iOS 7.x至10.x的用戶占比基本不變,也就是說,仍然有近41.5%的用戶選擇停留在iOS 10.3.2及以下系統(tǒng)不升級。
▲圖5:國內(nèi)iOS設(shè)備系統(tǒng)升級趨勢(2017年9月11日-2017年9月27日)
5. 結(jié)語
本文分析了近期曝出的iOS設(shè)備WiFi芯片高危漏洞以及影響范圍。文中提及的漏洞雖然已在iOS 11得到修復(fù),但通過實際統(tǒng)計發(fā)現(xiàn),絕大多數(shù)用戶由于各種原因沒有升級上來,仍面臨嚴(yán)重的安全威脅。建議用戶及時升級系統(tǒng)到最新版本,避免受到高危漏洞影響。同時,我們也呼吁手機(jī)以及硬件廠商采取更積極的防護(hù)技術(shù),避免用戶受到已知的高危漏洞威脅。