本申請(qǐng)涉及應(yīng)用測(cè)試技術(shù)領(lǐng)域,尤其涉及一種漏洞分析方法、裝置、終端以及存儲(chǔ)介質(zhì)。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,終端中能夠?qū)崿F(xiàn)與服務(wù)器交互的應(yīng)用程序(也可以稱為客戶端程序)也日益增多。如果應(yīng)用程序存在安全漏洞,那么通過該應(yīng)用程序就可能實(shí)現(xiàn)對(duì)服務(wù)器的惡意攻擊,使得服務(wù)器中的數(shù)據(jù)存在安全威脅。
為了檢測(cè)應(yīng)用程序是否存在安全漏洞,就需要應(yīng)用程序進(jìn)行安全測(cè)試。如,對(duì)應(yīng)用程序進(jìn)行滲透測(cè)試,其中,滲透測(cè)試是通過模擬惡意黑客的攻擊方法,來評(píng)估計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)安全的一種評(píng)估方法。然而,在應(yīng)用程序與服務(wù)器之間采用加密機(jī)制或者其他防篡改機(jī)制進(jìn)行數(shù)據(jù)交互的情況下,目前卻無法對(duì)應(yīng)用程序進(jìn)行安全測(cè)試,也就無法測(cè)試出應(yīng)用程序是否存在安全漏洞。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請(qǐng)?zhí)峁┝艘环N漏洞分析方法、裝置、終端以及存儲(chǔ)介質(zhì),以對(duì)采用加密機(jī)制或者其他防篡改機(jī)制與服務(wù)器進(jìn)行交互的應(yīng)用程序進(jìn)行安全漏洞的測(cè)試。
為實(shí)現(xiàn)上述目的,一方面,本申請(qǐng)?zhí)峁┝艘环N漏洞分析方法包括:
確定待測(cè)試的目標(biāo)應(yīng)用中的至少一個(gè)加密函數(shù)以及至少一個(gè)解密函數(shù),所述加密函數(shù)為用于執(zhí)行數(shù)據(jù)加密的函數(shù),所述解密函數(shù)為用于執(zhí)行數(shù)據(jù)解密的函數(shù);
監(jiān)控到所述加密函數(shù)中輸入待加密的第一數(shù)據(jù),則截獲所述第一數(shù)據(jù);
監(jiān)控到所述解密函數(shù)對(duì)經(jīng)過加密的第二數(shù)據(jù)進(jìn)行解密,則截獲所述解密函數(shù)解密出的所述第二數(shù)據(jù);
基于所述第一數(shù)據(jù)以及第二數(shù)據(jù),對(duì)所述目標(biāo)應(yīng)用進(jìn)行漏洞分析。
另一方面,本申請(qǐng)還提供了一種漏洞分析裝置,包括:
函數(shù)確定單元,用于確定待測(cè)試的目標(biāo)應(yīng)用中的至少一個(gè)加密函數(shù)以及至少一個(gè)解密函數(shù),所述加密函數(shù)為用于執(zhí)行數(shù)據(jù)加密的函數(shù),所述解密函數(shù)為用于執(zhí)行數(shù)據(jù)解密的函數(shù);
第一監(jiān)控單元,用于監(jiān)控到所述加密函數(shù)中輸入待加密的第一數(shù)據(jù),則截獲所述第一數(shù)據(jù);
第二監(jiān)控單元,用于監(jiān)控到所述解密函數(shù)對(duì)經(jīng)過加密的第二數(shù)據(jù)進(jìn)行解密,則截獲所述解密函數(shù)解密出的所述第二數(shù)據(jù);
漏洞分析單元,用于基于所述第一數(shù)據(jù)以及第二數(shù)據(jù),對(duì)所述目標(biāo)應(yīng)用進(jìn)行漏洞分析。
另一方面,本申請(qǐng)還提供了一種終端,包括:
處理器以及存儲(chǔ)器,所述處理器以及存儲(chǔ)器通過通信總線相連;
其中,所述處理器,用于調(diào)用并執(zhí)行所述存儲(chǔ)器中存儲(chǔ)的程序;
所述存儲(chǔ)器,用于存儲(chǔ)程序,所述程序至少用于:
確定待測(cè)試的目標(biāo)應(yīng)用中的至少一個(gè)加密函數(shù)以及至少一個(gè)解密函數(shù),所述加密函數(shù)為用于執(zhí)行數(shù)據(jù)加密的函數(shù),所述解密函數(shù)為用于執(zhí)行數(shù)據(jù)解密的函數(shù);
監(jiān)控到所述加密函數(shù)中輸入待加密的第一數(shù)據(jù),則截獲所述第一數(shù)據(jù);
監(jiān)控到所述解密函數(shù)對(duì)經(jīng)過加密的第二數(shù)據(jù)進(jìn)行解密,則截獲所述解密函數(shù)解密出的所述第二數(shù)據(jù);
基于所述第一數(shù)據(jù)以及第二數(shù)據(jù),對(duì)所述目標(biāo)應(yīng)用進(jìn)行漏洞分析。
一種存儲(chǔ)介質(zhì),所述存儲(chǔ)介質(zhì)中存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令,所述計(jì)算機(jī)可執(zhí)行指令用于執(zhí)行以上所述的漏洞分析方法。
經(jīng)由上述的技術(shù)方案可知,通過對(duì)待測(cè)試的目標(biāo)應(yīng)用中用于進(jìn)行數(shù)據(jù)加密的加密函數(shù)以及用于進(jìn)行數(shù)據(jù)解密的解密函數(shù)進(jìn)行監(jiān)控,在監(jiān)控到加密函數(shù)中輸入待加密的第一數(shù)據(jù)時(shí),截獲未經(jīng)加密的第一數(shù)據(jù),從而可以在目標(biāo)應(yīng)用將發(fā)送給服務(wù)器的數(shù)據(jù)進(jìn)行加密之前,截取到未經(jīng)加密的數(shù)據(jù);而且,在監(jiān)控到解密函數(shù)對(duì)經(jīng)過加密的第二數(shù)據(jù)進(jìn)行解密之后,也截獲該解密函數(shù)解密出的第二數(shù)據(jù),這樣,在服務(wù)器為目標(biāo)應(yīng)用返回經(jīng)過加密的數(shù)據(jù)之后,也可以通過對(duì)該解密函數(shù)進(jìn)行監(jiān)控,獲取到對(duì)服務(wù)器返回的數(shù)據(jù)進(jìn)行解密后的數(shù)據(jù),可見,雖然終端無法獲取到目標(biāo)應(yīng)用與服務(wù)器之間加解密數(shù)據(jù)的加密密鑰以及解密密鑰,但是終端卻可以直接獲取到目標(biāo)應(yīng)用與服務(wù)器之間所交互的加密數(shù)據(jù)所對(duì)應(yīng)的未經(jīng)加密的第一數(shù)據(jù)以及第二數(shù)據(jù),從而仍可以基于該第一數(shù)據(jù)以及第二數(shù)據(jù),實(shí)現(xiàn)對(duì)該目標(biāo)應(yīng)用的安全漏洞分析。
附圖說明
為了更清楚地說明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請(qǐng)的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1示出了本申請(qǐng)的一種漏洞分析方法的一種應(yīng)用場(chǎng)景的組成結(jié)構(gòu)示意圖;
圖2示出了適用于本申請(qǐng)的一種漏洞分析方法所適用的終端的一種組成結(jié)構(gòu)示意圖;
圖3示出了本申請(qǐng)一種漏洞分析方法一個(gè)實(shí)施例的流程示意圖;
圖4示出了本申請(qǐng)的一種漏洞分析方法又一個(gè)實(shí)施例的流程示意圖;
圖5示出了測(cè)試應(yīng)用和目標(biāo)應(yīng)用中涉及到的函數(shù)以及函數(shù)之間關(guān)系的一種示意圖;
圖6示出了本申請(qǐng)一種漏洞分析裝置一個(gè)實(shí)施例的組成結(jié)構(gòu)示意圖;
圖7示出了本申請(qǐng)一種漏洞分析裝置又一個(gè)實(shí)施例的組成結(jié)構(gòu)示意圖。
具體實(shí)施方式
本申請(qǐng)的漏洞分析方法可以應(yīng)用于對(duì)終端中運(yùn)行的應(yīng)用進(jìn)行測(cè)試,以測(cè)試出應(yīng)用中存在的安全漏洞。
為了便于理解,先對(duì)本申請(qǐng)實(shí)施例的漏洞分析方法所適用的應(yīng)用場(chǎng)景的系統(tǒng)組成進(jìn)行介紹。如圖1,在圖1所示的應(yīng)用場(chǎng)景中可以包括:終端101以及服務(wù)器102。
其中,終端101可以為手機(jī)、平板電腦等等。
在本申請(qǐng)實(shí)施例中,該終端101中安裝有至少一個(gè)基于客戶端/服務(wù)器機(jī)制的應(yīng)用程序(application,app),基于該app,終端可以與該app所屬的服務(wù)器建立通信連接,并向該服務(wù)器102發(fā)送訪問請(qǐng)求。
相應(yīng)的,服務(wù)器102響應(yīng)于該終端發(fā)送的訪問請(qǐng)求,為終端中該app返回該app所請(qǐng)求訪問的數(shù)據(jù)。
在本申請(qǐng)實(shí)施例中,為了測(cè)試app中是否存在影響該app的服務(wù)器中的數(shù)據(jù)安全的安全漏洞,在該終端中還安裝有用于測(cè)試該app是否存在安全漏洞的測(cè)試應(yīng)用。
在本申請(qǐng)實(shí)施例中,該終端可以為手機(jī)、平板電腦等。如,參見圖2,其示出了本申請(qǐng)實(shí)施例的漏洞分析方法所適用的終端的一種組成結(jié)構(gòu)示意圖。在圖2中,該終端200可以包括:處理器201、存儲(chǔ)器202、通信接口203、輸入單元204和顯示器205和通信總線206。
處理模塊201、存儲(chǔ)器202、通信接口203、輸入單元204、顯示器205、均通過通信總線206完成相互間的通信。
在本申請(qǐng)實(shí)施例中,該處理器201,可以為中央處理器(centralprocessingunit,cpu),特定應(yīng)用集成電路(application-specificintegratedcircuit,asic),數(shù)字信號(hào)處理器(dsp)、專用集成電路(asic)、現(xiàn)成可編程門陣列(fpga)或者其他可編程邏輯器件等。
該處理器可以調(diào)用存儲(chǔ)器202中存儲(chǔ)的程序,具體的,可以處理器可以執(zhí)行以下圖3以及圖4中終端側(cè)所執(zhí)行的操作。
存儲(chǔ)器202中用于存放一個(gè)或者一個(gè)以上程序,程序可以包括程序代碼,所述程序代碼包括計(jì)算機(jī)操作指令,在本申請(qǐng)實(shí)施例中,該存儲(chǔ)器中至少存儲(chǔ)有用于實(shí)現(xiàn)以下功能的程序:
確定待測(cè)試的目標(biāo)應(yīng)用中的至少一個(gè)加密函數(shù)以及至少一個(gè)解密函數(shù),該加密函數(shù)為該目標(biāo)應(yīng)用中用于執(zhí)行數(shù)據(jù)加密的函數(shù),解密函數(shù)為目標(biāo)應(yīng)用中用于執(zhí)行數(shù)據(jù)解密的函數(shù);
監(jiān)控到加密函數(shù)中輸入待加密的第一數(shù)據(jù),則截獲該第一數(shù)據(jù);
監(jiān)控到該解密函數(shù)對(duì)經(jīng)過加密的第二數(shù)據(jù)進(jìn)行解密,則截獲該解密函數(shù)解密出的第二數(shù)據(jù);
基于所述第一數(shù)據(jù)以及第二數(shù)據(jù),對(duì)該目標(biāo)應(yīng)用進(jìn)行漏洞分析。
在一種可能的實(shí)現(xiàn)方式中,該存儲(chǔ)器202可包括存儲(chǔ)程序區(qū)和存儲(chǔ)數(shù)據(jù)區(qū),其中,存儲(chǔ)程序區(qū)可存儲(chǔ)操作系統(tǒng)、以上所提到的程序,以及至少一個(gè)功能(比如聲音播放功能、圖像播放功能以及定位功能等)所需的應(yīng)用程序等;存儲(chǔ)數(shù)據(jù)區(qū)可存儲(chǔ)根據(jù)終端的使用過程中所創(chuàng)建的數(shù)據(jù),比如,音頻數(shù)據(jù)、電話本等。
此外,存儲(chǔ)器202可以包括高速隨機(jī)存取存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,例如至少一個(gè)磁盤存儲(chǔ)器件、閃存器件、或其他易失性固態(tài)存儲(chǔ)器件。
該通信接口203可以為通信模塊的接口,如gsm模塊的接口。
本申請(qǐng)還可以包括輸入單元205,該輸入單元可以包括感應(yīng)觸摸顯示面板上的觸摸事件的觸摸感應(yīng)單元、鍵盤等等。
該顯示器204包括顯示面板,如觸摸顯示面板等。在一種可能的情況中,可以采用液晶顯示器(liquidcrystaldisplay,lcd)、有機(jī)發(fā)光二極管(organiclight-emittingdiode,oled)等形式來配置顯示面板。
當(dāng)然,圖2所示的終端結(jié)構(gòu)并不構(gòu)成對(duì)本申請(qǐng)實(shí)施例中終端的限定,在實(shí)際應(yīng)用中終端可以包括比圖2所示的更多或更少的部件,或者組合某些部件。
本申請(qǐng)的發(fā)明人經(jīng)過對(duì)app的測(cè)試過程進(jìn)行研究發(fā)現(xiàn):目前現(xiàn)有的app測(cè)試過程中,一般是在終端上設(shè)置網(wǎng)絡(luò)代理,并通過網(wǎng)絡(luò)代理將該app與服務(wù)器之間交互的數(shù)據(jù)引流到指定設(shè)備(如,臺(tái)式電腦)中,從而依據(jù)app與服務(wù)器之間交互的數(shù)據(jù)分析該app是否存在安全漏洞。然而,在應(yīng)用程序與服務(wù)器之間采用加密機(jī)制或者其他防篡改機(jī)制進(jìn)行數(shù)據(jù)交互的情況下,通過網(wǎng)絡(luò)代理引導(dǎo)到指定設(shè)備上的數(shù)據(jù)均為加密后的數(shù)據(jù),如,app將數(shù)據(jù)加密后發(fā)送給服務(wù)器,或者服務(wù)器返回給app的加密后的響應(yīng)數(shù)據(jù),而由于無法獲取到app的加密密鑰以及解密密鑰,也就無法對(duì)app與服務(wù)器之間傳輸?shù)慕?jīng)過加密的數(shù)據(jù)進(jìn)行處理以及分析,無法分析出該app是否存在安全漏洞。
可見,為了測(cè)試該app中是否存在安全漏洞,關(guān)鍵是能夠獲取到app與服務(wù)器之間交互的經(jīng)過加密的數(shù)據(jù)所對(duì)應(yīng)的原始數(shù)據(jù)。因此,在本申請(qǐng)實(shí)施例中,終端會(huì)監(jiān)控app對(duì)數(shù)據(jù)加密以及解密的操作,并在app對(duì)需要傳輸?shù)臄?shù)據(jù)進(jìn)行加密之前,截獲該app中所需加密的數(shù)據(jù);同時(shí),在服務(wù)器為app返回經(jīng)過加密的數(shù)據(jù),且app對(duì)服務(wù)器返回的數(shù)據(jù)進(jìn)行解密之后,截獲該app所解密出的數(shù)據(jù),從而根據(jù)截獲的該app加密前的數(shù)據(jù)以及對(duì)服務(wù)器返回的數(shù)據(jù)解密后的數(shù)據(jù),來分析該app是否存在安全漏洞。
考慮到app中實(shí)現(xiàn)數(shù)據(jù)加密以及解密的操作是分別通過app中的加密函數(shù)以及解密函數(shù)完成的,因此,終端可以確定該app中的加密函數(shù)以及解密函數(shù),并分別監(jiān)控該加密函數(shù)以及解密函數(shù),在監(jiān)控到該加密函數(shù)中輸入待加密的第一數(shù)據(jù)時(shí),則截獲該第一數(shù)據(jù);相應(yīng)的,在監(jiān)控到解密函數(shù)對(duì)輸入的,經(jīng)過加密的第二數(shù)據(jù)進(jìn)行解密時(shí),則截獲該解密函數(shù)解密出的第二數(shù)據(jù);并基于該第一數(shù)據(jù)以及第二數(shù)據(jù),對(duì)該app進(jìn)行漏洞分析。
在本申請(qǐng)實(shí)施例中,為了便于區(qū)分加密函數(shù)以及解密函數(shù)所處理的數(shù)據(jù),將app中輸入到加密函數(shù)進(jìn)行加密的數(shù)據(jù)稱為第一數(shù)據(jù),將輸入到解密函數(shù)中進(jìn)行解密的數(shù)據(jù)稱為經(jīng)過加密的第二數(shù)據(jù),其中,通過解密函數(shù)對(duì)經(jīng)過加密的第二數(shù)據(jù)解密可以得到第二數(shù)據(jù)。
下面結(jié)合本申請(qǐng)的以上共性,對(duì)本申請(qǐng)實(shí)施例的漏洞分析方法進(jìn)行詳細(xì)介紹。
參見圖3,其示出了申請(qǐng)一種漏洞分析方法一個(gè)實(shí)施例的流程示意圖,本實(shí)施例從終端中測(cè)試應(yīng)用與待測(cè)試的app之間的交互過程進(jìn)行描述。本實(shí)施例的方法可以包括:
s301,終端的測(cè)試應(yīng)用對(duì)待測(cè)試的目標(biāo)應(yīng)用的程序代碼進(jìn)行分析,得到該目標(biāo)應(yīng)用的源碼。
其中,如前面所描述的,該測(cè)試應(yīng)用用于對(duì)該終端中該測(cè)試應(yīng)用之外的其他應(yīng)用進(jìn)行漏洞分析。
為了與終端安裝的該測(cè)試應(yīng)用以及當(dāng)前無需進(jìn)行漏洞分析的其他應(yīng)用進(jìn)行區(qū)分,將終端中當(dāng)前需要測(cè)試或者說需要進(jìn)行漏洞分析的應(yīng)用稱為目標(biāo)應(yīng)用。
為了后續(xù)可以定位出目標(biāo)應(yīng)用中實(shí)現(xiàn)數(shù)據(jù)加密和防護(hù)的加密函數(shù),以及對(duì)數(shù)據(jù)進(jìn)行解密的解密函數(shù),可以分析該目標(biāo)應(yīng)用的源碼,以根據(jù)源碼分析出該目標(biāo)應(yīng)用中所包含的加密以及解密函數(shù)。
其中,依據(jù)app的程序代碼分析該app的源碼的方式可以有多種,如,以安卓操作系統(tǒng)的app為例,由于安卓操作系統(tǒng)的app大部分使用jave語(yǔ)言編寫,利用jave語(yǔ)言的可逆性,可以逆向分析出該app的源碼,從而得到該app所使用的加密算法、邏輯以及校驗(yàn)方法等等。如,逆向分析app的源碼可以是通過對(duì)app的程序語(yǔ)言的語(yǔ)法進(jìn)行分析,從而還原出該app的源碼。當(dāng)然,對(duì)app進(jìn)行逆向分析源碼的具體實(shí)現(xiàn)方式可以有多種,在此不加以限制。
s302,測(cè)試應(yīng)用按照預(yù)置的加密函數(shù)以及解密函數(shù)的標(biāo)識(shí),從該目標(biāo)應(yīng)用的源碼中,確定出用于執(zhí)行數(shù)據(jù)加密的至少一個(gè)加密函數(shù)以及用于執(zhí)行數(shù)據(jù)解密的至少一個(gè)解密函數(shù)。
其中,該目標(biāo)應(yīng)用中包括至少一個(gè)加密函數(shù)以及至少一個(gè)解密函數(shù)。
加密函數(shù)是指對(duì)數(shù)據(jù)進(jìn)行加密以及其他防護(hù)處理的函數(shù),相應(yīng)的,解密函數(shù)為對(duì)數(shù)據(jù)進(jìn)行解密以解除防護(hù)處理的函數(shù)??梢岳斫獾氖?,一個(gè)app中實(shí)現(xiàn)加密的函數(shù)可以有一種或多種,而每一種加密函數(shù)均對(duì)應(yīng)著一個(gè)解密函數(shù),因此,解密函數(shù)也可以有一種或多種。
其中,從目標(biāo)應(yīng)用中確定加密函數(shù)以及解密函數(shù)的方式可以有多種??紤]到大部分應(yīng)用程序中所采用的加密函數(shù)以及解密函數(shù)都是固定的一些函數(shù),因此,在一種實(shí)現(xiàn)方式中,可以預(yù)置所有可能的加密函數(shù)以及解密函數(shù)的標(biāo)識(shí),如,通過不同的列表的形式,分別列舉出加密函數(shù)以及解密函數(shù)。這樣,將該目標(biāo)應(yīng)用的源碼與分別與預(yù)置的加密函數(shù)的標(biāo)識(shí)進(jìn)行比對(duì),可以確定該源碼中所包含的加密函數(shù);相應(yīng)的,將源碼與預(yù)置的解密函數(shù)的標(biāo)識(shí)進(jìn)行比對(duì),可以確定出源碼中包含的解密函數(shù)。
其中,該加密函數(shù)以及解密函數(shù)的標(biāo)識(shí)可以是函數(shù)的名稱??紤]到在一些語(yǔ)言編寫的程序中,允許不同函數(shù)的函數(shù)名相同,因此,為了唯一區(qū)分一個(gè)函數(shù),該函數(shù)的標(biāo)識(shí)還可以包括函數(shù)的函數(shù)類型以及參數(shù)等。如,加密函數(shù)的標(biāo)識(shí)可以包括:加密函數(shù)的函數(shù)名、函數(shù)類型以及參數(shù)。
s303,在終端運(yùn)行該目標(biāo)應(yīng)用的過程中,測(cè)試應(yīng)用通過內(nèi)置的鉤子函數(shù)分別監(jiān)控每個(gè)加密函數(shù)以及解密函數(shù)。
鉤子函數(shù)內(nèi)置于測(cè)試應(yīng)用中。鉤子hook函數(shù)的本質(zhì)是用以處理系統(tǒng)消息的程序,通過鉤子函數(shù)可以捕獲該鉤子函數(shù)所在的進(jìn)程或其它進(jìn)程發(fā)生的事件,鉤子hook可以通過匯編的跳轉(zhuǎn)指令,實(shí)現(xiàn)修改其他進(jìn)程中函數(shù)的執(zhí)行流程。因此,通過hook函數(shù)可以對(duì)目標(biāo)應(yīng)用中的加密函數(shù)以及解密函數(shù)進(jìn)行監(jiān)控,并阻塞以及改變?cè)摷用芎瘮?shù)以及解密函數(shù)的數(shù)據(jù)處理流程。s304,測(cè)試應(yīng)用通過鉤子函數(shù)監(jiān)控到加密函數(shù)中輸入待加密的第一數(shù)據(jù)時(shí),通過鉤子函數(shù)截獲該第一數(shù)據(jù)。
鉤子函數(shù)監(jiān)控到該目標(biāo)應(yīng)用向該加密函數(shù)中輸入了所需加密的第一數(shù)據(jù)時(shí),則可以在加密函數(shù)對(duì)該第一數(shù)據(jù)進(jìn)行加密之前,通過該鉤子函數(shù)截取該第一數(shù)據(jù),從而使得測(cè)試應(yīng)用可以獲取到目標(biāo)應(yīng)用對(duì)加密前的第一數(shù)據(jù)。
其中,該加密函數(shù)中預(yù)置有對(duì)數(shù)據(jù)的加密密鑰,加密函數(shù)依據(jù)該加密密鑰對(duì)數(shù)據(jù)進(jìn)行加密。雖然測(cè)試應(yīng)用無法獲取到待測(cè)試的目標(biāo)應(yīng)用中該加密函數(shù)的加密密鑰,但是通過鉤子函數(shù)卻可以截獲加密函數(shù)加密前的數(shù)據(jù),從而避免了由于無法破解目標(biāo)應(yīng)用中加密函數(shù)內(nèi)的加密密鑰,而導(dǎo)致無法分析該目標(biāo)應(yīng)用中輸出的經(jīng)過加密的數(shù)據(jù)的問題。
可以理解的是,在采用安全機(jī)制的app中,為了保證向服務(wù)器傳輸?shù)臄?shù)據(jù)不被篡改等,一般會(huì)對(duì)發(fā)送給服務(wù)器的數(shù)據(jù)進(jìn)行加密,因此,該第一數(shù)據(jù)可以是目標(biāo)應(yīng)用待發(fā)送給服務(wù)器的數(shù)據(jù),或者,所需發(fā)送的數(shù)據(jù)的中間數(shù)據(jù)(即進(jìn)行中間處理的數(shù)據(jù))。因此,在對(duì)第一數(shù)據(jù)進(jìn)行加密之前,截取到該第一數(shù)據(jù),則可以避免由于無法解密目標(biāo)應(yīng)用發(fā)送給服務(wù)器的數(shù)據(jù),而無法對(duì)目標(biāo)應(yīng)用進(jìn)行安全分析的問題。s305,測(cè)試應(yīng)用將該第一數(shù)據(jù)配置為測(cè)試數(shù)據(jù)。
可以理解的是,在對(duì)目標(biāo)應(yīng)用進(jìn)行安全測(cè)試的過程中,有些情況中可能需要修改目標(biāo)應(yīng)用向服務(wù)器發(fā)送的數(shù)據(jù),以便基于服務(wù)器針對(duì)該修改后的數(shù)據(jù)所返回的響應(yīng)數(shù)據(jù),來判斷該目標(biāo)應(yīng)用是否存在影響到服務(wù)器安全的漏洞。
其中,將該第一數(shù)據(jù)配置為測(cè)試數(shù)據(jù)的方式可以有多種,具體可以根據(jù)實(shí)際的測(cè)試需要來對(duì)第一數(shù)據(jù)進(jìn)行修改、拼接等等不同的配置處理。
如,在一種可能的情況中,可以將該第一數(shù)據(jù)與指定的測(cè)試字符進(jìn)行拼接處理,得到該測(cè)試數(shù)據(jù)。其中,指定的測(cè)試字符可以預(yù)先存儲(chǔ)在終端的存儲(chǔ)器中;該測(cè)試字符也可以是由測(cè)試人員實(shí)時(shí)輸入的一些字符。例如,假設(shè)第一數(shù)據(jù)為“www.a*b.com”,則可以將第一數(shù)據(jù)進(jìn)行拼接處理得到“wwwwww.a*b.com.id=1.and1=1”或者是,“wwwwww.a*b.com.id=1.and1=2”,以便后續(xù)將該拼接處理后的數(shù)據(jù)作為目標(biāo)應(yīng)用需要發(fā)送給服務(wù)器的數(shù)據(jù)。
s306,測(cè)試應(yīng)用通過該鉤子函數(shù)將該測(cè)試數(shù)據(jù)返回給該目標(biāo)應(yīng)用中的該加密函數(shù)進(jìn)行加密。
鉤子函數(shù)將測(cè)試數(shù)據(jù)返回給目標(biāo)應(yīng)用中的該加密函數(shù),從而使得加密函數(shù)不再對(duì)原來的第一數(shù)據(jù)進(jìn)行加密,而是對(duì)該測(cè)試數(shù)據(jù)進(jìn)行加密。
可以理解的是,為了能夠測(cè)試應(yīng)用使得加密函數(shù)不再對(duì)第一數(shù)據(jù)進(jìn)行加密,在測(cè)試應(yīng)用截取了該第一數(shù)據(jù)的同時(shí),該測(cè)試應(yīng)用可以通過鉤子函數(shù)阻塞該加密函數(shù)的數(shù)據(jù)處理流程,即凍結(jié)該加密函數(shù)的處理進(jìn)程,使得加密函數(shù)處于等待處理處理的狀態(tài),而不再進(jìn)行數(shù)據(jù)加密處理。相應(yīng)的,當(dāng)測(cè)試應(yīng)用將該第一數(shù)據(jù)替換為測(cè)試數(shù)據(jù)并返回給加密函數(shù)之后,測(cè)試應(yīng)用可以通過鉤子函數(shù)解除對(duì)該加密函數(shù)的阻塞,以使得加密函數(shù)可以對(duì)該測(cè)試數(shù)據(jù)進(jìn)行處理。
其中,鉤子函數(shù)阻塞該加密函數(shù)的時(shí)長(zhǎng)可以是默認(rèn)的時(shí)長(zhǎng),也可以是由測(cè)試人員根據(jù)需要預(yù)先設(shè)定的,一般以該阻塞的時(shí)長(zhǎng)大于測(cè)試應(yīng)用將該第一數(shù)據(jù)配置為測(cè)試數(shù)據(jù)所需的時(shí)長(zhǎng)為準(zhǔn)。
需要說明的步驟s304至s306是以對(duì)一個(gè)加密函數(shù)進(jìn)行監(jiān)控并截取加密前的第一數(shù)據(jù)為例進(jìn)行介紹,但是可以理解的是,對(duì)于每個(gè)加密函數(shù),測(cè)試應(yīng)用監(jiān)控該加密函數(shù)以及截取該第一數(shù)據(jù)的過程均相似。
s307,目標(biāo)應(yīng)用中的加密函數(shù)對(duì)該測(cè)試數(shù)據(jù)進(jìn)行加密之后,將經(jīng)過加密的測(cè)試數(shù)據(jù)發(fā)送給該目標(biāo)應(yīng)用的服務(wù)器。
由于加密函數(shù)中加密的測(cè)試數(shù)據(jù)為測(cè)試應(yīng)用對(duì)原始的第一數(shù)據(jù)進(jìn)行處理后得到的,將經(jīng)過加密的測(cè)試數(shù)據(jù)發(fā)送給服務(wù)器之后,服務(wù)器可以根據(jù)測(cè)試數(shù)據(jù)為目標(biāo)應(yīng)用返回響應(yīng)數(shù)據(jù),以便基于響應(yīng)數(shù)據(jù)分析目標(biāo)應(yīng)用與服務(wù)器之間的數(shù)據(jù)交互是否存在安全漏洞。
可以理解的是,在對(duì)目標(biāo)應(yīng)用進(jìn)行測(cè)試的過程中,根據(jù)測(cè)試需求,測(cè)試應(yīng)用根據(jù)需要選擇執(zhí)行該步驟s305至s307,或者選擇不執(zhí)行該s305至s307。如,在不需要向第一數(shù)據(jù)中添加其他數(shù)據(jù)的情況下,則可以不執(zhí)行該步驟s305和s307,則后續(xù)可以直接根據(jù)第一數(shù)據(jù)以及解密函數(shù)解密出的第二數(shù)據(jù),來分析該目標(biāo)應(yīng)用是否存在安全漏洞。
s308,測(cè)試應(yīng)用通過鉤子函數(shù)監(jiān)控到解密函數(shù)對(duì)輸入的,且經(jīng)過加密的第二數(shù)據(jù)進(jìn)行解密,則截獲該解密函數(shù)解密出的第二數(shù)據(jù)。
如果通過鉤子函數(shù)監(jiān)測(cè)到解密函數(shù)輸入了經(jīng)過加密的第二數(shù)據(jù),且該解密函數(shù)對(duì)該加密的第二數(shù)據(jù)進(jìn)行解密,得到該第二數(shù)據(jù)時(shí),鉤子函數(shù)可以截獲該第二數(shù)據(jù),從而使得測(cè)試程序獲取到未經(jīng)加密的數(shù)據(jù),以便后續(xù)進(jìn)行漏洞分析。
可以理解的是,目標(biāo)應(yīng)用中所需解密的數(shù)據(jù)可以是服務(wù)器返回給目標(biāo)應(yīng)用的數(shù)據(jù),如,服務(wù)器針對(duì)目標(biāo)應(yīng)用發(fā)送的數(shù)據(jù)所返回的響應(yīng)數(shù)據(jù)等。當(dāng)然,該經(jīng)過加密的第二數(shù)據(jù)也可以是目標(biāo)應(yīng)用處理服務(wù)器返回的數(shù)據(jù)所產(chǎn)生的中間數(shù)據(jù)等。
可選的,考慮到目標(biāo)應(yīng)用將經(jīng)過加密的第一數(shù)據(jù)或者經(jīng)過加密的測(cè)試數(shù)據(jù)發(fā)送給服務(wù)器之后,服務(wù)器會(huì)返回經(jīng)過加密的響應(yīng)數(shù)據(jù)(如圖3中服務(wù)器與目標(biāo)應(yīng)用之間的虛線所示),而目標(biāo)應(yīng)用需要利用解密函數(shù)對(duì)服務(wù)器返回的經(jīng)過加密的數(shù)據(jù)進(jìn)行解密。因此,解密函數(shù)中輸入該經(jīng)過加密的第二數(shù)據(jù)可以為服務(wù)器針對(duì)經(jīng)過加密的第一數(shù)據(jù)或者測(cè)試數(shù)據(jù)返回的響應(yīng)數(shù)據(jù)。
進(jìn)一步,由于不同的加密函數(shù)對(duì)應(yīng)著不同的解密函數(shù),如采用同一套加解密算法的加密函數(shù)和解密函數(shù)可以屬于該目標(biāo)應(yīng)用的同一個(gè)類中,因此,本申請(qǐng)實(shí)施例中,解密函數(shù)所解密的第二數(shù)據(jù)可以為服務(wù)器針對(duì)與該解密函數(shù)關(guān)聯(lián)的加密函數(shù)所加密的第一數(shù)據(jù)或測(cè)試數(shù)據(jù)所返回的響應(yīng)數(shù)據(jù)。
可以理解的是,該步驟s304與步驟s308的順序并不限于圖3所示,在實(shí)際應(yīng)用中,目標(biāo)應(yīng)用中不存在關(guān)聯(lián)關(guān)系的加密函數(shù)以及解密函數(shù)可能會(huì)同時(shí)對(duì)不同的數(shù)據(jù)進(jìn)行加密或者解密;同時(shí),即使相互關(guān)聯(lián)的加密函數(shù)以及解密函數(shù)(即采用相同匹配的加密算法以及解密算法的加密函數(shù)以及解密算法)也可能會(huì)同時(shí)對(duì)不同的數(shù)據(jù)進(jìn)行加密或者解密,因此,在執(zhí)行該步驟s304的同時(shí),也可以同時(shí)執(zhí)行該步驟s308。
s309,測(cè)試應(yīng)用基于該測(cè)試數(shù)據(jù)以及該第二數(shù)據(jù),對(duì)該目標(biāo)應(yīng)用進(jìn)行漏洞分析。
如,通過比對(duì)測(cè)試數(shù)據(jù)以及第二數(shù)據(jù),并結(jié)合特定的測(cè)試規(guī)則,可以分析該目標(biāo)應(yīng)用中是否存在漏洞。
又如,測(cè)試應(yīng)用可以根據(jù)加密函數(shù)與解密函數(shù)的對(duì)應(yīng)關(guān)系,將具有對(duì)應(yīng)關(guān)系的測(cè)試數(shù)據(jù)與第二數(shù)據(jù)(如,第二數(shù)據(jù)為針對(duì)測(cè)試數(shù)據(jù)的響應(yīng)數(shù)據(jù))進(jìn)行顯示輸出,以便測(cè)試人員根據(jù)服務(wù)器針對(duì)測(cè)試數(shù)據(jù)所返回的第二數(shù)據(jù),分析該目標(biāo)應(yīng)用是否存在漏洞。
當(dāng)然,基于測(cè)試數(shù)據(jù)以及第二數(shù)據(jù)分析該目標(biāo)應(yīng)用是否存在漏洞的方式可以有多種,在此不加以限制。
可以理解的是,在本實(shí)施例是將第一數(shù)據(jù)配置為測(cè)試數(shù)據(jù)后,由目標(biāo)應(yīng)用將測(cè)試數(shù)據(jù)加密后發(fā)送給服務(wù)器為例進(jìn)行介紹,因此,該測(cè)試應(yīng)用需要基于該測(cè)試數(shù)據(jù)以及第二數(shù)據(jù),分析該目標(biāo)應(yīng)用是否存在安全漏洞。但是,如果目標(biāo)應(yīng)用是將第一數(shù)據(jù)加密后發(fā)送給服務(wù)器,則測(cè)試應(yīng)用可以直接基于該第一數(shù)據(jù)以及該第二數(shù)據(jù)進(jìn)行漏洞分析。
需要說明的是,在本申請(qǐng)實(shí)施例中,是以在測(cè)試應(yīng)用中內(nèi)置鉤子函數(shù),并通過鉤子函數(shù)監(jiān)控待測(cè)試的目標(biāo)應(yīng)用中的加密函數(shù)以及解密函數(shù)為例進(jìn)行說明,但是可以理解的是,如果通過其他方式監(jiān)控加密函數(shù)以及解密函數(shù),并截取該第一數(shù)據(jù)以及第二數(shù)據(jù)的方式也同樣適用于本申請(qǐng)實(shí)施例。如,可以在每個(gè)加密函數(shù)以及解密函數(shù)中注入回調(diào)函數(shù),以通過回調(diào)函數(shù)捕獲輸入至加密函數(shù)的第一數(shù)據(jù),以及解密函數(shù)輸出的第二數(shù)據(jù)。本申請(qǐng)對(duì)于監(jiān)控該加密函數(shù)以及解密函數(shù),以截取該第一數(shù)據(jù)以及第二數(shù)據(jù)的具體方式不加以限制。
可見,在本申請(qǐng)實(shí)施例中,終端可以在目標(biāo)應(yīng)用將發(fā)送給服務(wù)器的數(shù)據(jù)進(jìn)行加密之前,截取到未經(jīng)加密的數(shù)據(jù);并在服務(wù)器為目標(biāo)應(yīng)用返回經(jīng)過加密的數(shù)據(jù)之后,截取該目標(biāo)應(yīng)用對(duì)服務(wù)器返回的數(shù)據(jù)進(jìn)行解密后的數(shù)據(jù),可因此,雖然終端無法獲取到目標(biāo)應(yīng)用與服務(wù)器之間加解密數(shù)據(jù)的加密密鑰以及解密密鑰,但是終端卻可以直接獲取到目標(biāo)應(yīng)用與服務(wù)器之間所交互的加密數(shù)據(jù)所對(duì)應(yīng)的未經(jīng)加密的第一數(shù)據(jù)以及第二數(shù)據(jù),從而仍可以基于該第一數(shù)據(jù)以及第二數(shù)據(jù),實(shí)現(xiàn)對(duì)該目標(biāo)應(yīng)用的安全漏洞分析。
可以理解的是,在本申請(qǐng)以上實(shí)施例中,是以鉤子函數(shù)從目標(biāo)應(yīng)用中截取第一數(shù)據(jù)以及第二數(shù)據(jù)并返回給測(cè)試應(yīng)用為例進(jìn)行說明,但是可以理解的是,為了實(shí)現(xiàn)測(cè)試應(yīng)用可以獲取到目標(biāo)應(yīng)用中的第一數(shù)據(jù)以及第二數(shù)據(jù),也可以向目標(biāo)應(yīng)用中注入用于實(shí)現(xiàn)該目標(biāo)應(yīng)用與測(cè)試應(yīng)用之間數(shù)據(jù)傳輸?shù)膹V播函數(shù)。
為了便于理解,以測(cè)試應(yīng)用中運(yùn)行有一個(gè)用于執(zhí)行安全漏洞測(cè)試的安全測(cè)試函數(shù)為例進(jìn)行說明,在測(cè)試應(yīng)用具有安全測(cè)試函數(shù)的情況下,注入到目標(biāo)應(yīng)用中的廣播函數(shù)用于將目標(biāo)app中的數(shù)據(jù)傳輸給測(cè)試應(yīng)用中的鉤子函數(shù)以及安全測(cè)試函數(shù)。參見圖4,其示出了本申請(qǐng)一種漏洞分析方法又一個(gè)實(shí)施例的流程示意圖。本實(shí)施例可以包括:
s401,終端的測(cè)試應(yīng)用通過對(duì)待測(cè)試的目標(biāo)app的程序代碼進(jìn)行逆向分析,還原出該目標(biāo)app的源碼。
本實(shí)施例是以逆向分析出源碼為例進(jìn)行介紹,但是通過其他方式確定目標(biāo)app的源碼的方式也適用于本實(shí)施例。
s402,測(cè)試應(yīng)用根據(jù)預(yù)置的加密函數(shù)列表以及解密函數(shù)列表,并結(jié)合該目標(biāo)app的源碼,確定出該目標(biāo)app中的至少一個(gè)加密函數(shù)的標(biāo)識(shí)信息以及至少一個(gè)解密函數(shù)的標(biāo)識(shí)信息。
其中,該加密函數(shù)以及解密函數(shù)的標(biāo)識(shí)信息用于唯一標(biāo)識(shí)該加密函數(shù)以及解密函數(shù)加密函數(shù)。該標(biāo)識(shí)信息可以包括函數(shù)名、函數(shù)參數(shù)以及函數(shù)類型。
以上步驟s401和步驟s402為對(duì)目標(biāo)app進(jìn)行測(cè)試前的準(zhǔn)備工作,其目的是預(yù)測(cè)出可能的加密函數(shù)以及解密函數(shù),同時(shí)為用戶判斷該目標(biāo)app中可能存在的加密函數(shù)以及解密函數(shù)提供依據(jù)。
s403,在終端啟動(dòng)該目標(biāo)app時(shí),測(cè)試應(yīng)用通過內(nèi)置的hook函數(shù)控制該app的主函數(shù)入口,并向該目標(biāo)app的主函數(shù)入口中注入廣播函數(shù)。
s404,目標(biāo)app通過該廣播函數(shù)獲取用戶輸入的阻塞時(shí)長(zhǎng)以及該hook函數(shù)所需監(jiān)控的至少一個(gè)加密函數(shù)的標(biāo)識(shí)信息以及至少一個(gè)解密函數(shù)的標(biāo)識(shí)信息。
其中,標(biāo)識(shí)信息可以為函數(shù)名、函數(shù)參數(shù)以及函數(shù)類型。
其中,阻塞時(shí)長(zhǎng)為對(duì)目標(biāo)app中的加密函數(shù)以及解密函數(shù)進(jìn)行阻塞控制,以凍結(jié)函數(shù)運(yùn)行的時(shí)長(zhǎng)。本實(shí)施例是以用戶設(shè)定該阻塞時(shí)長(zhǎng)為例進(jìn)行介紹,但是該阻塞時(shí)長(zhǎng)也可以是測(cè)試應(yīng)用默認(rèn)的一個(gè)時(shí)長(zhǎng)。
用戶可以結(jié)合前面測(cè)試應(yīng)用逆向分析出的源碼以及預(yù)估出的可能的加密函數(shù)以及解密函數(shù),來確定出需要監(jiān)控的加密函數(shù)以及解密函數(shù)。
用戶向該目標(biāo)app中廣播函數(shù)中輸入該阻塞時(shí)長(zhǎng)、以及加密、解密函數(shù)的標(biāo)識(shí)信息,可以是先目標(biāo)app中的輸入框中輸入阻塞時(shí)長(zhǎng)等相關(guān)信息,則廣播函數(shù)可以捕獲輸入的相關(guān)信息;也可以是通過向終端的操作系統(tǒng)命令行中輸入相關(guān)信息,以實(shí)現(xiàn)向該目標(biāo)app內(nèi)設(shè)置相關(guān)信息,并由廣播函數(shù)捕獲這些相關(guān)信息。如,以終端為安卓操作系統(tǒng)為例,可以用戶可以在安卓命令行中輸入或設(shè)置該目標(biāo)app的阻塞時(shí)長(zhǎng),則注入該目標(biāo)app的廣播函數(shù)可以捕獲輸入的阻塞時(shí)長(zhǎng)。
s405,目標(biāo)app中的該廣播函數(shù)將該阻塞時(shí)長(zhǎng)、加密函數(shù)的標(biāo)識(shí)信息以及目標(biāo)解密函數(shù)的標(biāo)識(shí)信息傳輸給測(cè)試應(yīng)用的hook函數(shù)。
hook函數(shù)根據(jù)廣播函數(shù)傳輸?shù)男畔?,確定所需監(jiān)控的加密以及解密函數(shù),并可以根據(jù)阻塞時(shí)長(zhǎng)來控制對(duì)該加密函數(shù)以及解密函數(shù)的阻塞控制。
s406,測(cè)試應(yīng)用通過hook函數(shù)依據(jù)加密函數(shù)的標(biāo)識(shí)信息以及解密函數(shù)的標(biāo)識(shí)信息,監(jiān)控該目標(biāo)app中的每個(gè)加密函數(shù)以及解密函數(shù)。
為了便于理解測(cè)試應(yīng)用、目標(biāo)應(yīng)用以及這測(cè)試應(yīng)用和目標(biāo)應(yīng)用中涉及到的函數(shù)之間的關(guān)系,可以參見圖5,其示出了測(cè)試應(yīng)用以及目標(biāo)應(yīng)用中涉及到的函數(shù),以及函數(shù)之間關(guān)系的一種示意圖,如圖5,該終端中安裝有測(cè)試應(yīng)用51以及需要被測(cè)試安全漏洞的目標(biāo)應(yīng)用52。
其中,測(cè)試應(yīng)用61中包括鉤子函數(shù),目標(biāo)應(yīng)用52中包括至少一個(gè)加密函數(shù)以及至少一個(gè)解密函數(shù)。
在需要對(duì)目標(biāo)應(yīng)用52進(jìn)行漏洞分析時(shí),可以在終端上啟動(dòng)測(cè)試應(yīng)用51,然后啟動(dòng)該目標(biāo)應(yīng)用52,在該目標(biāo)應(yīng)用52啟動(dòng)時(shí),測(cè)試應(yīng)用51利用鉤子函數(shù)向該目標(biāo)應(yīng)用52的主函數(shù)入口注入廣播函數(shù),使得目標(biāo)應(yīng)用中包括了廣播函數(shù)(如圖5中示出了目標(biāo)應(yīng)用中包括注入的該廣播函數(shù)),且在目標(biāo)應(yīng)用運(yùn)行過程中可以運(yùn)行該廣播函數(shù)。
由鉤子函數(shù)向目標(biāo)應(yīng)用中注入廣播函數(shù)之后,該鉤子函數(shù)可以與位于該目標(biāo)應(yīng)用內(nèi)部的廣播函數(shù)實(shí)現(xiàn)數(shù)據(jù)傳輸,從而實(shí)現(xiàn)測(cè)試應(yīng)用可以通過廣播函數(shù)獲取該目標(biāo)應(yīng)用運(yùn)行過程中所產(chǎn)生或處理的數(shù)據(jù)。
當(dāng)用戶向目標(biāo)應(yīng)用中輸入阻塞時(shí)長(zhǎng)、加密函數(shù)標(biāo)識(shí)以及解密函數(shù)標(biāo)識(shí)之后,廣播函數(shù)可以獲取阻塞時(shí)長(zhǎng)、加密函數(shù)標(biāo)識(shí)以及解密函數(shù)標(biāo)識(shí),并傳輸給測(cè)試應(yīng)用中的hook函數(shù),如圖5中,步驟s501所示。相應(yīng)的,鉤子函數(shù)依據(jù)該加密函數(shù)標(biāo)識(shí)以及解密函數(shù)標(biāo)識(shí)分別對(duì)加密函數(shù)以及解密函數(shù)進(jìn)行監(jiān)控。
當(dāng)然,該測(cè)試應(yīng)用51中除了包括鉤子函數(shù)之外,還可以安全測(cè)試函數(shù),該安全測(cè)試函數(shù)為測(cè)試應(yīng)用中用于接收廣播函數(shù)傳遞的數(shù)據(jù)的函數(shù),這樣,通過測(cè)試應(yīng)用中的鉤子函數(shù)、注入到目標(biāo)應(yīng)用中的廣播函數(shù)以及該測(cè)試應(yīng)用中的安全測(cè)試函數(shù)就可以實(shí)現(xiàn)向目標(biāo)應(yīng)用傳遞數(shù)據(jù)以及從目標(biāo)應(yīng)用中獲取數(shù)據(jù)。其中,關(guān)于安全測(cè)試函數(shù)與廣播函數(shù)之間的數(shù)據(jù)傳遞關(guān)系可以詳見后續(xù)步驟的介紹。
s407,測(cè)試應(yīng)用通過hook函數(shù)監(jiān)控到目標(biāo)app向加密函數(shù)中輸入待加密的第一數(shù)據(jù),則截取該第一數(shù)據(jù)并輸出該廣播函數(shù),并控制該加密函數(shù)處于阻塞狀態(tài)直至達(dá)到該阻塞時(shí)長(zhǎng)。
結(jié)合圖5進(jìn)行說明,當(dāng)目標(biāo)應(yīng)用52中存在需要該加密函數(shù)加密的第一數(shù)據(jù)時(shí),如圖5所示,加密函數(shù)中存在待輸入的第一數(shù)據(jù),則該hook函數(shù)監(jiān)控到加密函數(shù)中輸入需要加密的第一數(shù)據(jù),將阻塞加密函數(shù)的繼續(xù)執(zhí)行,并截獲該第一數(shù)據(jù),如圖5中步驟s502;同時(shí),hook函數(shù)將截獲到的該第一數(shù)據(jù)傳遞給廣播函數(shù),如圖5中步驟s503所示。
s408,目標(biāo)app的廣播函數(shù)將第一數(shù)據(jù)返回給測(cè)試應(yīng)用中的安全測(cè)試函數(shù)。
可以理解的是,為了便于描述,本實(shí)施例以測(cè)試應(yīng)用中設(shè)置有用于進(jìn)行安全測(cè)試的安全測(cè)試函數(shù)為例進(jìn)行說明,但是實(shí)際上該廣播函數(shù)可以將該第一函數(shù)返回給測(cè)試應(yīng)用,以通過測(cè)試應(yīng)用完成后續(xù)的測(cè)試。
s409,測(cè)試應(yīng)用通過安全測(cè)試函數(shù)將第一數(shù)據(jù)與用戶輸入的待拼接數(shù)據(jù)進(jìn)行拼接處理,得到測(cè)試數(shù)據(jù)。
可以理解的是,通過其他方式得到該測(cè)試數(shù)據(jù)也同樣適用于本實(shí)施例。
s410,測(cè)試應(yīng)用通過安全測(cè)試函數(shù)將測(cè)試數(shù)據(jù)返回給目標(biāo)app中的廣播函數(shù)。
s411,測(cè)試應(yīng)用中的hook函數(shù)在取消對(duì)加密函數(shù)的阻塞后,控制加密函數(shù)對(duì)該廣播函數(shù)獲得的測(cè)試數(shù)據(jù)進(jìn)行加密,以使得加密函數(shù)輸出經(jīng)過加密的測(cè)試數(shù)據(jù)。
結(jié)合圖5對(duì)以上步驟s408至s411進(jìn)行介紹,廣播函數(shù)將截獲到的第一數(shù)據(jù)返回給測(cè)試應(yīng)用中的安全測(cè)試函數(shù),如步驟s504;安全測(cè)試函數(shù)將加密后的第一數(shù)據(jù)進(jìn)行拼接之后,將拼接得到的測(cè)試數(shù)據(jù)又返回給該目標(biāo)應(yīng)用中的廣播函數(shù),以使得廣播函數(shù)可以將拼接處理所得到的測(cè)試數(shù)據(jù)輸入到加密函數(shù)中,如步驟s505。相應(yīng)的,為了使得目標(biāo)應(yīng)用中的加密函數(shù)能夠繼續(xù)執(zhí)行加密數(shù)據(jù)的流程,hook函數(shù)取消對(duì)加密函數(shù)的阻塞,從而使得加密函數(shù)可以執(zhí)行加密流程,并對(duì)廣播函數(shù)獲取的測(cè)試數(shù)據(jù)進(jìn)行加密,輸出經(jīng)過加密后的測(cè)試數(shù)據(jù),如圖5中步驟s506。
當(dāng)然,加密函數(shù)完成對(duì)測(cè)試數(shù)據(jù)加密之后,目標(biāo)應(yīng)用對(duì)經(jīng)過加密的數(shù)據(jù)的處理可以按照目標(biāo)應(yīng)用中設(shè)定的處理流程執(zhí)行,如,目標(biāo)應(yīng)用可以將加密后的數(shù)據(jù)發(fā)送給服務(wù)器。當(dāng)然,目標(biāo)應(yīng)用還可能對(duì)加密后的數(shù)據(jù)進(jìn)行其他處理,在此不加以限制。s412,目標(biāo)app將經(jīng)過加密的測(cè)試數(shù)據(jù)傳輸給服務(wù)器。
s413,目標(biāo)app獲得服務(wù)器針對(duì)該測(cè)試數(shù)據(jù)所返回的,經(jīng)過加密的第二數(shù)據(jù)。
可以理解的是,本申請(qǐng)實(shí)施例以第二數(shù)據(jù)為服務(wù)器針對(duì)測(cè)試數(shù)據(jù)所返回的響應(yīng)數(shù)據(jù)為例進(jìn)行介紹,以便于理解應(yīng)用與服務(wù)器之間的數(shù)據(jù)交互,以及測(cè)試應(yīng)用在應(yīng)用向服務(wù)器發(fā)送加密的第一數(shù)據(jù)前截取到未經(jīng)加密的第一數(shù)據(jù);并在服務(wù)器返回經(jīng)過加密的第二數(shù)據(jù)后,截取該目標(biāo)app中解密函數(shù)從經(jīng)過加密的數(shù)據(jù)解密出該第二數(shù)據(jù)的過程。
s414,測(cè)試應(yīng)用通過hook函數(shù)監(jiān)測(cè)到解密函數(shù)對(duì)該經(jīng)過加密的第二數(shù)據(jù)進(jìn)行解密后,將該解密函數(shù)解密出的第二數(shù)據(jù)輸出給廣播函數(shù)。
s415,app中的廣播函數(shù)將第二數(shù)據(jù)返回給測(cè)試應(yīng)用的安全測(cè)試函數(shù)。
結(jié)合圖5對(duì)步驟s414和s415進(jìn)行介紹,在目標(biāo)應(yīng)用接收到服務(wù)器返回的經(jīng)過加密的第二數(shù)據(jù)時(shí),目標(biāo)應(yīng)用會(huì)將該經(jīng)過加密的第二數(shù)據(jù)傳輸給解密函數(shù),以便通過解密函數(shù)解密出該第二數(shù)據(jù),從而基于第二數(shù)據(jù)進(jìn)行相關(guān)處理,如向顯示界面輸出第二數(shù)據(jù)對(duì)應(yīng)的圖像等等。測(cè)試應(yīng)用通過hook函數(shù)對(duì)解密函數(shù)進(jìn)行監(jiān)控,可以監(jiān)測(cè)到該解密函數(shù)中輸入了經(jīng)過加密的第二數(shù)據(jù),在該種情況下,hook函數(shù)可以在檢測(cè)到該解密函數(shù)從經(jīng)過加密的第二函數(shù)中,解密出該第二數(shù)據(jù)時(shí),截獲該第二數(shù)據(jù),如步驟s507;然后,由hook函數(shù)將第二數(shù)據(jù)傳遞給廣播函數(shù),如圖5中步驟s508;相應(yīng)的,為了使得測(cè)試函數(shù)中用于實(shí)現(xiàn)執(zhí)行漏洞分析的安全測(cè)試函數(shù)可以獲取到該第二數(shù)據(jù),該廣播函數(shù)會(huì)將該第二數(shù)據(jù)傳遞給該安全測(cè)試函數(shù),如步驟s509,這樣,在目標(biāo)應(yīng)用與服務(wù)器之間交互的過程中,即使目標(biāo)應(yīng)用與服務(wù)器之間采用了防篡改等加密機(jī)制,測(cè)試應(yīng)用仍可以獲取到目標(biāo)應(yīng)用與服務(wù)器之間實(shí)際交互的數(shù)據(jù)內(nèi)容。
s416,測(cè)試應(yīng)用的安全測(cè)試函數(shù)依據(jù)該測(cè)試數(shù)據(jù)以及第二數(shù)據(jù),分析該目標(biāo)app是否存在安全漏洞。
如,測(cè)試數(shù)據(jù)為“wwwwww.a*b.com.id=1.and1=2”,由于“1=2”是不正確的,如果服務(wù)器返回的第二數(shù)據(jù)為錯(cuò)誤提示,則說明無法通過修改該目標(biāo)app所傳輸?shù)臄?shù)據(jù)對(duì)服務(wù)器進(jìn)行數(shù)據(jù)控制;而如果服務(wù)器返回的“未查找到相應(yīng)結(jié)果”,則說明雖然測(cè)試數(shù)據(jù)有問題,但是服務(wù)器仍然會(huì)進(jìn)行數(shù)據(jù)搜索等處理,因此,則可能通過修改目標(biāo)app所傳輸?shù)臄?shù)據(jù)對(duì)服務(wù)器進(jìn)行數(shù)據(jù)控制,即,目標(biāo)app存在安全漏洞。
本實(shí)施例中,以通過廣播函數(shù)來實(shí)現(xiàn)測(cè)試應(yīng)用與目標(biāo)應(yīng)用之間的數(shù)據(jù)傳輸為例進(jìn)行說明。同時(shí),向目標(biāo)應(yīng)用中注入廣播函數(shù)還可以滿足用戶向廣播函數(shù)中輸入所需測(cè)試的測(cè)試數(shù)據(jù)的目的,這樣,hook函數(shù)可以控制加密函數(shù)對(duì)輸入到廣播函數(shù)中的測(cè)試數(shù)據(jù)進(jìn)行加密,并由目標(biāo)應(yīng)用將經(jīng)過加密的測(cè)試數(shù)據(jù)發(fā)送給服務(wù)器,以便于根據(jù)輸入到廣播函數(shù)中的測(cè)試數(shù)據(jù)以及服務(wù)器返回的數(shù)據(jù)進(jìn)行安全測(cè)試,從而實(shí)現(xiàn)了更為靈活的安全測(cè)試。
下面對(duì)本發(fā)明實(shí)施例提供的一種漏洞分析裝置進(jìn)行介紹,下文描述的一種漏洞分析裝置可與上文描述的一種漏洞分析方法相互對(duì)應(yīng)參照。
如,參見圖6,其示出了本申請(qǐng)一種漏洞分析裝置一個(gè)實(shí)施例的組成結(jié)構(gòu)示意圖,本實(shí)施例的裝置可以包括:
函數(shù)確定單元601,用于確定待測(cè)試的目標(biāo)應(yīng)用中的至少一個(gè)加密函數(shù)以及至少一個(gè)解密函數(shù),所述加密函數(shù)為用于執(zhí)行數(shù)據(jù)加密的函數(shù),所述解密函數(shù)為用于執(zhí)行數(shù)據(jù)解密的函數(shù);
第一監(jiān)控單元602,用于監(jiān)控到所述加密函數(shù)中輸入待加密的第一數(shù)據(jù),則截獲所述第一數(shù)據(jù);
第二監(jiān)控單元603,用于監(jiān)控到所述解密函數(shù)對(duì)經(jīng)過加密的第二數(shù)據(jù)進(jìn)行解密,則截獲所述解密函數(shù)解密出的所述第二數(shù)據(jù);
漏洞分析單元604,用于基于所述第一數(shù)據(jù)以及第二數(shù)據(jù),對(duì)所述目標(biāo)應(yīng)用進(jìn)行漏洞分析。
可選的,所述第一監(jiān)控單元,具體為,用于通過內(nèi)置的鉤子函數(shù)監(jiān)控所述加密函數(shù),并在監(jiān)控到所述加密函數(shù)中輸入待加密的第一數(shù)據(jù)時(shí),截獲所述第一數(shù)據(jù);
所述第二監(jiān)控單元,具體為,用于通過所述鉤子函數(shù)監(jiān)控所述解密函數(shù),并在鉤子函數(shù)監(jiān)控到所述解密數(shù)據(jù)對(duì)經(jīng)過加密的第二數(shù)據(jù)進(jìn)行解密,則截獲所述解密函數(shù)解密出的所述第二數(shù)據(jù)。
可選的,該裝置還可以包括:
函數(shù)注入單元605,用于在終端啟動(dòng)所述目標(biāo)應(yīng)用時(shí),向所述目標(biāo)應(yīng)用的主函數(shù)入口中注入廣播函數(shù);
相應(yīng)的,所述第一監(jiān)控單元包括:
第一數(shù)據(jù)截取單元,用于通過內(nèi)置的鉤子函數(shù)監(jiān)控所述加密函數(shù),并在監(jiān)控到所述加密函數(shù)中輸入待加密的第一數(shù)據(jù)時(shí),通過鉤子函數(shù)將截獲到的所述第一數(shù)據(jù)輸出給所述廣播函數(shù);
第一數(shù)據(jù)獲取單元,用于通過所述廣播函數(shù)獲取所述第一數(shù)據(jù);
所述第二監(jiān)控單元包括:
第二數(shù)據(jù)輸出單元,用于通過所述鉤子函數(shù)監(jiān)控所述解密函數(shù),并在鉤子函數(shù)監(jiān)控到所述解密數(shù)據(jù)對(duì)經(jīng)過加密的第二數(shù)據(jù)進(jìn)行解密,截獲解密出的第二數(shù)據(jù)并輸出給所述廣播函數(shù);
第二數(shù)據(jù)獲取單元,用于通過所述廣播函數(shù)獲取所述第二數(shù)據(jù)。
如圖7,其示出了本申請(qǐng)實(shí)施例一種漏洞分析裝置又一個(gè)實(shí)施例的流程示意圖,本實(shí)施例的裝置與圖6所示實(shí)施例的不同之處在于:
圖7所示的裝置中,還包括:
數(shù)據(jù)配置單元606,用于在所述第一監(jiān)控單元截獲到所述第一數(shù)據(jù)之后,將所述第一數(shù)據(jù)配置為測(cè)試數(shù)據(jù);
數(shù)據(jù)返回單元607,用于將所述測(cè)試數(shù)據(jù)返回給所述加密函數(shù),并控制所述加密函數(shù)對(duì)所述測(cè)試數(shù)據(jù)加密,以便所述目標(biāo)應(yīng)用將所述經(jīng)過加密的測(cè)試數(shù)據(jù)傳輸給所述目標(biāo)應(yīng)用的服務(wù)器;
相應(yīng)的,所述第二監(jiān)控單元截獲的所述第二數(shù)據(jù)為所述服務(wù)器針對(duì)所述第一數(shù)據(jù)返回的響應(yīng)數(shù)據(jù);
所述漏洞分析單元604具體為,用于依據(jù)所述測(cè)試數(shù)據(jù)以及響應(yīng)數(shù)據(jù),對(duì)所述目標(biāo)應(yīng)用進(jìn)行漏洞分析。
可選的,在以上任意一個(gè)裝置的實(shí)施例中,該裝置還可以包括:
阻塞控制單元,用于在所述第一監(jiān)控單元所述截獲所述第一數(shù)據(jù)的同時(shí),阻塞該加密函數(shù)的數(shù)據(jù)處理流程;
阻塞取消單元,用于在所述數(shù)據(jù)返回單元將所述測(cè)試數(shù)據(jù)返回給所述加密函數(shù)進(jìn)行加密的同時(shí),取消對(duì)所述加密函數(shù)的阻塞,以使得所述加密函數(shù)對(duì)所述測(cè)試數(shù)據(jù)加密。
可選的,在以上任意一個(gè)實(shí)施例中,所述函數(shù)確定單元,包括:
源碼分析單元,用于對(duì)待測(cè)試的目標(biāo)應(yīng)用的程序代碼進(jìn)行逆向分析,得到該目標(biāo)應(yīng)用的源碼;
第一函數(shù)確定單元,用于按照預(yù)置的加密函數(shù)的標(biāo)識(shí),從所述目標(biāo)應(yīng)用的源碼中,確定出用于執(zhí)行數(shù)據(jù)加密的至少一個(gè)加密函數(shù);
第二函數(shù)確定單元,用于按照預(yù)置的解密函數(shù)的標(biāo)識(shí),從所述目標(biāo)應(yīng)用的源碼中,確定出用于執(zhí)行數(shù)據(jù)解密的至少一個(gè)解密函數(shù)。
需要說明的是,本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對(duì)于裝置類實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。
以上僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。