關於rootkit

一、定義

rootkit是由有用的小型程序組成的工具包,使得攻擊者能夠保持訪問計算機上具有最高權限的用戶“root”。換句話說,rootkit是能夠持久或可靠地、無法檢測地存在於計算機上的一組程序和代碼。

rootkit提供了兩個主要功能:遠程命令和控制,以及軟件竊聽。

遠程命令和控制(簡稱遠程控制):包括對文件進行控制,導致系統重啓或“死機藍屏”,以及訪問命令shell(即cmd.exe或/bin/sh)。

軟件竊聽:就是觀察人們在做什麼,它包括嗅探報文、截獲擊鍵以及閱讀電子郵件。攻擊者可以使用這些技術來捕獲口令和解密的文件,甚至加密密鑰。

二、rootkit的工作方式

rootkit通過簡單的修改概念來動作。軟件通常設計爲基於非常特定的數據來做出選定的決策。而rootkit對軟件進行定位並修改,導致它做出不正確的決策。修改操作可以發生於軟件中的許多位置,如下:

1、打補丁

可執行代碼(有時稱爲二進制代碼)具有非常選定的順序,每個字節對於計算機來說都意味着某種含義。如果修改了這些字節,就會修改軟件邏輯,這就稱爲打補丁。對數據字節打補丁是破解人員消除軟件保護所用的主要技術之一,其他類型的字節補丁已用於在遊戲中進行欺騙(如獲取無限的金幣、健康值等)。

2、復活節彩蛋

即程序員在自己編寫的程序中放置後門。

3、間諜件修改

有時候一個程序會修改另一個程序,將其感染上“間諜件”。有些間諜件會鉤進Web瀏覽器或shell程序裏,從而難以檢測和刪除。

4、源代碼修改

程序員可以將惡意的源代碼插入到自己所編寫的程序中,比如一些開源項目,因爲很少有人會真逐行地分析代碼。例如,惡意程序員故意將程序暴露出緩衝區溢出漏洞,它被識別爲軟件bug,因此是難以難測的。

5、軟件修改的合法性

如網上下載的破解補丁。

三、繞過IDS(入侵檢測系統)/IPS(入侵防護系統)

繞過防火牆和IDS/IPS軟件有兩種方法:主動方法和被動方法。這兩種方法必須結合想來構造健壯的rootkit。

主動方法:在系統運行時進行工作,其設計思路是預防檢測。主動進攻是對系統硬件和內核進行修改,其目的是破壞和迷惑入侵檢測軟件,用於對抗在內存中運行並試圖檢測rootkit的軟件,可導致系統管理工具無法檢測攻擊。比如對病毒掃描器進行定位並將其禁用。

被動方法:即將數據存儲和傳輸模糊化。如在將數據存儲到文件系統之前對其進行加密,並將解密密鑰存儲到非易失性硬件存儲器(例如閃存RAM或EEPROM)而不是文件系統中;或者從隱祕信道從網絡中偷取數據;或者爲了躲避病毒掃描器的離線掃描而將自身隱藏在文件系統中,以便掃描器無法檢測到它。

四、繞過取證分析工具

1、對抗字節模式掃描:對rootkit自身進行加密,並對負責解密的部分使用多態技術以變換解密代碼。

2、以非常規方式存儲(例如在驅動器的壞扇區之中),或者存儲爲臨時數據文件。

3、爲了對抗文件系統的檢測,將rootkit安裝到內存中。缺點是在系統重啓時會消失。

4、在極端情況下,rootkit也可以將自身安裝到BIOS或閃存RAM芯片中的某處固件中。

五、自啓動的方法

1、使用註冊表鍵“run”(古老的可靠方法):所有的病毒掃描器都檢查該鍵,可以在加載了rootkit後將該鍵的值隱藏起來。

2、使用特洛伊木馬或被感染的文件:類似於病毒感染文件的方式,並且感染的最佳目標之一就是病毒掃毒或安全產品。

3、使用.ini文件:典型的如win.ini。

4、註冊成爲驅動程序:rootkit可以將自身註冊爲啓動時加載的驅動程序,這需要創建註冊表,一旦加載了rootkit之後,可以將該鍵隱藏起來。

5、註冊爲現有應用程序的附加件:比如註冊爲Web瀏覽器的擴展。

6、修改磁盤上的內核:可以直接修改內核並將其保存到磁盤上。

7、修改啓動引導程序:可以修改啓動引導程序,在內核加載之前對其打補丁。

六、rootkit的檢測

1、檢測rootkitr的存在

1)守護門口:在rootkit加載到內存時進行檢測。rootkit可以利用許多操作系統函數將自身加載到內存中,通過監視這些入口點,有時能夠發現rootkit。然而,存在着大量這類要監視的入口點,如果檢測軟件遺漏任何一種加載方法,就會前功盡棄。一般的入口點包括如下:

ZwOpenKey

ZwCreateKey

ZwSetValueKey

ZwCreateFile

ZwOpenFile

ZwOpenSection

ZwCreateLinkObject

ZwSetSystemInformation

ZwOpenProcess

2)掃描空間:週期性地掃描內存,查找與rootkit相對應的已知模塊或模塊簽名。這種技術無法阻止rootkit的加載,而且只能發現已知的攻擊者。優點在於簡單。

3)查找鉤子:在操作系統或進程之中查找鉤子。缺點是無法阻止rootkit的加載,優點是它是一種通用方法,不存在着搜索已經簽名或模式的問題。

2、檢測rootkit的行爲

1)檢測隱藏的文件和註冊表:在低層次上分析文件系統,然後調用高層API,二者進行比較,若有矛盾情況,則發現隱藏行爲。

2)檢測隱藏的進程:

(1)鉤住SwapContext函數。調用SwapContext函數將當前運行線程的上下文與重新執行線程的上下文進行交換。通過鉤住SwapContext函數,可以得到真實的進程列表。

(2)列出進程列表:除了通過ZwQuerySystemInformation函數之外,還有一些方法可以列出系統上的進程。例如通過netstat.exe列出端口就可能暴露出隱藏的進程。CSRSS.EXE進程是另一種發現系統上幾乎全部進程的方法,它擁有除以下4個進程之外的所有進程的句柄:

Idle進程

System進程

SMSS.EXE

CSRSS.EXE

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章