本發(fā)明屬于信息技術(shù)領(lǐng)域,具體涉及一種Android系統(tǒng)內(nèi)置應(yīng)用漏洞挖掘方法。實(shí)現(xiàn)快速發(fā)現(xiàn)所開發(fā)的APK的安全性,對維護(hù)Android系統(tǒng)穩(wěn)定和業(yè)務(wù)安全具有重要的意義。
背景技術(shù):
安卓目前已經(jīng)在全世界的手機(jī)操作系統(tǒng)的市場上,占有統(tǒng)治地位。安卓系統(tǒng)在智能手機(jī)的安裝率約為87%,而且還在繼續(xù)增長。安卓在不斷瘋漲的過程中面臨著一個嚴(yán)峻的問題——安全性,這個問題有可能會成為阻礙安卓發(fā)展的首要因素。國內(nèi)外多個安全組織及個人從事漏洞研究。兩個比較權(quán)威漏洞發(fā)布機(jī)構(gòu)是CVE(Common Vulnerabilities and Exposures)和CERT(Computer Emergency Response Team)。此外國外eEye、LSD等組織也對最新的漏洞進(jìn)行及時跟蹤分析,并給出相應(yīng)的漏洞解決方案。綠盟科技、啟明星辰等單位是國內(nèi)安全研究組織的代表。近幾年,IEEE S&P、CCS、Usenix Security、NDSS、ESORICS等10個頂級安全會議的發(fā)表論文情況來看,超過百篇與Android安全相關(guān),而在Android漏洞挖掘中強(qiáng)調(diào)了對海量APP的檢測,對擴(kuò)展性和精確要求較高,所以APP漏洞挖掘是Android漏洞挖掘的一個重要部分。APP(應(yīng)用程序,Application的縮寫)一般指手機(jī)軟件,APK文件是Android系統(tǒng)上應(yīng)用軟件的主要表現(xiàn)形式。Android應(yīng)用程序包含文件(Application Package File)是一種Android操作系統(tǒng)上的應(yīng)用程序安裝文件格式。APK文件本質(zhì)為ZIP格式,但后綴被修改為APK,通過使用UnZip解壓,可以獲得META-INF文件夾、res文件夾、AndroidManifest.xml文件、classes.dex文件、resources.arsc文件、lib文件夾等。Android系統(tǒng)內(nèi)置應(yīng)用程序的安全性在一定程度上決定了Android系統(tǒng)安全和系統(tǒng)業(yè)務(wù)的安全。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明公開了一種Android系統(tǒng)內(nèi)置應(yīng)用漏洞挖掘方法,使用了動態(tài)分析和靜態(tài)分析混淆的漏洞挖掘技術(shù),包括:
一種Android系統(tǒng)內(nèi)置應(yīng)用漏洞挖掘方法,其特征在于:
S1,建立一個Android漏洞庫;將漏洞分為以下8類:拒絕服務(wù)漏洞,跨站腳本攻擊漏洞,輸入驗(yàn)證漏洞,緩沖區(qū)溢出漏洞,敏感信息泄露漏洞,組件/權(quán)限暴露漏洞,SQL注入漏洞,其他;詳細(xì)分析每一類的漏洞的特點(diǎn),為每一類的漏洞整理出該類漏洞規(guī)則,并根據(jù)每類漏洞的威脅度附以不同的權(quán)值;
S2,將目標(biāo)APK文件進(jìn)行反編譯,得到包括Manifest文件、資源文件和代碼文件的文件;將反編譯后的Manifest文件和資源文件進(jìn)行解析,獲取應(yīng)用的權(quán)限申請、組件聲明和類函數(shù)調(diào)用等信息;再對相應(yīng)的可執(zhí)行文件進(jìn)行反匯編,對反匯編代碼進(jìn)行切片并進(jìn)行匯集;
S3,將匯集后的反匯編代碼通過語法詞法分析、危險API分析、控制流、數(shù)據(jù)流分析,得到目標(biāo)APK文件的行為特性,生成特征數(shù)據(jù);對反編譯后得到的smali代碼進(jìn)行詞法分析和語法分析,獲取危險函數(shù)調(diào)用信息;
S4,引入IDA工具對.so文件靜態(tài)分析;通過一段python代碼,實(shí)現(xiàn)從指定APP中提取所有的.so文件;將提取的.so文件導(dǎo)入IDA,反匯編.so文件得到二進(jìn)制代碼,通過二進(jìn)制代碼中靜態(tài)分析的地址和.so文件在內(nèi)存中的基址來定位目標(biāo)函數(shù);將二進(jìn)制代碼轉(zhuǎn)換為C語言代碼,利用IDA的功能模塊Graph View查看目標(biāo)APK的設(shè)計(jì)流程;
S5,漏洞匹配;針對不同種類的Android漏洞,通過編碼構(gòu)建相應(yīng)的漏洞檢測器,對靜態(tài)分析得到的特征數(shù)據(jù)進(jìn)行匹配檢測,判斷應(yīng)用是否存在相應(yīng)的漏洞;
S6,將S5中得到的漏洞類別以及對應(yīng)的權(quán)值和S4中.so文件分析結(jié)果,對目標(biāo)APK進(jìn)行整體風(fēng)險評估,生成靜態(tài)分析報告;
S7,在開始動態(tài)檢測前,獲取指定APK文件靜態(tài)報告中的威脅,監(jiān)測應(yīng)用程序API函數(shù)的調(diào)用;
S8,引入IDA對.so文件動態(tài)分析;使用IDA工具打開.so文件,找到指定的native層函數(shù);結(jié)合S4中APK的設(shè)計(jì)流程和IDA中的快捷鍵,得到函數(shù)的執(zhí)行流程;調(diào)試.so文件,將DA目錄中的android_server拷貝到設(shè)備的指定目錄下,修改android_server的運(yùn)行權(quán)限,用Root身份運(yùn)行android_server;使用adb forward進(jìn)行端口轉(zhuǎn)發(fā),讓遠(yuǎn)程調(diào)試端IDA可以連接到被調(diào)試端;使用IDA連接上轉(zhuǎn)發(fā)的端口,查看設(shè)備的所有進(jìn)程,找到需要調(diào)試的進(jìn)程;再次打開.so文件,找到需要調(diào)試的函數(shù)的相對地址,然后在調(diào)試頁面使用Ctrl+S找到.so文件的基地址,相加之后得到絕對地址,使用G鍵,跳轉(zhuǎn)到函數(shù)的地址處,下好斷點(diǎn)后運(yùn)行;觸發(fā)native層的函數(shù),利用單步調(diào)試,查看寄存器中的值;
S9,過集成Drozer動態(tài)分析框架,在命令行中輸入各種測試命令,確定攻擊面;針對可攻擊的地方,運(yùn)用滲透手段進(jìn)行測試;
S10,結(jié)合靜態(tài)檢測和動態(tài)檢測結(jié)果,生成檢測報告。
進(jìn)一步,步驟S3及S4之間還能存在以下步驟:
S31,生成目標(biāo)APK調(diào)用可視化文件,具體到目標(biāo)APK中類方法調(diào)用關(guān)系,將表示其調(diào)用關(guān)系的類調(diào)用圖采用YiFan Hu算法進(jìn)行可視化美化;并在第三方軟件Gephi中Filters選項(xiàng)設(shè)置相應(yīng)的Class_name,對實(shí)現(xiàn)可視化圖形進(jìn)行篩選;在DataLabortatory對Nodes節(jié)點(diǎn)篩選包含指定類和方法調(diào)用;最終以gexf格式存儲;
S32,分析應(yīng)用組件的生命周期函數(shù)和事件回調(diào)函數(shù);根據(jù)類調(diào)用圖模擬應(yīng)用中函數(shù)調(diào)用的情況,得到控制流圖。
本發(fā)明綜合靜態(tài)檢測和動態(tài)檢測結(jié)果,生成檢測報告。報告中按照威脅級進(jìn)行排列,有助于測試人員優(yōu)先處理威脅程度高的漏洞。
附圖說明
圖1為基于對APK文件反編譯進(jìn)行靜態(tài)漏洞挖掘過程;
圖2為基于Drozer框架的動態(tài)漏洞挖掘過程;
圖3為整體方法框架;
具體實(shí)施方式
基于對APK文件反編譯進(jìn)行漏洞挖掘
S1,建立一個Android漏洞庫;分析每一類的漏洞的特點(diǎn),為每一類的漏洞整理出該類漏洞規(guī)則,并根據(jù)每類漏洞的威脅度附以不同的權(quán)值;
S2,將目標(biāo)APK文件進(jìn)行反編譯,得到包括Manifest文件、資源文件和代碼文件的文件;將反編譯后的Manifest文件和資源文件進(jìn)行解析,獲取應(yīng)用的權(quán)限申請、組件聲明和類函數(shù)調(diào)用等信息;再對相應(yīng)的可執(zhí)行文件進(jìn)行反匯編,對反匯編代碼進(jìn)行切片并進(jìn)行匯集;
S3,將匯集后的反匯編代碼通過語法詞法分析、危險API分析、控制流、數(shù)據(jù)流分析,得到目標(biāo)APK文件的行為特性,生成特征數(shù)據(jù);對反編譯后得到的smali代碼進(jìn)行詞法分析和語法分析,獲取危險函數(shù)調(diào)用信息;
S31,生成目標(biāo)APK調(diào)用可視化文件,具體到目標(biāo)APK中類方法調(diào)用關(guān)系,將表示其調(diào)用關(guān)系的類調(diào)用圖采用YiFan Hu算法進(jìn)行可視化美化。并在第三方軟件Gephi中Filters選項(xiàng)設(shè)置相應(yīng)的Class_name,對實(shí)現(xiàn)可視化圖形進(jìn)行篩選;在DataLabortatory對Nodes節(jié)點(diǎn)篩選包含指定類和方法調(diào)用;最終以gexf格式存儲。
S32,分析應(yīng)用組件的生命周期函數(shù)和事件回調(diào)函數(shù)。根據(jù)類調(diào)用圖模擬應(yīng)用中函數(shù)調(diào)用的情況,得到控制流圖。
S4,引入IDA工具對.so文件靜態(tài)分析。通過一段python代碼,實(shí)現(xiàn)從指定APP中提取所有的.so文件;將提取的.so文件導(dǎo)入IDA,反匯編.so文件得到二進(jìn)制代碼,通過二進(jìn)制代碼中靜態(tài)分析的地址和.so文件在內(nèi)存中的基址來定位目標(biāo)函數(shù);將二進(jìn)制代碼轉(zhuǎn)換為C語言代碼,利用IDA的功能模塊Graph View查看目標(biāo)APK的設(shè)計(jì)流程;
S5,漏洞匹配。針對不同種類的Android漏洞,通過編碼構(gòu)建相應(yīng)的漏洞檢測器,對S3步驟的特征數(shù)據(jù)(例如:散列值、函數(shù)流程以及相關(guān)配置文件屬性值)與S1中的漏洞規(guī)則匹配,判斷目標(biāo)APK文件存在的漏洞。將判斷的漏洞類別結(jié)果與S1中不同類別漏洞威脅度結(jié)合,得到最終漏洞權(quán)值;
S6,將S5中得到的漏洞類別以及對應(yīng)的權(quán)值和S4中.so文件分析結(jié)果,對目標(biāo)APK進(jìn)行整體風(fēng)險評估,生成靜態(tài)分析報告。
APK動態(tài)檢測
S7,在開始動態(tài)檢測前,獲取指定APK文件靜態(tài)報告中的威脅,監(jiān)測應(yīng)用程序API函數(shù)的調(diào)用;
S8,引入IDA對.so文件動態(tài)分析。使用IDA工具打開.so文件,找到指定的native層函數(shù);結(jié)合S4中APK的設(shè)計(jì)流程和IDA中的快捷鍵,得到函數(shù)的執(zhí)行流程;調(diào)試.so文件,將DA目錄中的android_server拷貝到設(shè)備的指定目錄下,修改android_server的運(yùn)行權(quán)限,用Root身份運(yùn)行android_server;使用adb forward進(jìn)行端口轉(zhuǎn)發(fā),讓遠(yuǎn)程調(diào)試端IDA可以連接到被調(diào)試端;使用IDA連接上轉(zhuǎn)發(fā)的端口,查看設(shè)備的所有進(jìn)程,找到需要調(diào)試的進(jìn)程;再次打開.so文件,找到需要調(diào)試的函數(shù)的相對地址,然后在調(diào)試頁面使用Ctrl+S找到.so文件的基地址,相加之后得到絕對地址,使用G鍵,跳轉(zhuǎn)到函數(shù)的地址處,下好斷點(diǎn)后運(yùn)行;觸發(fā)native層的函數(shù),利用單步調(diào)試,查看寄存器中的值。
S9,過集成Drozer動態(tài)分析框架,在命令行中輸入各種測試命令,確定攻擊面。針對可攻擊的地方,運(yùn)用滲透手段進(jìn)行測試。
S10,靜態(tài)檢測和動態(tài)檢測結(jié)果,生成檢測報告。報告中按照威脅級進(jìn)行排列,有助于測試人員優(yōu)先處理威脅程度高的漏洞。