本文討論了Linux環(huán)境下攻擊者成功以后常常使用的一些后門技術(shù),并且對(duì)最著名的rootkit工具之一?knark進(jìn)行了詳細(xì)的分析,并且指出了在發(fā)現(xiàn)系統(tǒng)被入侵以后如何發(fā)現(xiàn)是否是kark及如何恢復(fù)。
什么是"rootkit"?
入侵者入侵后往往會(huì)進(jìn)行清理腳印和留后門等工作,最常使用的后門創(chuàng)建工具就是rootkit。不要被名字所迷惑,這個(gè)所謂的“rootkit”可不是給超級(jí)用戶root用的,它是入侵者在入侵了一太主機(jī)后,用來(lái)做創(chuàng)建后門并加以偽裝用的程序包。這個(gè)程序包里通常包括了日志清理器,后門等程序。同時(shí),程序包里通常還帶有一些偽造的ps、ls、who、w、netstat等原本屬于系統(tǒng)本身的程序,這樣的話,程序員在試圖通過(guò)這些命令查詢系統(tǒng)狀況的時(shí)候,就無(wú)法通過(guò)這些假的系統(tǒng)程序發(fā)覺(jué)入侵者的行蹤。
在一些組織中,rootkit (或者backdoor) 是一個(gè)非常感興趣的話題。各種不同的rootkit被開(kāi)發(fā)并發(fā)布在internet上。在這些rootkit之中, LKM尤其被人關(guān)注, 因?yàn)樗抢矛F(xiàn)代的技術(shù)。作為內(nèi)核的一部分運(yùn)行,這種rootkit將會(huì)越來(lái)越比傳統(tǒng)技術(shù)更加強(qiáng)大更加不易被發(fā)覺(jué)。一旦被安裝運(yùn)行到目標(biāo)機(jī)器上, 系統(tǒng)就會(huì)完全被控制在hacker手中了。甚至系統(tǒng)管理員根本找不到安全隱患的痕跡, 因?yàn)樗麄儾荒茉傩湃嗡鼈兊牟僮飨到y(tǒng)了。后門程序的目的就是甚至系統(tǒng)管理員企圖彌補(bǔ)系統(tǒng)漏洞的時(shí)候也可以給hacker系統(tǒng)的訪問(wèn)權(quán)限。
入侵者通過(guò):設(shè)置uid程序, 系統(tǒng)程序, cron后門等方法來(lái)實(shí)現(xiàn)入侵者以后從非特權(quán)用戶使用root權(quán)限。
*設(shè)置uid程序。 黑客在一些文件系統(tǒng)理放一些設(shè)置uid腳本程序。無(wú)論何時(shí)它們只要執(zhí)行這個(gè)程序它們就會(huì)成為root。
*系統(tǒng)木馬程序。黑客替換一些系統(tǒng)程序,如"login"程序。因此, 只要滿足一定的條件,那些程序就會(huì)給黑客最高權(quán)限。
*Cron后門。黑客在cron增加或修改一些任務(wù),在某個(gè)特定的時(shí)間程序運(yùn)行,他們就可以獲得最高權(quán)限。
具體可能通過(guò)以下方法給予遠(yuǎn)程用戶以最高訪問(wèn)權(quán)限: ".rhost" 文件,認(rèn)證密鑰, bind shell, 木馬服務(wù)程序。
*".rhosts" 文件。一旦 "+ +"被加入某個(gè)用戶的.rhosts文件里, 任何人在任何地方都可以用這個(gè)賬號(hào)來(lái)登陸進(jìn)來(lái)而不需要密碼。
*ssh認(rèn)證密鑰。黑客把他自己的公共密鑰放到目標(biāo)機(jī)器的ssh配置文件"authorized_keys"里, 他可以用該賬號(hào)來(lái)訪問(wèn)機(jī)器而不需要密碼。
*Bind shell。黑客綁定一個(gè)shell到一個(gè)特定的tcp端口。任何人telnet這個(gè)端口都可以獲得交互的shell。更多精巧的這種方式的后門可以基于udp,或者未連接的tcp, 甚至icmp協(xié)議。
*Trojaned服務(wù)程序。任何打開(kāi)的服務(wù)都可以成為木馬來(lái)為遠(yuǎn)程用戶提供訪問(wèn)權(quán)限。例如, 利用inetd服務(wù)在一個(gè)特定的端口來(lái)創(chuàng)建一個(gè)bind shell,或者通過(guò)ssh守護(hù)進(jìn)程提供訪問(wèn)途徑。
在入侵者植入和運(yùn)行后門程序之后, 他會(huì)設(shè)法隱藏自己存在的證據(jù),這主要涉及到兩個(gè)方面問(wèn)題: 如何來(lái)隱藏他的文件且如何來(lái)隱藏他的進(jìn)程。
為了隱藏文件, 入侵者需要做如下事情: 替換一些系統(tǒng)常用命令如"ls", "du", "fsck"。在底層方面, 他們通過(guò)把硬盤里的一些區(qū)域標(biāo)記為壞塊并把它的文件放在那里。或者如果他足夠瘋狂,他會(huì)把一些文件放入引導(dǎo)塊里。
為了隱藏進(jìn)程, 他可以替換 "ps"程序, 或者通過(guò)修改argv[]來(lái)使程序看起來(lái)象一個(gè)合法的服務(wù)程序。有趣的是把一個(gè)程序改成中斷驅(qū)動(dòng)的話,它就不會(huì)出現(xiàn)在進(jìn)程表里了。
RootKit-Knark的歷史
Knark是第二代的新型rootkit工具-其基于LJM(loadable kernel module)技術(shù),使用這種技術(shù)可以有效地隱藏系統(tǒng)的信息。作者在代碼和README文件中都標(biāo)注有不承擔(dān)責(zé)任的聲明,聲明該代碼不可以被用作非法活動(dòng)。然而該軟件可以容易地被用于這種目的。
Knark是由[email protected]編寫的,主要基于http://www.dataguard.no/bugtraq/1997_4/0059.html中Runar Jensen編寫的代碼heroin.c,設(shè)計(jì)思想主要來(lái)自于Phrack 52中plaguez發(fā)表的文章Weakening the Linux Kernel"。在重新編寫了heroin.c的大部分代碼以后,Creed決定重新命名為"Knark",在瑞典語(yǔ)中是指吸毒者。Creed編寫的其他軟件可以在www.sekure.net/~happy-h/得到,但是由于該站點(diǎn)只有瑞典語(yǔ)版本,因此應(yīng)用并不廣泛。
Knark的第一個(gè)公開(kāi)版本是0.41,發(fā)布于June, 1999??梢栽贐4B0 #9中索引到它:http://packetstorm.securify.com/mag/b4b0/b4b0-09.txt。隨后0.50和0.59被發(fā)布,當(dāng)前版本是0.59??梢詮倪@里下載0.59版。
Knark特性
Knark0.59具有以下特性:
*隱藏或顯示文件或目錄
*隱藏TCP或UDP連接
*程序執(zhí)行重定向
*非授權(quán)地用戶權(quán)限增加("rootme")
*改變一個(gè)運(yùn)行進(jìn)程的UID/GID的工具
*非授權(quán)地、特權(quán)程序遠(yuǎn)程執(zhí)行守護(hù)進(jìn)程
*Kill –31來(lái)隱藏運(yùn)行的進(jìn)程
聯(lián)合使用程序執(zhí)行重新定向和文件隱藏,入侵者能提供各種后門程序執(zhí)行。由于執(zhí)行重定向是在內(nèi)核級(jí)別進(jìn)行的,因此文件檢測(cè)工具不會(huì)發(fā)現(xiàn)程序文件被修改-原始的執(zhí)行程序并沒(méi)有被修改,因此配置檢測(cè)工具在路徑環(huán)境中也不會(huì)發(fā)現(xiàn)任何異常。
如果Knark結(jié)合另外一個(gè)用來(lái)隱藏系統(tǒng)當(dāng)前加載的模塊的LKM工具modhide,就可能實(shí)現(xiàn)甚至通過(guò)lsmod命令也不能發(fā)現(xiàn)knark的存在。