專利名稱:Windows內(nèi)核改變搜索方法
技術(shù)領(lǐng)域:
本發(fā)明涉及檢測(cè)Windows內(nèi)核的改變的方法,并更具體地涉及使用系統(tǒng)模塊信息來(lái)檢測(cè)Windows內(nèi)核和系統(tǒng)的驅(qū)動(dòng)器的改變的方法,系統(tǒng)模塊信息是Windows內(nèi)核的不可改變的信息。
背景技術(shù):
一般來(lái)說(shuō),存儲(chǔ)器中可執(zhí)行圖像代碼的許多改變以鉤掛的形式出現(xiàn)。對(duì)于ー些黑客工具的情況,通過(guò)隨機(jī)地改變特定代碼而作出改變,以生成與可執(zhí)行圖像的原始操作不同的操作。這樣的改變修改了將實(shí)際由可執(zhí)行圖像執(zhí)行的操作,由此引起許多安全問(wèn)題。例如,通過(guò)鉤掛特定可執(zhí)行圖像,惡意程序形成使惡意程序保持隱藏而不被檢測(cè)的Rootkit, 由此生成可執(zhí)行圖像的持續(xù)錯(cuò)誤操作。在Windows系統(tǒng)中代表內(nèi)核改變的改變包括驅(qū)動(dòng)器改變和系統(tǒng)改變。上述惡意程序不僅作出改變,而且安全程序也使用內(nèi)核改變來(lái)執(zhí)行各種安全功能。例如,在韓國(guó)提供的鍵盤(pán)安全程序包括各種產(chǎn)品,諸如INCAhternet的 nProtect KeyCrypt、SoftCamp 的 Secure Keystroke、AhnLab 的 AhnLab online Security MyKeyDefense^ Kings Information & Network 的 K—Defense ·。 i^iS ^まを禾呈 的;^ 多數(shù)通過(guò)改變內(nèi)核來(lái)執(zhí)行鍵盤(pán)安全功能。即,鍵盤(pán)安全程序改變Windows內(nèi)核、鉤掛鍵盤(pán)輸入數(shù)據(jù),并使鍵盤(pán)輸入數(shù)據(jù)遵循由它們?cè)O(shè)置的過(guò)程,而不遵循正常的Windows處理過(guò)程。在這樣做吋,即使鍵盤(pán)記錄器已經(jīng)安裝在客戶端計(jì)算機(jī)上吋,也防止鍵盤(pán)輸入數(shù)據(jù)遵循正常Windows處理過(guò)程,使得鍵盤(pán)記錄器不能讀取或截獲鍵盤(pán)輸入數(shù)據(jù)。當(dāng)今,由于多個(gè)網(wǎng)站通過(guò)因特網(wǎng)向用戶客戶端提供各種鍵盤(pán)安全程序,因此至少兩個(gè)或更多個(gè)鍵盤(pán)安全程序已經(jīng)安裝在多數(shù)客戶端系統(tǒng)中。當(dāng)多個(gè)鍵盤(pán)安全程序已經(jīng)安裝在單個(gè)客戶端系統(tǒng)中吋,所有鍵盤(pán)安全程序改變Windows內(nèi)核,并因此在鍵盤(pán)安全程序之間出現(xiàn)沖突,使得它們不再保證操作系統(tǒng)(OS)的穩(wěn)定性。事實(shí)上,鍵盤(pán)安全程序可以僅當(dāng)鍵盤(pán)記錄器已經(jīng)安裝在客戶端系統(tǒng)上時(shí)運(yùn)行。即, 如果鍵盤(pán)安全程序僅當(dāng)鍵盤(pán)記錄器已經(jīng)改變鍵盤(pán)處理相關(guān)內(nèi)核時(shí)運(yùn)行,則在鍵盤(pán)安全程序之間的上述沖突將不出現(xiàn)。但是,由于常規(guī)鍵盤(pán)安全程序不能檢測(cè)通過(guò)鍵盤(pán)記錄器對(duì)內(nèi)核的改變,因此無(wú)論用戶客戶端系統(tǒng)何時(shí)訪問(wèn)特定網(wǎng)站,這些鍵盤(pán)安全程序都將運(yùn)行,結(jié)果是產(chǎn)生了鍵盤(pán)安全程序之間不可避免地出現(xiàn)的沖突的問(wèn)題。
發(fā)明內(nèi)容
因此,謹(jǐn)記現(xiàn)有技術(shù)中出現(xiàn)的上述問(wèn)題而做出本發(fā)明,并且本發(fā)明的目的是提供檢測(cè)惡意程序?qū)?nèi)核的改變并向用戶通知對(duì)安全的威脅的方法。技術(shù)方案
為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種檢測(cè)Windows內(nèi)核的改變的方法,該方法包括以下步驟第一步驟,由改變檢測(cè)驅(qū)動(dòng)器從系統(tǒng)模塊信息讀取關(guān)于檢測(cè)目標(biāo)驅(qū)動(dòng)器的名稱、 開(kāi)始地址和結(jié)束地址的信息;第二步驟,使用檢測(cè)目標(biāo)驅(qū)動(dòng)器的名稱來(lái)提取由檢測(cè)目標(biāo)驅(qū)動(dòng)器的驅(qū)動(dòng)器對(duì)象所使用的函數(shù);以及第三步驟,如果函數(shù)的地址是開(kāi)始地址和結(jié)束地址之間的值,確定檢測(cè)目標(biāo)驅(qū)動(dòng)器未改變,并且如果函數(shù)的地址不是開(kāi)始地址和結(jié)束地址之間的值,則確定檢測(cè)目標(biāo)驅(qū)動(dòng)器已經(jīng)改變。有利效果上面描述的本發(fā)明具有以下效果向用戶通知對(duì)安全的威脅并使用戶能夠處理對(duì)安全的威脅,這是因?yàn)楸景l(fā)明能夠使用內(nèi)核的系統(tǒng)模塊信息來(lái)檢測(cè)內(nèi)核和系統(tǒng)的驅(qū)動(dòng)器是否已經(jīng)改變。
圖1是示出了典型的Windows內(nèi)核存儲(chǔ)器結(jié)構(gòu)的圖;圖2是示出了加載在Windows內(nèi)核存儲(chǔ)器中的惡意驅(qū)動(dòng)器改變了驅(qū)動(dòng)器對(duì)象空間的驅(qū)動(dòng)器對(duì)象函數(shù)表的情況的圖;圖3是示出了改變檢測(cè)驅(qū)動(dòng)器已經(jīng)被加載在圖2的Windows內(nèi)核存儲(chǔ)器中的狀態(tài)的圖;以及圖4是示出了根據(jù)本發(fā)明的實(shí)施方式的使用改變檢測(cè)驅(qū)動(dòng)器檢測(cè)Windows內(nèi)核的改變的方法的流程圖。
具體實(shí)施例方式參照附圖將詳細(xì)地描述根據(jù)本發(fā)明的實(shí)施方式檢測(cè)內(nèi)核的改變的方法。圖1是示出了典型的Windows內(nèi)核存儲(chǔ)器結(jié)構(gòu)的圖。以各種形式將關(guān)于在Windows OS上運(yùn)行的全部驅(qū)動(dòng)器的信息存儲(chǔ)在Windows內(nèi)核存儲(chǔ)器中。存儲(chǔ)在Windows內(nèi)核存儲(chǔ)器中的信息包括系統(tǒng)模塊信息11、驅(qū)動(dòng)器對(duì)象空間 12、驅(qū)動(dòng)器圖像空間(便攜式可執(zhí)行(P^結(jié)構(gòu))13、中斷描述符表(IDT) 14和系統(tǒng)服務(wù)描述符表(SSDT) 16。NT內(nèi)核17負(fù)責(zé)通常在Windows內(nèi)核存儲(chǔ)器中使用的各種數(shù)據(jù)結(jié)構(gòu)的管理、驅(qū)動(dòng)器的加載、設(shè)備的輸入和輸出、以及系統(tǒng)調(diào)用的提供。當(dāng)前加載的驅(qū)動(dòng)器的列表存儲(chǔ)在系統(tǒng)模塊信息11中。即,存儲(chǔ)每個(gè)驅(qū)動(dòng)器圖像的驅(qū)動(dòng)器名稱和關(guān)于加載驅(qū)動(dòng)器圖像的位置的開(kāi)始地址和結(jié)束地址的信息。每個(gè)驅(qū)動(dòng)器對(duì)象的函數(shù)表存儲(chǔ)在驅(qū)動(dòng)器對(duì)象空間12中。構(gòu)成驅(qū)動(dòng)器的驅(qū)動(dòng)器對(duì)象的函數(shù)所涉及的地址值應(yīng)該是在相應(yīng)驅(qū)動(dòng)器的驅(qū)動(dòng)器圖像空間(PE結(jié)構(gòu))13內(nèi)的地址值。驅(qū)動(dòng)器文件當(dāng)前已經(jīng)被加載在存儲(chǔ)器中的驅(qū)動(dòng)器的圖像(驅(qū)動(dòng)器文件已經(jīng)被加載在存儲(chǔ)器中的狀態(tài)被稱為圖像)存儲(chǔ)在驅(qū)動(dòng)器圖像空間(PE結(jié)構(gòu))13中。驅(qū)動(dòng)器文件和驅(qū)動(dòng)器圖像按照PE結(jié)構(gòu)的形式配置。PE結(jié)構(gòu)存儲(chǔ)信息,該信息包括可執(zhí)行文件的機(jī)器語(yǔ)言的定位、輸入和輸出表的定位、相應(yīng)文件可以運(yùn)行的平臺(tái)的類型、以及當(dāng)OS執(zhí)行文件時(shí)第 ー開(kāi)始代碼的定位。IDT 14存儲(chǔ)中斷處理機(jī)的地址。SSDT 16存儲(chǔ)當(dāng)生成系統(tǒng)調(diào)用時(shí)針對(duì)每個(gè)函數(shù)應(yīng)該調(diào)用的例程的地址。包括鍵盤(pán)記錄器的惡意程序通過(guò)改變驅(qū)動(dòng)器對(duì)象空間12、驅(qū)動(dòng)器圖像空間(PE結(jié)構(gòu))13、IDT 14、SSDT 16和存儲(chǔ)器的鉤子回調(diào)而試圖進(jìn)行破壞。但是,這些惡意程序根本不能改變內(nèi)核的系統(tǒng)模塊信息11。如果系統(tǒng)模塊信息11被改變,則OS錯(cuò)誤地操作并且系統(tǒng)
重新啟動(dòng)。圖2是示出了加載在Windows內(nèi)核存儲(chǔ)器中的惡意驅(qū)動(dòng)器改變了驅(qū)動(dòng)器對(duì)象空間的驅(qū)動(dòng)器對(duì)象函數(shù)表的情況的圖。當(dāng)惡意程序加載在存儲(chǔ)器中吋,相應(yīng)惡意程序的可執(zhí)行驅(qū)動(dòng)器圖像(malicious, sys)也加載在驅(qū)動(dòng)器圖像空間(PE結(jié)構(gòu))13中。此外,存儲(chǔ)有相應(yīng)惡意驅(qū)動(dòng)器的名稱和可執(zhí)行驅(qū)動(dòng)器圖像的位置的開(kāi)始地址和結(jié)束地址存儲(chǔ)在系統(tǒng)模塊信息11中。此外,由相應(yīng)惡意驅(qū)動(dòng)器對(duì)象使用的函數(shù)表存儲(chǔ)在驅(qū)動(dòng)器對(duì)象空間12中,并且相應(yīng)信息存儲(chǔ)在IDT(未示出)、SSDT (未示出)和驅(qū)動(dòng)器圖像空間(PE結(jié)構(gòu))13它們自身中。例如,當(dāng)三個(gè)驅(qū)動(dòng)器(hello, sys、world, sys和malicious, sys)加載在該計(jì)算機(jī)系統(tǒng)中吋,每個(gè)驅(qū)動(dòng)器圖像加載并存儲(chǔ)在驅(qū)動(dòng)器圖像空間(PE結(jié)構(gòu))13中,并且加載在存儲(chǔ)器中的驅(qū)動(dòng)器圖像的列表存儲(chǔ)在系統(tǒng)模塊信息11中。驅(qū)動(dòng)器名稱以及每個(gè)驅(qū)動(dòng)器圖像的開(kāi)始地址和結(jié)束地址被存儲(chǔ)。同吋,驅(qū)動(dòng)器實(shí)際運(yùn)行所需要的函數(shù)被設(shè)置并存儲(chǔ)在必要的驅(qū)動(dòng)器對(duì)象空間12 中。當(dāng)惡意驅(qū)動(dòng)器將world, sys驅(qū)動(dòng)器對(duì)象的函數(shù)所涉及的地址值改變?yōu)閻阂怛?qū)動(dòng)器圖像內(nèi)的地址值時(shí),發(fā)生鉤掛。例如,當(dāng)將world, sys驅(qū)動(dòng)器對(duì)象的鍵盤(pán)值處理函數(shù)所涉及的地址值改變?yōu)閻阂怛?qū)動(dòng)器圖像內(nèi)的地址值(例如,530)吋,world, sys驅(qū)動(dòng)器向惡意驅(qū)動(dòng)器輸出鍵盤(pán)值,因而惡意驅(qū)動(dòng)器可以截獲鍵盤(pán)值。本發(fā)明提出檢測(cè)惡意驅(qū)動(dòng)器是否如上所述改變內(nèi)核的方法。根據(jù)本發(fā)明的檢測(cè)內(nèi)核的改變的方法按照改變檢測(cè)程序的形式提供,并在用戶計(jì)算機(jī)上運(yùn)行。圖3是示出了改變檢測(cè)驅(qū)動(dòng)器已經(jīng)被加載在圖2的Windows內(nèi)核存儲(chǔ)器中的狀態(tài)的圖。當(dāng)執(zhí)行內(nèi)核改變檢測(cè)程序吋,改變檢測(cè)驅(qū)動(dòng)器圖像被加載在驅(qū)動(dòng)器圖像空間(PE 結(jié)構(gòu))13中,并且改變檢測(cè)驅(qū)動(dòng)器的名稱以及圖像空間中的改變檢測(cè)驅(qū)動(dòng)器的開(kāi)始地址和結(jié)束地址存儲(chǔ)在系統(tǒng)模塊信息11中。此外,由改變檢測(cè)驅(qū)動(dòng)器使用的函數(shù)表存儲(chǔ)在驅(qū)動(dòng)器對(duì)象空間12中。本發(fā)明通過(guò)如上所述的加載在Windows內(nèi)核存儲(chǔ)器中的改變檢測(cè)驅(qū)動(dòng)器而實(shí)現(xiàn), 并且本發(fā)明檢測(cè)內(nèi)核驅(qū)動(dòng)器是否已經(jīng)被改變。圖4是示出了根據(jù)本發(fā)明的實(shí)施方式的使用改變檢測(cè)驅(qū)動(dòng)器檢測(cè)Windows內(nèi)核的改變的方法。首先,在步驟S41,改變檢測(cè)驅(qū)動(dòng)器從系統(tǒng)模塊信息讀取驅(qū)動(dòng)器列表并提取關(guān)于當(dāng)前在系統(tǒng)上運(yùn)行的驅(qū)動(dòng)器的名稱以及開(kāi)始地址和結(jié)束地址的信息。
在步驟S42,改變檢測(cè)驅(qū)動(dòng)器從自系統(tǒng)模塊信息讀取的驅(qū)動(dòng)器列表中選擇檢測(cè)目標(biāo)驅(qū)動(dòng)器,并將檢測(cè)目標(biāo)驅(qū)動(dòng)器的開(kāi)始地址設(shè)為變量i,以及將檢測(cè)目標(biāo)驅(qū)動(dòng)器的結(jié)束地址設(shè)為變量j。然后,在步驟S43,改變檢測(cè)驅(qū)動(dòng)器提取由檢測(cè)目標(biāo)驅(qū)動(dòng)器對(duì)象使用的函數(shù)的自變量。在該情況下,使用 ObReferenceObject 函數(shù)、ObReferenceObjectByName 函數(shù)、 ObReferenceObjectByHandle 函數(shù)和 ObReferenceObjectByPointer 函數(shù),改變檢測(cè)驅(qū)動(dòng)器可以發(fā)現(xiàn)存儲(chǔ)檢測(cè)目標(biāo)驅(qū)動(dòng)器的驅(qū)動(dòng)器對(duì)象的函數(shù)表的位置,并可以從檢測(cè)目標(biāo)驅(qū)動(dòng)器對(duì)象的函數(shù)表提取每個(gè)函數(shù)的地址。在步驟S44,改變檢測(cè)驅(qū)動(dòng)器確定在步驟S43提取的地址是否是變量i和變量j 之間的值,如果提取的地址是變量i和變量j之間的值,則在步驟S45確定在相應(yīng)的檢測(cè)目標(biāo)驅(qū)動(dòng)器中沒(méi)有發(fā)生改變,并且在步驟S46確定是否已經(jīng)對(duì)整個(gè)驅(qū)動(dòng)器列表執(zhí)行了改變檢測(cè)。如果存在將執(zhí)行改變檢測(cè)的驅(qū)動(dòng)器,則處理返回到步驟S42,其中開(kāi)始重復(fù)開(kāi)始于選擇檢測(cè)目標(biāo)驅(qū)動(dòng)器的處理的部分。相反,如果不存在將執(zhí)行改變檢測(cè)的驅(qū)動(dòng)器,處理結(jié)
束ο同吋,如果在步驟S44確定在步驟S43提取的地址不是變量i和變量j之間的值, 則改變檢測(cè)驅(qū)動(dòng)器在步驟S47確定相應(yīng)檢測(cè)目標(biāo)驅(qū)動(dòng)器已經(jīng)改變,在步驟S48向用戶通知相應(yīng)的可執(zhí)行程序的改變,并行進(jìn)到步驟S46。本發(fā)明不僅可以檢測(cè)上面描述的驅(qū)動(dòng)器對(duì)象的改變,而且可以檢測(cè)IDT、驅(qū)動(dòng)器圖像空間(PE結(jié)構(gòu))、SSDT和鉤子回調(diào)的改變。對(duì)于IDT 14的情況,使用HalGeWnterruptVector函數(shù)來(lái)獲得檢測(cè)目標(biāo)設(shè)備的中斷號(hào),并且使用asm sidt命令來(lái)獲得相應(yīng)的檢測(cè)目標(biāo)設(shè)備的IDT。同吋,可以通過(guò)檢驗(yàn)IDT 的地址和服務(wù)例程地址而檢查IDT是否已經(jīng)被改變。對(duì)于驅(qū)動(dòng)器圖像空間(PE結(jié)構(gòu))13的情況,打開(kāi)檢測(cè)目標(biāo)驅(qū)動(dòng)器,將檢測(cè)目標(biāo)驅(qū)動(dòng)器的開(kāi)始部分設(shè)置為IMAGE_DOS_HEADER結(jié)構(gòu),從IMAGE_DOS_HEADER結(jié)構(gòu)獲得IMAGE_ 0PTI0NA_ HEADER 結(jié)構(gòu)的定位,并且從 IMAGE_0PTI0NAL_HEADER 結(jié)構(gòu)獲得 IMAGE_IMP0RT_ DESCRIPTOR結(jié)構(gòu)的定位。同時(shí),通過(guò)檢驗(yàn)包括在IMAGE_IMP0RT_DESCRIPT0R結(jié)構(gòu)中的函數(shù)表,而針對(duì)改變檢查每個(gè)函數(shù)的地址。對(duì)于SSDT的情況,通過(guò)檢驗(yàn)包括在KekrviceDescriptorTable中的函數(shù)地址來(lái)檢測(cè)改變。對(duì)于鉤子回調(diào)的情況,使用 ObReferenceObject 函數(shù)、ObReferenceObjectByName 函數(shù)、ObReferenceObjectByHandle 函數(shù)和 ObReferenceObjectByPointer 函數(shù)而獲得檢測(cè)目標(biāo)驅(qū)動(dòng)器的驅(qū)動(dòng)器對(duì)象,并使用獲得的驅(qū)動(dòng)器對(duì)象來(lái)獲得設(shè)備對(duì)象。同吋,通過(guò)檢驗(yàn)包括在設(shè)備對(duì)象中的鉤子回調(diào)地址來(lái)檢測(cè)改變。盡管已經(jīng)結(jié)合附圖描述了本發(fā)明的技術(shù)精神,但這是為了例示本發(fā)明的優(yōu)選實(shí)施方式,并不是要限制本發(fā)明。此外,對(duì)于本領(lǐng)域普通技術(shù)人員明顯的是,在不偏離技術(shù)精神的范圍的界限內(nèi),可以有各種修改和改變。
權(quán)利要求
1.一種檢測(cè)Windows內(nèi)核的改變的方法,該方法包括以下步驟第一步驟,由改變檢測(cè)驅(qū)動(dòng)器從系統(tǒng)模塊信息讀取關(guān)于檢測(cè)目標(biāo)驅(qū)動(dòng)器的名稱、開(kāi)始地址和結(jié)束地址的信息;第二步驟,使用所述檢測(cè)目標(biāo)驅(qū)動(dòng)器的名稱來(lái)提取由所述檢測(cè)目標(biāo)驅(qū)動(dòng)器的驅(qū)動(dòng)器對(duì)象所使用的函數(shù);以及第三步驟,如果所述函數(shù)的地址是所述開(kāi)始地址和所述結(jié)束地址之間的值,則確定所述檢測(cè)目標(biāo)驅(qū)動(dòng)器未改變,并且如果所述函數(shù)的地址不是所述開(kāi)始地址和所述結(jié)束地址之間的值,則確定所述檢測(cè)目標(biāo)驅(qū)動(dòng)器已經(jīng)改變。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述第二步驟使用ObReferenceObject 函數(shù)、ObReferenceObjectByName 函數(shù)、ObReferenceObjectByHandle 函數(shù)禾ロ ObReferenceObjectByPointer 函數(shù)中的ー個(gè)。
3.根據(jù)權(quán)利要求1所述的方法,其中,所述改變檢測(cè)驅(qū)動(dòng)器還檢測(cè)所述檢測(cè)目標(biāo)驅(qū)動(dòng)器的驅(qū)動(dòng)器對(duì)象、IDT、PE結(jié)構(gòu)、SSDT和/或鉤子回調(diào)是否已經(jīng)改變。
4.根據(jù)權(quán)利要求1所述的方法,其中,所述改變檢測(cè)驅(qū)動(dòng)器確定所述檢測(cè)目標(biāo)驅(qū)動(dòng)器已經(jīng)改變并接著向用戶通知所述檢測(cè)目標(biāo)驅(qū)動(dòng)器的可執(zhí)行程序的改變。
全文摘要
本發(fā)明涉及通過(guò)使用構(gòu)成內(nèi)核中數(shù)據(jù)的最恒定形式的系統(tǒng)模塊信息而搜索Windows內(nèi)核驅(qū)動(dòng)器和系統(tǒng)改變的方法。根據(jù)本發(fā)明的Windows內(nèi)核改變搜索方法包括第一步驟,改變-搜索驅(qū)動(dòng)器從系統(tǒng)模塊信息讀取正被搜索的驅(qū)動(dòng)器的名稱以及開(kāi)始地址和結(jié)束地址;第二步驟,通過(guò)使用正被搜索的驅(qū)動(dòng)器的名稱來(lái)提取由正被搜索的驅(qū)動(dòng)器的驅(qū)動(dòng)器對(duì)象所使用的數(shù)學(xué)函數(shù);以及第三步驟,如果數(shù)學(xué)函數(shù)的因子是所述開(kāi)始地址和所述結(jié)束地址之間的值,則識(shí)別出正被搜索的驅(qū)動(dòng)器未改變,并且如果數(shù)學(xué)函數(shù)的因子不是所述開(kāi)始地址和所述結(jié)束地址之間的值,則識(shí)別出正被搜索的驅(qū)動(dòng)器已改變。
文檔編號(hào)G06F9/00GK102598008SQ201080042577
公開(kāi)日2012年7月18日 申請(qǐng)日期2010年8月12日 優(yōu)先權(quán)日2009年9月24日
發(fā)明者李在弘 申請(qǐng)人:Inca網(wǎng)絡(luò)有限公司