本發(fā)明涉及計(jì)算機(jī)安全領(lǐng)域,具體涉及一種代碼注入攻擊的檢測(cè)方法和裝置。
背景技術(shù):
代碼注入是指攻擊者對(duì)應(yīng)用程序注入代碼,使得應(yīng)用程序在執(zhí)行時(shí)還會(huì)執(zhí)行這部分代碼來實(shí)現(xiàn)攻擊者的目的。以安卓系統(tǒng)中的游戲應(yīng)用程序?yàn)槔?,由于游戲?yīng)用程序可能需要付費(fèi)才能購(gòu)買或使用其中的某些功能,因此對(duì)游戲應(yīng)用程序的破解層出不窮,其中就有攻擊者利用代碼注入攻擊對(duì)原應(yīng)用程序的代碼進(jìn)行修改,來實(shí)現(xiàn)對(duì)游戲應(yīng)用程序的破解,而現(xiàn)有技術(shù)對(duì)這些破解版的游戲應(yīng)用程序很難察覺。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的代碼注入攻擊的檢測(cè)方法和裝置。
依據(jù)本發(fā)明的一個(gè)方面,提供了一種代碼注入攻擊的檢測(cè)方法,包括:
在應(yīng)用程序運(yùn)行后,判斷該應(yīng)用程序的代碼中是否包含指定代碼段;
如果包含指定代碼段,則監(jiān)控該指定代碼段是否執(zhí)行了非法跳轉(zhuǎn)指令;
當(dāng)監(jiān)控到指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令時(shí),判斷該指定代碼段受到代碼注入攻擊。
可選地,所述指定代碼段為:包含指定函數(shù)的代碼段,所述指定函數(shù)還包含跳轉(zhuǎn)指令。
可選地,所述監(jiān)控該指定代碼段是否執(zhí)行了非法跳轉(zhuǎn)指令包括:
當(dāng)所述跳轉(zhuǎn)指令執(zhí)行時(shí),獲取該跳轉(zhuǎn)指令在內(nèi)存中對(duì)應(yīng)的跳轉(zhuǎn)地址,判斷所述跳轉(zhuǎn)地址是否為非法地址;
若是,則判斷所述指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令。
可選地,該方法還包括:
在程序使用的共享庫(kù)文件加載到內(nèi)存后,獲取所述共享庫(kù)在內(nèi)存中的地址范圍;
所述判斷所述跳轉(zhuǎn)地址是否為非法地址包括:判斷所述跳轉(zhuǎn)地址是否在所述共享庫(kù)在內(nèi)存中的地址范圍外,若是,則判斷所述跳轉(zhuǎn)地址為非法地址。
可選地,該方法還包括:
將指定代碼段受到代碼注入攻擊的事件信息上報(bào)至應(yīng)用程序的服務(wù)器。
可選地,所述該指定代碼段受到代碼注入攻擊的事件信息包括如下中的至少一種:
應(yīng)用程序的版本號(hào);
應(yīng)用程序的簽名信息;
已登錄該應(yīng)用程序的用戶的賬戶信息;
指定代碼段的描述信息。
可選地,該方法還包括:
接收所述應(yīng)用程序的服務(wù)器下發(fā)的指令,對(duì)所述應(yīng)用程序執(zhí)行相應(yīng)的操作;所述指令包括如下中的至少一種:
顯示應(yīng)用程序受到代碼注入攻擊的提示信息;
從所述應(yīng)用程序的服務(wù)器獲取應(yīng)用程序的最新版本,對(duì)應(yīng)用程序進(jìn)行更新;
強(qiáng)制注銷用戶賬戶。
依據(jù)本發(fā)明的另一方面,提供了一種代碼注入攻擊的檢測(cè)方法,包括:
對(duì)待檢測(cè)代碼以代碼注入攻擊檢測(cè)策略進(jìn)行匹配,得到至少一個(gè)指定代碼段;
在待檢測(cè)代碼中為指定代碼段添加監(jiān)控代碼,所述監(jiān)控代碼適于執(zhí)行如上述任一項(xiàng)所述的方法。
可選地,所述對(duì)待檢測(cè)代碼以代碼注入攻擊檢測(cè)策略進(jìn)行匹配,得到至少一個(gè)指定代碼段包括:
預(yù)設(shè)一個(gè)函數(shù)庫(kù),所述函數(shù)庫(kù)中的函數(shù)為易受到代碼注入攻擊的敏感函數(shù);
將待檢測(cè)代碼與所述函數(shù)庫(kù)進(jìn)行匹配,得到待檢測(cè)代碼中的敏感函數(shù);
所述在待檢測(cè)代碼中為指定代碼段添加監(jiān)控代碼包括:在待檢測(cè)代碼中為所述敏感函數(shù)添加監(jiān)控代碼。
可選地,該方法還包括:
對(duì)應(yīng)用程序的安裝包進(jìn)行反編譯,得到所述待檢測(cè)代碼;
將添加了監(jiān)控代碼的待檢測(cè)代碼編譯為應(yīng)用程序的安裝包。
依據(jù)本發(fā)明的又一方面,提供了一種代碼注入攻擊的檢測(cè)裝置,包括:
代碼檢測(cè)單元,適于在在應(yīng)用程序運(yùn)行后,判斷該應(yīng)用程序的代碼中是否包含指定代碼段;
監(jiān)控單元,適于在該應(yīng)用程序的代碼中包含指定代碼段時(shí),監(jiān)控該指定代碼段是否執(zhí)行了非法跳轉(zhuǎn)指令;當(dāng)監(jiān)控到指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令時(shí),判斷該指定代碼段受到代碼注入攻擊。
可選地,所述指定代碼段為:包含指定函數(shù)的代碼段,所述指定函數(shù)還包含跳轉(zhuǎn)指令。
可選地,所述監(jiān)控單元,適于在所述跳轉(zhuǎn)指令執(zhí)行時(shí),獲取該跳轉(zhuǎn)指令在內(nèi)存中對(duì)應(yīng)的跳轉(zhuǎn)地址,判斷所述跳轉(zhuǎn)地址是否為非法地址;若是,則判斷所述指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令。
可選地,所述監(jiān)控單元,還適于在程序使用的共享庫(kù)文件加載到內(nèi)存后,獲取所述共享庫(kù)在內(nèi)存中的地址范圍;判斷所述跳轉(zhuǎn)地址是否在所述共享庫(kù)在內(nèi)存中的地址范圍外,若是,則判斷所述跳轉(zhuǎn)地址為非法地址。
可選地,該裝置還包括:
對(duì)策單元,適于將指定代碼段受到代碼注入攻擊的事件信息上報(bào)至應(yīng)用程序的服務(wù)器。
可選地,所述該指定代碼段受到代碼注入攻擊的事件信息包括如下中的至少一種:應(yīng)用程序的版本號(hào);應(yīng)用程序的簽名信息;已登錄該應(yīng)用程序的用戶的賬戶信息;指定代碼段的描述信息。
可選地,所述對(duì)策單元,還適于接收所述應(yīng)用程序的服務(wù)器下發(fā)的指令,對(duì)所述應(yīng)用程序執(zhí)行相應(yīng)的操作;所述指令包括如下中的至少一種:顯示應(yīng)用程序受到代碼注入攻擊的提示信息;從所述應(yīng)用程序的服務(wù)器獲取應(yīng)用程序的最新版本,對(duì)應(yīng)用程序進(jìn)行更新;強(qiáng)制注銷用戶賬戶。
依據(jù)本發(fā)明的再一方面,提供了一種代碼注入攻擊的檢測(cè)裝置,包括:
匹配單元,適于對(duì)待檢測(cè)代碼以代碼注入攻擊檢測(cè)策略進(jìn)行匹配,得到至少一個(gè)指定代碼段;
添加單元,適于在待檢測(cè)代碼中為指定代碼段添加如上述任一項(xiàng)所述的裝置。
可選地,所述匹配單元,包含有預(yù)設(shè)的函數(shù)庫(kù),所述函數(shù)庫(kù)中的函數(shù)為易受到代碼注入攻擊的敏感函數(shù);所述匹配單元適于將待檢測(cè)代碼與所述函數(shù)庫(kù)進(jìn)行匹配,得到待檢測(cè)代碼中的敏感函數(shù);
所述添加單元,適于在待檢測(cè)代碼中為所述敏感函數(shù)添加監(jiān)控代碼。
可選地,該裝置還包括:
安裝包處理單元,適于對(duì)應(yīng)用程序的安裝包進(jìn)行反編譯,得到所述待檢測(cè)代碼;以及適于將添加了監(jiān)控代碼的待檢測(cè)代碼編譯為應(yīng)用程序的安裝包。
由上述可知,本發(fā)明的技術(shù)方案,在應(yīng)用程序運(yùn)行后,判斷其代碼中是否包含指定代碼段,如果包含則對(duì)其實(shí)施監(jiān)控,當(dāng)監(jiān)控到指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令時(shí),判斷該指定代碼段受到代碼注入攻擊。由于代碼注入攻擊所注入的代碼并非應(yīng)用程序本身的代碼,則需要指定代碼段執(zhí)行非法的跳轉(zhuǎn)指令才能執(zhí)行非法注入的代碼,因此該技術(shù)方案可以有效地判斷應(yīng)用程序是否受到了代碼注入攻擊,準(zhǔn)確率高且不易遺漏。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種代碼注入攻擊的檢測(cè)方法的流程示意圖;
圖2示出了一種Inline Hook代碼注入攻擊的流程示意圖;
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的另一種代碼注入攻擊的檢測(cè)方法的流程示意圖;
圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種代碼注入攻擊的檢測(cè)裝置的結(jié)構(gòu)示意圖;
圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的另一種代碼注入攻擊的檢測(cè)裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種代碼注入攻擊的檢測(cè)方法的流程示意圖,如圖1所示,該方法包括:
步驟S110,在應(yīng)用程序運(yùn)行后,判斷該應(yīng)用程序的代碼中是否包含指定代碼段。
步驟S120,如果包含指定代碼段,則監(jiān)控該指定代碼段是否執(zhí)行了非法跳轉(zhuǎn)指令。
步驟S130,當(dāng)監(jiān)控到指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令時(shí),判斷該指定代碼段受到代碼注入攻擊。
可見,圖1所示的方法,在應(yīng)用程序運(yùn)行后,判斷其代碼中是否包含指定代碼段,如果包含則對(duì)其實(shí)施監(jiān)控,當(dāng)監(jiān)控到指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令時(shí),判斷該指定代碼段受到代碼注入攻擊。由于代碼注入攻擊所注入的代碼并非應(yīng)用程序本身的代碼,則需要指定代碼段執(zhí)行非法的跳轉(zhuǎn)指令才能執(zhí)行非法注入的代碼,因此該技術(shù)方案可以有效地判斷應(yīng)用程序是否受到了代碼注入攻擊,準(zhǔn)確率高且不易遺漏。
圖2示出了一種Inline Hook代碼注入攻擊的流程示意圖。通常而言,應(yīng)用程序的代碼會(huì)使用多種函數(shù)。函數(shù)經(jīng)編譯加載到內(nèi)存后,以指令的形式存儲(chǔ)在內(nèi)存中,而對(duì)內(nèi)存中的指令進(jìn)行修改,可以改變函數(shù)的流程,這種方式就是Inline Hook代碼注入攻擊?!癏ook”意為鉤子,對(duì)一個(gè)函數(shù)進(jìn)行Hook即是指對(duì)其執(zhí)行了掛鉤操作,如圖2所示,對(duì)fopen函數(shù)進(jìn)行Inline Hook代碼注入,可以在函數(shù)執(zhí)行時(shí)跳轉(zhuǎn)至my_open這個(gè)代碼注入攻擊方自定義的函數(shù),在自定義函數(shù)執(zhí)行完畢后再重新跳轉(zhuǎn)回原函數(shù),執(zhí)行該函數(shù)的剩余流程??梢?,如果對(duì)fopen函數(shù)跳轉(zhuǎn)至my_open的跳轉(zhuǎn)指令進(jìn)行監(jiān)控,那么就可以進(jìn)一步判斷這個(gè)跳轉(zhuǎn)指令是否為非法指令。因此,在本發(fā)明的一個(gè)實(shí)施例中,上述方法中,指定代碼段為:包含指定函數(shù)的代碼段,指定函數(shù)還包含跳轉(zhuǎn)指令。
當(dāng)然,為了實(shí)現(xiàn)應(yīng)用程序的正常功能,函數(shù)中也可能包含合法的跳轉(zhuǎn)指令。在本發(fā)明的而一個(gè)實(shí)施例中,上述方法中,監(jiān)控該指定代碼段是否執(zhí)行了非法跳轉(zhuǎn)指令包括:當(dāng)跳轉(zhuǎn)指令執(zhí)行時(shí),獲取該跳轉(zhuǎn)指令在內(nèi)存中對(duì)應(yīng)的跳轉(zhuǎn)地址,判斷跳轉(zhuǎn)地址是否為非法地址;若是,則判斷指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令。
由于函數(shù)已經(jīng)以指令的方式存儲(chǔ)在內(nèi)存中,對(duì)每個(gè)跳轉(zhuǎn)指令逐個(gè)判斷其代碼是否是合法的是比較困難的,但是考慮到執(zhí)行跳轉(zhuǎn)指令時(shí),必然會(huì)跳轉(zhuǎn)至內(nèi)存中的其他地址,那么通過對(duì)跳轉(zhuǎn)指令進(jìn)行解析,得到相應(yīng)的跳轉(zhuǎn)地址,就可以通過判斷跳轉(zhuǎn)地址是否合法來判斷跳轉(zhuǎn)指令是否合法。具體地,在本發(fā)明的一個(gè)實(shí)施例中,上述方法還包括:在程序使用的共享庫(kù)文件加載到內(nèi)存后,獲取共享庫(kù)在內(nèi)存中的地址范圍;判斷跳轉(zhuǎn)地址是否為非法地址包括:判斷跳轉(zhuǎn)地址是否在共享庫(kù)在內(nèi)存中的地址范圍外,若是,則判斷跳轉(zhuǎn)地址為非法地址。
以使用Unity3D引擎的安卓游戲應(yīng)用程序?yàn)槔?,為了?shí)現(xiàn)應(yīng)用程序的功能,需要加載多個(gè).so格式或.dll格式的動(dòng)態(tài)鏈接庫(kù)文件作為共享庫(kù)文件。一般而言,應(yīng)用程序中適用的函數(shù)如果執(zhí)行的是跳轉(zhuǎn)指令,就會(huì)跳轉(zhuǎn)至這些共享庫(kù)文件,那么顯然,如果跳轉(zhuǎn)指令跳轉(zhuǎn)到的不是這些共享庫(kù)文件,那么就說明該跳轉(zhuǎn)指令并非執(zhí)行的是應(yīng)用程序本身的功能,也就是執(zhí)行的是注入代碼的功能,說明應(yīng)用程序受到了代碼注入攻擊。因此,在本實(shí)施例中,通過先獲取到共享庫(kù)加載到內(nèi)存時(shí),被分配的內(nèi)存地址,如果跳轉(zhuǎn)地址不在這些內(nèi)存地址中,那么跳轉(zhuǎn)地址就是非法地址。
在本發(fā)明的一個(gè)實(shí)施例中,上述方法還包括:將指定代碼段受到代碼注入攻擊的事件信息上報(bào)至應(yīng)用程序的服務(wù)器。具體地,該指定代碼段受到代碼注入攻擊的事件信息包括如下中的至少一種:應(yīng)用程序的版本號(hào);應(yīng)用程序的簽名信息;已登錄該應(yīng)用程序的用戶的賬戶信息;指定代碼段的描述信息。
這樣應(yīng)用程序的開發(fā)者可以根據(jù)這些信息對(duì)應(yīng)用程序進(jìn)行更新,封堵可能存在的代碼注入漏洞。而對(duì)于游戲應(yīng)用程序而言,許多用戶是專門下載破解版的應(yīng)用程序,來達(dá)到免費(fèi)玩游戲等目的,也可以通過獲取到的用戶的賬戶信息對(duì)這些用戶進(jìn)行處罰。
在本發(fā)明的一個(gè)實(shí)施例中,上述方法還包括:接收應(yīng)用程序的服務(wù)器下發(fā)的指令,對(duì)應(yīng)用程序執(zhí)行相應(yīng)的操作;指令包括如下中的至少一種:顯示應(yīng)用程序受到代碼注入攻擊的提示信息;從應(yīng)用程序的服務(wù)器獲取應(yīng)用程序的最新版本,對(duì)應(yīng)用程序進(jìn)行更新;強(qiáng)制注銷用戶賬戶。
在本實(shí)施例中還給出了一些對(duì)檢測(cè)到代碼注入攻擊后的對(duì)策,例如以官方版本的應(yīng)用程序安裝包對(duì)應(yīng)用程序進(jìn)行更新,這樣替換了已受到代碼注入攻擊的應(yīng)用程序;或者,以游戲應(yīng)用程序?yàn)槔?,可以?duì)用戶進(jìn)行強(qiáng)制下線或封號(hào)等處罰,這樣可以減少游戲運(yùn)營(yíng)方的損失。
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的另一種代碼注入攻擊的檢測(cè)方法的流程示意圖,如圖3所示,該方法包括:
步驟S310,對(duì)待檢測(cè)代碼以代碼注入攻擊檢測(cè)策略進(jìn)行匹配,得到至少一個(gè)指定代碼段。
步驟S320,在待檢測(cè)代碼中為指定代碼段添加監(jiān)控代碼,監(jiān)控代碼適于執(zhí)行如上述任一實(shí)施例中的方法。
上述實(shí)施例介紹了在應(yīng)用程序運(yùn)行后的檢測(cè)方法。而本實(shí)施例為應(yīng)用程序的開發(fā)者提供了一種便利的方法,即不需要在應(yīng)用程序的代碼開發(fā)時(shí),編寫上述的檢測(cè)邏輯,而是只需要提交開發(fā)完成的代碼。這樣在本實(shí)施例中,可以對(duì)各方提供的待檢測(cè)代碼進(jìn)行統(tǒng)一的監(jiān)控代碼的添加。
在本發(fā)明的一個(gè)實(shí)施例中,圖3所示的方法中,對(duì)待檢測(cè)代碼以代碼注入攻擊檢測(cè)策略進(jìn)行匹配,得到至少一個(gè)指定代碼段包括:預(yù)設(shè)一個(gè)函數(shù)庫(kù),函數(shù)庫(kù)中的函數(shù)為易受到代碼注入攻擊的敏感函數(shù);將待檢測(cè)代碼與函數(shù)庫(kù)進(jìn)行匹配,得到待檢測(cè)代碼中的敏感函數(shù);在待檢測(cè)代碼中為指定代碼段添加監(jiān)控代碼包括:在待檢測(cè)代碼中為敏感函數(shù)添加監(jiān)控代碼。
在上述的所有實(shí)施例中并未限定函數(shù)的種類。而根據(jù)應(yīng)用程序所提供的功能以及函數(shù)本身的屬性,可以總結(jié)性地得到一些敏感函數(shù),將其放入預(yù)設(shè)的函數(shù)庫(kù)中,例如圖2所示的fopen函數(shù)。
在本發(fā)明的一個(gè)實(shí)施例中,上述方法還包括:對(duì)應(yīng)用程序的安裝包進(jìn)行反編譯,得到待檢測(cè)代碼;將添加了監(jiān)控代碼的待檢測(cè)代碼編譯為應(yīng)用程序的安裝包。也就是說開發(fā)方可以提供編譯好的代碼,即得到的應(yīng)用程序的安裝包,也可以直接提供源碼。最后需要將添加了監(jiān)控代碼的待檢測(cè)代碼重新進(jìn)行編譯,得到的應(yīng)用程序的安裝包就可以直接分發(fā)給應(yīng)用程序的用戶。
圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種代碼注入攻擊的檢測(cè)裝置的結(jié)構(gòu)示意圖,如圖4,代碼注入攻擊的檢測(cè)裝置400包括:
代碼檢測(cè)單元410,適于在在應(yīng)用程序運(yùn)行后,判斷該應(yīng)用程序的代碼中是否包含指定代碼段。
監(jiān)控單元420,適于在該應(yīng)用程序的代碼中包含指定代碼段時(shí),監(jiān)控該指定代碼段是否執(zhí)行了非法跳轉(zhuǎn)指令;當(dāng)監(jiān)控到指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令時(shí),判斷該指定代碼段受到代碼注入攻擊。
可見,圖4所示的裝置,在應(yīng)用程序運(yùn)行后,判斷其代碼中是否包含指定代碼段,如果包含則對(duì)其實(shí)施監(jiān)控,當(dāng)監(jiān)控到指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令時(shí),判斷該指定代碼段受到代碼注入攻擊。由于代碼注入攻擊所注入的代碼并非應(yīng)用程序本身的代碼,則需要指定代碼段執(zhí)行非法的跳轉(zhuǎn)指令才能執(zhí)行非法注入的代碼,因此該技術(shù)方案可以有效地判斷應(yīng)用程序是否受到了代碼注入攻擊,準(zhǔn)確率高且不易遺漏。
在本發(fā)明的一個(gè)實(shí)施例中,圖4所示的裝置中,指定代碼段為:包含指定函數(shù)的代碼段,指定函數(shù)還包含跳轉(zhuǎn)指令。
在本發(fā)明的一個(gè)實(shí)施例中,上述裝置中,監(jiān)控單元420,適于在跳轉(zhuǎn)指令執(zhí)行時(shí),獲取該跳轉(zhuǎn)指令在內(nèi)存中對(duì)應(yīng)的跳轉(zhuǎn)地址,判斷跳轉(zhuǎn)地址是否為非法地址;若是,則判斷指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令。
在本發(fā)明的一個(gè)實(shí)施例中,上述裝置中,監(jiān)控單元420,還適于在程序使用的共享庫(kù)文件加載到內(nèi)存后,獲取共享庫(kù)在內(nèi)存中的地址范圍;判斷跳轉(zhuǎn)地址是否在共享庫(kù)在內(nèi)存中的地址范圍外,若是,則判斷跳轉(zhuǎn)地址為非法地址。
在本發(fā)明的一個(gè)實(shí)施例中,圖4所示的裝置還包括:對(duì)策單元(圖未示),適于將指定代碼段受到代碼注入攻擊的事件信息上報(bào)至應(yīng)用程序的服務(wù)器。
在本發(fā)明的一個(gè)實(shí)施例中,上述裝置中,該指定代碼段受到代碼注入攻擊的事件信息包括如下中的至少一種:應(yīng)用程序的版本號(hào);應(yīng)用程序的簽名信息;已登錄該應(yīng)用程序的用戶的賬戶信息;指定代碼段的描述信息。
在本發(fā)明的一個(gè)實(shí)施例中,上述裝置中,對(duì)策單元,還適于接收應(yīng)用程序的服務(wù)器下發(fā)的指令,對(duì)應(yīng)用程序執(zhí)行相應(yīng)的操作;指令包括如下中的至少一種:顯示應(yīng)用程序受到代碼注入攻擊的提示信息;從應(yīng)用程序的服務(wù)器獲取應(yīng)用程序的最新版本,對(duì)應(yīng)用程序進(jìn)行更新;強(qiáng)制注銷用戶賬戶。
圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的另一種代碼注入攻擊的檢測(cè)裝置的結(jié)構(gòu)示意圖,如圖5所示,代碼注入攻擊的檢測(cè)裝置500包括:
匹配單元510,適于對(duì)待檢測(cè)代碼以代碼注入攻擊檢測(cè)策略進(jìn)行匹配,得到至少一個(gè)指定代碼段。
添加單元520,適于在待檢測(cè)代碼中為指定代碼段添加如上述任一實(shí)施例中的代碼注入攻擊的檢測(cè)裝置400。
在本發(fā)明的一個(gè)實(shí)施例中,圖5所示的裝置中,匹配單元510,包含有預(yù)設(shè)的函數(shù)庫(kù),函數(shù)庫(kù)中的函數(shù)為易受到代碼注入攻擊的敏感函數(shù);匹配單元適于將待檢測(cè)代碼與函數(shù)庫(kù)進(jìn)行匹配,得到待檢測(cè)代碼中的敏感函數(shù);添加單元520,適于在待檢測(cè)代碼中為敏感函數(shù)添加監(jiān)控代碼。
在本發(fā)明的一個(gè)實(shí)施例中,圖5所示的裝置還包括:安裝包處理單元(圖未示),適于對(duì)應(yīng)用程序的安裝包進(jìn)行反編譯,得到待檢測(cè)代碼;以及適于將添加了監(jiān)控代碼的待檢測(cè)代碼編譯為應(yīng)用程序的安裝包。
需要說明的是,上述各裝置實(shí)施例的具體實(shí)施方式與前述對(duì)應(yīng)方法實(shí)施例的具體實(shí)施方式相同,在此不再贅述。
綜上所述,本發(fā)明的技術(shù)方案,在應(yīng)用程序運(yùn)行后,判斷其代碼中是否包含指定代碼段,如果包含則對(duì)其實(shí)施監(jiān)控,當(dāng)監(jiān)控到指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令時(shí),判斷該指定代碼段受到代碼注入攻擊。由于代碼注入攻擊所注入的代碼并非應(yīng)用程序本身的代碼,則需要指定代碼段執(zhí)行非法的跳轉(zhuǎn)指令才能執(zhí)行非法注入的代碼,因此該技術(shù)方案可以有效地判斷應(yīng)用程序是否受到了代碼注入攻擊,準(zhǔn)確率高且不易遺漏。
需要說明的是:
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬裝置或者其它設(shè)備固有相關(guān)。各種通用裝置也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類裝置所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的代碼注入攻擊的檢測(cè)裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
本發(fā)明的實(shí)施例公開了A1、一種代碼注入攻擊的檢測(cè)方法,其中,該方法包括:
在應(yīng)用程序運(yùn)行后,判斷該應(yīng)用程序的代碼中是否包含指定代碼段;
如果包含指定代碼段,則監(jiān)控該指定代碼段是否執(zhí)行了非法跳轉(zhuǎn)指令;
當(dāng)監(jiān)控到指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令時(shí),判斷該指定代碼段受到代碼注入攻擊。
A2、如A1所述的方法,其中,
所述指定代碼段為:包含指定函數(shù)的代碼段,所述指定函數(shù)還包含跳轉(zhuǎn)指令。
A3、如A2所述的方法,其中,所述監(jiān)控該指定代碼段是否執(zhí)行了非法跳轉(zhuǎn)指令包括:
當(dāng)所述跳轉(zhuǎn)指令執(zhí)行時(shí),獲取該跳轉(zhuǎn)指令在內(nèi)存中對(duì)應(yīng)的跳轉(zhuǎn)地址,判斷所述跳轉(zhuǎn)地址是否為非法地址;
若是,則判斷所述指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令。
A4、如A3所述的方法,其中,該方法還包括:
在程序使用的共享庫(kù)文件加載到內(nèi)存后,獲取所述共享庫(kù)在內(nèi)存中的地址范圍;
所述判斷所述跳轉(zhuǎn)地址是否為非法地址包括:判斷所述跳轉(zhuǎn)地址是否在所述共享庫(kù)在內(nèi)存中的地址范圍外,若是,則判斷所述跳轉(zhuǎn)地址為非法地址。
A5、如A1所述的方法,其中,該方法還包括:
將指定代碼段受到代碼注入攻擊的事件信息上報(bào)至應(yīng)用程序的服務(wù)器。
A6、如A5所述的方法,其中,所述該指定代碼段受到代碼注入攻擊的事件信息包括如下中的至少一種:
應(yīng)用程序的版本號(hào);
應(yīng)用程序的簽名信息;
已登錄該應(yīng)用程序的用戶的賬戶信息;
指定代碼段的描述信息。
A7、如A5所述的方法,其中,該方法還包括:
接收所述應(yīng)用程序的服務(wù)器下發(fā)的指令,對(duì)所述應(yīng)用程序執(zhí)行相應(yīng)的操作;所述指令包括如下中的至少一種:
顯示應(yīng)用程序受到代碼注入攻擊的提示信息;
從所述應(yīng)用程序的服務(wù)器獲取應(yīng)用程序的最新版本,對(duì)應(yīng)用程序進(jìn)行更新;
強(qiáng)制注銷用戶賬戶。
本發(fā)明的實(shí)施例還公開了B8、一種代碼注入攻擊的檢測(cè)方法,其中,該方法包括:
對(duì)待檢測(cè)代碼以代碼注入攻擊檢測(cè)策略進(jìn)行匹配,得到至少一個(gè)指定代碼段;
在待檢測(cè)代碼中為指定代碼段添加監(jiān)控代碼,所述監(jiān)控代碼適于執(zhí)行如A1-A7中任一項(xiàng)所述的方法。
B9、如權(quán)利要求8所述的方法,其中,所述對(duì)待檢測(cè)代碼以代碼注入攻擊檢測(cè)策略進(jìn)行匹配,得到至少一個(gè)指定代碼段包括:
預(yù)設(shè)一個(gè)函數(shù)庫(kù),所述函數(shù)庫(kù)中的函數(shù)為易受到代碼注入攻擊的敏感函數(shù);
將待檢測(cè)代碼與所述函數(shù)庫(kù)進(jìn)行匹配,得到待檢測(cè)代碼中的敏感函數(shù);
所述在待檢測(cè)代碼中為指定代碼段添加監(jiān)控代碼包括:在待檢測(cè)代碼中為所述敏感函數(shù)添加監(jiān)控代碼。
B10、如B8或B9所述的方法,其中,該方法還包括:
對(duì)應(yīng)用程序的安裝包進(jìn)行反編譯,得到所述待檢測(cè)代碼;
將添加了監(jiān)控代碼的待檢測(cè)代碼編譯為應(yīng)用程序的安裝包。
本發(fā)明的實(shí)施例還公開了C11、一種代碼注入攻擊的檢測(cè)裝置,其中,該裝置包括:
代碼檢測(cè)單元,適于在在應(yīng)用程序運(yùn)行后,判斷該應(yīng)用程序的代碼中是否包含指定代碼段;
監(jiān)控單元,適于在該應(yīng)用程序的代碼中包含指定代碼段時(shí),監(jiān)控該指定代碼段是否執(zhí)行了非法跳轉(zhuǎn)指令;當(dāng)監(jiān)控到指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令時(shí),判斷該指定代碼段受到代碼注入攻擊。
C12、如C11所述的裝置,其中,
所述指定代碼段為:包含指定函數(shù)的代碼段,所述指定函數(shù)還包含跳轉(zhuǎn)指令。
C13、如C12所述的裝置,其中,
所述監(jiān)控單元,適于在所述跳轉(zhuǎn)指令執(zhí)行時(shí),獲取該跳轉(zhuǎn)指令在內(nèi)存中對(duì)應(yīng)的跳轉(zhuǎn)地址,判斷所述跳轉(zhuǎn)地址是否為非法地址;若是,則判斷所述指定代碼段執(zhí)行了非法跳轉(zhuǎn)指令。
C14、如C13所述的裝置,其中,
所述監(jiān)控單元,還適于在程序使用的共享庫(kù)文件加載到內(nèi)存后,獲取所述共享庫(kù)在內(nèi)存中的地址范圍;判斷所述跳轉(zhuǎn)地址是否在所述共享庫(kù)在內(nèi)存中的地址范圍外,若是,則判斷所述跳轉(zhuǎn)地址為非法地址。
C15、如C11所述的裝置,其中,該裝置還包括:
對(duì)策單元,適于將指定代碼段受到代碼注入攻擊的事件信息上報(bào)至應(yīng)用程序的服務(wù)器。
C16、如C15所述的裝置,其中,所述該指定代碼段受到代碼注入攻擊的事件信息包括如下中的至少一種:應(yīng)用程序的版本號(hào);應(yīng)用程序的簽名信息;已登錄該應(yīng)用程序的用戶的賬戶信息;指定代碼段的描述信息。
C17、如C15所述的裝置,其中,
所述對(duì)策單元,還適于接收所述應(yīng)用程序的服務(wù)器下發(fā)的指令,對(duì)所述應(yīng)用程序執(zhí)行相應(yīng)的操作;所述指令包括如下中的至少一種:顯示應(yīng)用程序受到代碼注入攻擊的提示信息;從所述應(yīng)用程序的服務(wù)器獲取應(yīng)用程序的最新版本,對(duì)應(yīng)用程序進(jìn)行更新;強(qiáng)制注銷用戶賬戶。
本發(fā)明的實(shí)施例還公開了D18、一種代碼注入攻擊的檢測(cè)裝置,其中,該裝置包括:
匹配單元,適于對(duì)待檢測(cè)代碼以代碼注入攻擊檢測(cè)策略進(jìn)行匹配,得到至少一個(gè)指定代碼段;
添加單元,適于在待檢測(cè)代碼中為指定代碼段添加如C11-C17中任一項(xiàng)所述的裝置。
D19、如D18所述的裝置,其中,
所述匹配單元,包含有預(yù)設(shè)的函數(shù)庫(kù),所述函數(shù)庫(kù)中的函數(shù)為易受到代碼注入攻擊的敏感函數(shù);所述匹配單元適于將待檢測(cè)代碼與所述函數(shù)庫(kù)進(jìn)行匹配,得到待檢測(cè)代碼中的敏感函數(shù);
所述添加單元,適于在待檢測(cè)代碼中為所述敏感函數(shù)添加監(jiān)控代碼。
D20、如D18或D19所述的裝置,其中,該裝置還包括:
安裝包處理單元,適于對(duì)應(yīng)用程序的安裝包進(jìn)行反編譯,得到所述待檢測(cè)代碼;以及適于將添加了監(jiān)控代碼的待檢測(cè)代碼編譯為應(yīng)用程序的安裝包。