孟晨宇+史淵+王佳偉+周潔+康曉鳳
摘要:Windows操作系統(tǒng)是當(dāng)今應(yīng)用最廣泛的個人計算機操作系統(tǒng),針對這一操作系統(tǒng)的病毒和木馬層出不窮。大多數(shù)殺毒軟件主要依賴特征碼識別技術(shù)、校驗和技術(shù)、軟件模擬技術(shù)檢測病毒。本系統(tǒng)從手動殺毒角度出發(fā),變被動防御為主動查殺,特別是Rootkit保護的內(nèi)核級木馬,通過檢測相應(yīng)的被掛鉤函數(shù),內(nèi)核中被修改的地址,找到相應(yīng)的進程,從而實現(xiàn)了木馬進程的強殺、相應(yīng)內(nèi)核內(nèi)容的恢復(fù)等功能,更有效的保護計算機操作系統(tǒng)的安全。
關(guān)鍵詞:內(nèi)核防護;手動殺毒;信息安全;Rootkit
中圖分類號:TP311 文獻標(biāo)識碼:A DOI:10.3969/j.issn.1003-6970.2016.03.004
0引言
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,計算機在人民生活中的地位越來越重要。計算機在給人民的生活和工作帶來極大便利的同時,也帶來了信息安全問題。Windows操作系統(tǒng)是當(dāng)今應(yīng)用最廣泛的個人計算機操作系統(tǒng),針對這一操作系統(tǒng)的病毒和木馬層出不窮。而且更為嚴(yán)重的是內(nèi)核級Rootkit的誕生,給系統(tǒng)安全帶來了極大的破壞性。內(nèi)核是操作系統(tǒng)的核心,內(nèi)核的完整性保護對維護操作系統(tǒng)至關(guān)重要。所以本系統(tǒng)旨在從內(nèi)核出發(fā),全方位的利用多種綜合檢測技術(shù)維護系統(tǒng)內(nèi)核的安全性以及完整性。
1系統(tǒng)設(shè)計
1.1系統(tǒng)整體設(shè)計方案
本系統(tǒng)主要分為用戶層和內(nèi)核層,用戶層利用VC++6.0開發(fā),采用C++語言實現(xiàn),內(nèi)核層利用WDK開發(fā),采用C語言實現(xiàn)。用戶層是與用戶交互的界面,用戶層通過調(diào)用DeviceloControl函數(shù),實現(xiàn)3環(huán)與0環(huán)的通信。內(nèi)核層實現(xiàn)系統(tǒng)各個模塊的具體功能,從內(nèi)核維護監(jiān)測系統(tǒng)安全。如圖1系統(tǒng)架構(gòu)設(shè)計圖所示。
本系統(tǒng)主要包括七個功能模塊,分別為內(nèi)核監(jiān)測模塊,系統(tǒng)鉤子檢測模塊,隱藏進程檢測模塊,隱藏端口檢測模塊,系統(tǒng)服務(wù)描述符表監(jiān)測模塊,IDT監(jiān)測模塊,過濾驅(qū)動枚舉模塊。通過這些模塊從而實現(xiàn)系統(tǒng)內(nèi)核的實時監(jiān)測,隱藏進程、端口、鉤子的檢測等功能。
1.2系統(tǒng)流程設(shè)計
系統(tǒng)啟動后,先將內(nèi)核模塊加載到操作系統(tǒng)中,呈現(xiàn)程序主界面,等待用戶點擊主界面,發(fā)送指令,再調(diào)用各功能模塊完成相應(yīng)的操作。若所需完成的操作需要調(diào)用內(nèi)核函數(shù)才能完成,則通過相關(guān)處理將指令發(fā)送至內(nèi)核模塊,調(diào)用相應(yīng)的分發(fā)函數(shù),獲取信息或完成相應(yīng)的操作,并將執(zhí)行結(jié)果反饋給用戶層應(yīng)用程序。軟件的運行流程圖如圖2所示:
2系統(tǒng)的實現(xiàn)
2.1內(nèi)核監(jiān)測模塊
內(nèi)核模塊(“軟件驅(qū)動”)是運行在系統(tǒng)核心層,惡意軟件為了獲取更強的系統(tǒng)權(quán)限,往往會利用驅(qū)動加載技術(shù)向操作系統(tǒng)中加載自己的模塊,因此監(jiān)測系統(tǒng)中內(nèi)核模塊,有利于發(fā)現(xiàn)惡意軟件的蹤跡。
該模塊能夠從用戶層尋找保存內(nèi)核模塊信息的對象,完成對其獲取和分析,從其中找到需要的信息,包括模塊名、內(nèi)核模塊基址、內(nèi)核模塊大小、內(nèi)核模塊標(biāo)志、內(nèi)核模塊加載順序、內(nèi)核模塊加載次數(shù),模塊路徑等,并將信息呈現(xiàn)給用戶。雖然內(nèi)核模塊運行在內(nèi)核層,但是監(jiān)測內(nèi)核模塊卻可以在用戶層利用Windows API實現(xiàn)。點擊主界面上工具欄的第二個按鈕開始檢測操作系統(tǒng)中內(nèi)核模塊。在系統(tǒng)上列舉的內(nèi)核模塊加載情況如圖3所示。
2.2系統(tǒng)鉤子檢測模塊
系統(tǒng)鉤子可以攔截事件消息,在窗口響應(yīng)前完成對消息的處理,也可以攔截應(yīng)用層Windows API對內(nèi)核函數(shù)的調(diào)用,因此惡意軟件很有可能對系統(tǒng)關(guān)鍵進程安裝鉤子,以期獲取更高的權(quán)限和更好的隱蔽效果。本模塊就是要從用戶層進入系統(tǒng)核心層,將系統(tǒng)中的所有鉤子檢測出來,明確每個鉤子的句柄,鉤子相應(yīng)的處理,以及鉤子的類型,還有每個鉤子“掛鉤”的進程,線程。
點擊主界面上工具欄的第二個按鈕開始檢測操作系統(tǒng)中系統(tǒng)鉤子。在系統(tǒng)上列舉的系統(tǒng)鉤子情況如圖4所示:
2.3隱藏進程檢測模塊
在隱藏進程檢測模塊中,首先采用在用戶態(tài),調(diào)用Windows API,獲取進程信息,然后在內(nèi)核態(tài)枚舉高端內(nèi)存,獲取進程信息,其后比較兩次信息,確定隱藏進程。用戶態(tài)通過調(diào)用API ZwQuery-SystemInformation方法,內(nèi)核態(tài)通過遍歷PspCidTable句柄表、遍歷csrss.exe進程的HandleTable表等兩種方法獲取到系統(tǒng)所有進程信息。
點擊主界面上工具欄的第三個按鈕開始檢測操作系統(tǒng)中所有進程。在系統(tǒng)上檢測到所有進程圖5所示:
從圖5中,可以看到,當(dāng)前系統(tǒng)中的所有進程的PID,進程名和EPROCESS,系統(tǒng)中沒有隱藏進程,和任務(wù)管理器中的獲取的進程信息是一致的。
2.4隱藏端口檢測模塊
在內(nèi)核態(tài)獲取端口信息,主要是通過直接獲取設(shè)備對象/device/tcp和/device/udp,繼而獲取文件操作對象,隨后構(gòu)造IRP請求信息獲取端口信息。該模塊繞過中間步驟,直接調(diào)用內(nèi)核,獲取內(nèi)核中設(shè)備對象,獲取端口信息,從而使隱藏端口無處藏身。
點擊主界面上工具欄的第四個按鈕開始檢測操作系統(tǒng)中所有正在通信進程。在系統(tǒng)上檢測到所有端口如圖6所示:
2.5系統(tǒng)服務(wù)描述符表監(jiān)測模塊
系統(tǒng)服務(wù)描述符表SSDT不僅是一個地址索引表,還包含很多其他信息,比如地址索引的基地址、服務(wù)函數(shù)個數(shù)。點擊主界面上工具欄的第五個按紐開始檢測操作系統(tǒng)中所有SSDT表項。在系統(tǒng)上檢測到SSDT信息如圖7所示:
2.6 IDT監(jiān)測模塊
IDT(Interrupt Descriptor Table中斷服務(wù)表)是一個有256入口函數(shù)線形表,每個IDT的入口是8個字節(jié)說明符,所以整個IDT表字節(jié)數(shù)是8*256—2048 bytes。檢測IDT鉤子同樣可以使用對比函數(shù)原始地址和函數(shù)內(nèi)存地址的方法。[2lIDT在內(nèi)存中的地址可以通過sidt指令I(lǐng)DTR寄存器內(nèi)容,IDTR中存放著IDT中斷服務(wù)入口信息,從而在其中獲取IDT服務(wù)函數(shù)的內(nèi)存地址。
IDT服務(wù)函數(shù)的原始地址可以在ntoskrnl.exe中獲取,通過獲取ntoskrnl.exePE文件在內(nèi)存中的基地址,然后獲取鏡像文件的INIT段,讀取該段內(nèi)容后,匹配特征“\xB9\x00\x08\x00\x00\xCl\xE9\x02\xF3\xA5”,特征后就是IDT服務(wù)函數(shù)的原始地址。
點擊主界面上工具欄的第八個按紐開始檢測操作系統(tǒng)中所有IDT表項。在系統(tǒng)上檢測到IDT如圖8所示:
2.7過濾驅(qū)動枚舉模塊
所謂過濾就是在本來已有的設(shè)備棧中加入一個自己的設(shè)備。在這里把插入設(shè)備棧的用戶設(shè)備叫做過濾設(shè)備,建立這個設(shè)備并使其具有特殊功能的驅(qū)動叫做過濾驅(qū)動。本模塊所實現(xiàn)的功能就是枚舉操作系統(tǒng)中所有已加載的過濾驅(qū)動,并將驅(qū)動路徑、驅(qū)動對象名、類型設(shè)備宿主驅(qū)動對象名等信息顯示在列表框中。點擊主界面上工具欄的第九個按紐開始檢測操作系統(tǒng)中所有已加載過濾驅(qū)動。在系統(tǒng)上檢測到過濾驅(qū)動如圖9所示:
3結(jié)語
本系統(tǒng)在充分研究病毒、木馬原理和Windows內(nèi)核編程的基礎(chǔ)上,設(shè)計實現(xiàn)了一個界面友好,使用方便,高效便捷的內(nèi)核級手動殺毒系統(tǒng)。主要實現(xiàn)了監(jiān)視內(nèi)核模塊、監(jiān)視系統(tǒng)鉤子、檢測隱藏進程、檢測隱藏端口、監(jiān)視SSDT、IDT監(jiān)視、過濾驅(qū)動枚舉等功能。本系統(tǒng)從手動殺毒角度出發(fā),變被動防御為主動查殺,更有效的查殺計算機感染的病毒及木馬,特別是Rootkit保護的內(nèi)核級木馬,通過檢測相應(yīng)的被掛鉤函數(shù),內(nèi)核中被修改的地址,找到相應(yīng)的進程,從而實現(xiàn)了木馬進程的強殺、相應(yīng)內(nèi)核內(nèi)容的恢復(fù)等功能,保護了計算機操作系統(tǒng)的安全。在經(jīng)濟利益的驅(qū)使下,木馬編寫者也在不斷研究新型的隱藏技術(shù),逃避傳統(tǒng)的檢測技術(shù),本系統(tǒng)也可以與時俱進,研究新的隱藏技術(shù),并將對應(yīng)的檢測技術(shù)加入到系統(tǒng)中。