天天看點

使用KSAT檢測可加載核心子產品

使用KSAT檢測可加載核心子產品

1.目的

本文包括LKM基礎,如何檢測LKM。

2.LKM

什麼是LKM?LKM是可加載核心子產品的縮寫,就是那些包含動态可加載部分的檔案。通常LKM用來加載裝置驅動程式和其它的硬體驅動程式。在Linux、Solaris和BSD(Free、Net和open)等作業系統可以見到LKM。本文集中讨論Linux。

在Linux中有幾個工具來處理LKM的諸如加載、清單和解除安裝等操作。在讨論這些工具之前,我們先看看一些重要的關于LKM的檔案和目錄。第一個目錄是/lib/modules/"kernel_vision",讓我們看看在這個目錄下的内容:

表一列出了LKM相關的檔案和目錄。其中隻有modules.dep、modules.pcimap、modules.isapnpmap、modules.usbmap不是目錄。這些實際上是系統内的LKM的清單。讓我們看看net目錄下的檔案(不完全):

從這個清單中我們可以得到幾點資訊。第一,子產品名字是一.o結尾,為何?因為它們是包含子產品内容的目标檔案。第二,這個清單并不完全,因為沒有足夠的空間來寫出它的全部内容。

我們要注意的第二個重要的檔案是/etc/conf.modules。這個檔案讓系統管理者為加載子產品定義不同的參數。conf.modules檔案的文法看起來象這樣:

alias parport_lowlevel parport_pc

conf.modules允許系統管理者定義通常使用的子產品的别名。注意:這個檔案并非系統必需的。一個系統管理者可以定義位元組的配置檔案。一個系統管理者可以使用modprobe -C指令來完成這項工作。

因為我前面講到了modprobe指令,是以讓我們大體看看modprobe和Linux中其它LKM的管理工具。modprobe指令用來加載一個或者多哥子產品,它使用modules.dep檔案來檢查子產品之間的依賴關系。depmod程式産生文法類似于Makefile的依賴關系檔案。我要講的最後三個工具是:lsmod、insmod、rmmod。lsmod為系統管理者提供目前核心加載的LKM的清單,這個清單也可以在/proc/modules中看到。如果你想知道目前正在運作的有哪些核心,這個工具會有所幫助。不過,後面你将看到lsmod對于檢查rootkit LKM并不有效。insmod用來加載LKM。有些特洛伊LKM就是使用insmod -f指令來加載特洛伊子產品。rmmod用來解除安裝正在運作的LKM,不過通常rmmod對于rootkit LKM是無效的。稍後,我們将講述細節。本節我講了LKM的基礎知識,具體請參考http://www.kernel.org

3.LKM rootkit 和KSTAT

最近,一個LKM rootkit(adore)引起了廣泛的注意。adore蠕蟲不是LKM adore。我在此要讨論的是LKM adore,關于adore蠕蟲已經有人分析了。從下面這個網址可以下載下傳這個adore rootkit:http://packetstorm.securify.com/filedesc/adore-0.34.html

adore是一個Linux LKM rootkit。非常易于安裝,在配置時隻需要很小的調整。可以使用預設的配置來安裝adore,使用者還可以對其代碼做某些修改。其readme檔案建議修改ELITE_CMD和HIDDEN_PORT來改變設定。當運作./configure時,它會要求你輸入一個密碼。這個密碼是使用後門端口時,做驗證用。如果你需要了解更多的資訊,就下載下傳一個吧。運作make後,你可以看到兩個檔案--ava、startadore。需要運作startadore檔案來啟動adore。一旦啟動adore,就可以使用ava了,下面是運作./ava的輸出:

上面這個表是adore為使用者提供的功能選項。在此,我不對這些功能做過多解釋,因為這對于我們的檢測沒什麼幫助。現在我們要讨論一些adore(LKM)的基礎知識,以及如何檢測adore等LKM rootkit。

許多rootkit能夠隐藏程序、目錄、檔案甚至連接配接。但是,這些很多是通過修改一些程式例如:ps、df、netstat、top和lsof的二進制檔案。有很多方式可以檢測到這種rootkit,例如:t0rn。

MD5校驗

用可靠的地方(例如:CD-ROM)的源代碼重新編譯程式

一些rootkit使用預設端口,能夠引起系統管理者的注意。

使用如chkrootkit之類的程式。

