許可權保衛戰——可怕的Rootkit木馬後門
在我們獲得了對目標的控制權後,還想保持這種控制許可權,於是就出現了木馬後門,Rootkit之類的保護許可權的手段。首先來說一下我們常見的應用層次的木馬後門,比如我們常見的遠程式控制制類的軟體,像國外的Sub7,VNC,netbus,國內的冰河,灰鴿子,黑洞等等,這些大家都很熟悉因此就不詳細介紹了。然而此類後門的可以很容易被發現,現在的殺毒軟體大多都能輕鬆的查處,即使暫時查不到,用其他手段檢測也不是很困難,現在就我就給大家介紹一種比一般木馬後門潛伏的更深的一類木馬後門--Rootkit。
傳統的Rootkit是一種比普通木馬後門更為陰險的木馬後門。它主要通過替換系統文件來達到目的。這樣就會更加的隱蔽,使檢測變得比較困難。傳統的Rootkit對一系列平臺均有效,但主要是針對Unix的,比如Linux,AIX,SunOs等作業系統。當然有些Rootkits可以通過替換DLL文件或更改系統來攻擊windows平臺.Rootkit並不能讓你直接獲得許可權,相反它是在你通過各種方法獲得許可權後才能使用的一種保護許可權的措施,在我們獲取系統根許可權(根許可權即root許可權,是Unix系統的最高許可權)以後,Rootkits提供了一套工具用來建立後門和隱藏行跡,從而讓攻擊者保住許可權。
下面就針對Unix來講解一下傳統Rootkit的攻擊原理
RootKits是如何實現後門的呢?為了理解Rootkits後門,有必要先了解一下Unix的基本工作流程,當我們訪問Unix時(不管是本地還是遠程登陸),/bin/login程式都會運行,系統將通過/bin/login來收集並核對用戶的帳號和密碼.Rootkits使用一個帶有根許可權後門密碼的/bin/login來替換系統的/bin/login,這樣攻擊者輸入根許可權後門的密碼,就能進入系統。就算管理員更改了原來的系統密碼或者把密碼清空。我們仍能夠
使用後門密碼以根用戶身份登陸。在攻入Unix系統後,入侵者通常會進行一系列的攻擊動作,如安裝嗅探器收集重要數據,而Unix中也會有些系統文件會監視這些動作,比如ifconfig等,Rootkit當然不會束手就擒,它會同樣替換一下這些系統文件,
通常被Rootkit替換的系統程式有login,ifconfig,du,find,ls,netstart,ps等。由於篇幅問題,這些系統文件的功能就不一一羅列,有興趣的讀者可以自己去搜尋,現在Rootkit的工具很多,裏面基本都是包含一些處理過的系統文件來代替原來的系統文件的,像tOmkit等一些Rootkit就是比較優秀的了。
防禦辦法:Rootkit如此可怕,得好好防它才行,實際上,防禦他的最有效的方法時定期的對重要系統文件的完整性進行核查,這類的工具很多,像Tripwire就是一個非常不錯的文件完整性檢查工具。一但發現遭受到Rootkit攻擊,那你就比較麻煩了,你必須完全重裝所有的系統文件部件和程式,以確保安全性.
寫到這裡,戰爭似乎結束了,然而更可怕的Rootkit還沒登場,那就是更加恐怖( 這個詞一點也不誇張)的內核級Rootkit。在大多數作業系統中(各種Uni x和windows),內核是作業系統最基本的部件,它控制著對網路設備、進程、系統記憶體、磁片等的訪問。例如當你打開一個文件時,打開文件的請求被發送到內核,內核負責從磁片得到文件的比特位並運行你的文件瀏覽程式。內核級Rootkit使攻擊者獲得對系統底層的完全控制權。攻擊者可以修改你的內核,大多數內核級Rootkit都能進行執行重定向,即截獲運行某一程式的命令,將其重定向到入侵者所選中的程式並運行此程式。也就是說用戶或管理員要運行程式A,被修改過的內核假裝執行A,實際卻執行了程式B.
現在就介紹一下內核級的Rootkit是如何攻擊Unix系統的
和傳統的Rootkit不同,Unix的bin/login並未被修改,但所有執行/bin/login 的請求(當登陸系統時將產生)都被重定向到攻擊者製作的隱藏文件/bin/backdoorlogin,這樣當系統管理員使用檢測傳統級別的Rootkit的方法(比如用tripwire之類的軟體檢測文件的完整性)就行不通了,因為/bin/login並沒有被改變。同樣的道理,攻擊者對其他的系統程式也進行重定,這樣你的操作實際就是按照入侵者的意願執行了。也就是說,表面上你在運行程式A,你也認為自己運行的是程式A,而實際上你運行的是入侵者設定的程式B~!
更恐怖的是,內核級Rootkit不僅僅只會進行執行重定向,許多內核級Rootkit還支援文件隱蔽。傳統的Rootkit是通過替換ls程式來實現文件的隱藏,而內核級的Rootkit則是通過對內核的修改來對ls程式欺騙,更加的陰險隱蔽。另外內核級的Rootkit還能對進程和網路進行隱藏,用戶將得不到真實的系統情況報告。
實現思路:根據系統的類型,攻擊者有不同的方法來對內核進行修改,在N種Unix系統上修改內核最簡單的方法就是利用系統本身的載入的內核模組(LKM)的功能,因此大多數的內核級Rootkit通過利用LKM動態地將內核更新來提供新功能,新添加的模組擴展了內核,同時對內核和其他使用內核的所有東西有了完全訪問權。
因此,許多內核級Rootkit都通過LKM來實現。安裝通過LKM實現的內核級Rootkit十分簡單。例如,在Linux上安裝Knark內核級Rootkit只需具有根許可權的入侵者輸入命令: insmod knark.o 就行了,模組被安裝後就等著我們輸入命令了。更妙的是整個過程不需要重啟.。通過LKM 實現的Rootkit在Unix上十分流行。我們也常常會通過給windows平臺打LKM補丁的方法攻擊windows.
內核級Rootkit 的幾個例子
現在有大量的內核級Rootkit可用,現在我就選幾種比較強大的來跟大家討論一下,
一、 linux 上的內核級Rootkit:Knark Knark具有各種標準的內核級Rootkit功能,包括執行重定向,文件隱藏,進程隱藏和網路隱藏。另外,還有不少比較過癮的功能,如:
1、遠程執行:我們可以通過網路向運行Knark的機器發送一條命令,源地址是假造的,
命令被發往UDP端口53,使之表面上看起來像是DNS流量。我們就可以利用這個功能
來升級Knark,刪除系統文件或其他任何我們想做的事
2、任務攻擊:當某一進程在系統上運行時,它總是具有與UID和有效的UID(EUID)相關的許可權。另外進程還具有與文件系統UID(FSUID)相關的文件及目錄訪問權。Knark的任務攻擊能力可實時地將進程UID,EUID和FSUID改變。進程在不停止運動的情況下突然具有了新的許可權
3、隱藏混雜模式:
同一般的RootKit一樣,入侵者也會在受害者機器上運行嗅探器。我們可以用文件隱藏和進程隱藏將嗅探器隱藏起來。然而,乙太網卡會被設成混雜模式,管理員可以檢查到這一點
Knark將內核進行了修改,使之隱瞞網卡的混合模式,這將使嗅探變得更加隱秘。
4、實時進程隱藏:
Knark可以將一個正在運行的進程隱藏起來。通過發送信號31給一個進程,此進程將消失,
但仍在運行。命令kill-31 process_id將阻止內核彙報任何有關此進程的資訊。進程在運行時,ps和lsof命令的使用都不能顯示此進程
5、內核模組隱藏:Linux中的lsmod命令可以列出當前在機器上安裝的LKM.,我們自然不想讓管理員看到Knark模組,因此Knark包含了一個單獨的模組modhide,modhide將Knark
和自己隱藏了起來。這樣,當我們用Knark攻擊一個系統時,我們首先為Knark.o做一個insmod,然後為modhide.o做一個insmod。這樣不管誰運行lsmod命令,這些模組都不會被發現
二、 另一個Linux上的內核級Rootkit:Adore 同Knark一樣,Adore也是一個針對Linux的LKM RootKit. 他包含了標準的內核級Rootkit功能,如文件隱藏,進程隱藏,網路隱藏和內核模組隱藏。我們只所以討論Adore,是因為他還有一個非常強大的功能:內置的根許可權後門。
Adore的根許可權後門可以讓我們連接到系統上並獲得根許可權的命令外殼,此功能十分直接了當 ,Adore將此功能巧妙的包含在內核模組中了。這一招十分難破,因為管理員看不到任何文件、進程、偵聽網路端口的跡象。
防禦辦法:防禦內核級的Rootkit的根本辦法是不要讓攻擊者得到你的機器的系統的根本許可權(Unix裏的root和windows裏的admin),不過這看起來像廢話:),目前對內核級的Rootkit還沒有絕對的防禦體系。
現在也存在一些Rootkit自動檢測工具,但都不是很可靠.同時內核級的Rootkit也在不斷的發展中,對一些系統來說防禦它最好的辦法是使用不支援LKM的內核,Linux的內核就可以設成不支援LKM的單一內核。
下面是一些圖例,幫助大家理解
普通應用級別的木馬後門
傳統的RootKit
內核級的RootKit