本站小編為你精心準備了HOOK技術的進程管理參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
《計算機工程與設計雜志》2014年第七期
1系統設計及技術原理
1.1隱藏進程的檢測(1)掛接SSDT檢測Windows操作系統是一個分層的系統,每層對系統資源有著不同的訪問權限。SSDT[6]在ring3的Win32API和ring0的NativeAPI之間建立地址映射。它不僅包括地址索引表,還包括一些其它有用的信息,諸如地址索引的基地址,服務函數的個數等。所有的ring3層API在系統內核模式下都有對應的系統服務函數。大多數此類API請求都會通過系統調用轉入內核,Rootkit惡意程序掛接SSDT后,若修改進程枚舉查詢類服務號對應的入口地址,進而轉向鉤子函數地址,就可以修改獲取的操作系統內部進程信息,如抹去自己要隱藏的進程等,然后把處理后的結果返還給用戶,用戶獲取的進程信息將是不全面的[7]。Root-kit惡意程序以此來達到隱藏進程的目的。基于這個原理,可以通過重新讀取ntoskml.exe文件來得到一個純凈的SS-DT拷貝,然后與內存中SSDT作比較,這樣可以有效防止Rootkit將SSDT中的某些系統服務地址替換成鉤子的地址[8]。這種檢測方法效率高,但也存在著不足之處,如Rootkit程序可以采用修改執行系統調用的中斷或者是用全局服務描述表中的調用門實現系統調用避開這種方法的檢測。安裝調用門實現進程隱藏的原理是通過安裝調用門直接由ring3層直接進入ring0層,并提升權限,修改EPRO-CESS結構,刪除要隱藏的進程[9]。恢復SSDT相關服務地址不能檢測出此類隱藏進程,可靠性不高。(2)掛鉤SwapContext檢測進程是分配和擁有資源的基本單位,線程是獨立運行和調度的基本單位。線程不占有資源,線程的運行必須依賴于資源,一定隸屬于某個進程。因此,根據線程可以找到它所屬于的進程。CPU在運行多個程序時,不停地在各個線程之間切換,如果根據每個切換到的線程找到它隸屬于的進程,在足夠長的時間內,則可以獲取到系統內所有的進程。利用Inlinehook技術對SwapContext函數處理,即可截獲即將被換入的進程和其所屬進程[11]。無論進程是否隱藏,EPROCESS結構是否被修改,如果一個進程處于運行態,總有屬于它的線程是活動的。一定可以根據屬于它的線程找到該進程。通過安裝調用門隱藏進程的Rootkit程序也不能躲避該檢測方法的檢測。這種檢測方法也存在一定的弊端。1)只有線程被分配到時間片,才能被截獲,進而找到其所屬進程。如果在一段時間內,一個進程處于等待狀態,則無法截獲其線程,也就無法得到該進程(包括普通進程和隱藏進程)。這也是該方法在短時間內枚舉進程遠少于任務管理器的原因。如果足夠長的時間,該方法幾乎能得到系統的所有進程(systemidle進程,系統很少給它分配時間片)。2)系統在每次進程切換時都要進行進程查詢、對比進程列表,如此耗時的工作會一定程度地影響操作系統的效率。這種檢測隱藏進程的方法在長時間內檢測可靠性比較高[12]。上述兩種方法都能檢測到隱藏進程,也都存在著一定的不足,本文根據兩種檢測方法的思想,集合兩種方法的優點,把兩種檢測方法有效結合,設計出一種基于HOOK技術檢測隱藏進程的方法。首先重新讀取ntoskml.exe文件來得到一個純凈的SSDT拷貝,然后與內存中SSDT作比較。如果相關系統服務地址被修改過,則恢復到服務原來的地址。根據進程查詢類函數獲得進程列表,然后根據進程的PID大小進行快速排序,把各個進程的PID排序后依次存放在數組Array中,形成有序進程列表List。利用In-lineHOOK技術掛鉤SwapContext,根據運行線程得到其所屬進程的PID,然后在數組Array中進行查詢。若有相應的PID,說明已經檢測到該進程,若沒有該PID,說明該進程是未檢測到的隱藏進程,就把該進程插入到List中,繼續查找下一個進程,進行上述操作。如果用戶需要獲取系統進程列表,只需調用有序進程列表List即可。系統每間隔一段時間會對列表List刷新一次,檢測方法流程如圖2所示。圖2隱藏進程檢測流程
1.2結束批量進程Windows任務管理器每次只能終止一個進程。有些病毒屬于雙進程守護病毒,病毒進程之外有一個守護進程,它們之間相互監視,不斷檢測對方是否被終止。當發現對方被終止時,會迅速創建對方。針對此類病毒,單獨結束一個進程是不會起到任何效果的,只有同時結束所有與它有關的進程,才能徹底清除此類病毒。本文設計一種方法終止此類病毒的運行(流程如圖3所示),確定可疑進程后,根據可疑進程查找其守護進程,由于此類病毒的一個進程被結束的時候,另一個進程會創建它。若把病毒的一個進程定義為父進程,另一個則是子進程,但子進程同時也是父進程,而且子進程不會隨著父進程的消亡而自動結束。因此可以根據病毒子進程的PID獲取父進程的PID。獲取選中的進程PID后,調用OpenProcess函數獲取該進程句柄,然后獲取其父進程的PID,這里調用了一個微軟未公開的APINtQueryInformationProcess,該API位于Ntdll.dll面,其中第二個參數是PROCESSINFOCLASS結構體,該結構體的最后一個字段Reserved3就是父進程的PID。當選中要結束的多個進程時,系統會根據選中進程的句柄獲取各個進程的PID,然后把進程PID作為參數傳入自定義函數MyTerminateProcessList,實現同時結束多個進程的功能。函數關鍵代碼如下:
1.3獲取進程占用系統資源信息Windows程序調用API函數GetProcessMemoryInfo可以得到每個進程的虛擬內存和物理內存的使用情況。沒有具體的API函數能夠直接得到CPU的占用率情況。任務管理器中的大部分進程的CPU占用率是0,這是因為在很短的時間內,進程處于等待狀態,沒有分到時間片。通過一個特定時間段內(n個刷新周期)計算單個進程消耗CPU的時間和所有進程的總時間,它們的比值就是那個單個進程的CPU占有率。可以調用GetProcessTimes函數獲取進程消耗的內核態時間KernalTime和進程消耗的用戶態時間UserTime,二者之和即為進程消耗的CPU時間。同時可以通過調用GetSystemTimes獲取總的CPU時間IdleTime、KernelTime、UserTime。可用于計算系統總的CPU占用率(多核CPU中返回的是所有CPU核時間的總和)。
2系統實現
圖4給出了系統關鍵模塊的實現界面。其中圖4(a)圖顯示的是內存監控模塊的界面,用戶可以通過這個模塊查看每個進程占用的物理內存和虛擬內存,并通過系統設置標記指定進程的信息。圖4(b)圖顯示的是進程監控模塊,這里系統默認把隱藏進程標記出來,用戶可以獲取進程的守護進程。如果進程有守護進程的PID,否則,返回空。如果用戶想要批量結束進程,只需要勾選中進程后面的選框,單擊結束進程即可。圖4(c)圖顯示的是系統對每個進程的CPU監控情況,用戶可以結束掉占用CPU較高的進程。
3系統實驗環境及分析
3.1實現環境系統在Windows2003操作系統下,運用MicrosoftVi-sualC++6.0的開發環境,采用C++為開發語言,系統運行所需的硬件環境為Intel(R)Pentium(R)4CPU2GHz以上,內存512M以上,硬盤32G以上。系統無需進行安裝,直接以管理員的身份運行即可。
3.2系統效率分析文獻[11]通過重載SSDT實現隱藏進程的檢測,直接通過進程枚舉查詢類函數即可獲取進程列表,不需要根據進程的PID進行比較排序,也無需進行進程之間的對比,故比較的次數為0。文獻[12]方法通過掛鉤SwapContext實現隱藏進程的檢測。假設系統內運行著n個進程,隱藏了m個進程,根據掛鉤SwapContext檢測進程的原理可知,系統每次截獲一個進程都需要進程之間的比較至少n次,總的比較次數大于n2次。本文提供的方法則是先對文獻[11]方法獲取進程根據PID排序,采用快速排序的總的比較次數為n*log2n。排序后,根據掛鉤SwapContext獲得的進程在排序后的有序表中查找,采用二分法查找的總的比較次數為n2/2,文獻[11]方法不能檢測通過調用門實現隱藏的進程,可靠性不高。文獻[12]方法的高可靠性必須在長時間內才能體現出來,短時間內得到的進程遠遠小于系統內真實存在的進程數目。本文方法將二者有效地結合,進程間比較次數相對減少,在效率上略優于掛鉤SwapContext,可靠性也高于二者。表1對3種方法對檢測隱藏進程方面做了對比。
3.3系統的性能分析表2給出了系統運行前后操作系統CPU和內存的變化情況,可以看到系統的運行并沒有對系統資源有較大影響。針對非調用門類型木馬程序,如SubSeven、BO2K、冰河、廣外女生,本文系統和冰刃、ProcessExplore等進程查殺工具都可以有效檢測到。在Windows環境下用VC6.0實現記錄鍵盤輸入的調用門木馬程序MyRootkit,程序運行時,冰刃和ProcessExplore等檢測不到被隱藏木馬信息,而本系統在運行一段時間內能夠檢測到隱藏進程MyRootkit.exe。4結束語SSDTHOOK技術是內核HOOK技術的一種,用于很多殺毒軟件和安全軟件中。本文將該技術與InlineHOOK技術結合起來,實現了檢測隱藏進程的功能。與掛鉤系統調用檢測方法相比,提高了可靠性,降低了效率。與掛接SwapContext檢測方法相比,效率和可靠性都得到了提高。設計和實現了一個進程管理系統,不但能夠檢測到用戶系統內的隱藏進程,而且具有終止批量進程的能力。無需安裝,便捷易用,方便了用戶手工殺毒,對系統內的進程進行管理。本文檢測方法的效率只是略優于掛鉤SwapContext檢測,如何進一步提高檢測效率,是下一步重點要研究的內容。
作者:趙廣強凌捷單位:廣東工業大學計算機學院