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