本發(fā)明涉及信息安全技術(shù)領(lǐng)域,特別是涉及一種注入防護方法和系統(tǒng)。
背景技術(shù):
目前很多應(yīng)用的進程防護方法,會通過修改應(yīng)用的原程序源代碼邏輯攔截DLL加載,以防止第三方DLL注入應(yīng)用的主進程,實現(xiàn)保護應(yīng)用安全的目的。
但是,上述進程防護方法需要修改應(yīng)用的原程序源代碼邏輯攔截DLL加載,導(dǎo)致進程防護方法的通用性差、適用性低。
技術(shù)實現(xiàn)要素:
基于此,有必要針對上述進程防護方法需要修改應(yīng)用的原程序源代碼邏輯攔截DLL加載,導(dǎo)致進程防護方法的通用性差、適用性低的問題,提供一種注入防護方法和系統(tǒng)。
一種注入防護方法,包括以下步驟:
將包括預(yù)設(shè)注入防護規(guī)則的防護數(shù)據(jù)注入目標進程的第一個注入位置;
若檢測到所述目標進程的注入事件,則運行所述目標進程的第一個注入位置的防護數(shù)據(jù),獲取所述預(yù)設(shè)注入防護規(guī)則;
根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述目標進程進行注入防護。
一種注入防護系統(tǒng),包括:
防護數(shù)據(jù)注入模塊,用于將包括預(yù)設(shè)注入防護規(guī)則的防護數(shù)據(jù)注入目標進程的第一個注入位置;
防護數(shù)據(jù)運行模塊,用于在檢測到所述目標進程的注入事件時,運行所述目標進程的第一個注入位置的防護數(shù)據(jù),獲取所述預(yù)設(shè)注入防護規(guī)則;
注入防護模塊,用于根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述目標進程進行注入防護。
上述注入防護方法和系統(tǒng),將包括預(yù)設(shè)注入防護規(guī)則的防護數(shù)據(jù)注入目標 進程的第一個注入位置,若檢測到所述目標進程的注入事件,則運行所述目標進程的第一個注入位置的防護數(shù)據(jù),獲取所述預(yù)設(shè)注入防護規(guī)則,根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述目標進程進行注入防護,無需修改應(yīng)用的原程序源代碼邏輯,即可根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述目標進程進行注入防護,如攔截不允許注入的數(shù)據(jù),可使注入防護的通用性更好、適用性更高,適用到更大范圍的應(yīng)用防護中。
附圖說明
圖1是本發(fā)明實施例的注入防護方法的實施環(huán)境的結(jié)構(gòu)示意圖;
圖2是本發(fā)明注入防護方法第一實施方式的流程示意圖;
圖3是本發(fā)明注入防護方法第二實施方式的流程示意圖;
圖4是本發(fā)明注入防護方法第三實施方式的流程示意圖;
圖5是本發(fā)明注入防護系統(tǒng)第一實施方式的結(jié)構(gòu)示意圖;
圖6是本發(fā)明注入防護系統(tǒng)第二實施方式的結(jié)構(gòu)示意圖;
圖7是本發(fā)明注入防護系統(tǒng)第三實施方式的結(jié)構(gòu)示意圖;
圖8是能實現(xiàn)本發(fā)明實施例的一個計算機系統(tǒng)的模塊圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
可以理解,本發(fā)明所使用的術(shù)語“第一”、“第二”等可在本文中用于描述各種元件,但這些元件不受這些術(shù)語限制。這些術(shù)語僅用于將第一個元件與另一個元件區(qū)分。
請參閱圖1,圖1是本發(fā)明實施例的注入防護方法的實施環(huán)境的結(jié)構(gòu)示意圖。
圖1所示實施環(huán)境用于實現(xiàn)本發(fā)明任意實施例或?qū)嵤┓绞剿龅淖⑷敕雷o方法,包括終端120、目標進程、加載服務(wù)器140和防護規(guī)則服務(wù)器160,所述終端與加載服務(wù)器140和/或防護規(guī)則服務(wù)器160通過無線網(wǎng)絡(luò)或有限網(wǎng)絡(luò)連接。
其中,終端120可包括智能手機、臺式機、筆記本、個人數(shù)字助理、平板電腦等終端設(shè)備中的至少一種,裝設(shè)有本發(fā)明注入防護方法用于防護的目標進程。
防護規(guī)則服務(wù)器160,可預(yù)先生成各種預(yù)設(shè)注入防護規(guī)則。
加載服務(wù)器140,可存儲用于啟動目標進程的進程加載器(Launch_bin.exe),進程加載器可用于從防護規(guī)則服務(wù)器拉取各種預(yù)設(shè)注入防護規(guī)則,將拉取的各種預(yù)設(shè)注入防護規(guī)則轉(zhuǎn)換為防護數(shù)據(jù),啟動所述目標進程。
終端120,可通過無線網(wǎng)絡(luò)或有線網(wǎng)絡(luò)從加載服務(wù)器140請求進程加載器,通過進程加載器啟動所述目標進程,將所述防護數(shù)據(jù)注入所述目標進程的第一個注入位置,以使得所述防護數(shù)據(jù)成為所述目標進程的第一個注入文件,可監(jiān)聽所述目標進程的所有注入數(shù)據(jù)。
本實施環(huán)境,可減少終端120的運行消耗,加快注入防護速度,提高注入防護效率,還可提高注入防護的通用性更好、適用性更高,適用到更大范圍的應(yīng)用防護中。
在一個實施例中,進程加載器的命名方式為<目標進程文件名>+<_Bin>+<.exe>。進程加載器運行后,可將<_Bin.exe>替換成<.exe>,作為目標進程啟動。
進一步地,進程加載器可用DetourCreateProcessWithDllEx啟動目標進程并將防護數(shù)據(jù)注入目標進程導(dǎo)入表的第一個位置。
請參閱圖2,圖2本發(fā)明注入防護方法第一實施方式的流程示意圖。
本實施方式所述的注入防護方法,包括以下步驟:
步驟S201,將包括預(yù)設(shè)注入防護規(guī)則的防護數(shù)據(jù)注入目標進程的第一個注入位置。
步驟S202,若檢測到所述目標進程的注入事件,則運行所述目標進程的第一個注入位置的防護數(shù)據(jù),獲取所述預(yù)設(shè)注入防護規(guī)則。
步驟S203,根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述目標進程進行注入防護。
本實施方式,將包括預(yù)設(shè)注入防護規(guī)則的防護數(shù)據(jù)注入目標進程的第一個注入位置,若檢測到所述目標進程的注入事件,則運行所述目標進程的第一個注入位置的防護數(shù)據(jù),獲取所述預(yù)設(shè)注入防護規(guī)則,根據(jù)所述預(yù)設(shè)注入防護規(guī) 則對所述目標進程進行注入防護,無需修改應(yīng)用的原程序源代碼邏輯,即可根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述目標進程進行注入防護,如攔截不允許注入的數(shù)據(jù),可使注入防護的通用性更好、適用性更高,適用到更大范圍的應(yīng)用防護中。
其中,對于步驟S201,所述目標進程的第一個注入位置為所述目標進程的第一組注入數(shù)據(jù)所占據(jù)的地址。所述預(yù)設(shè)注入防護規(guī)則包括判斷待注入數(shù)據(jù)為允許注入的數(shù)據(jù)的規(guī)則、判斷待注入數(shù)據(jù)為禁止注入的數(shù)據(jù)的規(guī)則和判斷待注入數(shù)據(jù)為允許注入的帶數(shù)字簽名的數(shù)據(jù)的規(guī)則中的至少一種。所述防護數(shù)據(jù)可為用于防護所述目標進程的數(shù)據(jù)注入的進程數(shù)據(jù),如DLL文件等。所述目標進程可為各種應(yīng)用的主進程,所述應(yīng)用可為各種社交應(yīng)用、各種電子商務(wù)平臺等。
優(yōu)選地,所述防護數(shù)據(jù)的應(yīng)用程序編程接口與Windows用戶界面相關(guān)應(yīng)用程序接口(user32.dll)不相關(guān),可避免注冊表注入。
進一步地,所述防護數(shù)據(jù)的應(yīng)用程序編程接口可與Windows 9x/Me中非常重要的32位動態(tài)鏈接庫文件(Kernel32.dll)、C/C++運行庫等相關(guān)。
在一個實施例中,將包括預(yù)設(shè)注入防護規(guī)則的防護數(shù)據(jù)注入目標進程的第一個注入位置的步驟包括以下步驟:
將所述預(yù)設(shè)注入防護規(guī)則轉(zhuǎn)換為所述防護數(shù)據(jù)。
將所述防護數(shù)據(jù)作為所述目標進程待加載的第一個加載文件加載到所述目標進程的加載文件導(dǎo)入表的第一個位置。
本實施例,可快速將所述防護數(shù)據(jù)作為所述目標進程待加載的第一個加載文件加載到所述目標進程的加載文件導(dǎo)入表的第一個位置。
優(yōu)選地,在將所述防護數(shù)據(jù)注入所述目標進程的第一個注入位置前,需要啟動所述目標進程,可通過進程加載器(Launch_bin.exe)啟動所述目標進程。
進一步地,進程加載器可通過Detours庫的DetourCreateProcessWithDllEx啟動目標進程,并將防護數(shù)據(jù)作為第一個注入文件注入到目標進程。
在一個實施例中,所述防護數(shù)據(jù)可包括DllMain函數(shù)Hook LdrLoadDll及CreateProcess函數(shù),通過Hook LdrLoadDll函數(shù)后,目標進程的各種待注入數(shù)據(jù)會轉(zhuǎn)發(fā)到Detour_LdrLoadDll函數(shù)。待注入數(shù)據(jù)的數(shù)據(jù)標識會通過DllPath傳遞 進來,在Detour_LdrLoadDll函數(shù)里根據(jù)所述預(yù)設(shè)注入防護規(guī)則進行注入防護(若待注入數(shù)據(jù)為不允許注入的數(shù)據(jù),只需要在Detour_LdrLoadDll里不調(diào)用注入所述待注入數(shù)據(jù)的函數(shù),并將DllHandle設(shè)為NULL及返回STATUS_DLL_NOT_FOUND即可)。
對于步驟S202,所述目標進程的注入事件可包括DLL文件注入事件等本領(lǐng)域的各種注入事件。DLL文件注入事件可包括注冊表注入事件、鉤子注入事件、遠程線程注入事件、APC注入事件、遠程代碼注入事件、LSP注入事件、COM調(diào)用注入事件等。如檢測到待注入數(shù)據(jù)對所述目標進程的注入請求時,判定檢測到注入事件。還可通過操作系統(tǒng)的相關(guān)API實現(xiàn)檢測目標進程的注入事件。
對于步驟S203,對所述目標進程進行注入防護可為攔截不允許注入到所述目標進程的待注入數(shù)據(jù)。所述待注入數(shù)據(jù)可為所述注入事件對應(yīng)的注冊表、遠程線程、APC、遠程代碼、LSP、COM調(diào)用組件等。
在一個實施例中,根據(jù)所述預(yù)設(shè)注入防護規(guī)則,對所述目標進程進行注入防護的步驟包括以下步驟:
根據(jù)所述預(yù)設(shè)注入防護規(guī)則判斷所述目標進程的注入事件對應(yīng)的待注入數(shù)據(jù)是否為允許注入的數(shù)據(jù)。
若是,則將所述待注入數(shù)據(jù)注入所述目標進程。
若否,則對所述待注入數(shù)據(jù)進行注入攔截。
本實施例,可有效攔截不允許注入所述目標進程的數(shù)據(jù)。
優(yōu)選地,若所述預(yù)設(shè)注入防護規(guī)則為判斷待注入數(shù)據(jù)為允許注入的數(shù)據(jù)的會澤,檢測到所述目標進程的注入事件時,可判斷所述注入事件對應(yīng)的待注入數(shù)據(jù)的標識是否包括在所述預(yù)設(shè)注入防護規(guī)則中,若是,則判定所述待注入數(shù)據(jù)為允許注入的數(shù)據(jù),若否,則判定所述待注入數(shù)據(jù)不是允許注入的數(shù)據(jù)。
請參閱圖3,圖3是本發(fā)明注入防護方法第二實施方式的流程示意圖。
本實施方式所述的注入防護方法與第一實施方式的區(qū)別在于:將包括預(yù)設(shè)注入防護規(guī)則的防護數(shù)據(jù)注入目標進程的第一個注入位置的步驟之后,還包括以下步驟:
步驟S301,將所述防護數(shù)據(jù)注入所述目標進程的子進程的第一個注入位置。
步驟S302,若檢測到所述子進程的注入事件,則運行所述子進程的第一個注入位置的防護數(shù)據(jù),獲取所述預(yù)設(shè)注入防護規(guī)則。
步驟S303,根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述子進程進行注入防護。
本實施方式,將所述防護數(shù)據(jù)注入所述目標進程的子進程的第一個注入位置,可進一步對目標進程的子進程進行注入防護,進一步提高注入防護的有效性和安全性。
對于步驟S301,所述子進程的第一個注入位置為所述子進程的第一組注入數(shù)據(jù)所占據(jù)的地址。
在一個實施例中,將所述防護數(shù)據(jù)注入所述目標進程的子進程的第一個注入位置的步驟包括以下步驟:
檢測所述目標進程的進程創(chuàng)建事件。
若檢測到,則將所述防護數(shù)據(jù)注入所述目標進程創(chuàng)建的進程的第一個注入位置。
本實施例,可在目標進程創(chuàng)建進程的同時將所述防護數(shù)據(jù)注入所述目標進程創(chuàng)建的進程的第一個注入位置,對所述目標進程的子進程進行更及時有效的注入防護。
在另一個實施例中,目標進程的所有創(chuàng)建子進程的調(diào)用都會轉(zhuǎn)發(fā)到函數(shù)Detour_CreateProcess,在函數(shù)Detour_CreateProcess里,通過函數(shù)DetourCreateProcessWithDllEx實現(xiàn)創(chuàng)建子進程。若監(jiān)聽到調(diào)用DetourCreateProcessWithDllEx,可判斷檢測到所述不標進程的進程創(chuàng)建事件。還可通過操作系統(tǒng)的相關(guān)API(CreateProcess)監(jiān)聽所述目標進程的進程創(chuàng)建事件。
對于步驟S302,所述子進程的注入事件可包括DLL文件注入事件等本領(lǐng)域的各種注入事件。DLL文件注入事件可包括注冊表注入事件、鉤子注入事件、遠程線程注入事件、APC注入事件、遠程代碼注入事件、LSP注入事件、COM調(diào)用注入事件等。
對于步驟S303,對所述子進程進行注入防護可為攔截不允許注入到所述子進程的待注入數(shù)據(jù)。
在一個實施例中,根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述子進程進行注入防護 的步驟包括以下步驟:
根據(jù)所述預(yù)設(shè)注入防護規(guī)則判斷所述子進程的注入事件對應(yīng)的待注入數(shù)據(jù)是否為允許注入的數(shù)據(jù)。
若是,則將所述待注入數(shù)據(jù)注入所述子進程。
若否,則對所述待注入數(shù)據(jù)進行注入攔截。
本實施例,可有效攔截不允許注入所述子進程的數(shù)據(jù)。
優(yōu)選地,若所述預(yù)設(shè)注入防護規(guī)則為判斷待注入數(shù)據(jù)為允許注入的數(shù)據(jù)的規(guī)則,檢測到所述子進程的注入事件時,可判斷所述注入事件對應(yīng)的待注入數(shù)據(jù)的標識是否包括在所述預(yù)設(shè)注入防護規(guī)則中,若是,則判定所述待注入數(shù)據(jù)為允許注入的數(shù)據(jù),若否,則判定所述待注入數(shù)據(jù)不是允許注入的數(shù)據(jù)。
在其他實施方式中,注入目標進程的防護數(shù)據(jù)和注入子進程的防護數(shù)據(jù)可不同,注入目標進程的防護數(shù)據(jù)包括與目標進程對應(yīng)的預(yù)設(shè)注入防護規(guī)則。注入子進程的防護數(shù)據(jù)包括與子進程對應(yīng)的預(yù)設(shè)注入防護規(guī)則。
請參閱圖4,圖4是本發(fā)明注入防護方法第三實施方式的流程示意圖。
本實施方式所述的注入防護方法與第二實施方式的區(qū)別在于:將所述防護數(shù)據(jù)注入所述目標進程的子進程的第一個注入位置的步驟之后,還包括以下步驟:
步驟S401,檢測所述子進程的進程創(chuàng)建事件。
步驟S402,若檢測到,則將所述防護數(shù)據(jù)注入所述子進程創(chuàng)建的進程的第一個注入位置。
步驟S403,若檢測到所述子進程創(chuàng)建的進程的注入事件,則運行所述子進程創(chuàng)建的進程的第一個注入位置的防護數(shù)據(jù),獲取所述預(yù)設(shè)注入防護規(guī)則。
步驟S404,根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述子進程創(chuàng)建的進程進行注入防護。
本實施方式,將所述防護數(shù)據(jù)注入所述目標進程的子進程的第一個注入位置,可進一步對目標進程的子進程進行注入防護,進一步提高注入防護的有效性和安全性。
對于步驟S401,檢測子進程的進程創(chuàng)建事件的方式與檢測目標進程的進程 創(chuàng)建事件的方式類似。
對于步驟S402,所述子進程創(chuàng)建的進程可簡稱為孫進程。所述子進程創(chuàng)建的進程的第一個注入位置為所述子進程創(chuàng)建的進程的第一組注入數(shù)據(jù)所占據(jù)的地址。
對于步驟S403,所述子進程創(chuàng)建的進程的注入事件可包括DLL文件注入事件等本領(lǐng)域的各種注入事件。DLL文件注入事件可包括注冊表注入事件、鉤子注入事件、遠程線程注入事件、APC注入事件、遠程代碼注入事件、LSP注入事件、COM調(diào)用注入事件等。
對于步驟S404,對所述子進程創(chuàng)建的進程進行注入防護可為攔截不允許注入到所述子進程的待注入數(shù)據(jù)。
在一個實施例中,根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述子進程創(chuàng)建的進程進行注入防護的步驟包括以下步驟:
根據(jù)所述預(yù)設(shè)注入防護規(guī)則判斷所述子進程創(chuàng)建的進程的注入事件對應(yīng)的待注入數(shù)據(jù)是否為允許注入的數(shù)據(jù)。
若是,則將所述待注入數(shù)據(jù)注入所述子進程創(chuàng)建的進程。
若否,則對所述待注入數(shù)據(jù)進行注入攔截。
本實施例,可有效攔截不允許注入所述子進程的數(shù)據(jù)。
優(yōu)選地,若所述預(yù)設(shè)注入防護規(guī)則為判斷待注入數(shù)據(jù)為允許注入的數(shù)據(jù)的規(guī)則,檢測到所述子進程創(chuàng)建的進程的注入事件時,可判斷所述注入事件對應(yīng)的待注入數(shù)據(jù)的標識是否包括在所述預(yù)設(shè)注入防護規(guī)則中,若是,則判定所述待注入數(shù)據(jù)為允許注入的數(shù)據(jù),若否,則判定所述待注入數(shù)據(jù)不是允許注入的數(shù)據(jù)。
在其他實施方式中,注入目標進程的防護數(shù)據(jù)、注入子進程的防護數(shù)據(jù)以及注入子進程創(chuàng)建的進程的防護數(shù)據(jù)可不同,注入目標進程的防護數(shù)據(jù)包括與目標進程對應(yīng)的預(yù)設(shè)注入防護規(guī)則。注入子進程的防護數(shù)據(jù)包括與子進程對應(yīng)的預(yù)設(shè)注入防護規(guī)則。注入子進程創(chuàng)建的進程的防護數(shù)據(jù)包括與子進程創(chuàng)建的進程對應(yīng)的預(yù)設(shè)注入防護規(guī)則。
請參閱圖5,圖5本發(fā)明注入防護系統(tǒng)第一實施方式的結(jié)構(gòu)示意圖。
本實施方式所述的注入防護系統(tǒng),包括防護數(shù)據(jù)注入模塊100、防護數(shù)據(jù)運行模塊200和注入防護模塊300,其中:
防護數(shù)據(jù)注入模塊100,用于將包括預(yù)設(shè)注入防護規(guī)則的防護數(shù)據(jù)注入目標進程的第一個注入位置。
防護數(shù)據(jù)運行模塊200,用于在檢測到所述目標進程的注入事件時,運行所述目標進程的第一個注入位置的防護數(shù)據(jù),獲取所述預(yù)設(shè)注入防護規(guī)則。
注入防護模塊300,用于根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述目標進程進行注入防護。
本實施方式,將包括預(yù)設(shè)注入防護規(guī)則的防護數(shù)據(jù)注入目標進程的第一個注入位置,若檢測到所述目標進程的注入事件,則運行所述目標進程的第一個注入位置的防護數(shù)據(jù),獲取所述預(yù)設(shè)注入防護規(guī)則,根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述目標進程進行注入防護,無需修改應(yīng)用的原程序源代碼邏輯,即可根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述目標進程進行注入防護,如攔截不允許注入的數(shù)據(jù),可使注入防護的通用性更好、適用性更高,適用到更大范圍的應(yīng)用防護中。
其中,對于防護數(shù)據(jù)注入模塊100,所述目標進程的第一個注入位置為所述目標進程的第一組注入數(shù)據(jù)所占據(jù)的地址。所述預(yù)設(shè)注入防護規(guī)則包括判斷待注入數(shù)據(jù)為允許注入的數(shù)據(jù)的規(guī)則、判斷待注入數(shù)據(jù)為禁止注入的數(shù)據(jù)的規(guī)則和判斷待注入數(shù)據(jù)為允許注入的帶數(shù)字簽名的數(shù)據(jù)的規(guī)則中的至少一種。所述防護數(shù)據(jù)可為用于防護所述目標進程的數(shù)據(jù)注入的進程數(shù)據(jù),如DLL文件等。所述目標進程可為各種應(yīng)用的主進程,所述應(yīng)用可為各種社交應(yīng)用、各種電子商務(wù)平臺等。
優(yōu)選地,所述防護數(shù)據(jù)的應(yīng)用程序編程接口與Windows用戶界面相關(guān)應(yīng)用程序接口(user32.dll)不相關(guān),可避免注冊表注入。
進一步地,所述防護數(shù)據(jù)的應(yīng)用程序編程接口可與Windows 9x/Me中非常重要的32位動態(tài)鏈接庫文件(Kernel32.dll)、C/C++運行庫等相關(guān)。
在一個實施例中,防護數(shù)據(jù)注入模塊100可包括進程轉(zhuǎn)換模塊和文件注入模塊,其中:
所述進程轉(zhuǎn)換模塊用于將所述預(yù)設(shè)注入防護規(guī)則轉(zhuǎn)換為所述防護數(shù)據(jù)。
所述文件注入模塊用于將所述防護數(shù)據(jù)作為所述目標進程待加載的第一個加載文件加載到所述目標進程的加載文件導(dǎo)入表的第一個位置。
本實施例,可快速將所述防護數(shù)據(jù)作為所述目標進程待加載的第一個加載文件加載到所述目標進程的加載文件導(dǎo)入表的第一個位置。
優(yōu)選地,在將所述防護數(shù)據(jù)注入所述目標進程的第一個注入位置前,需要啟動所述目標進程,可通過進程加載器(Launch_bin.exe)啟動所述目標進程。
進一步地,進程加載器可通過Detours庫的DetourCreateProcessWithDllEx啟動目標進程,并將防護數(shù)據(jù)作為第一個注入文件注入到目標進程。
在一個實施例中,所述防護數(shù)據(jù)可包括DllMain函數(shù)Hook LdrLoadDll及CreateProcess函數(shù),通過Hook LdrLoadDll函數(shù)后,目標進程的各種待注入數(shù)據(jù)會轉(zhuǎn)發(fā)到Detour_LdrLoadDll函數(shù)。待注入數(shù)據(jù)的數(shù)據(jù)標識會通過DllPath傳遞進來,在Detour_LdrLoadDll函數(shù)里根據(jù)所述預(yù)設(shè)注入防護規(guī)則進行注入防護(若待注入數(shù)據(jù)為不允許注入的數(shù)據(jù),只需要在Detour_LdrLoadDll里不調(diào)用注入所述待注入數(shù)據(jù)的函數(shù),并將DllHandle設(shè)為NULL及返回STATUS_DLL_NOT_FOUND即可)。
對于防護數(shù)據(jù)運行模塊200,所述目標進程的注入事件可包括DLL文件注入事件等本領(lǐng)域的各種注入事件。DLL文件注入事件可包括注冊表注入事件、鉤子注入事件、遠程線程注入事件、APC注入事件、遠程代碼注入事件、LSP注入事件、COM調(diào)用注入事件等。
對于注入防護模塊300,對所述目標進程進行注入防護可為攔截不允許注入到所述目標進程的待注入數(shù)據(jù)。所述待注入數(shù)據(jù)可為所述注入事件對應(yīng)的注冊表、遠程線程、APC、遠程代碼、LSP、COM調(diào)用組件等。
在一個實施例中,注入防護模塊300可包括判斷模塊、第五防護模塊和第六防護模塊,其中:
所述判斷模塊用于根據(jù)所述預(yù)設(shè)注入防護規(guī)則判斷所述目標進程的注入事件對應(yīng)的待注入數(shù)據(jù)是否為允許注入的數(shù)據(jù);
所述第五防護模塊用于在所述待注入數(shù)據(jù)是允許注入的數(shù)據(jù)時,將所述待 注入數(shù)據(jù)注入所述目標進程;
所述第六防護模塊用于在所述待注入數(shù)據(jù)不是允許注入的數(shù)據(jù)時,對所述待注入數(shù)據(jù)進行注入攔截。
本實施例,可有效攔截不允許注入所述目標進程的數(shù)據(jù)。
優(yōu)選地,若所述預(yù)設(shè)注入防護規(guī)則為判斷待注入數(shù)據(jù)為允許注入的數(shù)據(jù)的規(guī)則,檢測到所述目標進程的注入事件時,可判斷所述注入事件對應(yīng)的待注入數(shù)據(jù)的標識是否包括在所述預(yù)設(shè)注入防護規(guī)則中,若是,則判定所述待注入數(shù)據(jù)為允許注入的數(shù)據(jù),若否,則判定所述待注入數(shù)據(jù)不是允許注入的數(shù)據(jù)。
請參閱圖6,圖6是本發(fā)明注入防護系統(tǒng)第二實施方式的結(jié)構(gòu)示意圖。
本實施方式所述的注入防護系統(tǒng)與第一實施方式的區(qū)別在于:還包括第二注入模塊610、第二運行模塊620和第二防護模塊630,其中:
第二注入模塊610用于將所述防護數(shù)據(jù)注入所述目標進程的子進程的第一個注入位置。
第二運行模塊620用于在檢測到所述子進程的注入事件時,運行所述子進程的第一個注入位置的防護數(shù)據(jù),獲取所述預(yù)設(shè)注入防護規(guī)則。
第二防護模塊630用于根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述子進程進行注入防護。
本實施方式,將所述防護數(shù)據(jù)注入所述目標進程的子進程的第一個注入位置,可進一步對目標進程的子進程進行注入防護,進一步提高注入防護的有效性和安全性。
對于第二注入模塊610,所述子進程的第一個注入位置為所述子進程的第一組注入數(shù)據(jù)所占據(jù)的地址。
在一個實施例中,第二注入模塊610還包括第三檢測模塊和第三注入模塊,其中:
所述第三檢測模塊用于檢測所述目標進程的進程創(chuàng)建事件。
所述第三注入模塊用于在檢測到所述目標進程的進程創(chuàng)建事件時,將所述防護數(shù)據(jù)注入所述目標進程創(chuàng)建的進程的第一個注入位置。
本實施例,可在目標進程創(chuàng)建進程的同時將所述防護數(shù)據(jù)注入所述目標進 程創(chuàng)建的進程的第一個注入位置,對所述目標進程的子進程進行更及時有效的注入防護。
對于第二運行模塊620,所述子進程的注入事件可包括DLL文件注入事件等本領(lǐng)域的各種注入事件。DLL文件注入事件可包括注冊表注入事件、鉤子注入事件、遠程線程注入事件、APC注入事件、遠程代碼注入事件、LSP注入事件、COM調(diào)用注入事件等。
對于第二防護模塊630,對所述子進程進行注入防護可為攔截不允許注入到所述子進程的待注入數(shù)據(jù)。
在其他實施方式中,注入目標進程的防護數(shù)據(jù)和注入子進程的防護數(shù)據(jù)可不同,注入目標進程的防護數(shù)據(jù)包括與目標進程對應(yīng)的預(yù)設(shè)注入防護規(guī)則。注入子進程的防護數(shù)據(jù)包括與子進程對應(yīng)的預(yù)設(shè)注入防護規(guī)則。
請參閱圖7,圖7是本發(fā)明注入防護系統(tǒng)第三實施方式的結(jié)構(gòu)示意圖。
本實施方式所述的注入防護系統(tǒng)與第二實施方式的區(qū)別在于:還包括第四檢測模塊710、第四注入模塊720、第四運行模塊730和第四防護模塊740,其中:
第四檢測模塊710用于檢測所述子進程的進程創(chuàng)建事件。
第四注入模塊720用于在檢測到所述子進程的進程創(chuàng)建事件,則將所述防護數(shù)據(jù)注入所述子進程創(chuàng)建的進程的第一個注入位置。
第四運行模塊730用于在檢測到所述子進程創(chuàng)建的進程的注入事件時,運行所述子進程創(chuàng)建的進程的第一個注入位置的防護數(shù)據(jù),獲取所述預(yù)設(shè)注入防護規(guī)則。
第四防護模塊740用于根據(jù)所述預(yù)設(shè)注入防護規(guī)則對所述子進程創(chuàng)建的進程進行注入防護。
本實施方式,將所述防護數(shù)據(jù)注入所述目標進程的子進程的第一個注入位置,可進一步對目標進程的子進程進行注入防護,進一步提高注入防護的有效性和安全性。
對于第四檢測模塊710,檢測子進程的進程創(chuàng)建事件的方式與檢測目標進程的進程創(chuàng)建事件的方式類似。
對于第四注入模塊720,所述子進程創(chuàng)建的進程可簡稱為孫進程。所述子進程創(chuàng)建的進程的第一個注入位置為所述子進程創(chuàng)建的進程的第一組注入數(shù)據(jù)所占據(jù)的地址。
對于第四運行模塊730,所述子進程創(chuàng)建的進程的注入事件可包括DLL文件注入事件等本領(lǐng)域的各種注入事件。DLL文件注入事件可包括注冊表注入事件、鉤子注入事件、遠程線程注入事件、APC注入事件、遠程代碼注入事件、LSP注入事件、COM調(diào)用注入事件等。
對于第四防護模塊740,對所述子進程創(chuàng)建的進程進行注入防護可為攔截不允許注入到所述子進程的待注入數(shù)據(jù)。
在其他實施方式中,注入目標進程的防護數(shù)據(jù)、注入子進程的防護數(shù)據(jù)以及注入子進程創(chuàng)建的進程的防護數(shù)據(jù)可不同,注入目標進程的防護數(shù)據(jù)包括與目標進程對應(yīng)的預(yù)設(shè)注入防護規(guī)則。注入子進程的防護數(shù)據(jù)包括與子進程對應(yīng)的預(yù)設(shè)注入防護規(guī)則。注入子進程創(chuàng)建的進程的防護數(shù)據(jù)包括與子進程創(chuàng)建的進程對應(yīng)的預(yù)設(shè)注入防護規(guī)則。
圖8為能實現(xiàn)本發(fā)明實施例的一個計算機系統(tǒng)1000的模塊圖。該計算機系統(tǒng)1000只是一個適用于本發(fā)明的計算機環(huán)境的示例,不能認為是提出了對本發(fā)明的使用范圍的任何限制。計算機系統(tǒng)1000也不能解釋為需要依賴于或具有圖示的示例性的計算機系統(tǒng)1000中的一個或多個部件的組合。
圖8中示出的計算機系統(tǒng)1000是一個適合用于本發(fā)明的計算機系統(tǒng)的例子。具有不同子系統(tǒng)配置的其它架構(gòu)也可以使用。例如有大眾所熟知的臺式機、筆記本、個人數(shù)字助理、智能電話、平板電腦、便攜式媒體播放器等類似設(shè)備可以適用于本發(fā)明的一些實施例。但不限于以上所列舉的設(shè)備。
如圖8所示,計算機系統(tǒng)1000包括處理器1010、存儲器1020和系統(tǒng)總線1022。包括存儲器1020和處理器1010在內(nèi)的各種系統(tǒng)組件連接到系統(tǒng)總線1022上。處理器1010是一個用來通過計算機系統(tǒng)中基本的算術(shù)和邏輯運算來執(zhí)行計算機程序指令的硬件。存儲器1020是一個用于臨時或永久性存儲計算程序或數(shù)據(jù)(例如,程序狀態(tài)信息)的物理設(shè)備。系統(tǒng)總線1020可以為以下幾種類型的總線結(jié)構(gòu)中的任意一種,包括存儲器總線或存儲控制器、外設(shè)總線和局部總線。 處理器1010和存儲器1020可以通過系統(tǒng)總線1022進行數(shù)據(jù)通信。其中存儲器1020包括只讀存儲器(ROM)或閃存(圖中都未示出),以及隨機存取存儲器(RAM),RAM通常是指加載了操作系統(tǒng)和應(yīng)用程序的主存儲器。
計算機系統(tǒng)1000還包括顯示接口1030(例如,圖形處理單元)、顯示設(shè)備1040(例如,液晶顯示器)、音頻接口1050(例如,聲卡)以及音頻設(shè)備1060(例如,揚聲器)。顯示設(shè)備1040和音頻設(shè)備1060是用于體驗多媒體內(nèi)容的媒體設(shè)備。
計算機系統(tǒng)1000一般包括一個存儲設(shè)備1070。存儲設(shè)備1070可以從多種計算機可讀介質(zhì)中選擇,計算機可讀介質(zhì)是指可以通過計算機系統(tǒng)1000訪問的任何可利用的介質(zhì),包括移動的和固定的兩種介質(zhì)。例如,計算機可讀介質(zhì)包括但不限于,閃速存儲器(微型SD卡),CD-ROM,數(shù)字通用光盤(DVD)或其它光盤存儲、磁帶盒、磁帶、磁盤存儲或其它磁存儲設(shè)備,或者可用于存儲所需信息并可由計算機系統(tǒng)1000訪問的任何其它介質(zhì)。
計算機系統(tǒng)1000還包括輸入裝置1080和輸入接口1090(例如,IO控制器)。用戶可以通過輸入裝置1080,如鍵盤、鼠標、顯示裝置1040上的觸摸面板設(shè)備,輸入指令和信息到計算機系統(tǒng)1000中。輸入裝置1080通常是通過輸入接口1090連接到系統(tǒng)總線1022上的,但也可以通過其它接口或總線結(jié)構(gòu)相連接,如通用串行總線(USB)。
計算機系統(tǒng)1000可在網(wǎng)絡(luò)環(huán)境中與一個或者多個網(wǎng)絡(luò)設(shè)備進行邏輯連接。網(wǎng)絡(luò)設(shè)備可以是個人電腦、服務(wù)器、路由器、智能電話、平板電腦或者其它公共網(wǎng)絡(luò)節(jié)點。計算機系統(tǒng)1000通過局域網(wǎng)(LAN)接口1100或者移動通信單元1110與網(wǎng)絡(luò)設(shè)備相連接。局域網(wǎng)(LAN)是指在有限區(qū)域內(nèi),例如家庭、學(xué)校、計算機實驗室、或者使用網(wǎng)絡(luò)媒體的辦公樓,互聯(lián)組成的計算機網(wǎng)絡(luò)。WiFi和雙絞線布線以太網(wǎng)是最常用的構(gòu)建局域網(wǎng)的兩種技術(shù)。WiFi是一種能使計算機系統(tǒng)1000間交換數(shù)據(jù)或通過無線電波連接到無線網(wǎng)絡(luò)的技術(shù)。移動通信單元1110能在一個廣闊的地理區(qū)域內(nèi)移動的同時通過無線電通信線路接聽和撥打電話。除了通話以外,移動通信單元1110也支持在提供移動數(shù)據(jù)服務(wù)的2G,3G或4G蜂窩通信系統(tǒng)中進行互聯(lián)網(wǎng)訪問。
應(yīng)當指出的是,其它包括比計算機系統(tǒng)1000更多或更少的子系統(tǒng)的計算機系統(tǒng)也能適用于發(fā)明。
如上面詳細描述的,適用于本發(fā)明的計算機系統(tǒng)1000能執(zhí)行注入防護方法的指定操作。計算機系統(tǒng)1000通過處理器1010運行在計算機可讀介質(zhì)中的軟件指令的形式來執(zhí)行這些操作。這些軟件指令可以從存儲設(shè)備1070或者通過局域網(wǎng)接口1100從另一設(shè)備讀入到存儲器1020中。存儲在存儲器1020中的軟件指令使得處理器1010執(zhí)行上述的注入防護方法。此外,通過硬件電路或者硬件電路結(jié)合軟件指令也能同樣實現(xiàn)本發(fā)明。因此,實現(xiàn)本發(fā)明并不限于任何特定硬件電路和軟件的組合。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(Random Access Memory,RAM)等。
以上所述實施例僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應(yīng)以所附權(quán)利要求為準。