來自內核的欺騙——Rootkit***

要了解Rootkit***的原理,就必須從系統原理說起,我們知道,操作系統是由內核(Kernel)和外殼(Shell)兩部分組成的,內核負責一切實際的工作,包括CPU任務調度、內存分配管理、設備管理、文件操作等,外殼是基於內核提供的交互功能而存在的界面,它負責指令傳遞和解釋。由於內核和外殼負責的任務不同,它們的處理環境也不同,因此處理器提供了多個不同的處理環境,把它們稱爲運行級別(Ring),Ring讓程序指令能訪問的計算機資源依次逐級遞減,目的在於保護計算機遭受意外損害——內核運行於Ring 0級別,擁有最完全最底層的管理功能,而到了外殼部分,它只能擁有Ring 3級別,這個級別能操作的功能極少,幾乎所有指令都需要傳遞給內核來決定能否執行,一旦發現有可能對系統造成破壞的指令傳遞(例如超越指定範圍的內存讀寫),內核便返回一個“非法越權”標誌,發送這個指令的程序就有可能被終止運行,這就是大部分常見的“非法操作”的由來,這樣做的目的是爲了保護計算機免遭破壞,如果外殼和內核的運行級別一樣,用戶一個不經意的點擊都有可能破壞整個系統。
由於Ring的存在,除了由系統內核加載的程序以外,由外殼調用執行的一般程序都只能運行在Ring 3級別,也就是說,它們的操作指令全部依賴於內核授權的功能,一般的進程查看工具和殺毒軟件也不例外,由於這層機制的存在,我們能看到的進程其實是內核“看到”並通過相關接口指令(還記得API嗎?)反饋到應用程序的,這樣就不可避免的存在一條數據通道,雖然在一般情況下它是難以被篡改的,但是不能避免意外的發生,Rootkit正是“製造”這種意外的程序。簡單的說,Rootkit實質是一種“越權執行”的應用程序,它設法讓自己達到和內核一樣的運行級別,甚至進入內核空間,這樣它就擁有了和內核一樣的訪問權限,因而可以對內核指令進行修改,最常見的是修改內核枚舉進程的API,讓它們返回的數據始終“遺漏”Rootkit自身進程的信息,一般的進程工具自然就“看”不到Rootkit了。更高級的Rootkit還篡改更多API,這樣,用戶就看不到進程(進程API被攔截),看不到文件(文件讀寫API被攔截),看不到被打開的端口(網絡組件Sock API被攔截),更攔截不到相關的網絡數據包(網絡組件NDIS API被攔截)了,幸好網絡設備的數據指示不受內核控制,否則恐怕Rootkit要讓它也不會亮了纔好!我們使用的系統是在內核功能支持下運作的,如果內核變得不可信任了,依賴它運行的程序還能信任嗎?(圖6.普通應用級別的***後門和Rootkit***的對比)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章