網路城邦
上一篇 回創作列表 下一篇  字體:
What is rootkit!
2008/03/18 21:15:39瀏覽456|回應0|推薦4

OK! This morning at the class! I had mention about a word:『rootkit』!here is it!

當入侵者成功侵入機器之後,首要的目標就是抹掉入侵系統的相關記錄以及隱藏自己的行蹤,一旦忽略了這些事情,入侵者很容易被系統管理者逮到,而一般入侵者最常使用的方法就是使用 rootkits。許多人會以為 rootkits 是用來取得系統中 root 權限的神奇程式,然而事實上,rootkits 是一堆能竊取密碼監聽網路流量留下後門等的程式集,如果入侵者在系統中成功植入 rootkits 一般人將很難發現已經被入侵或是只是覺得系統怪怪的,卻不知道哪邊出了問題,而對於入侵者來說,將能輕易控制系統,而且通行無阻。

底下將介紹 rootkits 如何達成這些目的,以及如何預防偵測 rootkits


Rootkits
是一些工具集, trojaned 程式,竄改過的系統程式的集合,工具集中的程式通常用來抹掉系統中相關的紀錄, plastlog/utmp/wtmp 這些會記錄使用者登入狀況的系統記錄檔, trojaned 程式會留下後門,讓入侵者能再次輕易地進入系統之中,而被竄改過的系統程式會隱藏入侵者的檔案、行程、連線等等,管理者通常信任這些程式的輸出,而讓管理者難以發現入侵者的蹤跡。


目前最常見的 rootkit Linux Rootkit(lrk),以lrk 為例,底下列出這些程式及其功用,工作集包含有:

1. fix —
改變檔案的 timestamp checksum,用來把竄改過的程式的 timestampchecksum ,更動為和原先的系統中的程式相同。

2. linsniffer —
竊取特定網路訊息(ftp / telnet / imap..)的 sniffer

3. sniffchk —
檢查 linsniffer 是否在運作。

4. wted —
查閱或移除 wtmp 中指定的欄位。

5. z2 —
移除某個使用者最後的 utmp/wtmp/lastlog 紀錄


包含的 trojaned 程式有:

1. inetd —
listen 在某個port(預設是5002),任何人只要利用這個 port 進入系統就擁有 root 權限。

2. bindshell —
root shell bind 在某個 port

3. chfn / chsh / login / passwd / su—
輸入特定密碼就能擁有 root shell

4. rshd —
讓入侵者以特定帳號登入就能以 root 權限執行程式。

5. sshd —
入侵者以特定帳號密碼登入就能擁有 root shell


竄改過的系統程式有:

1. crontab —
執行特定的 crontab 檔案,並且隱藏這些欄位。

2. du / find / ls —
隱藏特定的檔案,通常是與 rootkit 相關的檔案。

3. ifconfig —
當啟動 PROMISC 時(sniffing),不顯示 PROMISC flag

4. netstat —
隱藏指定 address / uid / port 的連線。

5. killall —
無法刪除指定的行程。

6. pidof / ps / top —
輸出結果時濾掉指定的行程,例如以 root 執行的行程,或行程名稱內有特定字串的行程。

7. syslogd —
移除系統紀錄檔中包含特定字串的訊息。

8. tcpd —
不會紀錄以及允許特定連線。


此外,還有一些 rootkits 會以 kernel module 的方式載入系統之中,置換掉某些 system calls,或是取代掉某些 kernel 的功能,另外,也有的 rootkits 會取代系統中的 library,使得使用到這些 library 的程式相當於都有潛在的問題。那我們要如何預防這些 rootkit 安裝到系統內部呢?在此提供幾點建議:

1.
將放置系統程式的檔案系統設定為唯讀或是使用 chattr 將重要檔案設定為唯讀。

2.
不要啟用 kernel module 的功能。

3.
重要的程式使用 static-link 的方式避免連結到被竄改過的 library

4.
使用 md5 或是 pgp 等嚴密的驗證演算法確認檔案的正確性。


若要偵測 rootkits 竄改系統檔案,一般使用 tripwire,提供許多演算法如MD5 / Snefu / SHA 等,可以驗證檔案是否被竄改,如果與原先的檔案不符,將提醒管理者。可參閱 http://www.tripwire.org/得到更多詳細訊息。


如果懷疑自己可能已經被植入rootkits,可以使用 chkrootkit 來檢查,chkrootkit 提供許多工具檢查是否被植入 rootkits,例如 chkrootkit 會檢查幾個可能被竄改過的系統程式,以及檢查是否有 rootkits 常使用的工具,此外ifpromisc 用來檢查 PROMISC flag 是否開啟, chkwtmp / chklastlog 可用來確認lastlog / wtmp 的正確性,另外如果系統擁有 process file system,就可以使用chkproc 來比對 ps 的輸出和 process file system 的差異。可參閱http://www.chkrootkit.org/得到更多詳細訊息。


我們也可以利用一些簡單的方式來檢查是否被植入 rootkits,例如使用 echo的輸出和 ls 的輸出比對,或著是檢查 /dev/底下有沒有任何正常regular)的檔案,通常/dev/ 底下都是 block special file 或是 character special file,像 lrk的設定檔預設值就是放在 /dev/ 底下,或著使用 nmap 等類似的 port scanner 來檢查系統是否有對外開出任何不正常的 port,另外也建議使用沒有被'污染'的系統程式來檢查系統,並更動PATH使用正常的程式來一一檢查可能被入侵的系統。


以上大略介紹過 lrk,其他 NIX 平台的 rootkits 大致上相同,而對於Windows平台的NT Rootkits,除了隱藏檔案目錄之外,也隱藏 registry,甚至擁有自己的TCP/IP Stack,一但被植入非常難發現。


隨著 rootkits 不斷的發展,入侵者的匿蹤技巧越來越高超,要發現入侵者越來越困難,只能依賴系統管理者平時做好完善的安全政策,不讓入侵者有可趁之機,如此才能確保系統安全的長久之道。

( 知識學習隨堂筆記 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=yangfu&aid=1706550