◆馬璐萍 朱大立
(1.中國科學(xué)院信息工程研究所 北京 100093;2.中國科學(xué)院大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 北京 100049)
文獻(xiàn)[1]提供了一種Android 系統(tǒng)漏洞挖掘的方法和裝置:獲取與任一Android 系統(tǒng)服務(wù)接口相應(yīng)的函數(shù)及與函數(shù)相匹配的參數(shù)類型信息;基于參數(shù)類型信息,生成與函數(shù)相匹配的隨機(jī)參數(shù);基于函數(shù)及與函數(shù)相匹配的隨機(jī)參數(shù),通過Android 系統(tǒng)服務(wù)接口執(zhí)行調(diào)用處理,并提取執(zhí)行結(jié)果日志;根據(jù)執(zhí)行結(jié)果日志,判斷Android 系統(tǒng)服務(wù)接口是否存在系統(tǒng)漏洞。該方案主動模擬Android 系統(tǒng)服務(wù)接口執(zhí)行調(diào)用處理的情形,在調(diào)用處理完畢后查看系統(tǒng)崩潰情況,即可準(zhǔn)確預(yù)知在實際應(yīng)用場景中,Android 系統(tǒng)服務(wù)接口執(zhí)行哪些調(diào)用處理時會發(fā)生崩潰,可為挖掘到的系統(tǒng)漏洞提供修復(fù)方案和可靠依據(jù)。
但是,此方案是關(guān)于挖掘Android 系統(tǒng)的漏洞,主要側(cè)重點在于挖掘出Android 系統(tǒng)中存在的漏洞,而Android 系統(tǒng)存在的漏洞對于不同移動終端的系統(tǒng)安全的威脅大小是不一致的,該方案沒有對這些漏洞的可利用性及可利用途徑進(jìn)行評估和預(yù)測,不能有效分析出漏洞對移動終端安全的威脅大小程度。
文獻(xiàn)[2]提出一種Android 系統(tǒng)的堆溢出漏洞驗證裝置和方法,包括:漏洞檢測模塊,用于向堆緩沖區(qū)填寫第一輸入樣本,檢測是否發(fā)生堆溢出,以確定堆溢出漏洞的存在性;利用判定模塊,用于根據(jù)漏洞檢測模塊的結(jié)果,向堆緩沖區(qū)填寫第二輸入樣本,通過執(zhí)行漏洞引發(fā)Android 系統(tǒng)的系統(tǒng)進(jìn)程崩潰,以確定堆溢出漏洞被利用的可能性;利用驗證模塊,用于根據(jù)利用判定模塊的結(jié)果,向堆緩沖區(qū)填寫第三輸入樣本,通過執(zhí)行漏洞,控制Android 系統(tǒng)的系統(tǒng)進(jìn)程的執(zhí)行流程,以驗證堆溢出漏洞的可利用性。但是,該方案是判斷Android 系統(tǒng)中堆溢出漏洞的存在情況及可利用情況,無法對UAF 漏洞的存在情況及可利用情況進(jìn)行判斷。
為了解決現(xiàn)有技術(shù)存在的不能針對具體的UAF 漏洞進(jìn)行可利用性及利用方式的有效判定和預(yù)測的問題,本文提出一種UAF 漏洞利用判斷方法。
本文提出一種UAF 漏洞利用判斷方法,本節(jié)將具體介紹其實現(xiàn)原理。
本文所提出的方法共分為4 個步驟,如圖1 所示。在步驟S1 中分析系統(tǒng)的內(nèi)存分配方式、系統(tǒng)中存在UAF 漏洞的函數(shù)、所述函數(shù)的參數(shù)以及所述函數(shù)的使用場景,然后根據(jù)分析結(jié)果,確定覆蓋已釋放內(nèi)存區(qū)域的實現(xiàn)方式,即構(gòu)造用于覆蓋已釋放的內(nèi)存區(qū)域的第一函數(shù)序列運行樣本。
圖1 步驟
包括4 個模塊(如圖2 所示):第一構(gòu)造模塊21,漏洞驗證模塊22、第二構(gòu)造模塊23 和漏洞利用模塊24。
圖2 4 個模塊
其中,第一構(gòu)造模塊21,用于分析移動終端操作系統(tǒng)的內(nèi)存分配方式、所述系統(tǒng)中存在UAF 漏洞的函數(shù)、所述函數(shù)的參數(shù)以及所述函數(shù)的使用場景,構(gòu)造用于覆蓋已被異常釋放的內(nèi)存區(qū)域的第一函數(shù)序列運行樣本。
電子商務(wù)作為重要的新興產(chǎn)業(yè),帶動了很多嘉興市中小型物流企業(yè)的發(fā)展。2017年嘉興電子商務(wù)交易額1454.25億元,在全省排名第4,同比增長30.7%??缇畴娮由虅?wù)網(wǎng)絡(luò)零售出口額7.44億元,網(wǎng)店4.94萬家。近年來,嘉興市委市政府在推進(jìn)“電商換市”戰(zhàn)略中,“出政策、搭平臺、引人才、促發(fā)展”,使得嘉興電子商務(wù)成為全省網(wǎng)路零售增長幅度最明顯的三個城市之一。
漏洞驗證模塊22,用于運行所述第一函數(shù)序列運行樣本,確認(rèn)所述已釋放的內(nèi)存區(qū)域被成功覆蓋。
第二構(gòu)造模塊23,用于分析所述第一函數(shù)序列運行樣本在運行過程中所產(chǎn)生的可控對象的內(nèi)容,構(gòu)造用于控制所述系統(tǒng)中系統(tǒng)進(jìn)程的執(zhí)行流程的第二函數(shù)序列運行樣本。
漏洞利用模塊24,用于運行所述第二函數(shù)序列運行樣本,確認(rèn)UAF 漏洞能夠被利用。
本文提出的漏洞利用判斷結(jié)果有兩種:漏洞存在但不可利用、漏洞存在且可利用。漏洞可利用的依據(jù)是:攻擊者可以通過執(zhí)行漏洞控制移動終端操作系統(tǒng)的系統(tǒng)進(jìn)程的執(zhí)行流程。
第一構(gòu)造模塊21 用于分析系統(tǒng)的內(nèi)存分配方式、所述系統(tǒng)中存在UAF 漏洞的函數(shù)、所述函數(shù)的參數(shù)以及所述函數(shù)的使用場景,然后根據(jù)分析結(jié)果,確定覆蓋已釋放內(nèi)存區(qū)域的實現(xiàn)方式,即確定用于覆蓋已釋放的內(nèi)存區(qū)域的第一函數(shù)序列運行樣本。
漏洞驗證模塊22 用于運行所述第一函數(shù)序列運行樣本,確認(rèn)所述已釋放的內(nèi)存區(qū)域被成功覆蓋。運行第一函數(shù)序列運行樣本所要實現(xiàn)的功能為:將構(gòu)造的數(shù)據(jù)覆蓋已被釋放的目標(biāo)對象所對應(yīng)的內(nèi)存區(qū)域。如果可以檢測到構(gòu)造的數(shù)據(jù)可以成功覆蓋已釋放的目標(biāo)對象所對應(yīng)的內(nèi)存區(qū)域,則說明此漏洞可能可以被利用。如果已釋放的目標(biāo)對象所對應(yīng)的內(nèi)存區(qū)域無法被覆蓋,則說明此漏洞存在但不能被利用。比如有的UAF 漏洞,它的UAF 對象釋放和重用操作就在同一個函數(shù)中,剛剛釋放完馬上就重用了,這種情況根本沒有機(jī)會去進(jìn)行內(nèi)存覆蓋,從而無法對其進(jìn)行利用。
第二構(gòu)造模塊23 用于分析所述第一函數(shù)序列運行樣本在運行過程中所產(chǎn)生的可控對象的內(nèi)容,構(gòu)造用于控制移動終端操作系統(tǒng)中系統(tǒng)進(jìn)程的執(zhí)行流程的第二函數(shù)序列運行樣本。在第一函數(shù)序列運行樣本運行成功的基礎(chǔ)上,通過分析第一函數(shù)序列運行樣本在運行過程中所產(chǎn)生的可控對象的內(nèi)容,構(gòu)造第二函數(shù)序列運行樣本,所述可控對象是指用構(gòu)造的數(shù)據(jù)覆蓋已釋放的目標(biāo)對象后,所述目標(biāo)對象于是就成了可控對象。分析所述可控對象的內(nèi)容,構(gòu)造第二函數(shù)序列運行樣本,使得再次使用所述已釋放的目標(biāo)對象,嘗試通過某種方式獲得在內(nèi)核中執(zhí)行代碼的能力,從而控制系統(tǒng)進(jìn)程的執(zhí)行流程。
運行第二函數(shù)序列運行樣本所要實現(xiàn)的功能是:使得系統(tǒng)重引用已釋放的目標(biāo)對象,這時真正執(zhí)行的是填充到已釋放目標(biāo)對象所對應(yīng)的內(nèi)存區(qū)域中的惡意數(shù)據(jù)或函數(shù)等,這會使得系統(tǒng)流程走入了惡意構(gòu)造的代碼,以此來控制系統(tǒng)進(jìn)程的執(zhí)行流程,如果檢測出通過運行第二函數(shù)運行序列可以控制系統(tǒng)進(jìn)程的執(zhí)行流程,則可判斷此漏洞可以被利用。
漏洞利用模塊24 具體用于:運行第二函數(shù)序列運行樣本,執(zhí)行一個顯示的功能;若檢測到所述顯示的功能被成功執(zhí)行,則確定UAF漏洞可利用。若能夠成功覆蓋已釋放的內(nèi)存區(qū)域,則向存在UAF 漏洞的系統(tǒng)運行第二函數(shù)序列運行樣本,實現(xiàn)控制移動終端操作系統(tǒng)中系統(tǒng)進(jìn)程的執(zhí)行流程,同時執(zhí)行一個顯示的任務(wù),比如打印一個字符,通過是否可以成功執(zhí)行此顯示任務(wù)驗證此漏洞的可利用性,并給出漏洞利用途徑。
為驗證本文所提出的UAF 漏洞利用判斷方法的有效性,我們進(jìn)行了如下幾方面的工作:
1)使用本文所提出的方法已有Android 系統(tǒng)中的典型UAF漏洞進(jìn)行分析,得出此漏洞的可用性;
2)對1)中分析的漏洞進(jìn)行人工分析以驗證本文提出方法的正確性。
例如:
分析漏洞CVE-2014-3153,分析所述漏洞由于釋放重引用對象rt_waiter 指向前一個節(jié)點和后一個節(jié)點的地址已被惡意構(gòu)造的內(nèi)容覆蓋,rt_waiter 指向的下一個節(jié)點可以被惡意構(gòu)造為一個指向用戶內(nèi)存的假的rt_waiter 節(jié)點,以此可以構(gòu)造第二函數(shù)序列運行樣本,此樣本的目的是在假節(jié)點的前面插入一個新的真的結(jié)點,通過此操作就可以泄露出內(nèi)核的地址,進(jìn)而進(jìn)一步控制系統(tǒng)的執(zhí)行流程。本文提出的方法可以給出此漏洞的可用性及風(fēng)險。
實驗結(jié)果表明,本文提出的方法可有效判斷UAF 漏洞的可利用性及其風(fēng)險。
本文提出的一種UAF 漏洞利用判斷方法,通過觸發(fā)移動終端操作系統(tǒng)中特定UAF 漏洞,繼而構(gòu)造并運行函數(shù)序列運行樣本,可以有效判斷系統(tǒng)中特定UAF 漏洞能否被攻擊者利用,從而評估相應(yīng)UAF 漏洞給系統(tǒng)帶來的安全風(fēng)險,促使安全研究人員及時采取保護(hù)措施對系統(tǒng)進(jìn)行安全加固,以提高系統(tǒng)安全。