本發(fā)明涉及信息安全領(lǐng)域,具體而言,涉及一種程序漏洞的檢測方法、終端及服務(wù)器。
背景技術(shù):
隨著智能終端的迅猛發(fā)展,智能終端上各種APP程序不斷增多,信息安全的隱患也不斷增大,因此,在每一款A(yù)PP程序正式發(fā)布之前,都需要對程序的漏洞進(jìn)行檢測。
現(xiàn)有的檢測方法通常為確定漏洞的起點函數(shù)和終點函數(shù),在程序中尋找該起點函數(shù),然后根據(jù)起點函數(shù)進(jìn)行逆向查找,找到對應(yīng)的終點函數(shù),再進(jìn)行分析是否為漏洞;若起點函數(shù)為通用函數(shù),則會導(dǎo)致逆向查找的工作量大大增加,且需要技術(shù)人員對查找出的每一條路徑都進(jìn)行分析,費時費力。
因此,通過逆向查找的方法檢測程序中的漏洞時,若逆向查找的起點函數(shù)為通用函數(shù)時,容易造成檢測效率低的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的主要目的在于提供一種程序漏洞的檢測方法、終端及服務(wù)器,以解決檢測智能終端APP程序中的漏洞檢測效率低的問題。
為了實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了一種程序漏洞的檢測方法,該方法包括:
根據(jù)待檢測程序預(yù)先設(shè)定的漏洞規(guī)則,確定所述漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件;
根據(jù)所述漏洞規(guī)則對應(yīng)的初始條件確定所述待檢測程序的初始檢測語句;
確定所述初始檢測語句的位置,其中初始檢測語句的位置包括所述初始檢測語句對應(yīng)的寄存器名稱;
以所述初始檢測語句為起點,順序追蹤檢測待檢測程序;
追蹤檢測到結(jié)束條件,記錄所述初始檢測語句的位置以及所述初始檢測語句至所述結(jié)束條件的數(shù)據(jù)流動路徑,并結(jié)束檢測。
進(jìn)一步地,以所述初始檢測語句為起點,順序追蹤檢測待檢測程序,具體包括:以所述初始檢測語句為起點,順序追蹤檢測待檢測程序,若追蹤檢測過程中檢測到跳轉(zhuǎn)語句,則根據(jù)跳轉(zhuǎn)語句的跳轉(zhuǎn)邏輯進(jìn)行跳轉(zhuǎn);跳轉(zhuǎn)后按照待檢測程序的執(zhí)行順序繼續(xù)追蹤檢測。
進(jìn)一步地,若追蹤檢測過程中檢測到按照第一檢測語句順序執(zhí)行的語句為跳轉(zhuǎn)語句,且跳轉(zhuǎn)語句對應(yīng)的跳轉(zhuǎn)邏輯為賦值邏輯,則根據(jù)跳轉(zhuǎn)語句的跳轉(zhuǎn)邏輯進(jìn)行跳轉(zhuǎn)并在跳轉(zhuǎn)后按照待檢測程序的執(zhí)行順序繼續(xù)追蹤檢測;且確定跳轉(zhuǎn)至所述第一檢測語句對應(yīng)的跳轉(zhuǎn)語句為第一跳轉(zhuǎn)語句;將所述第一跳轉(zhuǎn)語句順序執(zhí)行對應(yīng)的檢測語句作為第二檢測語句,對第二檢測語句進(jìn)行順序追蹤檢測。
進(jìn)一步地,所述追蹤檢測到結(jié)束條件,具體包括:追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,檢測到結(jié)束條件;且追蹤檢測所述第二檢測語句,檢測到結(jié)束條件;或,追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,未檢測到結(jié)束條件;追蹤檢測所述第二檢測語句,檢測到結(jié)束條件;或,追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,檢測到結(jié)束條件;追蹤檢測所述第二檢測語句,未檢測到結(jié)束條件。
進(jìn)一步地,記錄所述初始檢測語句的位置以及所述初始檢測語句至所述結(jié)束條件的數(shù)據(jù)流動路徑,具體包括:追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,檢測到結(jié)束條件,且追蹤檢測所述第二檢測語句,檢測到結(jié)束條件;則分別記錄所述初始檢測語句的位置,所述通過第一檢測語句檢測到結(jié)束條件對應(yīng)的數(shù)據(jù)流動路徑;以及所述初始檢測語句的位置,所述通過第二檢測語句檢測到結(jié)束條件對應(yīng)的數(shù)據(jù)流動路徑;或,追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,檢測到結(jié)束條件,追蹤檢測所述第二檢測語句,未檢測到結(jié)束條件;則記錄所述初始檢測語句的位置,所述通過第一檢測語句檢測到結(jié)束條 件對應(yīng)的數(shù)據(jù)流動路徑;或,追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,未檢測到結(jié)束條件,追蹤檢測所述第二檢測語句,檢測到結(jié)束條件;則記錄所述初始檢測語句的位置,所述通過第二檢測語句檢測到結(jié)束條件對應(yīng)的數(shù)據(jù)流動路徑。
進(jìn)一步地,以所述初始檢測語句為起點,順序追蹤檢測待檢測程序,還包括:以所述初始檢測語句為起點,順序追蹤檢測,若追蹤檢測到的跳轉(zhuǎn)語句的次數(shù)大于設(shè)定的次數(shù)閾值,則結(jié)束追蹤檢測;若不大于設(shè)定的次數(shù)閾值,則繼續(xù)追蹤檢測。
進(jìn)一步地,確定所述初始檢測語句的位置之前,還包括:對待檢測程序的語句進(jìn)行分析,確定所述待檢測程序中的跳轉(zhuǎn)語句;將所述待檢測程序中每兩個跳轉(zhuǎn)語句之間的順序執(zhí)行語句集合作為一個跳轉(zhuǎn)語句塊;根據(jù)跳轉(zhuǎn)語句的邏輯關(guān)系確定各跳轉(zhuǎn)語句塊之間的跳轉(zhuǎn)邏輯關(guān)系。
進(jìn)一步地,以所述初始檢測語句為起點,順序追蹤檢測待檢測程序,具體包括:以所述初始檢測語句為起點,根據(jù)跳轉(zhuǎn)語句塊的執(zhí)行順序以及所述跳轉(zhuǎn)語句塊之間的跳轉(zhuǎn)邏輯關(guān)系對所述待檢測程序進(jìn)行順序追蹤檢測。
進(jìn)一步地,對待檢測程序的語句進(jìn)行分析,確定所述待檢測程序中的跳轉(zhuǎn)語句,具體包括:將所述待檢測程序語句編譯為中間語言;對所述中間語言進(jìn)行分析,確定所述中間語言的跳轉(zhuǎn)語句。
進(jìn)一步地,根據(jù)預(yù)先設(shè)定的漏洞規(guī)則,確定所述漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件,具體包括:將所述漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件形成配置文件。
進(jìn)一步地,所述配置文件中的初始條件包括至少一個漏洞觸發(fā)條件;所述配置文件中的結(jié)束條件包括至少一個漏洞形成條件。
為了實現(xiàn)上述目的,根據(jù)本發(fā)明的另一方面,還提供了一種程序漏洞的檢測終端,該終端包括:
規(guī)則識別模塊,用于根據(jù)待檢測程序預(yù)先設(shè)定的漏洞規(guī)則,確定所述漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件;
所述規(guī)則識別模塊,還用于根據(jù)所述漏洞規(guī)則對應(yīng)的初始條件確定所述待檢測程序的初始檢測語句;
語句分析模塊,用于確定所述初始檢測語句的位置,其中初始檢測語句的位置包括所述初始檢測語句對應(yīng)的寄存器名稱;
漏洞檢測模塊,用于以所述初始檢測語句為起點,順序追蹤檢測待檢測程序;
檢測記錄模塊,用于追蹤檢測到結(jié)束條件,記錄所述初始檢測語句的位置以及所述初始檢測語句至所述結(jié)束條件的數(shù)據(jù)流動路徑,并結(jié)束檢測。
進(jìn)一步地,所述漏洞檢測模塊,具體用于:以所述初始檢測語句為起點,順序追蹤檢測待檢測程序,若追蹤檢測過程中檢測到跳轉(zhuǎn)語句,則根據(jù)跳轉(zhuǎn)語句的跳轉(zhuǎn)邏輯進(jìn)行跳轉(zhuǎn);跳轉(zhuǎn)后按照待檢測程序的執(zhí)行順序繼續(xù)追蹤檢測。
進(jìn)一步地,所述漏洞檢測模塊,還用于:若追蹤檢測過程中檢測到按照第一檢測語句順序執(zhí)行的語句為跳轉(zhuǎn)語句,且跳轉(zhuǎn)語句對應(yīng)的跳轉(zhuǎn)邏輯為賦值邏輯,則根據(jù)跳轉(zhuǎn)語句的跳轉(zhuǎn)邏輯進(jìn)行跳轉(zhuǎn)并在跳轉(zhuǎn)后按照待檢測程序的執(zhí)行順序繼續(xù)追蹤檢測;且確定跳轉(zhuǎn)至所述第一檢測語句對應(yīng)的跳轉(zhuǎn)語句為第一跳轉(zhuǎn)語句;將所述第一跳轉(zhuǎn)語句順序執(zhí)行對應(yīng)的檢測語句作為第二檢測語句,對第二檢測語句進(jìn)行順序追蹤檢測。
進(jìn)一步地,所述檢測記錄模塊,具體用于:追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,檢測到結(jié)束條件;且追蹤檢測所述第二檢測語句,檢測到結(jié)束條件;或,追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,未檢測到結(jié)束條件;追蹤檢測所述第二檢測語句,檢測到結(jié)束條件;或,追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,檢測到結(jié)束條件;追蹤檢測所述第二檢測語句,未檢測到結(jié)束條件。
進(jìn)一步地,所述檢測記錄模塊,具體用于:追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,檢測到結(jié)束條件,且追蹤檢測所述第二檢測語句,檢測到結(jié)束條件;則分別記錄所述初始檢測語句的位置,所述通過第一檢測語句檢測到結(jié)束條件對應(yīng)的數(shù)據(jù)流動路徑;以及所述初始檢測語句的位置,所述通過第二檢測語句檢測到結(jié)束條件對應(yīng)的數(shù)據(jù)流動路徑;或,追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,檢測到結(jié)束條件,追蹤檢測所述第二檢測語句,未檢測到結(jié)束條件;則記錄所述初始檢測語句的位置,所述通過第一檢測語句檢測 到結(jié)束條件對應(yīng)的數(shù)據(jù)流動路徑;或,追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,未檢測到結(jié)束條件,追蹤檢測所述第二檢測語句,檢測到結(jié)束條件;則記錄所述初始檢測語句的位置,所述通過第二檢測語句檢測到結(jié)束條件對應(yīng)的數(shù)據(jù)流動路徑。
進(jìn)一步地,所述漏洞檢測模塊,具體用于:以所述初始檢測語句為起點,順序追蹤檢測,若追蹤檢測到跳轉(zhuǎn)語句的次數(shù)大于設(shè)定的次數(shù)閾值,則結(jié)束追蹤檢測;若不大于設(shè)定的次數(shù)閾值,則繼續(xù)追蹤檢測。
進(jìn)一步地,所述語句分析模塊,還用于:對待檢測程序的語句進(jìn)行分析,確定所述待檢測程序中的跳轉(zhuǎn)語句;將所述待檢測程序中每兩個跳轉(zhuǎn)語句之間的順序執(zhí)行語句集合作為一個跳轉(zhuǎn)語句塊;根據(jù)跳轉(zhuǎn)語句的邏輯關(guān)系確定各跳轉(zhuǎn)語句塊之間的跳轉(zhuǎn)邏輯關(guān)系;
進(jìn)一步地,所述漏洞檢測模塊,具體用于:以所述初始檢測語句為起點,根據(jù)跳轉(zhuǎn)語句塊的執(zhí)行順序以及所述跳轉(zhuǎn)語句塊之間的跳轉(zhuǎn)邏輯關(guān)系對所述待檢測程序進(jìn)行順序追蹤檢測。
進(jìn)一步地,所述語句分析模塊,具體用于:將所述待檢測程序語句編譯為中間語言;對所述中間語言進(jìn)行分析,確定所述中間語言的跳轉(zhuǎn)語句。
進(jìn)一步地,所述規(guī)則識別模塊,具體用于:將所述漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件形成配置文件。
進(jìn)一步地,所述所述規(guī)則識別模塊中配置文件中的初始條件包括至少一個漏洞觸發(fā)條件;所述配置文件中的結(jié)束條件包括至少一個漏洞形成條件。
為了實現(xiàn)上述目的,根據(jù)本發(fā)明的另一方面,還提供了一種程序漏洞的檢測服務(wù)器,該服務(wù)器包括:
信息接收模塊,用于根據(jù)接收到的觸發(fā)信息分析確定對應(yīng)的待檢測程序標(biāo)識;
所述信息接收模塊,還用于將所述觸發(fā)信息以及所述確定的待檢測程序標(biāo)識通知規(guī)則識別模塊;
規(guī)則識別模塊,用于根據(jù)接收到的觸發(fā)信息以及待檢測程序標(biāo)識,確定對應(yīng)的漏洞規(guī)則,以及所述漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件;
所述規(guī)則識別模塊,還用于根據(jù)所述漏洞規(guī)則對應(yīng)的初始條件確定所述 待檢測程序的初始檢測語句;
語句分析模塊,用于確定所述初始檢測語句的位置,其中初始檢測語句的位置包括所述初始檢測語句對應(yīng)的寄存器名稱;
漏洞檢測模塊,用于以所述初始檢測語句為起點,順序追蹤檢測待檢測程序;
檢測記錄模塊,用于追蹤檢測到結(jié)束條件,記錄所述初始檢測語句的位置以及所述初始檢測語句至所述結(jié)束條件的數(shù)據(jù)流動路徑,并結(jié)束檢測。
進(jìn)一步地,所述漏洞檢測模塊,具體用于:以所述初始檢測語句為起點,順序追蹤檢測待檢測程序,若追蹤檢測過程中檢測到跳轉(zhuǎn)語句,則根據(jù)跳轉(zhuǎn)語句的跳轉(zhuǎn)邏輯進(jìn)行跳轉(zhuǎn);跳轉(zhuǎn)后按照待檢測程序的執(zhí)行順序繼續(xù)追蹤檢測。
進(jìn)一步地,所述漏洞檢測模塊,還用于:若追蹤檢測過程中檢測到按照第一檢測語句順序執(zhí)行的語句為跳轉(zhuǎn)語句,且跳轉(zhuǎn)語句對應(yīng)的跳轉(zhuǎn)邏輯為賦值邏輯,則根據(jù)跳轉(zhuǎn)語句的跳轉(zhuǎn)邏輯進(jìn)行跳轉(zhuǎn)并在跳轉(zhuǎn)后按照待檢測程序的執(zhí)行順序繼續(xù)追蹤檢測;且確定跳轉(zhuǎn)至所述第一檢測語句對應(yīng)的跳轉(zhuǎn)語句為第一跳轉(zhuǎn)語句;將所述第一跳轉(zhuǎn)語句順序執(zhí)行對應(yīng)的檢測語句作為第二檢測語句,對第二檢測語句進(jìn)行順序追蹤檢測。
進(jìn)一步地,所述檢測記錄模塊,具體用于:追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,檢測到結(jié)束條件;且追蹤檢測所述第二檢測語句,檢測到結(jié)束條件;或,追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,未檢測到結(jié)束條件;追蹤檢測所述第二檢測語句,檢測到結(jié)束條件;或,追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,檢測到結(jié)束條件;追蹤檢測所述第二檢測語句,未檢測到結(jié)束條件。
進(jìn)一步地,所述檢測記錄模塊,具體用于:追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,檢測到結(jié)束條件,且追蹤檢測所述第二檢測語句,檢測到結(jié)束條件;則分別記錄所述初始檢測語句的位置,所述通過第一檢測語句檢測到結(jié)束條件對應(yīng)的數(shù)據(jù)流動路徑;以及所述初始檢測語句的位置,所述通過第二檢測語句檢測到結(jié)束條件對應(yīng)的數(shù)據(jù)流動路徑;或,追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,檢測到結(jié)束條件,追蹤檢測所述第二檢測語句,未檢測 到結(jié)束條件;則記錄所述初始檢測語句的位置,所述通過第一檢測語句檢測到結(jié)束條件對應(yīng)的數(shù)據(jù)流動路徑;或,追蹤檢測第一檢測語句對應(yīng)的跳轉(zhuǎn)語句,未檢測到結(jié)束條件,追蹤檢測所述第二檢測語句,檢測到結(jié)束條件;則記錄所述初始檢測語句的位置,所述通過第二檢測語句檢測到結(jié)束條件對應(yīng)的數(shù)據(jù)流動路徑。
進(jìn)一步地,所述漏洞檢測模塊,具體用于:以所述初始檢測語句為起點,順序追蹤檢測,若追蹤檢測到跳轉(zhuǎn)語句的次數(shù)大于設(shè)定的次數(shù)閾值,則結(jié)束追蹤檢測;若不大于設(shè)定的次數(shù)閾值,則繼續(xù)追蹤檢測。
進(jìn)一步地,所述語句分析模塊,還用于:對待檢測程序的語句進(jìn)行分析,確定所述待檢測程序中的跳轉(zhuǎn)語句;將所述待檢測程序中每兩個跳轉(zhuǎn)語句之間的順序執(zhí)行語句集合作為一個跳轉(zhuǎn)語句塊;根據(jù)跳轉(zhuǎn)語句的邏輯關(guān)系確定各跳轉(zhuǎn)語句塊之間的跳轉(zhuǎn)邏輯關(guān)系。
進(jìn)一步地,所述漏洞檢測模塊,具體用于:以所述初始檢測語句為起點,根據(jù)跳轉(zhuǎn)語句塊的執(zhí)行順序以及所述跳轉(zhuǎn)語句塊之間的跳轉(zhuǎn)邏輯關(guān)系對所述待檢測程序進(jìn)行順序追蹤檢測。
進(jìn)一步地,所述語句分析模塊,具體用于:將所述待檢測程序語句編譯為中間語言;對所述中間語言進(jìn)行分析,確定所述中間語言的跳轉(zhuǎn)語句。
進(jìn)一步地,所述規(guī)則識別模塊,具體用于:將所述漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件形成配置文件。
進(jìn)一步地,所述所述規(guī)則識別模塊中配置文件中的初始條件包括至少一個漏洞觸發(fā)條件;所述配置文件中的結(jié)束條件包括至少一個漏洞形成條件。
通過本發(fā)明對程序進(jìn)行正向查找,確定是否存在漏洞;即確定漏洞規(guī)則的起始條件,根據(jù)程序的執(zhí)行順序,確定是否有該漏洞規(guī)則對應(yīng)的結(jié)束條件,若有則確定找到漏洞,否則認(rèn)為沒有找到漏洞;由于漏洞規(guī)則的起始條件通常為獲取敏感信息的字段,因此起始條件的數(shù)量大大降低,提高了程序漏洞的檢測效率。
附圖說明
構(gòu)成本申請的一部分的附圖用來提供對本發(fā)明的進(jìn)一步理解,本發(fā) 明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
圖1示出了本申請的一個實施例的程序漏洞的檢測方法的流程圖。
圖2示出了根據(jù)本申請一個實施例的一種漏洞規(guī)則的起始條件和結(jié)束條件的示例。
圖3示出了根據(jù)本申請一個實施例以漏洞的結(jié)束條件進(jìn)行劃分的漏洞規(guī)則示例。
圖4示出了根據(jù)本申請另一個實施例以漏洞的結(jié)束條件進(jìn)行劃分的漏洞規(guī)則示例。
圖5示出了根據(jù)本申請一個實施例包括兩個起始條件的漏洞規(guī)則的示例。
圖6示出了根據(jù)本申請一個實施例確定初始檢測語句的位置的流程圖。
圖7示出了根據(jù)本申請一個實施例順序追蹤檢測待檢測程序的方法流程圖。
圖8示出了根據(jù)本申請另一個實施例順序追蹤檢測待檢測程序的方法流程圖。
圖9示出了根據(jù)本申請一個實施例確定待檢測語句為跳轉(zhuǎn)語句后的方法流程圖。
圖10示出了根據(jù)本申請一個實施例當(dāng)確定跳轉(zhuǎn)語句為賦值語句后的方法流程圖。
圖11示出了根據(jù)本申請一個實施例的程序漏洞的檢測終端的框圖。
圖12示出了根據(jù)本申請一個實施例的程序漏洞的檢測服務(wù)器的框圖。
本領(lǐng)域普通技術(shù)人員將了解,雖然下面的詳細(xì)說明將參考圖示實施例、附圖進(jìn)行,但本申請并不僅限于這些實施例。而是,本申請的范圍是廣泛的,且意在僅通過后附的權(quán)利要求限定本申請的范圍。
具體實施方式
在更加詳細(xì)地討論示例性實施例之前應(yīng)當(dāng)提到的是,一些示例性實施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項操作描述成順序的處理,但是其中的許多操作可以被并行地、并發(fā)地或者同時實施。此外,各項操作的順序可以被重新安排。當(dāng)其操作完成時所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對應(yīng)于方法、函數(shù)、規(guī)程、子例程、子程序等等。
所述計算機設(shè)備包括用戶設(shè)備與網(wǎng)絡(luò)設(shè)備。其中,所述用戶設(shè)備包括但不限于電腦、智能手機、PDA等;所述網(wǎng)絡(luò)設(shè)備包括但不限于單個網(wǎng)絡(luò)服務(wù)器、多個網(wǎng)絡(luò)服務(wù)器組成的服務(wù)器組或基于云計算(Cloud Computing)的由大量計算機或網(wǎng)絡(luò)服務(wù)器構(gòu)成的云,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個超級虛擬計算機。其中,所述計算機設(shè)備可單獨運行來實現(xiàn)本申請,也可接入網(wǎng)絡(luò)并通過與網(wǎng)絡(luò)中的其他計算機設(shè)備的交互操作來實現(xiàn)本申請。其中,所述計算機設(shè)備所處的網(wǎng)絡(luò)包括但不限于互聯(lián)網(wǎng)、廣域網(wǎng)、城域網(wǎng)、局域網(wǎng)、VPN網(wǎng)絡(luò)等。
需要說明的是,所述用戶設(shè)備、網(wǎng)絡(luò)設(shè)備和網(wǎng)絡(luò)等僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的計算機設(shè)備或網(wǎng)絡(luò)如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并以引用方式包含于此。
后面所討論的方法(其中一些通過流程圖示出)可以通過硬件、軟件、固件、中間件、微代碼、硬件描述語言或者其任意組合來實施。當(dāng)用軟件、固件、中間件或微代碼來實施時,用以實施必要任務(wù)的程序代碼或代碼段可以被存儲在機器或計算機可讀介質(zhì)(比如存儲介質(zhì))中。(一個或多個)處理器可以實施必要的任務(wù)。
這里所公開的具體結(jié)構(gòu)和功能細(xì)節(jié)僅僅是代表性的,并且是用于描述本申請的示例性實施例的目的。但是本申請可以通過許多替換形式來具體實現(xiàn),并且不應(yīng)當(dāng)被解釋成僅僅受限于這里所闡述的實施例。
應(yīng)當(dāng)理解的是,雖然在這里可能使用了術(shù)語“第一”、“第二”等等來描述各個單元,但是這些單元不應(yīng)當(dāng)受這些術(shù)語限制。使用這些術(shù)語僅僅是為了將一個單元與另一個單元進(jìn)行區(qū)分。舉例來說,在不背離示 例性實施例的范圍的情況下,第一單元可以被稱為第二單元,并且類似地第二單元可以被稱為第一單元。這里所使用的術(shù)語“和/或”包括其中一個或更多所列出的相關(guān)聯(lián)項目的任意和所有組合。
應(yīng)當(dāng)理解的是,當(dāng)一個單元被稱為“連接”或“耦合”到另一單元時,其可以直接連接或耦合到所述另一單元,或者可以存在中間單元。與此相對,當(dāng)一個單元被稱為“直接連接”或“直接耦合”到另一單元時,則不存在中間單元。應(yīng)當(dāng)按照類似的方式來解釋被用于描述單元之間的關(guān)系的其他詞語(例如“處于...之間”相比于“直接處于...之間”,“與...鄰近”相比于“與...直接鄰近”等等)。
這里所使用的術(shù)語僅僅是為了描述具體實施例而不意圖限制示例性實施例。除非上下文明確地另有所指,否則這里所使用的單數(shù)形式“一個”、“一項”還意圖包括復(fù)數(shù)。還應(yīng)當(dāng)理解的是,這里所使用的術(shù)語“包括”和/或“包含”規(guī)定所陳述的特征、整數(shù)、步驟、操作、單元和/或組件的存在,而不排除存在或添加一個或更多其他特征、整數(shù)、步驟、操作、單元、組件和/或其組合。
還應(yīng)當(dāng)提到的是,在一些替換實現(xiàn)方式中,所提到的功能/動作可以按照不同于附圖中標(biāo)示的順序發(fā)生。舉例來說,取決于所涉及的功能/動作,相繼示出的兩幅圖實際上可以基本上同時執(zhí)行或者有時可以按照相反的順序來執(zhí)行。
下面結(jié)合附圖對本申請的技術(shù)方案作進(jìn)一步詳細(xì)描述。
圖1是根據(jù)本發(fā)明實施例的一種程序漏洞的檢測方法的流程圖,該方法用于檢測待發(fā)布的,或測試階段的智能終端APP程序中的漏洞,如圖1所示,該程序漏洞的檢測方法包括以下步驟:
步驟S11,根據(jù)待檢測程序預(yù)先設(shè)定的漏洞規(guī)則,確定所述漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件;
建立待檢測程序可能會存在的漏洞規(guī)則數(shù)據(jù)庫,分別確定每一種漏洞規(guī)則對應(yīng)初始條件和結(jié)束條件。漏洞的類型根據(jù)其獲得敏感信息的類型進(jìn)行劃分,每種敏感信息的類型對應(yīng)至少一種漏洞規(guī)則。敏感信息包括但不限于以下信息:電話號碼,身份信息,消費記錄,密碼信息,聊 天記錄等各種使用者的信息。
優(yōu)選的,一個漏洞規(guī)則包括至少一個初始條件,至少一個結(jié)束條件;每個初始條件對應(yīng)至少一個結(jié)束條件。將漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件形成配置文件。
如圖2所示,如待檢測程序的一個漏洞規(guī)則的起始條件包括多個獲取用戶電話號碼的起始條件,獲取用戶電話號碼的起始條件1、獲取用戶電話號碼的起始條件2、獲取用戶電話號碼的起始條件3、獲取用戶電話號碼的起始條件4......獲取用戶電話號碼的起始條件N;每個起始條件對應(yīng)至少一個結(jié)束條件,結(jié)束條件包括:網(wǎng)絡(luò)發(fā)出電話號碼1、網(wǎng)絡(luò)發(fā)出電話號碼2、短信發(fā)出電話號碼1、短信發(fā)出電話號碼2;其中獲取用戶電話號碼的起始條件1對應(yīng)的結(jié)束條件為網(wǎng)絡(luò)發(fā)出電話號碼1和網(wǎng)絡(luò)發(fā)出電話號碼2;獲取用戶電話號碼的起始條件2對應(yīng)的結(jié)束條件為短信發(fā)出電話號碼1和短信發(fā)出電話號碼2;獲取用戶電話號碼的起始條件3對應(yīng)的結(jié)束條件為短信發(fā)出電話號碼1;獲取用戶電話號碼的起始條件4對應(yīng)的結(jié)束條件為網(wǎng)絡(luò)發(fā)出電話號碼1、網(wǎng)絡(luò)發(fā)出電話號碼2、短信發(fā)出電話號碼1、短信發(fā)出電話號碼2。
一種漏洞類型也可以根據(jù)該種漏洞的起始條件和/或結(jié)束條件生成多種漏洞規(guī)則。以圖2中的例子為例,如圖3和圖4所示,以漏洞的結(jié)束條件進(jìn)行劃分,將該種漏洞劃分為兩個漏洞規(guī)則,圖3所示為漏洞規(guī)則一的結(jié)束條件為網(wǎng)絡(luò)發(fā)出電話號碼1和/或網(wǎng)絡(luò)發(fā)出電話號碼2;漏洞規(guī)則一對應(yīng)的初始條件為獲取用戶電話號碼的起始條件1、獲取用戶電話號碼的起始條件4;圖4所示為漏洞規(guī)則二的結(jié)束條件為短信發(fā)出電話號碼1和/或短信發(fā)出電話號碼2,漏洞規(guī)則二對應(yīng)的初始條件為獲取用戶電話號碼的起始條件2、獲取用戶電話號碼的起始條件3、獲取用戶電話號碼的起始條件4。
以上實施例為以漏洞的結(jié)束條件對每種漏洞的漏洞規(guī)則進(jìn)行劃分,其他以漏洞的初始條件,或其他條件對漏洞規(guī)則進(jìn)行劃分的方法,與之類似,在此不再一一列舉。
步驟S12,根據(jù)漏洞規(guī)則對應(yīng)的初始條件確定待檢測程序的初始檢測 語句;
根據(jù)起始條件確定該起始條件對應(yīng)的匹配字段,在待檢測程序中順序查找是否包括以上匹配字段,若包括,則將查找到的字段作為初始檢測語句。每個匹配字段在待檢測程序中多次出現(xiàn),因此,每個匹配字段都需要在待檢測程序中進(jìn)行全面檢測,將待檢測程序中所有的該匹配字段全部找出。
以圖5所示的漏洞規(guī)則包括兩個起始條件為例,每個起始條件對應(yīng)至少一個可匹配的字段,如起始條件1對應(yīng)1個可匹配字段1,起始條件2對應(yīng)3個可匹配字段:可匹配字段2,可匹配字段3,可匹配字段4。在待檢測程序中分別順序查找4個可匹配字段,若檢測到1個可匹配字段1和2個可匹配字段2,則將可匹配字段1對應(yīng)的語句作為初始檢測語句1,可匹配字段2對應(yīng)的兩個語句作為初始檢測語句2和初始檢測語句3。若在待檢測程序中分別查找4個可匹配字段,只檢測到可匹配字段3,則將可匹配字段3對應(yīng)的語句作為檢測程序的初始檢測語句進(jìn)行檢測。
步驟S13,確定初始檢測語句的位置,其中初始檢測語句的位置包括所述初始檢測語句對應(yīng)的寄存器名稱。
優(yōu)選的,如圖6所示,通過以下方法確定初始檢測語句的位置,其中中間語言包括但不限于為匯編語言:
步驟611:將待檢測程序反編譯為中間語言;
步驟612:逐條分析中間語言,確定中間語言的跳轉(zhuǎn)語句;
步驟613:將中間語言的每兩個跳轉(zhuǎn)語句之間的順序執(zhí)行語句集合作為一個跳轉(zhuǎn)語句塊;
步驟614,根據(jù)跳轉(zhuǎn)語句的邏輯關(guān)系確定各跳轉(zhuǎn)語句塊之間的跳轉(zhuǎn)邏輯關(guān)系;
步驟615,確定初始檢測語句所在的跳轉(zhuǎn)語句塊以及提取該初始檢測語句需要跟蹤的寄存器的名稱。
其中跳轉(zhuǎn)語句包括但不限于以下語句:if,switch,goto,調(diào)用函數(shù),函數(shù)返回等。
由于兩個跳轉(zhuǎn)語句之間的順序執(zhí)行語句集合通常都在一個寄存器中 存儲,但待檢測程序可能會在一個寄存器中可能會存儲多個順序執(zhí)行語句集合,為方便跟蹤記錄漏洞形成的路徑,將待檢測程序兩個跳轉(zhuǎn)語句之間的順序執(zhí)行語句集合作為一個跳轉(zhuǎn)語句塊,當(dāng)發(fā)生跳轉(zhuǎn)時,記錄跳轉(zhuǎn)前后的跳轉(zhuǎn)語句塊,就可以記錄數(shù)據(jù)流動路徑,避免記錄每條流經(jīng)語句路徑。
步驟S14,以初始檢測語句為起點,順序追蹤檢測待檢測程序;
若待檢測程序中包含多個初始檢測語句,則可以同時對多個初始檢測語句展開追蹤檢測,也可以順序?qū)γ總€初始檢測語句進(jìn)行追蹤檢索;具體情況根據(jù)確定的初始檢測語句的數(shù)量,以及終端或服務(wù)器的使用情況確定。
如圖7所示,為本發(fā)明實施中順序追蹤檢測待檢測程序的方法,該方法包括:
步驟711:以初始檢測語句為起點,根據(jù)初始檢測語句對應(yīng)的寄存器名稱r0,進(jìn)入寄存器r0跟蹤狀態(tài);
步驟712:順序跟蹤寄存器的流經(jīng)語句;
步驟713:判斷當(dāng)前待檢測的語句是否為跳轉(zhuǎn)語句,若是跳轉(zhuǎn)語句則執(zhí)行步驟716,否則執(zhí)行步驟714;
步驟714:判斷當(dāng)前待檢測語句是否包含結(jié)束條件,若包含,則執(zhí)行步驟715,否則返回步驟712;
步驟715:確定檢測語句為檢測結(jié)束語句,停止對該語句的追蹤檢測;
步驟716:判斷該跳轉(zhuǎn)語句是否為賦值語句,若是賦值語句則執(zhí)行步驟718,否則執(zhí)行步驟717;
步驟717:根據(jù)跳轉(zhuǎn)語句的跳轉(zhuǎn)邏輯跳轉(zhuǎn)至待檢測程序的對應(yīng)的位置,并返回執(zhí)行步驟712;
步驟718:寄存器r0賦值給另一寄存器r1;
步驟719:分別對寄存器r0和寄存器r1進(jìn)行跟蹤,并返回執(zhí)行步驟712。
優(yōu)選的,為了便于記錄數(shù)據(jù)流動路徑,將中間語言的每兩個跳轉(zhuǎn)語句之間的順序執(zhí)行語句集合作為一個跳轉(zhuǎn)語句塊;根據(jù)跳轉(zhuǎn)語句的邏輯 關(guān)系確定各跳轉(zhuǎn)語句塊之間的跳轉(zhuǎn)邏輯關(guān)系。如圖8所示,為本發(fā)明實施中另一種順序追蹤檢測待檢測程序的方法,該方法包括:
步驟811:以初始檢測語句為起點,確定初始檢測語句對應(yīng)的寄存器名稱r0,初始檢測語句對應(yīng)的跳轉(zhuǎn)語句塊的標(biāo)識;
步驟812:對初始檢測語句進(jìn)行檢測,進(jìn)入寄存器r0跟蹤狀態(tài);
步驟813:順序跟蹤寄存器中的跳轉(zhuǎn)語句塊的流經(jīng)語句;
步驟814:判斷當(dāng)前跳轉(zhuǎn)語句塊是否包含結(jié)束條件,若包含,則執(zhí)行步驟819,否則執(zhí)行步驟815;
步驟815:確定當(dāng)前跳轉(zhuǎn)語句塊順序檢測完成;
步驟816:判斷當(dāng)前跳轉(zhuǎn)語句塊對應(yīng)的跳轉(zhuǎn)語句是否為賦值語句,若是賦值語句則執(zhí)行步驟817,否則執(zhí)行步驟813;
步驟817:將當(dāng)前寄存器的值根據(jù)賦值語句的邏輯關(guān)系賦予給另一寄存器;
步驟818:同時對賦值前的寄存器和賦值后的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測,并返回執(zhí)行步驟813;
步驟819:確定檢測語句為檢測結(jié)束語句,停止對該語句的追蹤檢測。
其中,步驟818雖然描述為同時對賦值前的寄存器和賦值后的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測,但是其時間順序不局限于上述實施例中所列舉的順序。也可以先對賦值后的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測,檢測完成后再對賦值前的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測;或先對賦值前的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測,檢測完成后再對賦值前的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測;或先對其中一個寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測,檢測設(shè)定時長后,再對另一寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測。
需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
優(yōu)選的,如圖9所示,確定待檢測語句為跳轉(zhuǎn)語句后,還執(zhí)行以下 操作:
步驟911:確定當(dāng)前待檢測的語句為跳轉(zhuǎn)語句;
步驟912:判斷此次追蹤檢測過程中檢測到跳轉(zhuǎn)語句的次數(shù)是否大于設(shè)定次數(shù)閾值,若不大于設(shè)定的次數(shù)閾值,則執(zhí)行步驟913,否則執(zhí)行步驟914;
步驟913:判斷該跳轉(zhuǎn)語句是否為賦值語句;
步驟914:確定檢測失敗,停止此次漏洞追蹤檢測。
優(yōu)選的,如圖10所示,當(dāng)確定跳轉(zhuǎn)語句為賦值語句后,還執(zhí)行以下操作:
步驟1011:確定跳轉(zhuǎn)語句為賦值語句;
步驟1012:判斷賦值語句計數(shù)器的計數(shù)值是否大于1,若不大于則執(zhí)行步驟1013,否則執(zhí)行步驟1014;
步驟1013:當(dāng)前寄存器賦值按照賦值邏輯對另一寄存器進(jìn)行賦值處理;
步驟1014:確定檢測失敗,停止此次漏洞追蹤檢測。
步驟S15:追蹤檢測到結(jié)束條件,記錄所述初始檢測語句的位置以及所述初始檢測語句至所述結(jié)束條件的數(shù)據(jù)流動路徑,并結(jié)束檢測。
本發(fā)明實施例還提供了一種程序漏洞的檢測終端,需要說明的是,該實施例的程序漏洞的檢測終端可以用于執(zhí)行本發(fā)明實施例的程序漏洞的檢測方法。
如圖11所示,為本發(fā)明實施例中一種程序漏洞的檢測終端,該終端用于檢測待發(fā)布的,或測試階段的智能終端的APP程序的漏洞,該終端包括規(guī)則識別模塊10,語句分析模塊20,漏洞檢測模塊30,檢測記錄模塊40:
規(guī)則識別模塊10,用于根據(jù)待檢測程序預(yù)先設(shè)定的漏洞規(guī)則,確定漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件;
規(guī)則識別模塊10,還用于根據(jù)漏洞規(guī)則對應(yīng)的初始條件確定待檢測程序的初始檢測語句;
語句分析模塊20,用于確定初始檢測語句的位置,其中初始檢測語 句的位置包括初始檢測語句對應(yīng)的寄存器名稱;
漏洞檢測模塊30,用于以初始檢測語句為起點,順序追蹤檢測待檢測程序;
檢測記錄模塊40,用于追蹤檢測到結(jié)束條件,記錄初始檢測語句的位置以及初始檢測語句至結(jié)束條件的數(shù)據(jù)流動路徑,并結(jié)束檢測。
規(guī)則識別模塊10,具體用于:建立待檢測程序可能會存在的漏洞規(guī)則數(shù)據(jù)庫,分別確定每一種漏洞規(guī)則對應(yīng)初始條件和結(jié)束條件。漏洞的類型根據(jù)其獲得敏感信息的類型進(jìn)行劃分,每種敏感信息的類型對應(yīng)至少一種漏洞規(guī)則。敏感信息包括但不限于以下信息:電話號碼,身份信息,消費記錄,密碼信息,聊天記錄等各種使用者的信息。
優(yōu)選的,一個漏洞規(guī)則包括至少一個初始條件,至少一個結(jié)束條件;每個初始條件對應(yīng)至少一個結(jié)束條件。將漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件形成配置文件。一種漏洞類型也可以根據(jù)該種漏洞的起始條件和/或結(jié)束條件生成多種漏洞規(guī)則。
規(guī)則識別模塊10,具體用于:根據(jù)起始條件確定該起始條件對應(yīng)的匹配字段,在待檢測程序中順序查找是否包括以上匹配字段,若包括,則將查找到的字段作為初始檢測語句。每個匹配字段在待檢測程序中多次出現(xiàn),因此,每個匹配字段都需要在待檢測程序中進(jìn)行全面檢測,將待檢測程序中所有的該匹配字段全部找出。
語句分析模塊20,具體用于:將待檢測程序反編譯為中間語言;逐條分析中間語言,確定中間語言的跳轉(zhuǎn)語句;將中間語言的每兩個跳轉(zhuǎn)語句之間的順序執(zhí)行語句集合作為一個跳轉(zhuǎn)語句塊;根據(jù)跳轉(zhuǎn)語句的邏輯關(guān)系確定各跳轉(zhuǎn)語句塊之間的跳轉(zhuǎn)邏輯關(guān)系;確定初始檢測語句所在的跳轉(zhuǎn)語句塊以及提取該初始檢測語句需要跟蹤的寄存器的名稱。
其中跳轉(zhuǎn)語句包括但不限于以下語句:if,switch,goto,調(diào)用函數(shù),函數(shù)返回等。
由于兩個跳轉(zhuǎn)語句之間的順序執(zhí)行語句集合通常都在一個寄存器中存儲,但待檢測程序可能會在一個寄存器中可能會存儲多個順序執(zhí)行語句集合,為方便跟蹤記錄漏洞形成的路徑,將待檢測程序兩個跳轉(zhuǎn)語句 之間的順序執(zhí)行語句集合作為一個跳轉(zhuǎn)語句塊,當(dāng)發(fā)生跳轉(zhuǎn)時,記錄跳轉(zhuǎn)前后的跳轉(zhuǎn)語句塊,就可以記錄數(shù)據(jù)流動路徑,避免記錄每條流經(jīng)語句路徑。
漏洞檢測模塊30,具體用于:若待檢測程序中包含多個初始檢測語句,則可以同時對多個初始檢測語句展開追蹤檢測,也可以順序?qū)γ總€初始檢測語句進(jìn)行追蹤檢索;具體情況根據(jù)確定的初始檢測語句的數(shù)量,以及終端或服務(wù)器的使用情況確定。
漏洞檢測模塊30,以初始檢測語句為起點,根據(jù)初始檢測語句對應(yīng)的寄存器名稱r0,進(jìn)入寄存器r0跟蹤狀態(tài)。順序跟蹤寄存器的流經(jīng)語句,判斷當(dāng)前待檢測的語句是否為跳轉(zhuǎn)語句,若是跳轉(zhuǎn)語句,則繼續(xù)判斷該跳轉(zhuǎn)語句是否為賦值語句;若不是跳轉(zhuǎn)語句,則判斷當(dāng)前待檢測語句是否包含結(jié)束條件;
若跳轉(zhuǎn)語句是賦值語句,則將當(dāng)前寄存器r0的值按照賦值邏輯將值賦予另一寄存器;并分別對當(dāng)前寄存器和另一寄存器進(jìn)行跟蹤;若跳轉(zhuǎn)語句不是賦值語句,根據(jù)跳轉(zhuǎn)語句的跳轉(zhuǎn)邏輯跳轉(zhuǎn)至待檢測程序的對應(yīng)的位置,順序跟蹤寄存器的流經(jīng)語句。
若確定當(dāng)前待檢測語句包含結(jié)束條件,停止對該語句的追蹤檢測;若確定當(dāng)前待檢測語句不包含結(jié)束條件,則順序跟蹤寄存器的流經(jīng)語句。
優(yōu)選的,漏洞檢測模塊30根據(jù)語句分析模塊20確定的跳轉(zhuǎn)語句塊和各跳轉(zhuǎn)語句塊之間的跳轉(zhuǎn)邏輯關(guān)系,對待檢測程序進(jìn)行以下處理:
以初始檢測語句為起點,確定初始檢測語句對應(yīng)的寄存器名稱r0,初始檢測語句對應(yīng)的跳轉(zhuǎn)語句塊的標(biāo)識;對初始檢測語句進(jìn)行檢測,進(jìn)入寄存器r0跟蹤狀態(tài);順序跟蹤寄存器中的跳轉(zhuǎn)語句塊的流經(jīng)語句。
判斷當(dāng)前跳轉(zhuǎn)語句塊是否包含結(jié)束條件,若包含,確定檢測語句為檢測結(jié)束語句,停止對該語句的追蹤檢測;否則,確定當(dāng)前跳轉(zhuǎn)語句塊順序檢測完成。
判斷當(dāng)前跳轉(zhuǎn)語句塊對應(yīng)的跳轉(zhuǎn)語句是否為賦值語句,若不是賦值語句,則順序跟蹤跳轉(zhuǎn)后的寄存器中的跳轉(zhuǎn)語句塊的流經(jīng)語句;若是賦值語句,將當(dāng)前寄存器的值根據(jù)賦值語句的邏輯關(guān)系賦予給另一寄存器; 同時對賦值前的寄存器和賦值后的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測。
雖然漏洞檢測模塊30中描述:同時對賦值前的寄存器和賦值后的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測;但是其時間順序不局限于上述實施例中所列舉的順序。也可以先對賦值后的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測,檢測完成后再對賦值前的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測;或先對賦值前的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測,檢測完成后再對賦值前的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測;或先對其中一個寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測,檢測設(shè)定時長后,再對另一寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測。
漏洞檢測模塊30,還用于,確定待檢測語句為跳轉(zhuǎn)語句后,判斷此次追蹤檢測過程中檢測到跳轉(zhuǎn)語句的次數(shù)是否大于設(shè)定次數(shù)閾值,若不大于設(shè)定的次數(shù)閾值,則繼續(xù)判斷該跳轉(zhuǎn)語句是否為賦值語句;若大于設(shè)定的次數(shù)閾值,則確定檢測失敗,停止此次漏洞追蹤檢測。
漏洞檢測模塊30,還用于,當(dāng)確定跳轉(zhuǎn)語句為賦值語句后,判斷賦值語句計數(shù)器的計數(shù)值是否大于1,若不大于1,則當(dāng)前寄存器賦值按照賦值邏輯對另一寄存器進(jìn)行賦值處理;若大于1,則確定檢測失敗,停止此次漏洞追蹤檢測。
本發(fā)明實施例還提供了一種程序漏洞的檢測服務(wù)器,需要說明的是,該實施例的程序漏洞的檢測服務(wù)器可以用于執(zhí)行本發(fā)明實施例的程序漏洞的檢測方法。
如圖12所示,為本發(fā)明實施例中一種程序漏洞的檢測服務(wù)器,該服務(wù)器用于接收到觸發(fā)信息后,檢測待發(fā)布的,或測試階段的智能終端APP程序中的漏洞,該服務(wù)器包括信息接收模塊50,規(guī)則識別模塊60,語句分析模塊70,漏洞檢測模塊80,檢測記錄模塊90:
信息接收模塊50,用于根據(jù)接收到的觸發(fā)信息分析確定對應(yīng)的待檢測程序標(biāo)識;
信息接收模塊50,還用于將觸發(fā)信息以及確定的待檢測程序標(biāo)識通知規(guī)則識別模塊60;
規(guī)則識別模塊60,用于根據(jù)接收到的觸發(fā)信息以及待檢測程序標(biāo)識,確定對應(yīng)的漏洞規(guī)則,以及漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件;
規(guī)則識別模塊60,還用于根據(jù)漏洞規(guī)則對應(yīng)的初始條件確定待檢測程序的初始檢測語句;
語句分析模塊70,用于確定初始檢測語句的位置,其中初始檢測語句的位置包括初始檢測語句對應(yīng)的寄存器名稱;
漏洞檢測模塊80,用于以初始檢測語句為起點,順序追蹤檢測待檢測程序;
檢測記錄模塊90,用于追蹤檢測到結(jié)束條件,記錄初始檢測語句的位置以及初始檢測語句至結(jié)束條件的數(shù)據(jù)流動路徑,并結(jié)束檢測。
信息接收模塊50,用于接收到觸發(fā)信息后,分析確定對應(yīng)的待檢測程序標(biāo)識;觸發(fā)信息包括但不限于:電話號碼,身份信息,聊天記錄,圖片信息,購物記錄,賬戶信息,瀏覽記錄等涉及個人隱私或威脅程序安全的至少一項信息。信息接收模塊50接收到觸發(fā)信息后,根除觸發(fā)信息的信息內(nèi)容確定待檢測程序,將觸發(fā)信息以及確定的待檢測程序標(biāo)識通知規(guī)則識別模塊。
規(guī)則識別模塊60,具體用于:根據(jù)接收到的觸發(fā)信息以及待檢測程序標(biāo)識,確定對應(yīng)的漏洞規(guī)則,以及漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件。
規(guī)則識別模塊60,具體用于:建立待檢測程序可能會存在的漏洞規(guī)則數(shù)據(jù)庫,分別確定每一種漏洞規(guī)則對應(yīng)初始條件和結(jié)束條件。漏洞的類型根據(jù)其獲得敏感信息的類型進(jìn)行劃分,每種敏感信息的類型對應(yīng)至少一種漏洞規(guī)則。敏感信息包括但不限于以下信息:電話號碼,身份信息,消費記錄,密碼信息,聊天記錄等各種使用者的信息。
優(yōu)選的,一個漏洞規(guī)則包括至少一個初始條件,至少一個結(jié)束條件;每個初始條件對應(yīng)至少一個結(jié)束條件。將漏洞規(guī)則對應(yīng)的初始條件和結(jié)束條件形成配置文件。一種漏洞類型也可以根據(jù)該種漏洞的起始條件和/或結(jié)束條件生成多種漏洞規(guī)則。
規(guī)則識別模塊60,具體用于:根據(jù)起始條件確定該起始條件對應(yīng)的 匹配字段,在待檢測程序中順序查找是否包括以上匹配字段,若包括,則將查找到的字段作為初始檢測語句。每個匹配字段在待檢測程序中多次出現(xiàn),因此,每個匹配字段都需要在待檢測程序中進(jìn)行全面檢測,將待檢測程序中所有的該匹配字段全部找出。
語句分析模塊70,具體用于:將待檢測程序反編譯為中間語言;逐條分析中間語言,確定中間語言的跳轉(zhuǎn)語句;將中間語言的每兩個跳轉(zhuǎn)語句之間的順序執(zhí)行語句集合作為一個跳轉(zhuǎn)語句塊;根據(jù)跳轉(zhuǎn)語句的邏輯關(guān)系確定各跳轉(zhuǎn)語句塊之間的跳轉(zhuǎn)邏輯關(guān)系;確定初始檢測語句所在的跳轉(zhuǎn)語句塊以及提取該初始檢測語句需要跟蹤的寄存器的名稱。
其中跳轉(zhuǎn)語句包括但不限于以下語句:if,switch,goto,調(diào)用函數(shù),函數(shù)返回等。
由于兩個跳轉(zhuǎn)語句之間的順序執(zhí)行語句集合通常都在一個寄存器中存儲,但待檢測程序可能會在一個寄存器中可能會存儲多個順序執(zhí)行語句集合,為方便跟蹤記錄漏洞形成的路徑,將待檢測程序兩個跳轉(zhuǎn)語句之間的順序執(zhí)行語句集合作為一個跳轉(zhuǎn)語句塊,當(dāng)發(fā)生跳轉(zhuǎn)時,記錄跳轉(zhuǎn)前后的跳轉(zhuǎn)語句塊,就可以記錄數(shù)據(jù)流動路徑,避免記錄每條流經(jīng)語句路徑。
漏洞檢測模塊80,具體用于:若待檢測程序中包含多個初始檢測語句,則可以同時對多個初始檢測語句展開追蹤檢測,也可以順序?qū)γ總€初始檢測語句進(jìn)行追蹤檢索;具體情況根據(jù)確定的初始檢測語句的數(shù)量,以及終端或服務(wù)器的使用情況確定。
漏洞檢測模塊80,以初始檢測語句為起點,根據(jù)初始檢測語句對應(yīng)的寄存器名稱r0,進(jìn)入寄存器r0跟蹤狀態(tài)。順序跟蹤寄存器的流經(jīng)語句,判斷當(dāng)前待檢測的語句是否為跳轉(zhuǎn)語句,若是跳轉(zhuǎn)語句,則繼續(xù)判斷該跳轉(zhuǎn)語句是否為賦值語句;若不是跳轉(zhuǎn)語句,則判斷當(dāng)前待檢測語句是否包含結(jié)束條件;
若跳轉(zhuǎn)語句是賦值語句,則將當(dāng)前寄存器r0的值按照賦值邏輯將值賦予另一寄存器;并分別對當(dāng)前寄存器和另一寄存器進(jìn)行跟蹤;若跳轉(zhuǎn)語句不是賦值語句,根據(jù)跳轉(zhuǎn)語句的跳轉(zhuǎn)邏輯跳轉(zhuǎn)至待檢測程序的對應(yīng) 的位置,順序跟蹤寄存器的流經(jīng)語句。
若確定當(dāng)前待檢測語句包含結(jié)束條件,停止對該語句的追蹤檢測;若確定當(dāng)前待檢測語句不包含結(jié)束條件,則順序跟蹤寄存器的流經(jīng)語句。
優(yōu)選的,漏洞檢測模塊80根據(jù)語句分析模塊70確定的跳轉(zhuǎn)語句塊和各跳轉(zhuǎn)語句塊之間的跳轉(zhuǎn)邏輯關(guān)系,對待檢測程序進(jìn)行以下處理:
以初始檢測語句為起點,確定初始檢測語句對應(yīng)的寄存器名稱r0,初始檢測語句對應(yīng)的跳轉(zhuǎn)語句塊的標(biāo)識;對初始檢測語句進(jìn)行檢測,進(jìn)入寄存器r0跟蹤狀態(tài);順序跟蹤寄存器中的跳轉(zhuǎn)語句塊的流經(jīng)語句。
判斷當(dāng)前跳轉(zhuǎn)語句塊是否包含結(jié)束條件,若包含,確定檢測語句為檢測結(jié)束語句,停止對該語句的追蹤檢測;否則,確定當(dāng)前跳轉(zhuǎn)語句塊順序檢測完成。
判斷當(dāng)前跳轉(zhuǎn)語句塊對應(yīng)的跳轉(zhuǎn)語句是否為賦值語句,若不是賦值語句,則順序跟蹤跳轉(zhuǎn)后的寄存器中的跳轉(zhuǎn)語句塊的流經(jīng)語句;若是賦值語句,將當(dāng)前寄存器的值根據(jù)賦值語句的邏輯關(guān)系賦予給另一寄存器;同時對賦值前的寄存器和賦值后的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測。
雖然漏洞檢測模塊80中描述:同時對賦值前的寄存器和賦值后的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測;但是其時間順序不局限于上述實施例中所列舉的順序。也可以先對賦值后的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測,檢測完成后再對賦值前的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測;或先對賦值前的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測,檢測完成后再對賦值前的寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測;或先對其中一個寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測,檢測設(shè)定時長后,再對另一寄存器對應(yīng)的跳轉(zhuǎn)語句塊進(jìn)行追蹤檢測。
漏洞檢測模塊80,還用于,確定待檢測語句為跳轉(zhuǎn)語句后,判斷此次追蹤檢測過程中檢測到跳轉(zhuǎn)語句的次數(shù)是否大于設(shè)定次數(shù)閾值,若不大于設(shè)定的次數(shù)閾值,則繼續(xù)判斷該跳轉(zhuǎn)語句是否為賦值語句;若大于設(shè)定的次數(shù)閾值,則確定檢測失敗,停止此次漏洞追蹤檢測。
漏洞檢測模塊80,還用于,當(dāng)確定跳轉(zhuǎn)語句為賦值語句后,判斷賦 值語句計數(shù)器的計數(shù)值是否大于1,若不大于1,則當(dāng)前寄存器賦值按照賦值邏輯對另一寄存器進(jìn)行賦值處理;若大于1,則確定檢測失敗,停止此次漏洞追蹤檢測。
需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實施,例如,可采用專用集成電路(ASIC)、通用目的計算機或任何其他類似硬件設(shè)備來實現(xiàn)。在一個實施例中,本申請的軟件程序可以通過處理器執(zhí)行以實現(xiàn)上文所述步驟或功能。同樣地,本申請的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲到計算機可讀記錄介質(zhì)中,例如,RAM存儲器,磁或光驅(qū)動器或軟磁盤及類似設(shè)備。另外,本申請的一些步驟或功能可采用硬件來實現(xiàn),例如,作為與處理器配合從而執(zhí)行各個步驟或功能的電路。
另外,本申請的一部分可被應(yīng)用為計算機程序產(chǎn)品,例如計算機程序指令,當(dāng)其被計算機執(zhí)行時,通過該計算機的操作,可以調(diào)用或提供根據(jù)本申請的方法和/或技術(shù)方案。而調(diào)用本申請的方法的程序指令,可能被存儲在固定的或可移動的記錄介質(zhì)中,和/或通過廣播或其他信號承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲在根據(jù)所述程序指令運行的計算機設(shè)備的工作存儲器中。在此,根據(jù)本申請的一個實施例包括一個裝置,該裝置包括用于存儲計算機程序指令的存儲器和用于執(zhí)行程序指令的處理器,其中,當(dāng)該計算機程序指令被該處理器執(zhí)行時,觸發(fā)該裝置運行基于前述根據(jù)本申請的多個實施例的方法和/或技術(shù)方案。
對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實施例的細(xì)節(jié),而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本申請。因此,無論從哪一點來看,均應(yīng)將實施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本申請內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。系統(tǒng)權(quán)利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實現(xiàn)。第一,第二等詞語用來表示名稱, 而并不表示任何特定的順序。