本發(fā)明涉及計(jì)算機(jī)安全技術(shù),尤其涉及一種防止進(jìn)程被惡意結(jié)束的方法、裝置及電子設(shè)備。
背景技術(shù):
隨著Windows系統(tǒng)內(nèi)核層技術(shù)細(xì)節(jié)的逐漸公開,越來(lái)越多的木馬病毒等惡意應(yīng)用程序開始使用內(nèi)核層驅(qū)動(dòng)程序來(lái)保護(hù)自身的進(jìn)程,受內(nèi)核層驅(qū)動(dòng)程序保護(hù)的惡意應(yīng)用程序的進(jìn)程,可以結(jié)束(殺死)Windows系統(tǒng)中的安全防護(hù)進(jìn)程,例如,殺毒軟件或防火墻軟件的進(jìn)程,從而使得惡意應(yīng)用程序的進(jìn)程可以根據(jù)惡意應(yīng)用程序提供者的意圖,對(duì)用戶的進(jìn)程或系統(tǒng)進(jìn)程進(jìn)行惡意攻擊,可能造成計(jì)算機(jī)運(yùn)行不穩(wěn)定,甚至可能給用戶帶來(lái)非常大的經(jīng)濟(jì)損失,例如,隱私信息的泄露以及物質(zhì)財(cái)產(chǎn)的被竊取。其中,進(jìn)程(Process)是計(jì)算機(jī)中的應(yīng)用程序關(guān)于數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是Windows系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是Windows系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。在早期面向進(jìn)程設(shè)計(jì)的計(jì)算機(jī)結(jié)構(gòu)中,進(jìn)程是應(yīng)用程序的基本執(zhí)行實(shí)體;在當(dāng)代面向線程設(shè)計(jì)的計(jì)算機(jī)結(jié)構(gòu)中,進(jìn)程是線程的容器。也就是說(shuō),應(yīng)用程序是指令、數(shù)據(jù)及其組織形式的描述,進(jìn)程是應(yīng)用程序的實(shí)體。
進(jìn)程防殺是保護(hù)用戶的進(jìn)程、Windows系統(tǒng)中重要的系統(tǒng)進(jìn)程以及安全防護(hù)進(jìn)程不被非法結(jié)束的一種方法,目前,常用的進(jìn)程防殺是利用系統(tǒng)服務(wù)描述符表鉤子(SSDT HOOK,System Services Descriptor Table HOOK)技術(shù)。其中,SSDT是一將ring3,即應(yīng)用層的Win32 API和ring0,即內(nèi)核層的內(nèi)核API聯(lián)系起來(lái)的描述符表,SSDT并不僅僅只包含一個(gè)龐大的函數(shù)地址索引表,還包含著一些其它有用的信息,例如,地址索引的基地址、服務(wù)函數(shù)個(gè)數(shù)等。通過(guò)修改SSDT的函數(shù)地址,可以對(duì)常用Windows函數(shù)及API進(jìn)行鉤子處理,從而實(shí)現(xiàn)對(duì)進(jìn)程的過(guò)濾、監(jiān)控。例如,基于主機(jī)的入侵防御系統(tǒng)(HIPS,Host-based Intrusion Prevention System)軟件、防毒軟件軟件、系統(tǒng)監(jiān)控軟件、注冊(cè)表監(jiān)控軟件等軟件利用SSDT HOOK技術(shù)防止安全防護(hù)進(jìn)程被惡意應(yīng)用程序的進(jìn)程結(jié)束,從而 有效防控惡意進(jìn)程對(duì)用戶的進(jìn)程或系統(tǒng)進(jìn)程的惡意攻擊。
但在Windows系統(tǒng)的內(nèi)核層中,還提供了幾個(gè)常用的結(jié)束進(jìn)程的函數(shù),例如,NtTerminateProcess函數(shù)、NtTerminateJobObject函數(shù)以及NtAssignProcessToJobObject函數(shù),惡意應(yīng)用程序可以通過(guò)直接調(diào)用這三個(gè)函數(shù)來(lái)結(jié)束目標(biāo)進(jìn)程。由于這三個(gè)函數(shù)處于內(nèi)核層,目前的SSDT HOOK技術(shù)不能有效防止惡意應(yīng)用程序通過(guò)調(diào)用Windows系統(tǒng)的內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的方式結(jié)束進(jìn)程,從而導(dǎo)致安全防護(hù)進(jìn)程,例如金山毒霸相關(guān)的安全防護(hù)進(jìn)程被惡意結(jié)束,使得金山毒霸的防護(hù)功能失效,惡意應(yīng)用程序可以進(jìn)行惡意攻擊,導(dǎo)致Windows系統(tǒng)的安全防護(hù)效率較低,安全性不高。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例提供一種防止進(jìn)程被惡意結(jié)束的方法、裝置及電子設(shè)備,提升系統(tǒng)的安全防護(hù)效率和安全性。
為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
第一方面,本發(fā)明實(shí)施例提供一種防止進(jìn)程被惡意結(jié)束的方法,包括:
通過(guò)反匯編內(nèi)核層中結(jié)束進(jìn)程的函數(shù),確定所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址;
在所述內(nèi)核層中注入預(yù)先設(shè)置的鉤子函數(shù),在所述鉤子函數(shù)監(jiān)測(cè)到所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)發(fā)出進(jìn)程結(jié)束請(qǐng)求時(shí),鉤住所述進(jìn)程結(jié)束請(qǐng)求調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的所述內(nèi)存地址;
利用鉤住的所述內(nèi)存地址,截獲所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)用于結(jié)束進(jìn)程的進(jìn)程句柄的內(nèi)核對(duì)象,依據(jù)截獲的所述內(nèi)核對(duì)象,獲取進(jìn)程路徑信息;
在獲取的所述進(jìn)程路徑信息對(duì)應(yīng)的進(jìn)程為預(yù)先設(shè)置的安全防護(hù)進(jìn)程時(shí),拒絕所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的進(jìn)程結(jié)束請(qǐng)求。
優(yōu)選地,所述通過(guò)反匯編內(nèi)核層中結(jié)束進(jìn)程的函數(shù),確定所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址包括:
反匯編內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的內(nèi)存地址;
遍歷反匯編得到的內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的內(nèi)存地址,提取調(diào)用所述獲 取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)的匯編指令對(duì)應(yīng)的內(nèi)存地址,得到所述調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址。
優(yōu)選地,所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)包括:NtTerminateProcess函數(shù)、NtTerminateJobObject函數(shù)和NtAssignProcessToJobObject函數(shù)。
優(yōu)選地,所述提取調(diào)用所述獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)的匯編指令對(duì)應(yīng)的內(nèi)存地址包括:
以反匯編獲取的NtTerminateProcess函數(shù)的內(nèi)存地址作為搜索源進(jìn)行查找;
找到預(yù)定位置的匯編指令對(duì)應(yīng)的內(nèi)存地址。
優(yōu)選地,所述匯編指令為進(jìn)程句柄的匯編指令,具體值為0xFF,0x75,x0C,0xE8。
優(yōu)選地,所述獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)為ObReferenceObjectByHandle函數(shù)。
第二方面,本發(fā)明實(shí)施例提供一種防止進(jìn)程被惡意結(jié)束的裝置,包括:反匯編模塊、鉤子模塊、截獲模塊以及進(jìn)程處理模塊,其中,
反匯編模塊,用于通過(guò)反匯編內(nèi)核層中結(jié)束進(jìn)程的函數(shù),確定所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址;
鉤子模塊,用于在所述內(nèi)核層中注入預(yù)先設(shè)置的鉤子函數(shù),在所述鉤子函數(shù)監(jiān)測(cè)到所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)發(fā)出進(jìn)程結(jié)束請(qǐng)求時(shí),鉤住所述進(jìn)程結(jié)束請(qǐng)求調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的所述內(nèi)存地址;
截獲模塊,用于利用鉤住的所述內(nèi)存地址,截獲所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)用于結(jié)束進(jìn)程的進(jìn)程句柄的內(nèi)核對(duì)象,依據(jù)截獲的所述內(nèi)核對(duì)象,獲取進(jìn)程路徑信息;
進(jìn)程處理模塊,用于在獲取的所述進(jìn)程路徑信息對(duì)應(yīng)的進(jìn)程為預(yù)先設(shè)置的安全防護(hù)進(jìn)程時(shí),拒絕所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的進(jìn)程結(jié)束請(qǐng)求。
優(yōu)選地,所述反匯編模塊包括:反匯編單元、遍歷單元、提取單元以及獲取單元,其中,
反匯編單元,用于反匯編內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的內(nèi)存地址;
遍歷單元,用于遍歷反匯編得到的內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的內(nèi)存地址;
提取單元,用于提取調(diào)用所述獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)的匯編指令對(duì)應(yīng)的內(nèi)存地址;
獲取單元,用于將提取單元提取的內(nèi)存地址作為所述調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址。
優(yōu)選地,所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)包括:NtTerminateProcess函數(shù)、NtTerminateJobObject函數(shù)和NtAssignProcessToJobObject函數(shù)。
優(yōu)選地,所述提取單元包括:搜索子單元以及提取子單元,其中,
搜索子單元,用于以反匯編獲取的NtTerminateProcess函數(shù)的內(nèi)存地址作為搜索源進(jìn)行查找;
提取子單元,用于找到預(yù)定位置的匯編指令對(duì)應(yīng)的內(nèi)存地址作為所述調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址。
優(yōu)選地,所述匯編指令為進(jìn)程句柄的匯編指令,具體值為0xFF,0x75,x0C,0xE8。
優(yōu)選地,所述獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)為ObReferenceObjectByHandle函數(shù)。
第三方面,本發(fā)明實(shí)施例提供一種電子設(shè)備,所述電子設(shè)備包括:殼體、處理器、存儲(chǔ)器、電路板和電源電路,其中,電路板安置在殼體圍成的空間內(nèi)部,處理器和存儲(chǔ)器設(shè)置在電路板上;電源電路,用于為上述電子設(shè)備的各個(gè)電路或器件供電;存儲(chǔ)器用于存儲(chǔ)可執(zhí)行程序代碼;處理器通過(guò)讀取存儲(chǔ)器中存儲(chǔ)的可執(zhí)行程序代碼來(lái)運(yùn)行與可執(zhí)行程序代碼對(duì)應(yīng)的程序,用于執(zhí)行前述任一所述的防止進(jìn)程被惡意結(jié)束的方法。
本發(fā)明實(shí)施例提供的防止進(jìn)程被惡意結(jié)束的方法、裝置及電子設(shè)備,通過(guò)通過(guò)反匯編內(nèi)核層中結(jié)束進(jìn)程的函數(shù),確定內(nèi)核層中結(jié)束進(jìn)程的函數(shù)調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址;注入預(yù)先設(shè)置的鉤子函數(shù),監(jiān)測(cè)到結(jié)束進(jìn)程的函數(shù)發(fā)出進(jìn)程結(jié)束請(qǐng)求時(shí),鉤住進(jìn)程結(jié)束請(qǐng)求調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的所述內(nèi)存地址;利用鉤住的內(nèi)存地址,截獲結(jié)束進(jìn)程的函數(shù)的進(jìn)程句柄的內(nèi)核對(duì)象,依據(jù)截獲的所述內(nèi)核對(duì)象,獲取進(jìn)程路徑信息;在獲取的所述進(jìn)程路徑信息對(duì)應(yīng)的進(jìn)程為預(yù)先設(shè)置的安全防護(hù)進(jìn)程時(shí),拒絕所述內(nèi)核 層中結(jié)束進(jìn)程的函數(shù)的進(jìn)程結(jié)束請(qǐng)求。這樣,當(dāng)惡意應(yīng)用程序調(diào)用結(jié)束進(jìn)程的函數(shù)來(lái)獲取進(jìn)程句柄的進(jìn)程內(nèi)核對(duì)象以結(jié)束進(jìn)程內(nèi)核對(duì)象對(duì)應(yīng)的進(jìn)程時(shí),就會(huì)先調(diào)用注入在內(nèi)核層中的鉤子函數(shù),由鉤子函數(shù)依據(jù)進(jìn)程句柄的進(jìn)程內(nèi)核對(duì)象進(jìn)行處理,實(shí)現(xiàn)了防止相關(guān)安全防護(hù)進(jìn)程被惡意應(yīng)用程序結(jié)束的目的,使得安全防護(hù)進(jìn)程能夠有效防護(hù)惡意應(yīng)用程序的攻擊,有效提升Windows系統(tǒng)的安全防護(hù)效率以及安全性。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
圖1為本發(fā)明實(shí)施例防止進(jìn)程被惡意結(jié)束的方法流程示意圖;
圖2為本發(fā)明實(shí)施例防止進(jìn)程被惡意結(jié)束的裝置結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例的反匯編模塊結(jié)構(gòu)示意圖;
圖4為本發(fā)明電子設(shè)備一個(gè)實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)描述。
應(yīng)當(dāng)明確,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明實(shí)施例防止進(jìn)程被惡意結(jié)束的方法流程示意圖。參見(jiàn)圖1,該方法包括:
步驟101,通過(guò)反匯編內(nèi)核層中結(jié)束進(jìn)程的函數(shù),確定所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址;
本步驟中,作為一可選實(shí)施例,內(nèi)核層中結(jié)束進(jìn)程的函數(shù)包括:NtTerminateProcess函數(shù)、NtTerminateJobObject函數(shù)和NtAssignProcessToJobObject函數(shù)。
本發(fā)明實(shí)施例中,作為一可選實(shí)施例,獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)為 ObReferenceObjectByHandle函數(shù)。
反匯編(Disassembly)是將目標(biāo)代碼轉(zhuǎn)為匯編語(yǔ)言代碼的過(guò)程,即將機(jī)器語(yǔ)言代碼轉(zhuǎn)換為匯編語(yǔ)言代碼、低級(jí)語(yǔ)言代碼轉(zhuǎn)為高級(jí)語(yǔ)言代碼的過(guò)程,經(jīng)常應(yīng)用于軟件破解(例如,找到軟件是如何注冊(cè)的,從而解出軟件的注冊(cè)碼或者編寫注冊(cè)機(jī))、外掛技術(shù)、病毒分析、逆向工程、軟件漢化等領(lǐng)域。
本發(fā)明實(shí)施例中,通過(guò)分析NtTerminateProcess函數(shù)、NtTerminateJobObject函數(shù)和NtAssignProcessToJobObject函數(shù),雖然三個(gè)函數(shù)的參數(shù)以及處理的方式各不相同,但該三個(gè)結(jié)束進(jìn)程的函數(shù)都具有一個(gè)共同的特點(diǎn),即都會(huì)調(diào)用ObReferenceObjectByHandle函數(shù)來(lái)獲取需要結(jié)束的目標(biāo)進(jìn)程的內(nèi)核對(duì)象。因而,通過(guò)反匯編NtTerminateProcess函數(shù)、NtTerminateJobObject函數(shù)和NtAssignProcessToJobObject函數(shù),獲取三個(gè)函數(shù)調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù),即NtAssignProcessToJobObject函數(shù)時(shí)的內(nèi)存地址,從而在后續(xù)應(yīng)用中,依據(jù)獲取的三個(gè)函數(shù)調(diào)用的內(nèi)存地址,確定為調(diào)用ObReferenceObjectByHandle函數(shù)時(shí),對(duì)調(diào)用的ObReferenceObjectByHandle函數(shù)進(jìn)行攔截并處理,使之按照預(yù)先設(shè)置的策略執(zhí)行獲取需要結(jié)束的目標(biāo)進(jìn)程的內(nèi)核對(duì)象的流程,從而可以有效防止安全防護(hù)進(jìn)程被三個(gè)函數(shù)惡意結(jié)束。
作為一可選實(shí)施例,通過(guò)反匯編內(nèi)核層中結(jié)束進(jìn)程的函數(shù),確定所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址包括:
A01,反匯編內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的內(nèi)存地址;
A02,遍歷反匯編得到的內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的內(nèi)存地址,提取調(diào)用所述獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)的匯編指令對(duì)應(yīng)的內(nèi)存地址,得到所述調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址。
本步驟中,以NtTerminateProcess函數(shù)為例,NtTerminateProcess函數(shù)中有一參數(shù)是用于結(jié)束進(jìn)程的進(jìn)程句柄,即hProcess,惡意應(yīng)用程序通過(guò)NtTerminateProcess函數(shù)結(jié)束進(jìn)程時(shí),需要調(diào)用ObReferenceObjectByHandle函數(shù)來(lái)獲取進(jìn)程句柄(hProcess)的進(jìn)程內(nèi)核對(duì)象,由于進(jìn)程句柄在NtTerminateProcess函數(shù)的參數(shù)列表中的位置是固定的,因而,該進(jìn)程句柄的匯編指令也是固定的,即為0xFF,0x75,x0C,0xE8,也就是反匯編NtTerminateProcess函數(shù)的內(nèi)存地址, 找到預(yù)定位置(0xFF,0x75,x0C,0xE8)的匯編指令,再找到該指令0xFF,0x75,x0C,0xE8對(duì)應(yīng)的內(nèi)存地址即可,也就是說(shuō),如果結(jié)束進(jìn)程的函數(shù)調(diào)用的內(nèi)存地址中包含指令0xFF,0x75,x0C,0xE8對(duì)應(yīng)的內(nèi)存地址時(shí),表明NtTerminateProcess函數(shù)開始調(diào)用ObReferenceObjectByHandle函數(shù)來(lái)獲取進(jìn)程句柄的進(jìn)程內(nèi)核對(duì)象,以結(jié)束進(jìn)程內(nèi)核對(duì)象對(duì)應(yīng)的進(jìn)程。因而,本發(fā)明實(shí)施例中,作為一可選實(shí)施例在,提取調(diào)用所述獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)的匯編指令對(duì)應(yīng)的內(nèi)存地址包括:
以反匯編獲取的NtTerminateProcess函數(shù)的內(nèi)存地址作為搜索源進(jìn)行查找;
找到匯編指令0xFF,0x75,x0C,0xE8對(duì)應(yīng)的內(nèi)存地址。
本發(fā)明實(shí)施例中,可以從反匯編獲取的NtTerminateProcess函數(shù)的內(nèi)存地址作為開始地址,進(jìn)行搜索,找到匯編指令0xFF,0x75,x0C,0xE8對(duì)應(yīng)的內(nèi)存地址,得到NtTerminateProcess函數(shù)調(diào)用ObReferenceObjectByHandle函數(shù)來(lái)獲取用于結(jié)束進(jìn)程的hProcess的進(jìn)程內(nèi)核對(duì)象時(shí)的匯編指令對(duì)應(yīng)的內(nèi)存地址,從而獲取在NtTerminateProcess函數(shù)中調(diào)用ObReferenceObjectByHandle函數(shù)來(lái)獲取hProcess的進(jìn)程內(nèi)核對(duì)象時(shí)的內(nèi)存地址。
本發(fā)明實(shí)施例中,關(guān)于得到NtTerminateJobObject函數(shù)和NtAssignProcessToJobObject函數(shù)調(diào)用ObReferenceObjectByHandle函數(shù)來(lái)獲取進(jìn)程內(nèi)核對(duì)象時(shí)的匯編指令對(duì)應(yīng)的內(nèi)存地址的流程,與得到NtTerminateProcess函數(shù)調(diào)用ObReferenceObjectByHandle函數(shù)來(lái)獲取進(jìn)程內(nèi)核對(duì)象時(shí)的匯編指令對(duì)應(yīng)的內(nèi)存地址相類似,在此略去詳述。
步驟102,在所述內(nèi)核層中注入預(yù)先設(shè)置的鉤子函數(shù),在所述鉤子函數(shù)監(jiān)測(cè)到所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)發(fā)出進(jìn)程結(jié)束請(qǐng)求時(shí),鉤住所述進(jìn)程結(jié)束請(qǐng)求調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的所述內(nèi)存地址;
本步驟中,注入的鉤子(Hook)函數(shù)用于監(jiān)聽所述結(jié)束進(jìn)程的函數(shù)的調(diào)用相關(guān)操作,并在調(diào)用的相關(guān)操作與預(yù)先設(shè)置的操作相匹配時(shí),攔截該調(diào)用的相關(guān)操作,轉(zhuǎn)由注入的鉤子函數(shù)對(duì)該調(diào)用的相關(guān)操作進(jìn)行處理,并返回相應(yīng)處理結(jié)果。作為一可選實(shí)施例,可在金山毒霸防御驅(qū)動(dòng)加載時(shí)注入,其中,
Hook函數(shù)是Windows系統(tǒng)中消息處理機(jī)制的一段程序代碼段,應(yīng)用程序可 以通過(guò)該程序代碼段,設(shè)置子程序代碼段以監(jiān)視指定窗口的某種消息(操作),而且所監(jiān)視的指定窗口可以是其他進(jìn)程所創(chuàng)建的。Hook函數(shù)具有的鉤子機(jī)制通過(guò)Windows系統(tǒng)調(diào)用,將具有優(yōu)先控制權(quán)的Hook函數(shù)掛入Windows系統(tǒng),允許Hook函數(shù)截獲Window系統(tǒng)發(fā)出的消息或特定事件,每當(dāng)Windows系統(tǒng)中消息或特定事件發(fā)出,在沒(méi)有到達(dá)目的窗口前,Hook函數(shù)能夠先捕獲該消息或特定事件,從而可以加工處理(改變)該消息或特定事件,也可以不作處理而繼續(xù)傳遞,還可以強(qiáng)制結(jié)束消息或特定事件的傳遞。
本發(fā)明實(shí)施例中,Hook函數(shù)監(jiān)測(cè)到所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)發(fā)出進(jìn)程結(jié)束請(qǐng)求,調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)以獲取hProcess的進(jìn)程內(nèi)核對(duì)象時(shí),通過(guò)鉤住結(jié)束進(jìn)程的函數(shù)調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址,使之在所監(jiān)視的指定窗口中相應(yīng)處理函數(shù)處理該消息之前處理該消息,即接替所監(jiān)視的指定窗口中相應(yīng)處理函數(shù)(例如,NtTerminateProcess函數(shù))調(diào)用內(nèi)存地址后的所有操作。
本發(fā)明實(shí)施例中,通過(guò)獲取NtTerminateProcess函數(shù)、NtTerminateJobObject函數(shù)或NtAssignProcessToJobObject函數(shù)調(diào)用ObReferenceObjectByHandle函數(shù)時(shí)的內(nèi)存地址并Hook該內(nèi)存地址,可以截獲用于結(jié)束進(jìn)程的進(jìn)程句柄的內(nèi)核對(duì)象。例如,通過(guò)獲取NtTerminateProcess函數(shù)調(diào)用ObReferenceObjectByHandle函數(shù)時(shí)的內(nèi)存地址,然后Hook該獲取的內(nèi)存地址,可以實(shí)現(xiàn)截獲該NtTerminateProcess函數(shù)的內(nèi)核對(duì)象。
步驟103,利用鉤住的所述內(nèi)存地址,截獲所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)用于結(jié)束進(jìn)程的進(jìn)程句柄的內(nèi)核對(duì)象,依據(jù)截獲的所述內(nèi)核對(duì)象,獲取進(jìn)程路徑信息;
本步驟中,依據(jù)內(nèi)核對(duì)象獲取進(jìn)程路徑信息為公知技術(shù),在此略去詳述。
步驟104,在獲取的所述進(jìn)程路徑信息對(duì)應(yīng)的進(jìn)程為預(yù)先設(shè)置的安全防護(hù)進(jìn)程時(shí),拒絕所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的進(jìn)程結(jié)束請(qǐng)求。
本步驟中,作為一可選實(shí)施例,安全防護(hù)進(jìn)程可以是安全防護(hù)應(yīng)用軟件對(duì)應(yīng)的進(jìn)程,安全防護(hù)應(yīng)用軟件可以是金山毒霸等。例如,如果惡意應(yīng)用程序通過(guò)上述三個(gè)函數(shù)中的任意一個(gè)調(diào)用ObReferenceObjectByHandle函數(shù)結(jié)束的是金 山毒霸相關(guān)的安全防護(hù)進(jìn)程,這樣,將使得Windows系統(tǒng)中的金山毒霸的安全防護(hù)功能失效,不能進(jìn)行有效的安全防護(hù),從而使得惡意應(yīng)用程序危害Windows系統(tǒng),導(dǎo)致Windows系統(tǒng)處于危險(xiǎn)之中。
本發(fā)明實(shí)施例中,通過(guò)獲取進(jìn)程句柄的內(nèi)核對(duì)象對(duì)應(yīng)的進(jìn)程路徑信息,再通過(guò)進(jìn)程路徑信息獲取相應(yīng)的進(jìn)程,然后判斷進(jìn)程路徑信息對(duì)應(yīng)的進(jìn)程是否是金山毒霸相關(guān)的安全防護(hù)進(jìn)程,如果是,則返回拒絕,使得惡意應(yīng)用程序通過(guò)Windows系統(tǒng)內(nèi)核層中上述三個(gè)函數(shù)結(jié)束進(jìn)程的操作失敗,這樣,安全防護(hù)軟件的安全防護(hù)進(jìn)程就不會(huì)被結(jié)束,安全防護(hù)軟件的整個(gè)防御處理邏輯生效,從而保護(hù)Windows系統(tǒng)不被惡意應(yīng)用程序破壞,給用戶創(chuàng)建和維護(hù)一個(gè)安全的Windows系統(tǒng)環(huán)境。
本發(fā)明實(shí)施例中,在獲取的所述進(jìn)程路徑信息對(duì)應(yīng)的進(jìn)程不為預(yù)先設(shè)置的安全防護(hù)進(jìn)程時(shí),允許所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的進(jìn)程結(jié)束請(qǐng)求,結(jié)束所述進(jìn)程路徑信息對(duì)應(yīng)的進(jìn)程。
由上述可見(jiàn),本發(fā)明實(shí)施例防止進(jìn)程被惡意結(jié)束的方法,反匯編內(nèi)核層中結(jié)束進(jìn)程的函數(shù),例如NtTerminateProcess函數(shù)、NtTerminateJobObj ect函數(shù)和NtAssignProcessToJobObject函數(shù)的內(nèi)存地址,通過(guò)相關(guān)的匯編指令特征,從三個(gè)函數(shù)的反匯編內(nèi)存地址中,獲取三個(gè)函數(shù)調(diào)用ObReferenceObjectByHandle函數(shù)時(shí)的內(nèi)存地址,從而對(duì)調(diào)用ObReferenceObjectByHandle函數(shù)時(shí)的內(nèi)存地址進(jìn)行Hook,當(dāng)惡意應(yīng)用程序調(diào)用NtTerminateProcess函數(shù),NtTerminateProcess函數(shù)調(diào)用ObReferenceObjectByHandle函數(shù)來(lái)獲取進(jìn)程句柄的進(jìn)程內(nèi)核對(duì)象以結(jié)束進(jìn)程內(nèi)核對(duì)象對(duì)應(yīng)的進(jìn)程時(shí),就會(huì)先調(diào)用注入在內(nèi)核層中的金山毒霸防御驅(qū)動(dòng)的Hook函數(shù),因而,可以通過(guò)Hook函數(shù)獲取進(jìn)程句柄的進(jìn)程內(nèi)核對(duì)象,依據(jù)進(jìn)程句柄的進(jìn)程內(nèi)核對(duì)象得到進(jìn)程路徑信息,然后判斷該進(jìn)程路徑信息對(duì)應(yīng)的進(jìn)程是否是需要保護(hù)的安全防護(hù)進(jìn)程,如果是則返回拒絕,實(shí)現(xiàn)了防止相關(guān)安全防護(hù)進(jìn)程被惡意應(yīng)用程序結(jié)束的目的,作為SSDT HOOK安全防護(hù)技術(shù)的有益補(bǔ)充,從而保障安全防護(hù)進(jìn)程不被惡意應(yīng)用程序結(jié)束,使得安全防護(hù)進(jìn)程能夠有效防護(hù)惡意應(yīng)用程序的攻擊,提升Windows系統(tǒng)的安全防護(hù)效率以及安全性。
圖2為本發(fā)明實(shí)施例防止進(jìn)程被惡意結(jié)束的裝置結(jié)構(gòu)示意圖。參見(jiàn)圖2,該裝置包括:反匯編模塊201、鉤子模塊202、截獲模塊203以及進(jìn)程處理模塊204,其中,
反匯編模塊201,用于通過(guò)反匯編內(nèi)核層中結(jié)束進(jìn)程的函數(shù),確定所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址;
本發(fā)明實(shí)施例中,內(nèi)核層中結(jié)束進(jìn)程的函數(shù)包括:NtTerminateProcess函數(shù)、NtTerminateJobObject函數(shù)和NtAssignProcessToJobObject函數(shù)。
所述獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)為ObReferenceObjectByHandle函數(shù)。
本發(fā)明實(shí)施例中,結(jié)束進(jìn)程的函數(shù)中有一參數(shù)是用于結(jié)束進(jìn)程的進(jìn)程句柄,惡意應(yīng)用程序通過(guò)結(jié)束進(jìn)程的函數(shù)結(jié)束進(jìn)程時(shí),需要調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)來(lái)獲取進(jìn)程句柄的進(jìn)程內(nèi)核對(duì)象以結(jié)束進(jìn)程,而進(jìn)程句柄在結(jié)束進(jìn)程的函數(shù)的參數(shù)列表中的位置是固定的,因而,該進(jìn)程句柄的匯編指令也是固定的,通過(guò)獲取匯編指令對(duì)應(yīng)的內(nèi)存地址,可以實(shí)現(xiàn)對(duì)結(jié)束進(jìn)程的函數(shù)調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)的監(jiān)測(cè)。
鉤子模塊202,用于在所述內(nèi)核層中注入預(yù)先設(shè)置的鉤子函數(shù),在所述鉤子函數(shù)監(jiān)測(cè)到所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)發(fā)出進(jìn)程結(jié)束請(qǐng)求時(shí),鉤住所述進(jìn)程結(jié)束請(qǐng)求調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的所述內(nèi)存地址;
截獲模塊203,用于利用鉤住的所述內(nèi)存地址,截獲所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)用于結(jié)束進(jìn)程的進(jìn)程句柄的內(nèi)核對(duì)象,依據(jù)截獲的所述內(nèi)核對(duì)象,獲取進(jìn)程路徑信息;
進(jìn)程處理模塊204,用于在獲取的所述進(jìn)程路徑信息對(duì)應(yīng)的進(jìn)程為預(yù)先設(shè)置的安全防護(hù)進(jìn)程時(shí),拒絕所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的進(jìn)程結(jié)束請(qǐng)求。
本發(fā)明實(shí)施例中,在獲取的所述進(jìn)程路徑信息對(duì)應(yīng)的進(jìn)程不為預(yù)先設(shè)置的安全防護(hù)進(jìn)程時(shí),允許所述內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的進(jìn)程結(jié)束請(qǐng)求,結(jié)束所述進(jìn)程路徑信息對(duì)應(yīng)的進(jìn)程。
作為一可選實(shí)施例,圖3為本發(fā)明實(shí)施例的反匯編模塊結(jié)構(gòu)示意圖。參見(jiàn)圖3,該反匯編模塊包括:反匯編單元301、遍歷單元302、提取單元303以及獲取單元304,其中,
反匯編單元301,用于反匯編內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的內(nèi)存地址;
遍歷單元302,用于遍歷反匯編得到的內(nèi)核層中結(jié)束進(jìn)程的函數(shù)的內(nèi)存地址;
提取單元303,用于提取調(diào)用所述獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)的匯編指令對(duì)應(yīng)的內(nèi)存地址;
獲取單元304,用于將提取單元提取的內(nèi)存地址作為所述調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址。
本發(fā)明實(shí)施例中,作為一可選實(shí)施例,提取單元303包括:搜索子單元以及提取子單元(圖中未示出),其中,
搜索子單元,用于以反匯編獲取的NtTerminateProcess函數(shù)的內(nèi)存地址作為搜索源進(jìn)行查找;
提取子單元,用于找到預(yù)定位置的匯編指令對(duì)應(yīng)的內(nèi)存地址作為所述調(diào)用獲取句柄對(duì)應(yīng)內(nèi)核對(duì)象的函數(shù)時(shí)的內(nèi)存地址。
本發(fā)明實(shí)施例中,作為一可選實(shí)施例,所述匯編指令為進(jìn)程句柄的匯編指令,具體值為0xFF,0x75,x0C,0xE8。
本發(fā)明實(shí)施例還提供一種電子設(shè)備,所述電子設(shè)備包含前述任一實(shí)施例所述的裝置。
圖4為本發(fā)明電子設(shè)備一個(gè)實(shí)施例的結(jié)構(gòu)示意圖,可以實(shí)現(xiàn)本發(fā)明圖1-3所示實(shí)施例的流程,如圖4所示,上述電子設(shè)備可以包括:殼體41、處理器42、存儲(chǔ)器43、電路板44和電源電路45,其中,電路板44安置在殼體41圍成的空間內(nèi)部,處理器42和存儲(chǔ)器43設(shè)置在電路板44上;電源電路45,用于為上述電子設(shè)備的各個(gè)電路或器件供電;存儲(chǔ)器43用于存儲(chǔ)可執(zhí)行程序代碼;處理器42通過(guò)讀取存儲(chǔ)器43中存儲(chǔ)的可執(zhí)行程序代碼來(lái)運(yùn)行與可執(zhí)行程序代碼對(duì)應(yīng)的程序,用于執(zhí)行前述任一實(shí)施例所述的防止進(jìn)程被惡意結(jié)束的方法。
處理器42對(duì)上述步驟的具體執(zhí)行過(guò)程以及處理器42通過(guò)運(yùn)行可執(zhí)行程序代碼來(lái)進(jìn)一步執(zhí)行的步驟,可以參見(jiàn)本發(fā)明圖1-3所示實(shí)施例的描述,在此不再贅述。
該電子設(shè)備以多種形式存在,包括但不限于:
(1)移動(dòng)通信設(shè)備:這類設(shè)備的特點(diǎn)是具備移動(dòng)通信功能,并且以提供話音、數(shù)據(jù)通信為主要目標(biāo)。這類終端包括:智能手機(jī)(例如iPhone)、多媒體手機(jī)、功能性手機(jī),以及低端手機(jī)等。
(2)超移動(dòng)個(gè)人計(jì)算機(jī)設(shè)備:這類設(shè)備屬于個(gè)人計(jì)算機(jī)的范疇,有計(jì)算和處理功能,一般也具備移動(dòng)上網(wǎng)特性。這類終端包括:PDA、MID和UMPC設(shè)備等,例如iPad。
(3)便攜式娛樂(lè)設(shè)備:這類設(shè)備可以顯示和播放多媒體內(nèi)容。該類設(shè)備包括:音頻、視頻播放器(例如iPod),掌上游戲機(jī),電子書,以及智能玩具和便攜式車載導(dǎo)航設(shè)備。
(4)服務(wù)器:提供計(jì)算服務(wù)的設(shè)備,服務(wù)器的構(gòu)成包括處理器、硬盤、內(nèi)存、系統(tǒng)總線等,服務(wù)器和通用的計(jì)算機(jī)架構(gòu)類似,但是由于需要提供高可靠的服務(wù),因此在處理能力、穩(wěn)定性、可靠性、安全性、可擴(kuò)展性、可管理性等方面要求較高。
(5)其他具有數(shù)據(jù)交互功能的電子設(shè)備。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-Only Memory,ROM)或隨機(jī)存儲(chǔ)記憶體(RandomAccess Memory,RAM)等。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。