孟晨宇+史淵+王佳偉+周潔+康曉鳳



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