如何檢測Rootkit
Rootkit檢測和蜜罐檢測有相似之處,因為Rootkit通過攪亂內核欺騙不同用戶,蜜罐則是通過攪亂內核來欺騙敵人,其實蜜罐和Rootkit就是同一種技術的的兩個方面。
Rootkit檢測困難的地方主要有以下幾點:
Rootkit的隱蔽性使對他們的檢測和刪除變得困難,破壞內核最簡單的方法是安裝一個可加載內核模塊(也就是LKM),即使禁用了對LKM的支持,攻擊者依然能通過在運行中重寫他的內存來破壞內核。這可能涉及禁用一些我們可能用以檢測系統中內存變化的功能。如果沒有進一步更詳細的目標,rootkit可能對存儲器、文件系統進程列表沒有做任何修改??梢宰鲆粋€假設:Rootkit擴展內和功能以欺騙用戶,結果一些操作將會導致比正常情況下更長的代碼路徑和更多的執行指令,比如說rootkit經常在文件系統中隱藏他們的存在,這就意味著如果我們調用函數set_getdents獲得一個目錄下的內容時候,rootkit可能介入已隱藏他自己的文件,從而增加指令數目。
為了測量在一次系統調用中有多少個處理器被執行,當處理器進入系統調用時候,我們將他設置為單步模式,單步模式下每執行一個指令,處理器就會產生一個調試異常。這樣的話我們就hook到了中斷描述表中的系統調用處理程序(int 0x80)和調試異常處理程序。當一個系統調用被初始化的時候,我們的處理程序被調用,之后通過在EFLAGS寄存器中置TF位(0x100)啟動單步模式,并對我們的調試異常處理程序的調用次數進行計數。但是以上情況僅針對于Linux,在Windows下面IDT是有保護的,如果說在一個系統調用的過程中對異常執行次數進行計數是可操作的,這樣的話也是可以創建一個干凈系統的指令執行統計。其實上面這個步驟叫做執行路徑分析法(EPA),但是EPA需要有高特權訪問訪問內核地址空間,而且對系統調用表修改的方法動作比較大,容易被檢測出來。所以法國蜜網項目組的成員用了第二種方法:使用性能計算器或者是CPU提供的指令去檢測執行時間的變化。具體的操作方法是這樣的:
(1)在干凈的系統上對同一個系統調用若干次(20w次以上),并記錄該測量為時序T1
(2)在目標系統中進行相同次數的測量,并記錄測量為時序T2
(3)這時候去計算每一個時序的傅里葉變化:
(4)計算兩個時序頻率向量之間的數積:
(5)如果r接近于1,系統是干凈的;如果r接近于0,這有可能系統被植入了rootkit。
【本文是51CTO專欄作者elknot的原創文章,轉載請通過51CTO獲取授權】