這些技術檢測t0rn之類的rootkit可以,但是用來檢測LKM rootkit是無效的。因為LKM rootkit是在核心層隐藏程序、連接配接、目錄和檔案,它不修改程式二進制檔案,是以MD5校驗也就無效了。檢查端口可能好使,不過它最多隻能告訴你已經被rooted了。

那麼,如何才能LKM rootkit呢?好辦,在此我強烈推薦一個程式KSTAT,它可以很好地完成這項任務。在檢查記憶體時,KSTAT使用/dev/kmem檔案獲得系統的資訊。這就是KSTAT的輸出:

你看到了,KSTAT為使用者提供了許多選項來檢測rootkit。通過講述這些選項,你可以知道如何檢測這些LKM rootkit:knark、adore和rkit。

BTW,如果我忽略了一些LKM rootkit,将在以後補上。kstat -s恐怕是檢測LKM rootkit最好的方式。其它的選項也是很不錯的,但是kstat -s在任何時候都是有效的。這就是kstat -s的輸出:

表5不太完全,但是給了我們一個大體的印象。記住,-s選項為我們提供了一個系統調用表sys_call_table的圖。後面我們将再次涉及這些内容。

kstat -P是另一個很有效的選項。這個選項列出目前在系統中運作的所有程序。包括被LKM rootkit隐藏的程序。表6是一個輸例子:

當第一次運作kstat時,我對它所說的功能有所懷疑,但是後來我的疑慮被消除了。下面我們來試試這個功能選項。我首先運作ava -i 241,這個指令用來隐藏portmap程序。接着我運作kstat -P,輸出就是表6。然後,我運作ps -ef,沒有發現portmap。lsof也不能發現。表7是ps -ef的輸出:

我們還要關注兩個功能選項:-p和-M。kstat -p可以給出某個程序更多的資訊。要使用kstat -p首先要給出程序的id,例如,kstat -p 241。它能夠為我們提供更多的資訊,表8是kstat -p 241的輸出:

最後,來看一下kstat -M。通常情況下,系統管理者可以使用lsmod甚至/proc/modules發現他/她的系統中有哪些LKM在運作。但是,如果系統被rooted,lsmod提供的資訊就不可信了。kstat -M可以捕捉到許多LKM rootkit的基本資訊,列出系統所有已經加載的子產品。

4.檢測knark、adore和其它的LKM rootkit

上面我們分别讨論了LKM、rootkit和KSTAT。現在我們将把這些結合起來,檢測一些LKM rootkit。

第一個就是knark,它可能是最為出名的LKM rootkit,也是寫的最好的之一。使用stat來檢測它簡直易如反掌。記住表5了嗎?檢測LKM rootkit之前,首先要運作kstat -s。一旦運作了kstat -s就回得到下面的輸出:

讓我們仔細研究一下表9是什麼意思。首先,我們看到系統調用表sys_call_table的7個入口被修改了。看一下sys_settimeofday,輸出顯示其位址是0xc2846a8c,而kstat -s警告這個系統調用的位址應該是在0xc0118364。knark安裝後,它修改了sys_call_table,造成sys_fork、sy_read、sys_execve、sys_kill、sys_ioctl、sys_settimeofday和sys_clone的位址發生了改變。這樣就可以檢測到knark。知道sys_call_table的哪些入口被修改,有助于确定系統被那種rootkit侵入。knark修改了7個。接着,就是運作ps -ef和kstat -P,對兩者的輸出做對比。如果有不同,就要采取相應的措施。注意:系統調用的位址随系統的不同而有所不同。

下面看一下adore改變的系統調用位址。

adore也修改了7個系統調用的位址。不過,和knark相比隻有3個相同。這有助于我們的區分。下面的步驟和上面相同。

最後,看一下rkit。這個rootkit不使用上面兩個rootkit的方式隐藏自己,隻修改sys_setuid系統調用。是以,使用kstat -M就可以發現。

5.結論

LKM rootkit對網絡管理者來說,簡直就是噩夢。它們非常難以發現,但是使用象kstat之類的工具,并且了解它們都造成什麼變化,一切都變的容易了。kstat會對系統管理者有所幫助。

6.資源

Kstat

http://s0ftpj.org/en/site.html

Knark

http://members.prestige.net/tmiller12/papers/KNARK.htm

rootkits

http://packetstorm.securify.com/groups/thc/LKM_HACKING.html

繼續閱讀