◆馬璐萍 朱大立
(1.中國科學院信息工程研究所 北京 100093;2.中國科學院大學網絡空間安全學院 北京 100049)
文獻[1]提供了一種Android 系統漏洞挖掘的方法和裝置:獲取與任一Android 系統服務接口相應的函數及與函數相匹配的參數類型信息;基于參數類型信息,生成與函數相匹配的隨機參數;基于函數及與函數相匹配的隨機參數,通過Android 系統服務接口執行調用處理,并提取執行結果日志;根據執行結果日志,判斷Android 系統服務接口是否存在系統漏洞。該方案主動模擬Android 系統服務接口執行調用處理的情形,在調用處理完畢后查看系統崩潰情況,即可準確預知在實際應用場景中,Android 系統服務接口執行哪些調用處理時會發生崩潰,可為挖掘到的系統漏洞提供修復方案和可靠依據。
但是,此方案是關于挖掘Android 系統的漏洞,主要側重點在于挖掘出Android 系統中存在的漏洞,而Android 系統存在的漏洞對于不同移動終端的系統安全的威脅大小是不一致的,該方案沒有對這些漏洞的可利用性及可利用途徑進行評估和預測,不能有效分析出漏洞對移動終端安全的威脅大小程度。
文獻[2]提出一種Android 系統的堆溢出漏洞驗證裝置和方法,包括:漏洞檢測模塊,用于向堆緩沖區填寫第一輸入樣本,檢測是否發生堆溢出,以確定堆溢出漏洞的存在性;利用判定模塊,用于根據漏洞檢測模塊的結果,向堆緩沖區填寫第二輸入樣本,通過執行漏洞引發Android 系統的系統進程崩潰,以確定堆溢出漏洞被利用的可能性;利用驗證模塊,用于根據利用判定模塊的結果,向堆緩沖區填寫第三輸入樣本,通過執行漏洞,控制Android 系統的系統進程的執行流程,以驗證堆溢出漏洞的可利用性。但是,該方案是判斷Android 系統中堆溢出漏洞的存在情況及可利用情況,無法對UAF 漏洞的存在情況及可利用情況進行判斷。
為了解決現有技術存在的不能針對具體的UAF 漏洞進行可利用性及利用方式的有效判定和預測的問題,本文提出一種UAF 漏洞利用判斷方法。
本文提出一種UAF 漏洞利用判斷方法,本節將具體介紹其實現原理。
本文所提出的方法共分為4 個步驟,如圖1 所示。在步驟S1 中分析系統的內存分配方式、系統中存在UAF 漏洞的函數、所述函數的參數以及所述函數的使用場景,然后根據分析結果,確定覆蓋已釋放內存區域的實現方式,即構造用于覆蓋已釋放的內存區域的第一函數序列運行樣本。

圖1 步驟
包括4 個模塊(如圖2 所示):第一構造模塊21,漏洞驗證模塊22、第二構造模塊23 和漏洞利用模塊24。

