基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法及系統(tǒng),所述方法包括:S1、構(gòu)建待檢測(cè)應(yīng)用的控制流圖;S2、通過應(yīng)用程序編程接口API與預(yù)設(shè)權(quán)限的映射關(guān)系,在所述控制流圖上標(biāo)記可能泄露權(quán)限的節(jié)點(diǎn);S3、以所述可能泄露權(quán)限的節(jié)點(diǎn)為起點(diǎn),通過逆向的符號(hào)執(zhí)行遍歷所述控制流圖,尋找從所述起點(diǎn)到程序入口點(diǎn)的所有路徑,從所述起點(diǎn)到所述程序入口的所有路徑即為可能泄露權(quán)限的路徑。該方法使用逆向的符號(hào)執(zhí)行的方式,只需要遍歷從敏感應(yīng)用程序編程接口API調(diào)用點(diǎn)到程序入口點(diǎn)之間的所有可能路徑,避免遍歷與權(quán)限泄露無關(guān)的路徑,從而提高了檢測(cè)效率。
【專利說明】基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及移動(dòng)信息安全【技術(shù)領(lǐng)域】,尤其涉及一種基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法及系統(tǒng)。
【背景技術(shù)】
[0002]Android應(yīng)用的安全性已經(jīng)成為威脅產(chǎn)業(yè)發(fā)展的嚴(yán)峻問題。每天,軟件商店和病毒工具廠商每天都能收到上百甚至上千個(gè)可疑的惡意應(yīng)用樣本。如何對(duì)這些惡意應(yīng)用進(jìn)行快速、準(zhǔn)確的分析,確定其是否存在威脅以及威脅的嚴(yán)重程度,是安全分析專家的核心工作之一。安全專家對(duì)惡意軟件進(jìn)行細(xì)致的人工動(dòng)態(tài)分析是一個(gè)有效的手段,但是人工動(dòng)態(tài)分析需要耗費(fèi)大量的人力和時(shí)間,其檢測(cè)效率很低。
【發(fā)明內(nèi)容】
[0003]基于上述問題,本發(fā)明提供一種基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法及系統(tǒng),通過使用逆向的符號(hào)執(zhí)行的方式,只需要遍歷從敏感應(yīng)用程序編程接口 API調(diào)用點(diǎn)到程序入口點(diǎn)之間的所有可能路徑,避免遍歷與權(quán)限泄露無關(guān)的路徑,從而提高了檢測(cè)效率。
[0004]根據(jù)上述目的,本發(fā)明提供了一種基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法,所述方法包括:
[0005]S1、構(gòu)建待檢測(cè)應(yīng)用的控制流圖;
[0006]S2、通過API與預(yù)設(shè)權(quán)限的映射關(guān)系,在所述控制流圖上標(biāo)記可能泄露權(quán)限的節(jié)占.
[0007]S3、以所述可能泄露權(quán)限的節(jié)點(diǎn)為起點(diǎn),通過逆向的符號(hào)執(zhí)行遍歷所述控制流圖,尋找從所述起點(diǎn)到程序入口點(diǎn)的所有路徑,從所述起點(diǎn)到所述程序入口的所有路徑即為可能泄露權(quán)限的路徑。
[0008]其中,所述方法還包括:
[0009]對(duì)遍歷所述控制流圖得到的所有路徑的約束條件進(jìn)行求解,得到所有可能泄露權(quán)限的路徑的輸入條件。
[0010]在對(duì)遍歷所述控制流圖得到的路徑的約束條件的求解時(shí),當(dāng)任一條路徑的約束條件無解時(shí),則排除該路徑。
[0011]其中,所述方法還包括:
[0012]根據(jù)所述可能泄露權(quán)限的路徑、對(duì)應(yīng)約束條件和輸入條件,生成針對(duì)所述待檢測(cè)應(yīng)用的權(quán)限泄露風(fēng)險(xiǎn)報(bào)告。
[0013]其中,所述步驟S3具體包括:
[0014]S31,以標(biāo)記的所述可能泄露權(quán)限的節(jié)點(diǎn)為起點(diǎn),設(shè)定約束條件通過逆向的符號(hào)執(zhí)行遍歷所述控制流圖;
[0015]S32,當(dāng)在遍歷過程中遇到分支節(jié)點(diǎn)時(shí),對(duì)所述分支節(jié)點(diǎn)的各個(gè)分支分別設(shè)定約束條件進(jìn)行遍歷;
[0016]S33,重復(fù)步驟S32,直至遍歷到所述程序入口,從所述起點(diǎn)到所述程序入口點(diǎn)的所有路徑即為可能泄露權(quán)限的路徑。
[0017]其中,所所述步驟S32還包括:
[0018]當(dāng)在遍歷時(shí)發(fā)現(xiàn)對(duì)所述預(yù)設(shè)權(quán)限的檢查語句的調(diào)用時(shí),則結(jié)束該路徑的遍歷。
[0019]其中,所述控制流圖為過程間控制流圖。
[0020]根據(jù)本發(fā)明的另一個(gè)方面,提供一種基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)系統(tǒng),其特征在于,所述系統(tǒng)包括:
[0021]控制流圖構(gòu)建單元,用于構(gòu)建待檢測(cè)應(yīng)用的控制流圖;
[0022]可能泄露權(quán)限標(biāo)記單元,用于通過API與預(yù)設(shè)權(quán)限的映射關(guān)系,在所述控制流圖上標(biāo)記可能泄露權(quán)限的節(jié)點(diǎn);
[0023]控制流圖遍歷單元,用于以所述可能泄露權(quán)限的節(jié)點(diǎn)為起點(diǎn),通過逆向的符號(hào)執(zhí)行遍歷所述控制流圖,尋找從所述起點(diǎn)到程序入口點(diǎn)的所有路徑,所述從所述起點(diǎn)到所述程序入口的所有路徑即為可能泄露權(quán)限的路徑。
[0024]其中,所述系統(tǒng)還包括:
[0025]約束條件求解單元,用于對(duì)遍歷所述控制流圖得到的所有路徑的約束條件進(jìn)行求解,得到所有可能泄露權(quán)限的路徑的輸入條件。
[0026]其中,所述系統(tǒng)還包括:
[0027]權(quán)限泄露風(fēng)險(xiǎn)報(bào)告單元,用于根據(jù)所述可能泄露權(quán)限的路徑、對(duì)應(yīng)約束條件和輸入條件,生成針對(duì)所述待檢測(cè)應(yīng)用的權(quán)限泄露風(fēng)險(xiǎn)報(bào)告。
[0028]本發(fā)明所述的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法及系統(tǒng),通過使用逆向的符號(hào)執(zhí)行的方式,只需要遍歷從敏感API調(diào)用點(diǎn)到程序入口點(diǎn)之間的所有可能路徑,避免遍歷與權(quán)限泄露無關(guān)的路徑,從而避免全局性的正向執(zhí)行的開銷,提高了檢測(cè)效率。
【專利附圖】
【附圖說明】
[0029]通過參考附圖會(huì)更加清楚的理解本發(fā)明的特征和優(yōu)點(diǎn),附圖是示意性的而不應(yīng)理解為對(duì)本發(fā)明進(jìn)行任何限制,在附圖中:
[0030]圖1示出了本發(fā)明的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法的流程圖。
[0031]圖2示出了本發(fā)明的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)系統(tǒng)的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0032]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0033]圖1示出了本發(fā)明的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法的流程圖。
[0034]參照?qǐng)D1,本發(fā)明的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法的過程具體包括:
[0035]S1、構(gòu)建待檢測(cè)應(yīng)用的控制流圖;通過對(duì)待檢測(cè)應(yīng)用的二進(jìn)制字節(jié)碼進(jìn)行解析,通過字節(jié)碼分析,構(gòu)建待檢測(cè)應(yīng)用的過程間控制流圖。和過程內(nèi)的控制流圖不同,過程間控制流圖需要在調(diào)用函數(shù)的控制流圖中添加函數(shù)調(diào)用節(jié)點(diǎn)和函數(shù)返回結(jié)點(diǎn),并將這兩個(gè)節(jié)點(diǎn)和被調(diào)函數(shù)的入口和出口分別連接起來。
[0036]此外,對(duì)于Android應(yīng)用程序來說,應(yīng)用程序大量的調(diào)用了 Android的應(yīng)用框架API,而應(yīng)用程序框架在完成一些庫函數(shù)的工作后,又會(huì)回調(diào)被分析應(yīng)用的相關(guān)代碼。這樣,在控制流圖上,從應(yīng)用調(diào)用框架API到應(yīng)用代碼被回調(diào)的過程中,其實(shí)存在隱式的控制流關(guān)系。對(duì)于Android應(yīng)用的事件驅(qū)動(dòng)特性,這種隱式的控制流調(diào)用非常普遍。
[0037]因此,在生成的過程間控制流圖中顯示的添加這些控制依賴關(guān)系,例如線程的啟動(dòng),事件的監(jiān)聽和回調(diào),異步消息,Intent等相關(guān)代碼對(duì)應(yīng)的控制流圖節(jié)點(diǎn)都需要添加相應(yīng)的控制流邊。
[0038]S2、通過API與預(yù)設(shè)權(quán)限的映射關(guān)系,在所述控制流圖上標(biāo)記可能泄露權(quán)限的節(jié)點(diǎn)。
[0039]本發(fā)明的實(shí)施例中對(duì)應(yīng)用代碼進(jìn)行快速掃描,通過API及其對(duì)應(yīng)權(quán)限的映射表,找到對(duì)敏感權(quán)限的相關(guān)API調(diào)用點(diǎn),并在控制流圖上的相應(yīng)結(jié)點(diǎn)進(jìn)行標(biāo)記。這些結(jié)點(diǎn)也是下一步逆向符號(hào)執(zhí)行的起點(diǎn)。同時(shí),本實(shí)施例解析Android應(yīng)用中的Manifest, xml文件,找到程序的所有入口點(diǎn),并在控制流圖上對(duì)其進(jìn)行標(biāo)注。
[0040]S3、以所述可能泄露權(quán)限的節(jié)點(diǎn)為起點(diǎn),通過逆向的符號(hào)執(zhí)行遍歷所述控制流圖,尋找從所述起點(diǎn)到程序入口點(diǎn)的所有路徑,所述從所述起點(diǎn)到所述程序入口的所有路徑即為可能泄露權(quán)限的路徑。
[0041]步驟S3的具體過程包括:
[0042]以標(biāo)記的節(jié)點(diǎn)即敏感API調(diào)用點(diǎn)為起點(diǎn),進(jìn)行逆向的符號(hào)執(zhí)行,其執(zhí)行過程是一個(gè)對(duì)控制流圖遍歷并對(duì)節(jié)點(diǎn)語句進(jìn)行解釋執(zhí)行的過程。
[0043]逆向的符號(hào)執(zhí)行是和程序執(zhí)行相反的方向遍歷控制流圖,對(duì)于控制流圖中遍歷到的節(jié)點(diǎn),取出其對(duì)應(yīng)的語句進(jìn)行解析。整個(gè)解析的過程為每個(gè)變量維護(hù)了一個(gè)的符號(hào)表達(dá)式。對(duì)每個(gè)語句進(jìn)行解析的時(shí)候,需要根據(jù)不同的操作運(yùn)算符的邏輯,對(duì)操作數(shù)變量對(duì)應(yīng)的符號(hào)表達(dá)式進(jìn)行相應(yīng)的邏輯運(yùn)算,并算出被賦值變量所對(duì)應(yīng)的符號(hào)表達(dá)式。
[0044]在逆序遍歷的過程中,解析到一個(gè)新的語句時(shí),對(duì)于作為操作數(shù)的變量,用其符號(hào)表達(dá)式進(jìn)行替換。當(dāng)遇到分支語句后,會(huì)產(chǎn)生不同的路徑,將不同分支所對(duì)應(yīng)的路徑條件作為對(duì)應(yīng)變量的約束條件,并添加到相應(yīng)路徑的約束條件集合中。
[0045]另外,對(duì)于循環(huán)的goto語句,由于理論上可能存在無限的循環(huán),所以我們會(huì)給出一個(gè)對(duì)循環(huán)探索的上限。
[0046]最終,逆向符號(hào)執(zhí)行遍歷到控制流圖中程序入口點(diǎn)語句所對(duì)應(yīng)的結(jié)點(diǎn),一條路徑則符號(hào)執(zhí)行完畢。
[0047]此外,當(dāng)一條路徑在遍歷過程中發(fā)現(xiàn)對(duì)相應(yīng)權(quán)限檢查語句的調(diào)用時(shí),則該路徑可以直接停止遍歷,因?yàn)閷?duì)相應(yīng)權(quán)限的泄漏可以被權(quán)限檢查避免。
[0048]通過上述過程,當(dāng)所有路徑符號(hào)執(zhí)行完畢后,就可以得到可能泄漏權(quán)限的所有路徑及其對(duì)應(yīng)的約束條件集合。
[0049]將每個(gè)路徑所對(duì)應(yīng)的約束條件集合輸入給約束求解器,如果求解器有解,則找到了一條權(quán)限泄漏的路徑及其對(duì)應(yīng)的輸入變量的條件集合。否則,排除該路徑。這樣,最終得到針對(duì)設(shè)定權(quán)限的所有泄漏權(quán)限路徑及其對(duì)應(yīng)的輸入條件。
[0050]最后,可以根據(jù)得到的可能泄露權(quán)限的路徑、對(duì)應(yīng)約束條件和輸入條件,生成針對(duì)該待檢測(cè)應(yīng)用的權(quán)限泄露風(fēng)險(xiǎn)報(bào)告。
[0051]本發(fā)明的另一實(shí)施例中,提供了一種逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)系統(tǒng)。
[0052]圖2示出了本發(fā)明的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)系統(tǒng)的結(jié)構(gòu)框圖。
[0053]參照?qǐng)D2,本發(fā)明的實(shí)施例的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)系統(tǒng)包括:
[0054]控制流圖構(gòu)建單元10,用于構(gòu)建待檢測(cè)應(yīng)用的控制流圖;
[0055]可能泄露權(quán)限標(biāo)記單元20,用于通過API與預(yù)設(shè)權(quán)限的映射關(guān)系,在所述控制流圖上標(biāo)記可能泄露權(quán)限的節(jié)點(diǎn);
[0056]控制流圖遍歷單元30,用于以所述可能泄露權(quán)限的節(jié)點(diǎn)為起點(diǎn),通過逆向的符號(hào)執(zhí)行遍歷所述控制流圖,尋找從所述起點(diǎn)到程序入口點(diǎn)的所有路徑,從所述起點(diǎn)到所述程序入口的所有路徑即為可能泄露權(quán)限的路徑。
[0057]在本發(fā)明的另一個(gè)實(shí)施例中,基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)系統(tǒng)還可以包括:
[0058]約束條件求解單元40,用于對(duì)遍歷所述控制流圖得到的所有路徑的約束條件進(jìn)行求解,得到所有可能泄露權(quán)限的路徑的輸入條件。
[0059]權(quán)限泄露風(fēng)險(xiǎn)報(bào)告單元50,用于根據(jù)所述可能泄露權(quán)限的路徑、對(duì)應(yīng)約束條件和輸入條件,生成針對(duì)所述待檢測(cè)應(yīng)用的權(quán)限泄露風(fēng)險(xiǎn)報(bào)告。
[0060]本發(fā)明所述的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法及系統(tǒng),通過使用逆向的符號(hào)執(zhí)行的方式,只需要遍歷從敏感API調(diào)用點(diǎn)到程序入口點(diǎn)之間的所有可能路徑,避免遍歷與權(quán)限泄露無關(guān)的路徑,從而避免全局性的正向執(zhí)行的開銷,提高了檢測(cè)效率。
[0061]雖然結(jié)合附圖描述了本發(fā)明的實(shí)施方式,但是本領(lǐng)域技術(shù)人員可以在不脫離本發(fā)明的精神和范圍的情況下做出各種修改和變型,這樣的修改和變型均落入由所附權(quán)利要求所限定的范圍之內(nèi)。
【權(quán)利要求】
1.一種基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法,其特征在于,所述方法包括: 51、構(gòu)建待檢測(cè)應(yīng)用的控制流圖; 52、通過應(yīng)用程序編程接口API與預(yù)設(shè)權(quán)限的映射關(guān)系,在所述控制流圖上標(biāo)記可能泄露權(quán)限的節(jié)點(diǎn); 53、以所述可能泄露權(quán)限的節(jié)點(diǎn)為起點(diǎn),通過逆向的符號(hào)執(zhí)行遍歷所述控制流圖,尋找從所述起點(diǎn)到程序入口點(diǎn)的所有路徑,從所述起點(diǎn)到所述程序入口的所有路徑即為可能泄露權(quán)限的路徑。
2.根據(jù)權(quán)利要求1所述的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法,其特征在于,所述方法還包括: 對(duì)遍歷所述控制流圖得到的所有路徑的約束條件進(jìn)行求解,得到所有可能泄露權(quán)限的路徑的輸入條件。
3.根據(jù)權(quán)利要求2所述的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法,其特征在于,所述方法還包括: 在對(duì)遍歷所述控制流圖得到的路徑的約束條件的求解時(shí),當(dāng)任一條路徑的約束條件無解時(shí),則排除該路徑。
4.根據(jù)權(quán)利要求1所述的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法,其特征在于,所述方法還包括: 根據(jù)所述可能泄露權(quán)限的路徑、對(duì)應(yīng)約束條件和輸入條件,生成針對(duì)所述待檢測(cè)應(yīng)用的權(quán)限泄露風(fēng)險(xiǎn)報(bào)告。
5.根據(jù)權(quán)利要求1所述的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法,其特征在于,所述步驟S3具體包括: S31,以標(biāo)記的所述可能泄露權(quán)限的節(jié)點(diǎn)為起點(diǎn),設(shè)定約束條件通過逆向的符號(hào)執(zhí)行遍歷所述控制流圖; S32,當(dāng)在遍歷過程中遇到分支節(jié)點(diǎn)時(shí),對(duì)所述分支節(jié)點(diǎn)的各個(gè)分支分別設(shè)定約束條件進(jìn)行遍歷; S33,重復(fù)步驟S32,直至遍歷到所述程序入口,從所述起點(diǎn)到所述程序入口點(diǎn)的所有路徑即為可能泄露權(quán)限的路徑。
6.根據(jù)權(quán)利要求1所述的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法,其特征在于,所所述步驟S32還包括: 當(dāng)在遍歷時(shí)發(fā)現(xiàn)對(duì)所述預(yù)設(shè)權(quán)限的檢查語句的調(diào)用時(shí),則結(jié)束該路徑的遍歷。
7.根據(jù)權(quán)利要求1所述的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)方法,其特征在于,所述控制流圖為過程間控制流圖。
8.一種基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)系統(tǒng),其特征在于,所述系統(tǒng)包括: 控制流圖構(gòu)建單元,用于構(gòu)建待檢測(cè)應(yīng)用的控制流圖; 可能泄露權(quán)限標(biāo)記單元,用于通過應(yīng)用程序編程接口 API與預(yù)設(shè)權(quán)限的映射關(guān)系,在所述控制流圖上標(biāo)記可能泄露權(quán)限的節(jié)點(diǎn); 控制流圖遍歷單元,用于以所述可能泄露權(quán)限的節(jié)點(diǎn)為起點(diǎn),通過逆向的符號(hào)執(zhí)行遍歷所述控制流圖,尋找從所述起點(diǎn)到程序入口點(diǎn)的所有路徑,所述從所述起點(diǎn)到所述程序入口的所有路徑即為可能泄露權(quán)限的路徑。
9.根據(jù)權(quán)利要求8所述的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)系統(tǒng),其特征在于,所述系統(tǒng)還包括: 約束條件求解單元,用于對(duì)遍歷所述控制流圖得到的所有路徑的約束條件進(jìn)行求解,得到所有可能泄露權(quán)限的路徑的輸入條件。
10.根據(jù)權(quán)利要求8所述的基于逆向符號(hào)執(zhí)行的應(yīng)用權(quán)限泄漏檢測(cè)系統(tǒng),其特征在于,所述系統(tǒng)還包括: 權(quán)限泄露風(fēng)險(xiǎn)報(bào)告單元,用于根據(jù)所述可能泄露權(quán)限的路徑、對(duì)應(yīng)約束條件和輸入條件,生成針對(duì)所述待檢測(cè)應(yīng)用的權(quán)限泄露風(fēng)險(xiǎn)報(bào)告。
【文檔編號(hào)】G06F21/57GK104462984SQ201410706922
【公開日】2015年3月25日 申請(qǐng)日期:2014年11月27日 優(yōu)先權(quán)日:2014年11月27日
【發(fā)明者】姜博, 陳鵬, 高小鵬, 吳煜, 龍翔, 萬寒 申請(qǐng)人:北京航空航天大學(xué)