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