class="152899">
一、rootkit的定義
rootkit這個術語已經存在10多年了。它是由有用的小型程序組成的工具包,使得攻擊者能夠保持訪問計算機上具有最高權限的用戶“root”。換句話說,rootkit是能夠持久或可靠地、無法檢測地存在於計算機上的一組程序和代碼。在上述rootkit定義中,關鍵詞是“無法檢測”。rootkit所采用的大部分技術和技巧都用於在計算機上隱藏代碼和數據。例如,許多rootkit可以隱藏文件和目錄。rootkit的其它特性通常用於遠程訪問和竊聽――例如,用於嗅探網絡上的報文。當這些特性結合起來後,它們會給安全帶來毀滅性的打擊。
要取得一個主機的控制權,最簡單的當然就是以登錄程序(如;login,;ssh,;telnet;等);加上猜測密碼的程序來嘗試進行登入的行為。不過,由於登入程序大部分都有登入次數的限制,因此使用密碼猜測程序就不這麼流行了。高級的安全為了系統網絡的安全,會撰寫一些程序去測試自己主機的服務漏洞,;並且在發現了某些服務的漏洞之後,會通報該服務的維護團體,或者是貢獻自己的修補方式,以補足自己系統的安全性。而服務開發/維護團體在接到這樣的通報之後,會在最短的時間內進行程序修改,;並且在因特網上面進行通報與釋出該漏洞的修補程序。
然而在這個漏洞通報出來之後,與修補程序釋出Sun空窗期,某些惡意的安全就會針對這樣的漏洞進行攻擊,這些安全同樣是撰寫程序來攻擊該漏洞,同時取得被攻擊主機的控制權,或者是植入安全程序在受攻擊的主機上。;這些安全與高級安全不同的地方,在於他們會很驕傲的將攻擊的成果貼在一些安全常上的網站,藉以推銷自己,同時,也會將他們撰寫的惡意程序散播到互聯網上面。;有些安全就會將這些惡意程序收集起來,做成軟件包,並使這些程序包更加流行於互聯網上面,;這些惡意的程序包就被稱為;rootkit;。
二、rootkit;的類型
我們可將unix和Linux下的;rootkit;分為兩大類:應用層級rookit;和內核級別rootkit
1.應用層級;rootkit
應用層級;rootkit;是最常被拿來使用的;rootkit。攻擊者以;rootkit;中的安全程序來替換系統中正常的應用程序與系統文件。安全程序會提供後門給攻擊者並隱藏其蹤跡,攻擊者做的任何活動都不會儲存在紀錄文件中。下面列舉了一些攻擊者可能取代的文件:
隱藏攻擊者蹤跡的程序
(1)ls,;find,;du;-;安全程序可以隱藏攻擊者文件、欺騙系統,讓系統的文件及目錄洩露訊息。
(2)ps,;top,;pidof;-;這些程序都是程序監看程序,它們可以讓攻擊者在進行攻擊的過程中,隱藏攻擊者本身的程序。
(3)netstat;-;netstat;是用來檢查網絡活動的連結與監聽,如開放的通訊端口等等
。安全程序;netstat;可以隱藏攻擊者的網絡活動,例如;ssh;daemon;或其它服務。
(4)killall;-;安全程序;killall;讓管理者無法停止程序。
(5)ifconfig;-;當監聽軟件正在執行時,安全程序;ifconfig;不會顯示;PROMISC;flag,這樣可以隱藏攻擊者,不被監聽軟件察覺。
(6)crontab;-;安全程序;crontab;可以隱藏攻擊者的;crontab;進入情況。
(7)tcpd,;syslogd;-;安全程序;tcpd;與;"syslog";不會紀錄攻擊者的行為。
後門程序
(1)chfn;-;提升使用者的權限。執行;chfn,在輸入新使用者名稱時,只要輸入;rootkit;密碼,就可以取得;root;的權限。
(2)chsh;-;提升使用者的權限。執行;chsh,在輸入新;shell;時,只要輸入rootkit;密碼,就可以取得;root;的權限。
(3)passwd;-;提升使用者的權限。執行;passwd,在輸入新密碼時,只要輸入rootkit;密碼,就可以取得;root;的權限。
(4)login;-;能夠紀錄任何使用者名稱,包含;root;登入的密碼。
(5)bd2;-;安全程序;rpcbind;允許攻擊者在受害主機上執行任意程序代碼。
安全程序程序
(1)inetd;-;安全程序;inetd;可以替攻擊者打開遠程登入的通訊端口,只要輸入密碼就可以取得;root;的權限。
(2)rshd;-;替攻擊者提供遠程的;shell。
(3)rsh;-;透過;rsh;可以取得;root;的密碼。
(4)sshd;-攻擊者以特定賬號密碼登入就能擁有;root;shell;的權限。
監聽程序
(1)linsniffer;-;linux;小型的監聽程序。
(2)sniffchk;-;這個程序可以檢驗與確認網絡監聽程序是否正在執行。
(3)le;-;Solaris;Ethernet;封包的監聽程序。
(4)snif;-;linux;其它封包的監聽程序。
(5)sniff-10mb;-;這是一個設計來監聽;10mbps;Ethernet;的監聽程序。
(6)sniff-100mb;-;這是一個設計來監聽;100mbps;Ethernet;的監聽程序。
其它種類-
(1)fix;-;安裝安全程序時;(例如:ls);更改的時間戳記與檢驗封包值的訊息。
(2)wted;-;wtmp;的編輯程序。可讓攻擊者修改;wtmp。
(3)z2;-;移除;wtmp/utmp/lastlog。
(4)bindshell;-;把;rootshell;與某個通訊端口結合在一起。(預設埠號為;31337)
(5)zap3;-;攻擊者會從;wtmp,;utmp,;lastlog,;wtmpx;和;utmpx;移除他們的蹤跡
。zap3;通常根據下列目錄來找尋紀錄文件的位置,例如;/var/log,;/var/adm,
/usr/adm,;與;/var/run。
2.內核級別rootkit
內核級別rootkit;是比應用層級別;rootkit;功能更強大的;rootkit。內核級別rootkit
透過操作與利用;kernel,已成為最難被發現;rootkit,因為它能夠在應用層檢查中,建立一條繞過檢驗的通道。雖然這種軟件主要是針對;linux;所制作,但它可能被修改來針對某個通訊端口或者是其它的操作系統來做攻擊,一旦被安裝在目標主機上,系統就可說是完全被安全所控制,系統管理員甚至根本找不到安全隱藏的蹤跡。內核級別rootkit;是如何運作的呢?;它基本上是利用;LKM『Loadable;Kernel;Module』的功能讓攻擊者做出非法的動作。LKM;在;linux;或其它系統中都是非常有用的工具,支持;LKM;的系統包含;FreeBSD;與;Solaris。操作系統裡面有一些函數被系統用來建構;kernel,當這些函數遭到假冒與竄改,主機就不能再被信任了。下面針對內核級別rootkit;的一些運作方式來做介紹:
(1)隱藏程序;-;在;unix;執行過程中,程序的紀錄訊息會存放於文件系統中的;"/proc",隱藏程序可以操作;sys_getdents();系統呼叫函數,在程序的架構裡就看不見這些附加且正在執行的程序。
(2)隱藏網絡連結;-;類似於隱藏程序,網絡連結會紀錄在;"/proc/net/tcp";與;"/proc/net/udp";這兩個文件之中,執行;Kernel;rootkit,無論何時讀取這兩個文件,都會隱藏攻擊者的蹤跡,不讓用戶知道。
(3)隱藏;LKM;的信號;-;通常;LKM;的默認值是可被看見的,這樣是為了方便其它使用者也可以使用。攻擊者必須使用;"EXPORT_NO_SYMBOLS";命令隱藏這些信號,以防止任何信號被洩漏出去。
(4)利用;LKM;傳遞訊息;-;LKM;Kernel;rootkit;安裝完成之後,攻擊者若要通知kernel;隱藏另一文件,可透過;Kernel;rootkit;來替換;sys_settimeofday()。之後只要透過一些特別的參數,就可以請求系統來完成攻擊者想要完成的事情。
(5)改變文件的執行;-;有時攻擊者可能想要替換掉某些文件,例如;"login",但並不想要更改文件,此時;Kernel;rootkit;可以替換;sys_execve()。這樣系統會持續執行;"login";並洩漏;"login";程序的版本給攻擊者。
目前最流行的內核級別rootkit,包含;linux;上的;knark;與;Solaris;上的Loadable;Kernel;Module,其中;knark;還包含了以下的程序:
(1)hidef:用來隱藏文件。
(2)unhidef:用來設定執行文件重新導向,使攻擊者的安全可以被執行。
(3)nethide:可以隱藏;/proc/net/tcp;與;/proc/net/udp;字符串,這也是netstat;撷取資料的地方,攻擊者可以用這個工具將目標主機上使用中的聯機訊息隱藏起來。
(4)taskhack:可以改變正在執行中的程序,因此攻擊者可以將;/bin/sh;的程序,更改成為;root;的使用者賬號。
(5)rexec:可以從遠程在;knark;服務器上執行命令,也可以用來支持;ip;造假的功能。
(6)rootme:可以將權限提升到;root。