圖2 4 個模塊
其中,第一構造模塊21,用于分析移動終端操作系統的內存分配方式、所述系統中存在UAF 漏洞的函數、所述函數的參數以及所述函數的使用場景,構造用于覆蓋已被異常釋放的內存區域的第一函數序列運行樣本。
電子商務作為重要的新興產業,帶動了很多嘉興市中小型物流企業的發展。2017年嘉興電子商務交易額1454.25億元,在全省排名第4,同比增長30.7%。跨境電子商務網絡零售出口額7.44億元,網店4.94萬家。近年來,嘉興市委市政府在推進“電商換市”戰略中,“出政策、搭平臺、引人才、促發展”,使得嘉興電子商務成為全省網路零售增長幅度最明顯的三個城市之一。
漏洞驗證模塊22,用于運行所述第一函數序列運行樣本,確認所述已釋放的內存區域被成功覆蓋。
第二構造模塊23,用于分析所述第一函數序列運行樣本在運行過程中所產生的可控對象的內容,構造用于控制所述系統中系統進程的執行流程的第二函數序列運行樣本。
漏洞利用模塊24,用于運行所述第二函數序列運行樣本,確認UAF 漏洞能夠被利用。
本文提出的漏洞利用判斷結果有兩種:漏洞存在但不可利用、漏洞存在且可利用。漏洞可利用的依據是:攻擊者可以通過執行漏洞控制移動終端操作系統的系統進程的執行流程。
第一構造模塊21 用于分析系統的內存分配方式、所述系統中存在UAF 漏洞的函數、所述函數的參數以及所述函數的使用場景,然后根據分析結果,確定覆蓋已釋放內存區域的實現方式,即確定用于覆蓋已釋放的內存區域的第一函數序列運行樣本。
漏洞驗證模塊22 用于運行所述第一函數序列運行樣本,確認所述已釋放的內存區域被成功覆蓋。運行第一函數序列運行樣本所要實現的功能為:將構造的數據覆蓋已被釋放的目標對象所對應的內存區域。如果可以檢測到構造的數據可以成功覆蓋已釋放的目標對象所對應的內存區域,則說明此漏洞可能可以被利用。如果已釋放的目標對象所對應的內存區域無法被覆蓋,則說明此漏洞存在但不能被利用。比如有的UAF 漏洞,它的UAF 對象釋放和重用操作就在同一個函數中,剛剛釋放完馬上就重用了,這種情況根本沒有機會去進行內存覆蓋,從而無法對其進行利用。
第二構造模塊23 用于分析所述第一函數序列運行樣本在運行過程中所產生的可控對象的內容,構造用于控制移動終端操作系統中系統進程的執行流程的第二函數序列運行樣本。在第一函數序列運行樣本運行成功的基礎上,通過分析第一函數序列運行樣本在運行過程中所產生的可控對象的內容,構造第二函數序列運行樣本,所述可控對象是指用構造的數據覆蓋已釋放的目標對象后,所述目標對象于是就成了可控對象。分析所述可控對象的內容,構造第二函數序列運行樣本,使得再次使用所述已釋放的目標對象,嘗試通過某種方式獲得在內核中執行代碼的能力,從而控制系統進程的執行流程。
運行第二函數序列運行樣本所要實現的功能是:使得系統重引用已釋放的目標對象,這時真正執行的是填充到已釋放目標對象所對應的內存區域中的惡意數據或函數等,這會使得系統流程走入了惡意構造的代碼,以此來控制系統進程的執行流程,如果檢測出通過運行第二函數運行序列可以控制系統進程的執行流程,則可判斷此漏洞可以被利用。
漏洞利用模塊24 具體用于:運行第二函數序列運行樣本,執行一個顯示的功能;若檢測到所述顯示的功能被成功執行,則確定UAF漏洞可利用。若能夠成功覆蓋已釋放的內存區域,則向存在UAF 漏洞的系統運行第二函數序列運行樣本,實現控制移動終端操作系統中系統進程的執行流程,同時執行一個顯示的任務,比如打印一個字符,通過是否可以成功執行此顯示任務驗證此漏洞的可利用性,并給出漏洞利用途徑。
為驗證本文所提出的UAF 漏洞利用判斷方法的有效性,我們進行了如下幾方面的工作:
1)使用本文所提出的方法已有Android 系統中的典型UAF漏洞進行分析,得出此漏洞的可用性;
2)對1)中分析的漏洞進行人工分析以驗證本文提出方法的正確性。
例如:
分析漏洞CVE-2014-3153,分析所述漏洞由于釋放重引用對象rt_waiter 指向前一個節點和后一個節點的地址已被惡意構造的內容覆蓋,rt_waiter 指向的下一個節點可以被惡意構造為一個指向用戶內存的假的rt_waiter 節點,以此可以構造第二函數序列運行樣本,此樣本的目的是在假節點的前面插入一個新的真的結點,通過此操作就可以泄露出內核的地址,進而進一步控制系統的執行流程。本文提出的方法可以給出此漏洞的可用性及風險。
實驗結果表明,本文提出的方法可有效判斷UAF 漏洞的可利用性及其風險。
本文提出的一種UAF 漏洞利用判斷方法,通過觸發移動終端操作系統中特定UAF 漏洞,繼而構造并運行函數序列運行樣本,可以有效判斷系統中特定UAF 漏洞能否被攻擊者利用,從而評估相應UAF 漏洞給系統帶來的安全風險,促使安全研究人員及時采取保護措施對系統進行安全加固,以提高系統安全。