Rootkit的檢測與取證分析_第1頁
Rootkit的檢測與取證分析_第2頁
Rootkit的檢測與取證分析_第3頁
Rootkit的檢測與取證分析_第4頁
Rootkit的檢測與取證分析_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Rootkit的檢測與取證分析靳慧云1,王鋼2(1.浙江警察學(xué)院,浙江杭州310053;2.鐵道警官高等??茖W(xué)校,河南鄭州450053)摘要:Rootkit是目前難以檢測、清除、防范和破壞性強的惡意程序。通過分析Rootkit的內(nèi)核機制,給出檢測Rootkit的基本方法,以應(yīng)用于Rootkit防范和取證分析。關(guān)鍵詞:Rootkit;Rootkit檢測;Rootkit取證分析TP393.08:A1Rootkit的概念Rootkit是一種能夠以管理員身份訪問計算機或計算機網(wǎng)絡(luò)的程序。攻擊者通過利用已知的漏洞或口令破解而獲得用戶級訪問,或利用其他手段,將Rootkit安裝到被攻擊的計算機上。Rootkit安裝以后,它將準(zhǔn)許攻擊者掩飾其入侵行為,并獲得對計算機的Root級或特權(quán)級的訪問,在可能的情況下還可以獲得對網(wǎng)絡(luò)上其它計算機的訪問。2典型Rootkit的特點典型的Rootkit實現(xiàn)隱藏(如隱藏文件、進程、線程、端口、注冊表、其他進程等)、后門等遠程控制的功能,它利用多種技術(shù)來操縱操作系統(tǒng),其結(jié)果就是用戶無法利用普通的殺毒軟件來檢測和清除。典型的Rootkit具有以下特點:1)隱藏文件或目錄;2)隱藏運行的進程;3)隱藏TCP或UDP連接;4)程序執(zhí)行重定向;5)增加非授權(quán)用戶權(quán)限;6[來自Www.lw5U.com])改變一個運行進程的UID/GID;7)非授權(quán)地、特權(quán)程序遠程執(zhí)行守護進程。聯(lián)合使用程序執(zhí)行重新定向和文件隱藏,入侵者能提供各種后門程序執(zhí)行。由于執(zhí)行重定向是在內(nèi)核級別進行的,文件檢測工具不會發(fā)現(xiàn)程序文件被修改,因此配置檢測工具的路徑環(huán)境中也不會發(fā)現(xiàn)任何異常。Rootkit潛在的威脅和攻擊策略一般來說,Rootkit自身并不是惡意軟件,它是惡意軟件用來隱藏自己的一種手段。Rootkit是攻擊者用來潛藏自己的蹤跡和保留Root訪問權(quán)限的工具,但經(jīng)設(shè)計的Rootkit可能包括間諜軟件和其它的程序,如監(jiān)視網(wǎng)絡(luò)通信和用戶擊鍵的程序,也可以在系統(tǒng)中構(gòu)建一個后門便于攻擊者使用,還可以修改日志文件,攻擊網(wǎng)絡(luò)上的其它計算機,或者改變現(xiàn)有的系統(tǒng)工具以用逃避檢測。Rootkit已被大多數(shù)的防毒軟件歸類為具危害性的惡意代碼。通常,攻擊者通過遠程攻擊獲得Root訪問權(quán)限,或者首先采用密碼猜測或者破譯密碼的方式獲得系統(tǒng)的訪問權(quán)限,進入系統(tǒng)后,再通過某些安全漏洞獲得系統(tǒng)的Root權(quán)限。攻擊者會在侵入的主機中安裝Rootkit.并經(jīng)常通過R。otkit的后門來檢查系統(tǒng)能不能有其他的用戶登錄,如果只有攻擊者登錄,攻擊者就開始著手清理日志中的有關(guān)信息。攻擊者通過Rootkit的嗅探器獲得其他系統(tǒng)的用戶和密碼之后,就會利用這些信息進行攻擊。同時,用戶無法在資源管理器中利用普通的文件查看程序來查找間諜文件,也不能通過任務(wù)管理器或其它的多數(shù)進程查看器來查看。同樣地,在系統(tǒng)的啟動文件夾內(nèi)或其它的啟動位置中都無法找到其它。攻擊者日益熱衷于用Rootkit隱藏間諜軟件或病毒等,目的是避免被查殺,使用戶們更容易遭受攻擊,而一般的反間諜軟件或反病毒掃描程序無法檢測這種代碼。專業(yè)Rootkit檢測工具,也只能針對性地檢測出少部分Rootkit程序。Rootkit的類型固化Rootkits和BIOSRootkits固化程序是儲存于只讀內(nèi)存ROM中的程序,固化Roolkit(FirmwareRootkits)通常很小,使用系統(tǒng)硬件和BIOS創(chuàng)建頑固的惡意軟件鏡像。這種Rootkit可以成為固化軟件很隱蔽地隱藏起來,因為人們通常并不檢查固化代碼的完整性。如硬件的BIOS、處理器、打印機、圖像卡等設(shè)備,運行固化代碼來執(zhí)行特定的功能。固化Rootkit不是像通常修改用戶級或核心層的軟件。因此,在這一層完整性檢查是非常少有的。BIOSRootkits將制定的代碼植入到BIOS中,能夠刷新BIOS,在BIOS初始化的末尾獲得運行的機會。重啟對BIOSRootkits沒有任何作用、在硬盤上無法探測到BIOSRootkits,即使重新格式化硬盤或重新安裝操作系統(tǒng)也不會對它有任何影響?,F(xiàn)有的安全軟件將大部分的掃描時間用在了對硬盤的掃描上。內(nèi)核級Rootkits內(nèi)核級Rootkits(KernellandRootkits)是通過修改內(nèi)核、增加額外的代碼、直接修改系統(tǒng)調(diào)用表、系統(tǒng)調(diào)用跳轉(zhuǎn)(SyscallJump),并能夠替換一個操作系統(tǒng)的部分功能,包括內(nèi)核和相關(guān)的設(shè)備驅(qū)動程序?,F(xiàn)在的操作系統(tǒng)大多沒有強化內(nèi)核和驅(qū)動程序的不同特性。這樣,許多內(nèi)核模式的Rootkit是作為設(shè)備驅(qū)動程序而開發(fā)的,或者作為可加載模塊,如Linux中的可加載模塊或Windows中的設(shè)備驅(qū)動程序,這類Rootkit極其危險,因為它可獲得不受限制的安全訪問權(quán)。如果代碼中有任何一點錯誤,那么內(nèi)核級別的任何代碼操作都將對整個系統(tǒng)的穩(wěn)定性產(chǎn)生深遠的影響。內(nèi)核級Rootkits-般特點:無進程;無端口、難發(fā)現(xiàn)、難查殺、生存能力強。與用戶級Rootkit相比,內(nèi)核級Rootkit的破壞性更大,而且它能夠逃避任何應(yīng)用層的檢測,使得預(yù)防和檢測的難度更大。內(nèi)核級的Rootkits極其危險,其原因在于它與操作系統(tǒng)處于同一級別,如此一來,它就可以修改或破壞由其它軟件所發(fā)出的任何請求。這種情況下,受感染內(nèi)核級的Rootkist的系統(tǒng)自身信任度降低,在對其進行檢測時,要使用另外一個可信任的系統(tǒng)及其安裝的檢測軟件,并將受感染的系統(tǒng)加載為一個數(shù)據(jù)源進行檢測。用戶態(tài)Rootkits用戶態(tài)Rootkits(UserlandRootkits)是運行在Ring3級的Rootkit,由于Ring3級就是用戶應(yīng)用級的程序,而且信任級別低,每一個程序運行,操作系統(tǒng)給這一層的最小權(quán)限。用戶態(tài)Rootkit使用各種方法隱藏進程、文件,注入模塊、修改注冊表等。由于Rootkit技術(shù)變得越來越先進,其檢測變得同樣困難。應(yīng)用級Rootkits應(yīng)用級Rootkits可以通過具有特洛伊木馬特征的偽裝代碼來替換普通的應(yīng)用程序的二進制代碼,也可以使用Hook、補丁、注入代碼或其它方式來修改現(xiàn)有應(yīng)用程序的行為。代碼庫Rootkits代碼庫Rootkits可以用隱藏攻擊者信息的方法進行補丁、Hook、替換系統(tǒng)調(diào)用。從理論上講,這種Rootkit可以通過檢查代碼庫(在Windows平臺中就是DLL)的改變而發(fā)現(xiàn)其蹤跡。實際上,很難檢測一些應(yīng)用程序和補丁包一起發(fā)行的多種程序庫中的Rootkit。虛擬化Rootkits與HypervisorRootkits虛擬化Rootkit(VirtualRootkits)是利用虛擬機技術(shù)的虛擬機Rootkit(是模仿軟件虛擬機形式的Rootkit)。這種Rootkit通過修改計算機的啟動順序而發(fā)生作用,其目的是加載自己而不是原始的操作系統(tǒng)。一旦加載到內(nèi)存,虛擬化Rootkits就會將原始的操作系統(tǒng)加載為一個虛擬機,這就使得Rootkit能夠截獲客戶操作系統(tǒng)所發(fā)出的所有硬件請求。HypervisorRootkits是一種基于硬件或固化的Rootkit。它具有管理員權(quán)限的管理程序,可以在支持硬件協(xié)助虛擬化和未安裝虛擬化軟件的系統(tǒng)上安裝基于Hypervisor的Rootkit。然后,這個基于Hypervisor的Rootkit將可以在比操作系統(tǒng)本身更高的權(quán)限級別上運行?;贖ypervisor的Rootkit對攻擊者的特點是:合法內(nèi)核模式代碼降低了檢測出攻擊者Hypervisor模式代碼的能力。它是在硬件上運行的虛擬的環(huán)境,由于攻擊者強行在真正的內(nèi)核插入虛擬機,在硬件上運行,因此,這常被誤認(rèn)為是內(nèi)核Rootkits。在攻擊者執(zhí)行內(nèi)核模式代碼之前,HypervisorRoofkits不會運行。當(dāng)一個系統(tǒng)被HypervisorRootkits感染時,在該系統(tǒng)的Kernellan[來自WwW.lw5u.c0m]d沒有任何跡象,這是與HypervisorRootkits而不是真正的硬件交互。因此,幾乎是不可能從Kernelland、Userland和應(yīng)用層檢測到。在Rootkit和Anti-Rootkit的對抗中,取決于對該Hypervisor層的檢測和預(yù)防,以及在哪一層安裝了Rootkit。誰先去接近硬件就是贏者。這意味著如果用戶運行基于Userland或Kernelland的Anti-Rootkit工具,無法檢測到HypervisorRootkits,因為前者不是運行在真實的硬件上,但高于真正的硬件虛擬機。Rootkits檢測許多取證工具不能發(fā)現(xiàn)Rootkit隱藏的信息,Rootkit的設(shè)計者絞盡腦汁利用很多辦法隱藏進程、隱藏文件、端口或句柄、注冊表的項、鍵值等信息。1)系統(tǒng)調(diào)用表和內(nèi)存保護、實現(xiàn)內(nèi)核級鉤子的方法,是Rootkit實現(xiàn)攔截、控制、監(jiān)視其他程序并過濾有關(guān)數(shù)據(jù)、并且達到隱藏Rootkit本身及其它程序的目的技術(shù)方法。通過多種方法組合成了Rootkit,如進程注入、分層驅(qū)動過濾等。如果Rootkit在內(nèi)核中修改了進程表,通過ZwQuerySystemlnformation函數(shù)、CSRSS.EXE進程列舉進程表,可以檢測出Rootkit的存在。檢測Rootkit可以繞過API提供的數(shù)據(jù),直接從內(nèi)核領(lǐng)域里讀取進程列表,因為所有進程在這里都不可能把自己隱藏起來。也就是說,內(nèi)核始終擁有最真實的進程列表和超級權(quán)限,只要能讀取這個原始的進程列表,再和進程API枚舉的進程列表對比,便能發(fā)現(xiàn)Rootkit進程,由于這類工具也“越權(quán)”了,因而對Rootkit進行查殺也就不再是難事,而Rootkit進程一旦被清除,它隱藏自身的措施也就不復(fù)存在,內(nèi)核就能把它顯示出來了。進而查找Rootkit秘密植入的惡意軟件。由于進程要生存在內(nèi)存中,總是可以在內(nèi)存中檢測Rootkit。針對物理內(nèi)存或特定進程的當(dāng)前狀態(tài)創(chuàng)建完整內(nèi)存映像,通過訪問物理內(nèi)存以進行分析,比如枚舉所有進程及其句柄表。通過物理內(nèi)存進行進程捕獲進程,可以繞過進程中用來保護自己而使用的反調(diào)試?yán)蹋辉谖锤郊舆M程的情況下讀取進程的虛擬內(nèi)存,受保護的進程對于被“捕獲”將無可奈何;繞過調(diào)試寄存器(DR)Rootkit;捕獲加密前后進程中的通訊字符串;克服大部分的加殼程序,因為捕獲的進程都是處于未脫殼狀態(tài);在未接觸磁盤的情況下獲取被注入的DLL文件。2) 另一種基于內(nèi)存的檢測方法是在操作系統(tǒng)或進程中查找鉤子。鉤子存在于導(dǎo)人地址表(IAT)、系統(tǒng)服務(wù)調(diào)度表(SSDT)、中斷描述表(IDT)、驅(qū)動程序的I/O請求報文處理程序(IRP)、內(nèi)聯(lián)函數(shù)。需要分別設(shè)計程序查找鉤子。Rootkit設(shè)計者常用的隱藏技術(shù)有:刪除進程雙項鏈上的進程對象(由于NativeAPI枚舉進程是通過進程活動鏈表實現(xiàn)的)、修改系統(tǒng)調(diào)用表(SST)、端口隱藏、隱藏文件。通過分析內(nèi)容可以提取嫌疑信息,只要對系統(tǒng)產(chǎn)生影響,就有進程或線程,它們總是有啟動的入口,Rootkit也不例外。3) 可以通過讀取Windowsdispatcherscheduler所用的另一個鏈表來列出進程。也就是說可以直接通過讀取KiWaitInListHead和KiWaitOutListHead來列舉進程,這樣就突破了修改雙向鏈表隱藏進程的方法。不過這種檢測方法不久就被突破了,這就是替換內(nèi)核的進程鏈表??梢允褂肏OOKSwapContext方法來檢測隱藏進程,只要被處理器調(diào)度的線程就能被檢測到。在Windows2K/NT/XP系統(tǒng)中,處理器的調(diào)度對象是線程,在非SMP的Os中,某時間段內(nèi)當(dāng)前CPU處理的進程只可能有一個。每個進程分配特定的CPU時間片來達到執(zhí)行目的,而系統(tǒng)的CPU時鐘中斷確定了每個進程分配的時間片。也就是當(dāng)系統(tǒng)CPU時鐘中斷觸發(fā)時,產(chǎn)生的進程調(diào)度請求。處理器時鐘中斷發(fā)生的時候會調(diào)用KiDispatchlnterrupt()比較當(dāng)前進程分配的時間片,如用完后會調(diào)用KiQuantumEnd()根據(jù)各線程優(yōu)先級等信息用特定的調(diào)度算法選擇新的線程(ETHREAD),然后將其返回值——ETHREAD結(jié)構(gòu)作為參數(shù),來調(diào)用SwapContext()設(shè)置ETHREAD和EPROCESS中的各項參數(shù),并替換KPCR中的相應(yīng)結(jié)構(gòu)完成線程切換,調(diào)度到另一個進程(EPROCESS)的線程(ETHREAD)繼續(xù)執(zhí)行。SwapContex函數(shù),將當(dāng)前運行線程的上下文與重新執(zhí)行線程的上下文的線程進行交換,EDI寄存器中的值是下一個要交換進入的線程的指針,ESI寄存器中的值是要交換出去的當(dāng)前線程指針。將SwapContex函數(shù)的前導(dǎo)替換為指向Detour函數(shù)的5字節(jié)無條件跳轉(zhuǎn)指令。Detour函數(shù)應(yīng)該驗證要交換進入的線程(由EDI寄存器指示)的KTHREAD指向一個正確鏈接到EPROCESS塊。通過這種方法可以檢測到利用直接內(nèi)核對象操作的技術(shù)隱藏的進程,利用SwapContex函數(shù)也可以檢測到通過Hook的方法隱藏的進程。可以說CPU的線程切換離不開S

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論