Rootkit技術

隨著安全技術的發展和計算機用戶群的技術提高,一般的木馬後門越來越難生存,於是一部分有能力的後門作者把眼光投向了系統底層——ring0。位於ring0層的是系統核心模組和各種驅動程式模組,所以位於這一層的木馬也是以驅動的形式生存的,而不是一般的exe。後門作者把後門寫成符合wdm規範(windows drivermodel)的驅動程式模組,把自身添加進註冊表的驅動程式載入入口,便實現了“無啟動項”運行。一般的進程查看器都只能枚舉執行檔exe的信息,所以通過驅動模組和執行檔案結合的後門程式便得以生存下來,由於它運行在ring0級別,擁有與系統核心同等級的許可權,因此它可以更輕易的把自己隱藏起來,無論是進程信息還是檔案體,甚至通訊的連線埠和流量也能被隱藏起來,在如此強大的隱藏技術面前,無論是任務管理器還是系統配置實用程式,甚至系統自帶的註冊表工具都失去了效果,這種木馬,就是讓人問之色變的Rootkit。
要了解Rootkit木馬的原理,就必須從系統原理說起,我們知道,作業系統是由核心(kernel)和外殼(shell)兩部分組成的,核心負責一切實際的工作,包括cpu任務調度、記憶體分配管理、設備管理、檔案操作等,外殼是基於核心提供的互動功能而存在的界面,它負責指令傳遞和解釋。由於核心和外殼負責的任務不同,它們的處理環境也不同,因此處理器提供了多個不同的處理環境,把它們稱為運行級別(ring),ring讓程式指令能訪問的計算機資源依次逐級遞減,目的在於保護計算機遭受意外損害——核心運行於ring 0級別,擁有最完全最底層的管理功能,而到了外殼部分,它只能擁有ring3級別,這個級別能操作的功能極少,幾乎所有指令都需要傳遞給核心來決定能否執行,一旦發現有可能對系統造成破壞的指令傳遞(例如超越指定範圍的記憶體讀寫),核心便返回一個“非法越權”標誌,傳送這個指令的程式就有可能被終止運行,這就是大部分常見的“非法操作”的由來,這樣做的目的是為了保護計算機免遭破壞,如果外殼和核心的運行級別一樣,用戶一個不經意的點擊都有可能破壞整個系統。
由於ring的存在,除了由系統核心載入的程式以外,由外殼調用執行的一般程式都只能運行在ring3級別,也就是說,它們的操作指令全部依賴於核心授權的功能,一般的進程查看工具和防毒軟體也不例外,由於這層機制的存在,我們能看到的進程其實是核心“看到”並通過相關接口指令(還記得api嗎?)反饋到應用程式的,這樣就不可避免的存在一條數據通道,雖然在一般情況下它是難以被篡改的,但是不能避免意外的發生,Rootkit正是“製造”這種意外的程式。簡單的說,Rootkit實質是一種“越權執行”的應用程式,它設法讓自己達到和核心一樣的運行級別,甚至進入核心空間,這樣它就擁有了和核心一樣的訪問許可權,因而可以對核心指令進行修改,最常見的是修改核心枚舉進程的api,讓它們返回的數據始終“遺漏”Rootkit自身進程的信息,一般的進程工具自然就“看”不到Rootkit了。更高級的Rootkit還篡改更多api,這樣,用戶就看不到進程(進程api被攔截),看不到檔案(檔案讀寫api被攔截),看不到被打開的連線埠(網路組件sockapi被攔截),更攔截不到相關的網路數據包(網路組件ndisapi被攔截)了,我們使用的系統是在核心功能支持下運作的,如果核心變得不可信任了,依賴它運行的程式還能信任嗎?
但即使是Rootkit這一類恐怖的寄生蟲,它們也並非所向無敵的,要知道,既然Rootkit是利用核心和ring0配合的欺騙,那么我們同樣也能使用可以“越權”的檢查程式,繞過api提供的數據,直接從核心領域裡讀取進程列表,因為所有進程在這裡都不可能把自己隱藏,除非它已經不想運行了。也就是說,核心始終擁有最真實的進程列表和主宰權,只要能讀取這個原始的進程列表,再和進程api枚舉的進程列表對比,便能發現Rootkit進程,由於這類工具也“越權”了,因而對Rootkit進行查殺也就不再是難事,而Rootkit進程一旦被清除,它隱藏自身的措施也就不復存在,核心就能把它“供”出來了,用戶會突然發現那個一直“找不到”的Rootkit程式檔案已經老實的呆在檔案管理器的視圖里了。這類工具現在已經很多,例如Icesword、patchfinder、gdb等。
道高一尺,魔高一丈,因為目前的主流Rootkit檢測工具已經能檢測出許多Rootkit木馬的存在,因此一部分Rootkit作者轉而研究Rootkit檢測工具的運行檢測算法機制,從而製作出新一代更難被檢測到的木馬——futo Rootkit。
國產優秀檢測工具icesword在futo面前敗下陣來,因為futo編寫者研究的檢測工具原型就是一款與之類似的black &light,所以我們只能換用另一款Rootkit檢測工具darkspy,並開啟“強力模式”,方可正常查殺Rootkit。
但是由於檢測機制的變化,darkspy要檢測到futo的存在,就必須保證自己的驅動比futo提前載入運行,這就涉及到優先權的問題,也是讓業界感覺不太滿意的一種方式,因為這樣做的後果會導致系統運行效率下降,不到緊急關頭,都不要輕易採用這種方法,然而現在的瑞星卡卡助手所推廣的“破甲”技術,實現原理是與之類似的,它也會對系統造成一定影響,因而,這個介於安全和效率之間的選擇,唯有留給用戶自己思考了。

相關詞條

相關搜尋

熱門詞條

聯絡我們