專利名稱:檢測進程的方法及設備的制作方法
技術領域:
本發(fā)明涉及計算機操作系統(tǒng)安全技術領域,尤其涉及一種檢測計算機操 作系統(tǒng)內核級隱藏進程的方法及設備。
背景技術:
rootkit (后門工具包)是計算機攻擊者用來隱藏自己的蹤跡和保留訪問權 限的工具。rootkit發(fā)展大致分為三個階段,第一代的rootkit是原始的,他們 筒單地替換/修改操作系統(tǒng)上關鍵的系統(tǒng)文件;第二代的rootkit基于掛鉤技術, 通過對已加載的應用程序和一些諸如系統(tǒng)調用表的操作系統(tǒng)部件打內存補 丁,而改變執(zhí)行路徑,將修改方式從磁盤移到已加載程序的內存映像;第三 代的內核rootkit技術通過動態(tài)地修改內核對象來實現(xiàn)。
直接內核對象才喿作(DKOM, Direct Kernel Object Manipulation)技術作 為第三代內核級rootkit的代表,通過直接修改操作系統(tǒng)內核對象來實現(xiàn)進程 的隱藏、設備驅動隱藏以及進程權限提升等深度隱藏的目的。DKOM較難于 檢測,因為它并不修改程序執(zhí)行路徑,而是直接修改操作系統(tǒng)中的內核對象。 內核對象是指核心數(shù)據(jù)結構內容,包括進程、線程和設備驅動等。這些內核 對象是操作系統(tǒng)和上層應用程序直接依賴的內容,通過修改它們可以達到 rootkit隱藏惡意進程的目的。
在具體執(zhí)行過程中,所有進程都是由一個進程結構體(EPROCESS)描 述,而所有進程結構體都由一個雙向循環(huán)鏈表維護。DKOM進程隱藏的一個 方法是改變進程結構體的指針,使得鏈表枚舉跳過自身達到進程隱藏的目的。 現(xiàn)有的針對此種進程隱藏的檢測方法,是采用遍歷EPROCESS結構的雙向鏈 表來得到進程列表,然后將此進程列表中進程ID(標識符)與API( Application Programming Interface,應用編程接口 )調用的進程ID進行比較,可以檢測出 隱藏的進程。
但是這種檢測方法不夠徹底,當攻擊者也修改了雙向鏈表,這種方法就 會失效;而且,為了得到進程名稱、ID和父進程ID,必須獲知EPROCESS結構中偏移地址,而這些偏移地址隨著操作系統(tǒng)類型或版本的變化而不同,
例如Windows 2000和Windows XP,各自對應偏移地址不同,所以這種檢測 方法不具有通用性。而且,當攻擊者將要隱藏的EPROCESS雙向指針清空, 也就是要隱藏的進程都被從進程鏈表中刪掉了 ,那么上述遍歷雙向鏈表的方 式也就不可能檢測到隱藏的進程了 。
發(fā)明內容
本發(fā)明公開了 一種檢測進程的方法及設備,用于解決現(xiàn)有進程檢測方法 檢測不夠徹底、不通用的問題。
為此,本發(fā)明采用如下技術方案
一種檢測進程的方法,該方法包括步驟查找操作系統(tǒng)內核地址空間, 得到上下文切換函數(shù)地址;修改所述上下文切換函數(shù)首部地址內容為遠程跳 轉指令,通過遠程跳轉,訪問進程結構體,獲取進程信息。
在獲取進程信息之后,所述方法還包括執(zhí)行被遠程跳轉指令覆蓋的上 下文切換函數(shù)首部地址內容指令,并將遠程跳轉返回至上下文切換函數(shù)。
在遠程跳轉返回至上下文切換函數(shù)之后,所述方法還包括將所述獲取 的進程信息與調用應用編程接口 API進程信息進行比較,若不一致,確定存 在內核級隱藏進程。
在得到上下文切換函數(shù)地址之后,所述方法還包括檢測上下文切換函 數(shù)首部地址內容是否被篡改,若是,立即將其恢復為原始狀態(tài),并記錄報警曰志。
所述方法還包括動態(tài)監(jiān)控上下文切換函數(shù)首部地址內容是否被篡改, 若是,立即將其恢復為原始狀態(tài),并記錄報警曰志。
所述方法是采用搜索算法查找內核地址空間得到上下文切換函數(shù)地址; 或者,由以下步驟得到上下文切換函數(shù)地址通過反匯編得到操作系統(tǒng)內核 調度程序的二進制特征碼,通過所述特征碼查找到上下文切換函數(shù)地址。
一種檢測進程的設備,該設備包括地址查詢單元、跳轉單元和實時監(jiān)控 單元;所述地址查詢單元,用于查找操作系統(tǒng)內核地址空間,得到上下文切 換函數(shù)地址;所述跳轉單元,在所述地址查詢單元得到上下文切換函數(shù)地址時,修改上下文切換函數(shù)首部地址內容為遠程跳轉指令,并指示實時監(jiān)控單元對進程結構體進行監(jiān)控;所述實時監(jiān)控單元,得到跳轉單元監(jiān)控指示后,對進程結構體進行訪問,得到進程有關信息。
所述設備還包括進程比較單元,用于將所述實時監(jiān)控單元得到的進程信息,與調用API進程信息進行比較,在比較結果不一致的情況下,確定存在 內核級隱藏進程。
所述跳轉單元包括跳轉執(zhí)行子單元和跳轉返回子單元;所述跳轉執(zhí)行子 單元,在所述地址查詢單元得到上下文切換函數(shù)地址時,將上下文切換函數(shù) 首部地址內容修改為遠程跳轉指令,并指示實時監(jiān)控單元對進程結構體進行 監(jiān)控;所述跳轉返回子單元,當?shù)弥獙崟r監(jiān)控單元獲取到進程信息后,通知 操作系統(tǒng)內核執(zhí)行被遠程跳轉指令覆蓋的上下文切換函數(shù)首部地址內容指 令,并指示操作系統(tǒng)內核返回至上下文切換函數(shù)。
所述跳轉單元還包括首部地址內容檢測子單元,用于動態(tài)監(jiān)控上下文切 換函數(shù)首部地址內容是否被篡改,若是,立即通知操作系統(tǒng)內核將其恢復為 原始狀態(tài);所述跳轉單元還包括報警日志,用于記錄上下文切換函數(shù)首部地 址內容被篡改情況。
所述操作系統(tǒng)包括WINDOWS系列操作系統(tǒng)、UNIX系列操作系統(tǒng)或 LINUX系列操作系統(tǒng);所述進程有關信息,包括進程ID、進程名稱或進程鏡 像文件。
本發(fā)明中,通過對搡作系統(tǒng)內核調度線程(ETHREAD )的過程進行監(jiān)控, 獲取與當前線程有關的各種信息,其中包括EPROCESS,達到檢測隱藏進程 的目的。由于本發(fā)明從處于操作系統(tǒng)最底層的線程出發(fā),可以獲得最真實的 內核對象信息,而且不存在操作系統(tǒng)版本不同檢測方法不能通用的問題,能 夠對DKOM隱藏進程進行有效的^r測;進一步,本發(fā)明通過對上下文切換函 數(shù)首部地址內容以及報警日志的動態(tài)監(jiān)控和更新,保證了檢測的準確性。
圖1為EPROCESS與ETHREAD關系示意圖2為實施例一流程圖;圖3為實施例一遠程跳轉邏輯示意圖4為實施例二流程圖5為進程檢測設備內部結構示意圖。
具體實施例方式
現(xiàn)有技術通過遍歷進程雙向鏈表來檢測進程,而本發(fā)明著眼于調度線程, 通過調度線程得到進程結構體,從而達到檢測進程的目的。
下面詳細介紹實施例一
首先來分析一下有關進程和線程工作原理。現(xiàn)代操作系統(tǒng)一般以多任務 搶占方式來運行,每個進程分配特定的CPU時間片來達到執(zhí)行目的,這樣宏 觀上看就像多個任務在同時運行。每個進程分配的時間片是由操作系統(tǒng)的 CPU時鐘中斷確定的,系統(tǒng)調用中斷來比較當前進程分配的時間片,如果時 間片用完會根據(jù)各線程優(yōu)先級等信息、用特定的調度算法來選擇新的線程, 然后將它的返回值, 一個ETHREAD結構,作為參數(shù)來完成上下文切換函數(shù), 從而設置ETHREAD、 EPROCESS中的各項參數(shù),并替換內核處理器控制區(qū) 域(KPCRB)中的相應結構來完成線程切換,調度到另一個進程的線程會繼 續(xù)執(zhí)行。其中,當線程等待某一事件或信號量時,進程會自動放棄當前時間 片;EPROCEE保存著進程的各種信息,和相關結構的指針。
如前已述,在操作系統(tǒng)中每一個進程都有一個EPROCESS結構,而操作 系統(tǒng)內核維護一個雙向鏈表,正常情況下,通過遍歷雙向鏈表就可以得到當 前系統(tǒng)中活動的進程。比如,運行任務管理器就可以看到當前系統(tǒng)中所有進 程。而DKOM就是通過修改這個雙向鏈表,將要隱藏的進程的EPROCESS 的雙向指針清空,然后修改與之相鄰的EPROCESS指針,使得這個雙向鏈表 "跳過,,了這個隱藏進程的EPROCESS,那么遍歷雙向鏈表得不到該隱藏進 程,此時運行任務管理器自然也就看不到該進程了。
操作系統(tǒng)一般有三個維護線程的雙向鏈表(例如,Windows2000包括 Ki^WaitlnListHead、 Ki>VaitOutListHead、 KiDispatcherReadyListHead ),前兩 個鏈表包含等待某種事件的線程,它們對于一個線程功能性沒有任何影響,因此很容易被修改來隱藏進程;而最后一個鏈表包含的是等待執(zhí)行的線程, 這個結構包括了很多進程相關指針,包括EPROCESS結構,而且此第三個鏈 表指針是切換地址空間時調度程序(scheduler,也可稱為上下丈切換函數(shù)、 或上下文切換程序)使用的指針,它不能被修改,可以利用它來檢測擁有某 個線程的進程。ETHREAD、 KTHREAD與EPROCESS結構之間關系參見圖1 所示,KPRCB中的CurrentThread(當前線程)指向ETHREAD,而ETHREAD 內部包含的KTHREAD又指向EPROCESS,由此可知,ETHREAD、KTHREAD 與EPROCESS是緊密相關的。
從上述分析不難看出,線程是CPU調度的作小單位,操作系統(tǒng)是以線程 調度為核心的。本發(fā)明就是從調度線程出發(fā),通過監(jiān)控線程調度過程,來獲 得EPROCESS有關進程的各種信息,從而能夠檢測出采用DKOM隱藏的進 程。
下面參見圖2對實施例一進行介紹,實施例一包括
步驟201:查找操作系統(tǒng)內核地址空間,獲取上下文切換函數(shù)地址;
具體實施中,可通過反匯編得到操作系統(tǒng)內核調度程序的二進制特征碼;
然后在保護性進程模塊(例如ntoskml)中查找這些特征碼,就能查找到上
下文切換函數(shù)地址,一^:情況下,查找前20字節(jié)即可。
或者,可以采用搜索算法來查找到上下文切換函數(shù)地址,例如深度優(yōu)先
搜索、廣度優(yōu)先搜索和啟發(fā)式搜索等,這些搜索算法技術已經(jīng)非常成熟,在
此不再贅述。
步驟202:修改上下文切換函數(shù)首部(前面幾個字節(jié))地址內容為遠程跳 轉指令,將上下文切換函數(shù)進行遠程跳轉;
參見圖3所示,將原始調度程序首部內容地址修改為一條遠程跳轉指令, 跳轉到本發(fā)明新構建的實時監(jiān)控單元,此模塊執(zhí)行完畢后,再開始執(zhí)行原來
調度程序開始部分的指令,然后結束跳轉,返回至原上下文切換函數(shù)。
步驟203:遠程跳轉至訪問EPROCESS,獲取當前切換進程ID和進程鏡 像文件等信息;
在此,要構建一個實時監(jiān)控單元,用于監(jiān)控當前進程情況。上述步驟102 將上下文切換函數(shù)跳轉至此實時監(jiān)控單元,對ETHREAD、 KTHREAD和
EPROCESS進行訪問,特別是通過訪問EPROCESS,可以獲知當前進程的各 項參數(shù)。
歩驟204:遠程跳轉返回至上下X切換函敖,保證上下大切換函敖接鉤。 由以上介紹可知,通過查找上下文切換函數(shù)地址,然后將其跳轉至遠程, 對EPROCESS結構進行訪問,就能得到當前進程有關信息,達到檢測進程的 目的。由于本發(fā)明從調度線程出發(fā),而線程又處于操作系統(tǒng)的最底層,這也 就保證了獲取的進程信息是真實可靠的,而且,不存在因操作系統(tǒng)版本不同 而不能通用的問題。采用實施例一提供的方法,能夠檢測出操作系統(tǒng)當前的 進程,包括正常的進程、以及基于內核級隱藏的進程。
下面詳細介紹本實施例二
為了防止攻擊者也對上下文切換函數(shù)進行類似的掛鉤行為,在實施例一 的基礎上,增加了遠程跳轉及其報警日志的動態(tài)監(jiān)控和更新,以此保證檢測 的準確性。
實施例二具體操作是,在地址空間中查找到上下文切換函數(shù)地址后,先 對前面若干字節(jié)進行檢查,如果發(fā)現(xiàn)已經(jīng)被修改為遠程跳轉,則記錄報警曰 志,并且將其恢復,然后再進行遠程跳轉修改。
如圖4所示,實施例二包括
步驟401:查找上下文切換函數(shù)地址;
步驟402:檢查上下文切換函數(shù)地址前面字節(jié)是否被篡改,若是,執(zhí)行步
驟403,否則,執(zhí)行步驟404;
步驟403:將篡改的地址恢復為原始狀態(tài);
步驟404:修改上下文切換函數(shù)首部地址內容為遠程跳轉指令;
步驟405:遠程跳轉至訪問EPROCESS結構,獲取當前切換進程ID和進
程鏡像文件等信息;
步驟406:遠程跳轉返回至上下文切換函數(shù),保證上下文切換函數(shù)掛鉤。 除了采用上述步驟使檢測結果更加準確之外,還可以動態(tài)監(jiān)控上下文切
換函數(shù)首部地址內容以及報警日志 一旦發(fā)現(xiàn)上下文地址^^皮篡改,立即恢復,
并記錄報警曰志。下面詳細介紹本實施例三
上述兩個實施例能夠完成檢測當前進程的目的,然而對于確定哪些是
DKOM隱藏的惡意進程還需要進一步判斷。
任何一個進程都要通過API與操作系統(tǒng)進行交互,而大多數(shù)交互都通過 系統(tǒng)調用傳遞給內核,而那些不使用任何API而存在的進程對系統(tǒng)不能起任 何作用,所以可以使用系統(tǒng)調用管理器來攔截系統(tǒng)調用,然后得到當前進程 的EPROCESS。
在實施例一或實施例二的基礎上,實施例三對檢測到的進程ID和進程鏡 像文件名等進程信息,再與調用API得到的當前進程ID和進程鏡像文件名進 行比較,如果不一致,則說明存在基于內核級隱藏的進程,也就是存在DKOM 的rootkit。
為了保證實時檢測單元、以及操作系統(tǒng)在硬盤上的鏡像文件不被篡改, 還可以在操作系統(tǒng)上安裝信任鏈工具(信任鏈軟件),來保證其安全性。
本發(fā)明還公開了 一種檢測進程的設備,用于檢測操作系統(tǒng)內核級隱藏進 程,操作系統(tǒng)包括現(xiàn)有或未來出現(xiàn)的各種類型,例如WINDOWS系列操作系 統(tǒng)、UNIX系列操作系統(tǒng)以及LINUX系列操作系統(tǒng)等。
如圖5所示,該4金測設備包括地址查詢單元501、跳轉單元502和實時監(jiān) 控單元503,跳轉單元502在地址查詢單元501獲知上下文切換函數(shù)地址后, 修改調度程序(上下文切換函數(shù))首部內容地址,進行遠程跳轉,通過實時 監(jiān)控單元503對EPROCESS結構的實時訪問,獲得當前進程的有關信息。
地址查詢單元501,用于查找操作系統(tǒng)內核地址空間,得到上下文切換函 數(shù)地址。具體實施中,可通過反匯編得到操作系統(tǒng)內核調度程序的二進制特 征碼;然后查找這些特征碼,就能獲得到上下文切換函數(shù)地址;或者,可以 采用搜索算法來查找到上下文切換函數(shù)地址。
跳轉單元502,主要針對調度程序的地址進行跳轉。在地址查詢單元501 得到上下文切換函數(shù)地址時,跳轉單元502會修改上下文切換函數(shù)首部地址 內容為遠程跳轉指令,并指示實時監(jiān)控單元503對進程結構體EPROCESS進 行監(jiān)控。
實時監(jiān)控單元503,得到跳轉單元502監(jiān)控指示后,對進程結構體進行訪
問,得到進程有關信息,包括進程名稱、進程ID和進程鏡像文件等。
優(yōu)選地,進程檢測設備還包括進程比較單元504,用于將實時監(jiān)控單元 503檢測到的進程信息與調用API進程信息進扦比較,在比較結果不一致的情 況下,確定存在內核級隱藏進程。
進一步,跳轉單元502包括跳轉執(zhí)行子單元511,它在得到上下文切換函 數(shù)地址時,將上下文切換函數(shù)首部地址內容修改為遠程跳轉指令,并指示實 時監(jiān)控單元503對進程結構體進行監(jiān)控。
優(yōu)選地,跳轉單元502還包括跳轉返回子單元512、首部地址內容檢測子 單元513和才艮警日志514。跳轉返回子單元512,當?shù)弥獙崟r監(jiān)控單元503獲 取到進程信息后,通知操作系統(tǒng)內核執(zhí)行被遠程跳轉指令覆蓋的上下文切換 函數(shù)首部地址內容指令,并指示操作系統(tǒng)內核返回至上下文切換函數(shù);首部
地址內^^r測子單元513用于動態(tài)監(jiān)控上下文切換函數(shù)首部地址內容是否被 篡改,若是,立即通知操作系統(tǒng)內核將其恢復為原始狀態(tài);報警日志514用 于根據(jù)首部地址內容檢測子單元513檢測,記錄上下文切換函數(shù)首部地址內 容被篡改的情況。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術領域的普 通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤 飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。
權利要求
1. 一種檢測進程的方法,其特征在于包括查找操作系統(tǒng)內核地址空間,得到上下文切換函數(shù)地址;修改所述上下文切換函數(shù)首部地址內容為遠程跳轉指令,通過遠程跳轉,訪問進程結構體,獲取進程信息。
2、 根據(jù)權利要求1所述的檢測進程的方法,其特征在于,在獲取進程信 息之后,所述方法還包括執(zhí)行被遠程跳轉指令覆蓋的上下文切換函數(shù)首部地址內容指令,并將遠 程跳轉返回至上下文切換函數(shù)。
3、 根據(jù)權利要求2所述的檢測進程的方法,其特征在于,在遠程跳轉返 回至上下文切換函數(shù)之后,所述方法還包括將所述獲取的進程信息與調用應用編程接口 API進程信息進行比較,若 不一致,確定存在內核級隱藏進程。
4、 根據(jù)權利要求1、 2或3所述的檢測進程的方法,其特征在于,在得 到上下文切換函數(shù)地址之后,所述方法還包括檢測上下文切換函數(shù)首部地址內容是否被篡改,若是,立即將其恢復為 原始狀態(tài),并記錄報警曰志。
5、 根據(jù)權利要求1、 2或3所述的檢測進程的方法,其特征在于,所述 方法還包括動態(tài)監(jiān)控上下文切換函數(shù)首部地址內容是否被篡改,若是,立即將其恢 復為原始狀態(tài),并記錄報警日志。
6、 根據(jù)權利要求5所述的檢測進程的方法,其特征在于,采用搜索算法 查找內核地址空間得到上下文切換函數(shù)地址;或者,由以下步驟得到上下文切換函數(shù)地址通過反匯編得到才喿作系統(tǒng)內核調度程序的二進制特征碼,通過所述特征 碼查找到上下文切換函數(shù)地址。
7、 一種檢測進程的i殳備,其特征在于包括地址查詢單元、跳轉單元和實時監(jiān)控單元;所述地址查詢單元,用于查找操作系統(tǒng)內核地址空間,得到上下文切換函數(shù)地址;所述跳轉單元,在所述地址查詢單元得到上下文切換函數(shù)地址時,修改 上下文切換函數(shù)首部地址內容為逸程跳轉指令,并指殺賣時藍控單充對進程 結構體進行監(jiān)控;所述實時監(jiān)控單元,得到跳轉單元監(jiān)控指示后,對進程結構體進行訪問, 得到進程有關信息。
8、 根據(jù)權利要求7所述的檢測進程的設備,其特征在于,所述設備還包 括進程比較單元,用于將所述實時監(jiān)控單元得到的進程信息,與調用API進程信息進行比 較,在比較結果不一致的情況下,確定存在內核級隱藏進程。
9、 根據(jù)權利要求7或8所述的檢測進程的設備,其特征在于,所述跳轉 單元包括跳轉執(zhí)行子單元和跳轉返回子單元;所述跳轉執(zhí)行子單元,在所述地址查詢單元得到上下文切換函數(shù)地址時, 將上下文切換函數(shù)首部地址內容修改為遠程跳轉指令,并指示實時監(jiān)控單元 對進程結構體進行監(jiān)控;所述跳轉返回子單元,當?shù)弥獙崟r監(jiān)控單元獲取到進程信息后,通知操 作系統(tǒng)內核執(zhí)行被遠程跳轉指令覆蓋的上下文切換函數(shù)首部地址內容指令, 并指示操作系統(tǒng)內核返回至上下文切換函數(shù)。
10、 根據(jù)權利要求9所述的檢測進程的設備,其特征在于,所述跳轉單 元還包括首部地址內容檢測子單元,用于動態(tài)監(jiān)控上下文切換函數(shù)首部地址內容是否被篡改,若是,立即通 知操作系統(tǒng)內核將其恢復為原始狀態(tài);所述跳轉單元還包括報警日志,用于記錄上下文切換函數(shù)首部地址內容 被篡改情況。
11、 根據(jù)權利要求10所述的檢測進程的設備,其特征在于,所述操作系 統(tǒng)包括WINDOWS系列操作系統(tǒng)、UNIX系列操作系統(tǒng)或LINUX系列操作系 統(tǒng);所述進程有關信息,包括進程ID、進程名稱或進程鏡像文件。
全文摘要
本發(fā)明公開了一種進程的檢測方法,該方法尤其針對內核級隱藏進程進行檢測,包括以下步驟查找操作系統(tǒng)內核地址空間,得到上下文切換函數(shù)地址;修改上下文切換函數(shù)首部地址內容為遠程跳轉指令,通過遠程跳轉,訪問進程結構體,獲取進程信息。由于本發(fā)明從處于操作系統(tǒng)最底層的線程上下文切換函數(shù)出發(fā),可以獲得最真實的內核對象信息,對于各種操作系統(tǒng)版都能通用,能夠對DKOM隱藏進程進行有效的檢測;而且,通過對上下文切換函數(shù)首部地址內容以及報警日志的動態(tài)監(jiān)控和更新,保證了隱藏進程檢測的準確性。本發(fā)明還公開了一種進程的檢測設備。
文檔編號G06F21/00GK101206692SQ200610165468
公開日2008年6月25日 申請日期2006年12月20日 優(yōu)先權日2006年12月20日
發(fā)明者俊 李, 凱 王 申請人:聯(lián)想(北京)有限公司