專利名稱::一種監(jiān)控程序模塊加載活動的系統(tǒng)過濾方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及程序加載過濾技術(shù),特別涉及一種監(jiān)控程序模塊加載活動的系統(tǒng)過濾方法。
背景技術(shù):
:在學(xué)校機房或網(wǎng)吧等公共場所,電腦的系統(tǒng)安全性尤為受管理員和用戶關(guān)注,人們一般會考慮通過安裝還原軟件或殺毒軟件來增強系統(tǒng)的防護,但這些方案在實際運作中也存在著不足。一方面,還原軟件通常并不能直接抵御惡意程序的加載運行,現(xiàn)在的惡意程序越來越多以內(nèi)核驅(qū)動的形式運行,因而往往能夠強行突破還原軟件的保護。另一方面,殺毒軟件雖然能在惡意程序落地的第一時間進行查殺,但需要不斷更新特征庫來效甄別新的病毒,對于維護幾十臺甚至幾百臺電腦的機構(gòu)或營業(yè)場所來說,這顯然增加了系統(tǒng)的管理成本;另外,殺毒軟件的使用也會一定程序上降低系統(tǒng)的性能,加上難以避免的誤報。
發(fā)明內(nèi)容有鑒于此,本發(fā)明提供了一種監(jiān)控程序模塊加載活動的系統(tǒng)過濾方法,該方法請求操作系統(tǒng)在發(fā)生程序模塊加載活動時發(fā)出通知,然后執(zhí)行如下步驟步驟a、接收操作系統(tǒng)發(fā)出的程序模塊加載活動通知,然后執(zhí)行步驟b;步驟b、獲取上述程序模塊在系統(tǒng)內(nèi)存中處于加載狀態(tài)下的PE頭部信息、以及該程序模塊包含在磁盤中對應(yīng)的原始文件內(nèi)容中的PE頭部信息;步驟c、比較所獲取的加載狀態(tài)下的PE頭部信息與原始文件內(nèi)容中的PE頭部信息是否匹配,如果不匹配則執(zhí)行步驟f,如果匹配則執(zhí)行步驟d;步驟d、讀取該程序模塊的原始文件內(nèi)容、并計算原始文件內(nèi)容對應(yīng)的散列結(jié)果;步驟e、根據(jù)散列結(jié)果與預(yù)置的過濾策略數(shù)據(jù)條件的匹配結(jié)果,決定上述程序模塊的加載活動是否給予通過,如果不給予通過則執(zhí)行步驟f,如果給予通過則結(jié)束本流程;步驟f、修改上述處于加載活動中的程序模塊的入口代碼,用以終止其繼續(xù)執(zhí)行,然后結(jié)束本流程。優(yōu)選地,所述請求操作系統(tǒng)在發(fā)生程序模塊加載活動時發(fā)出通知包括調(diào)用操作系統(tǒng)的內(nèi)核系統(tǒng)函數(shù),注冊程序模塊加載通知回調(diào)例程。優(yōu)選地,所述的操作系統(tǒng)為Windows系統(tǒng),所述的內(nèi)核系統(tǒng)函數(shù)為PsSetLoadImageNotifyRoutineο優(yōu)選地,所述的通知中進一步包括發(fā)生加載活動的程序模塊于磁盤中的原始文件路徑、該程序模塊當前加載基址和加載后的模塊長度。優(yōu)選地,步驟a中所獲取的加載狀態(tài)下的PE頭部信息,由上述程序模塊的當前加載基址及偏移量計算得到;步驟a中所獲取的原始文件內(nèi)容中的PE頭部信息,由對應(yīng)程序模塊在原始文件中的內(nèi)容通過附加文件偏移計算得到。優(yōu)選地,所述步驟e包括el、判斷原始文件內(nèi)容的散列結(jié)果是否與過濾策略預(yù)置數(shù)據(jù)中的任一黑名單項或任一白名單項匹配,如果匹配任一黑名單項,則直接拒絕加載活動的通過,然后結(jié)束本流程;如果匹配任一白名單項,則直接允許加載活動的通過,然后結(jié)束本流程;否則,無匹配的黑名單項和白名單項、并執(zhí)行步驟e2;e2、判斷過濾策略是否預(yù)置為默認拒絕通過,如果是,則直接拒絕加載活動的通過,然后結(jié)束本流程;否則,允許加載活動的通過,然后結(jié)束本流程。由上述技術(shù)方案可見,本發(fā)明請求操作系統(tǒng)在發(fā)生程序模塊加載活動時發(fā)出通知,并能夠在有程序模塊發(fā)生加載活動時接收到操作系統(tǒng)發(fā)出的加載程序模塊活動的通知,此時,只要該程序模塊對應(yīng)的原始文件在其加載過程未發(fā)生非法篡改,則讀取該程序模塊的原始文件內(nèi)容并計算散列結(jié)果,并根據(jù)散列結(jié)果與預(yù)置的過濾策略數(shù)據(jù)條件的匹配結(jié)果來決定該程序模塊加載活動是否給予通過,從而能夠提高系統(tǒng)安全保護。相比于現(xiàn)有技術(shù)中的軟件還原方式,由于惡意程序即便是以內(nèi)核驅(qū)動的形式運行,其對應(yīng)的程序模塊也需要由操作系統(tǒng)負責(zé)加載和調(diào)度運行,因而本發(fā)明通過對處于加載狀態(tài)下的程序模塊予以過濾,能夠避免未經(jīng)鑒別認證的程序模塊的運行,從而能夠克服軟件還原方式所存在的不足,提高系統(tǒng)安全防護的安全性;相比于現(xiàn)有技術(shù)中的軟件殺毒方式,由于本發(fā)明不需要為了甄別新病毒而不斷更新特征庫,因而降低了部署系統(tǒng)安全防護的管理成本;并且,由于本發(fā)明監(jiān)控的是程序模塊的加載時機,無需實時對文件系統(tǒng)執(zhí)行全局掃描和過濾,因而能夠避免殺毒軟件使用過程中對系統(tǒng)性能帶來的負面影響。圖1為本發(fā)明實施例中監(jiān)控程序模塊加載活動的系統(tǒng)過濾方法的一示例性流程圖。具體實施例方式為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明進一步詳細說明。圖1為本發(fā)明實施例中監(jiān)控程序模塊加載活動的系統(tǒng)過濾方法的一示例性流程圖。如圖1所示,本實施例中監(jiān)控程序模塊加載活動的系統(tǒng)過濾方法可以由一個底層內(nèi)核模式驅(qū)動程序來執(zhí)行,例如,該底層內(nèi)核模式驅(qū)動程序可命名為FilterDriver.sys,且該系統(tǒng)過濾方法包括步驟100,底層內(nèi)核模式驅(qū)動程序請求操作系統(tǒng)在發(fā)生程序模塊加載活動時發(fā)出通知。本步驟中,底層內(nèi)核模式驅(qū)動程序可以通過調(diào)用操作系統(tǒng)的內(nèi)核系統(tǒng)函數(shù)的方式,向操作系統(tǒng)注冊一個程序模塊加載通知回調(diào)例程。例如,對于Windows系統(tǒng)來說,可供底層內(nèi)核模式驅(qū)動程序調(diào)用的內(nèi)核系統(tǒng)函數(shù)可以選為PsSetLoadlmageNotifyRoutine,底層內(nèi)核模式驅(qū)動程序注冊的回調(diào)例程可以命名為OnLoadlmageNotifyProc。步驟101,在有程序模塊(如aaa.sys、bbb.exe.ccc.dll等)發(fā)生加載活動時,底層內(nèi)核模式驅(qū)動程序接收到操作系統(tǒng)發(fā)出的程序模塊加載活動通知。步驟102,底層內(nèi)核模式驅(qū)動程序獲取上述程序模塊在系統(tǒng)內(nèi)存中處于加載狀態(tài)下的PE(PortableExecutable,可移植的可執(zhí)行文件)頭部信息、以及該程序模塊包含在磁盤中對應(yīng)的原始文件內(nèi)容中的PE頭部信息。以Windows系統(tǒng)為例,本步驟中所獲取的加載狀態(tài)下的PE頭部信息、以及原始文件內(nèi)容中的PE頭部信息,均可以包括IMAGE_NT_HEADERS、IMAGE_FILE_HEADER,IMAGE_0PTI0NAL_HEADER、以及IMAGE_SECTION_HEADER等Windows系統(tǒng)定義的結(jié)構(gòu)。此外,步驟101所接收到通知中可以進一步包括發(fā)生加載活動的程序模塊于磁盤中的的原始文件路徑、以及該程序模塊當前加載基址和加載后的模塊長度。這種情況下在本步驟中所獲取的加載狀態(tài)下的PE頭部信息,可以由上述程序模塊的當前加載基址及偏移量計算得到;而獲取的原始文件內(nèi)容中的PE頭部信息,可以由對應(yīng)程序模塊在原始文件中的內(nèi)容通過附加文件偏移計算得到,例如,對于Windows操作系統(tǒng)來說,底層內(nèi)核模式驅(qū)動程序可以通過調(diào)用系統(tǒng)函數(shù)ZwReadFile來讀取原始文件內(nèi)容。步驟103,底層內(nèi)核模式驅(qū)動程序比較所獲取的加載狀態(tài)下的PE頭部信息與原始文件內(nèi)容中的PE頭部信息是否匹配,如果不匹配則表示該程序模塊加載過程中對應(yīng)的原始文件發(fā)生了非法篡改、并執(zhí)行步驟105,如果匹配則表示該程序模塊加載過程中對應(yīng)的原始文件未被非法篡改、并執(zhí)行步驟104。步驟104、計算原始文件內(nèi)容對應(yīng)的散列結(jié)果。本步驟中,利用MD5,SHA-I或者CRC等現(xiàn)有算法計算原始文件內(nèi)容對應(yīng)的散列結(jié)^ο步驟105、底層內(nèi)核模式驅(qū)動程序根據(jù)散列結(jié)果與預(yù)置的過濾策略數(shù)據(jù)條件的匹配結(jié)果,決定上述程序模塊的加載活動是否給予通過,如果給予通過則結(jié)束本流程,如果不給予通過則執(zhí)行步驟106。本步驟中,底層內(nèi)核模式驅(qū)動程序可以利用散列結(jié)果來決定上述程序模塊的加載活動是否給予通過,具體說105a、判斷原始文件內(nèi)容的散列結(jié)果是否與過濾策略預(yù)置數(shù)據(jù)中的任一黑名單項匹配,如果是,則直接拒絕加載活動的通過,然后結(jié)束本流程;否則,表示不存在匹配的黑名單項,并執(zhí)行步驟105b;105b、判斷原始文件內(nèi)容的散列結(jié)果是否與過濾策略預(yù)置數(shù)據(jù)中的任一白名單項匹配,如果是,則直接允許加載活動的通過,然后結(jié)束本流程;否則,表示不存在匹配的黑名單項和白名單項,并執(zhí)行步驟105c;105c、判斷過濾策略是否預(yù)置為默認拒絕通過,如果是,則在不存在匹配黑名單項和白名單項的情況下,直接拒絕加載活動的通過,然后結(jié)束本流程;否則,在不存在匹配黑名單項和白名單項的情況下,允許加載活動的通過,然后結(jié)束本流程。上述步驟105a和105b的順序可以對調(diào),且也可以不需要步驟105a來判斷是否存在匹配的黑名單項。步驟106、底層內(nèi)核模式驅(qū)動程序修改上述處于加載活動中的程序模塊的入口代碼,用以終止其繼續(xù)執(zhí)行,然后結(jié)束本流程。本步驟中,底層內(nèi)核模式驅(qū)動程序可以利用加載狀態(tài)下的PE頭部信息計算該模塊的入口代碼地址,然后查找、并修改該入口代碼,例如在該入口代碼中插入RET匯編指令使其終止繼續(xù)執(zhí)行。至此,上述流程結(jié)束。另需要說明的是,上述流程中的步驟100可以僅在第一次執(zhí)行該流程時執(zhí)行一次,而當再次執(zhí)行上述流程時,均可從步驟101開始。除了由底層內(nèi)核模式驅(qū)動程序執(zhí)行上述流程之外,本實施例還可以設(shè)置一上層應(yīng)用管理程序,例如其命名為FilterManager,并可由上層應(yīng)用管理程序通過管理訪問接口向底層內(nèi)核模式驅(qū)動程序設(shè)置黑名單項和白名單項、以及過濾策略是否預(yù)置為默認拒絕通過。具體說,以Windows系統(tǒng)為例,底層內(nèi)核模式驅(qū)動程序可以在其初始化完成后,通過調(diào)用Win32API函數(shù)DeviceloControl請求上層應(yīng)用管理程序更新黑名單項和白名單項、以及過濾策略預(yù)置數(shù)據(jù)。而且,底層內(nèi)核模式驅(qū)動程序還可以向上層應(yīng)用管理程序上報過濾處理結(jié)果,即是否允許某個加載的程序模塊通過、是否拒絕某個加載的程序模塊通過。較佳地,過濾處理結(jié)果中還可以包括如下的明細處理的時間戳、程序模塊的原始文件路徑、程序模塊于內(nèi)存中的當前加載基址、程序模塊于內(nèi)存中加載后的長度和PE頭部信息、原始文件的長度和散列結(jié)果、以及,如果拒絕程序模塊加載活動的通過,還包括拒絕的原因。以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。權(quán)利要求一種監(jiān)控程序模塊加載活動的系統(tǒng)過濾方法,其特征在于,該方法請求操作系統(tǒng)在發(fā)生程序模塊加載活動時發(fā)出通知,然后執(zhí)行如下步驟步驟a、接收操作系統(tǒng)發(fā)出的程序模塊加載活動通知,然后執(zhí)行步驟b;步驟b、獲取上述程序模塊在系統(tǒng)內(nèi)存中處于加載狀態(tài)下的PE頭部信息、以及該程序模塊包含在磁盤中對應(yīng)的原始文件內(nèi)容中的PE頭部信息;步驟c、比較所獲取的加載狀態(tài)下的PE頭部信息與原始文件內(nèi)容中的PE頭部信息是否匹配,如果不匹配則執(zhí)行步驟f,如果匹配則執(zhí)行步驟d;步驟d、讀取該程序模塊的原始文件內(nèi)容、并計算原始文件內(nèi)容對應(yīng)的散列結(jié)果;步驟e、根據(jù)散列結(jié)果與預(yù)置的過濾策略數(shù)據(jù)條件的匹配結(jié)果,決定上述程序模塊的加載活動是否給予通過,如果不給予通過則執(zhí)行步驟f,如果給予通過則結(jié)束本流程;步驟f、修改上述處于加載活動中的程序模塊的入口代碼,用以終止其繼續(xù)執(zhí)行,然后結(jié)束本流程。2.如權(quán)利要求1所述的方法,其特征在于,所述請求操作系統(tǒng)在發(fā)生程序模塊加載活動時發(fā)出通知包括調(diào)用操作系統(tǒng)的內(nèi)核系統(tǒng)函數(shù),注冊程序模塊加載通知回調(diào)例程。3.如權(quán)利要求2所述的方法,其特征在于,所述的操作系統(tǒng)為Windows系統(tǒng),所述的內(nèi)^MMMSlM^]PsSetLoadlmageNotifyRoutine。4.如權(quán)利要求1至3中任一項所述的方法,其特征在于,所述的通知中進一步包括發(fā)生加載活動的程序模塊于磁盤中的原始文件路徑、該程序模塊當前加載基址和加載后的模塊長度。5.如權(quán)利要求4所述的方法,其特征在于,步驟a中所獲取的加載狀態(tài)下的PE頭部信息,由上述程序模塊的當前加載基址及偏移量計算得到;步驟a中所獲取的原始文件內(nèi)容中的PE頭部信息,由對應(yīng)程序模塊在原始文件中的內(nèi)容通過附加文件偏移計算得到。6.如權(quán)利要求1所述的方法,其特征在于,所述步驟e包括el、判斷原始文件內(nèi)容的散列結(jié)果是否與過濾策略預(yù)置數(shù)據(jù)中的任一黑名單項或任一白名單項匹配,如果匹配任一黑名單項,則直接拒絕加載活動的通過,然后結(jié)束本流程;如果匹配任一白名單項,則直接允許加載活動的通過,然后結(jié)束本流程;否則,無匹配的黑名單項和白名單項、并執(zhí)行步驟e2;e2、判斷過濾策略是否預(yù)置為默認拒絕通過,如果是,則直接拒絕加載活動的通過,然后結(jié)束本流程;否則,允許加載活動的通過,然后結(jié)束本流程。全文摘要本發(fā)明公開了一種監(jiān)控程序模塊加載活動的系統(tǒng)過濾方法。本發(fā)明請求操作系統(tǒng)在發(fā)生程序模塊加載活動時發(fā)出通知,并能夠在有程序模塊發(fā)生加載活動時接收到操作系統(tǒng)發(fā)出的加載程序模塊活動的通知,此時,只要該程序模塊對應(yīng)的原始文件在其加載過程未發(fā)生非法篡改,則讀取該程序模塊的原始文件內(nèi)容并計算散列結(jié)果,并根據(jù)散列結(jié)果與預(yù)置的過濾策略數(shù)據(jù)條件的匹配結(jié)果來決定該程序模塊加載活動是否給予通過,從而能夠提高系統(tǒng)安全保護。文檔編號G06F21/22GK101901323SQ20101023362公開日2010年12月1日申請日期2010年7月22日優(yōu)先權(quán)日2010年7月22日發(fā)明者鄺耀華申請人:湖北盛天網(wǎng)絡(luò)技術(shù)有限公司