Rootkit木馬

Rootkit木馬自從“廣外幽靈”開創了DLL木馬時代的先河以來,現在採用執行緒注射的dll木馬和惡意程式已經隨處可見了,除了普遍被採用的另行編寫dll載入器程式躲在啟動項里運行載入dll主體之外,“求職信”還帶來了一種比較少見的通過註冊表。

基本介紹

  • 中文名:Rootkit木馬
  • 實質:木馬
  • 作用:隱藏技術發展的顛峰
  • 特點:通過註冊表
Rootkit木馬:隱藏技術發展的顛峰
自從“廣外幽靈”開創了DLL木馬時代的先河以來,現在採用執行緒注射的dll木馬和惡意程式已
經隨處可見了,除了普遍被採用的另行編寫dll載入器程式躲在啟動項里運行載入dll主體之外,“求職信”還帶
來了一種比較少見的通過註冊表
“hkey_local_machine \software\microsoft\windowsnt\currentversion\windows\AppInit_DLLs”項目載入自身 dll的啟動方法,而相對於以上幾種早期方法,現在更有一種直接利用系統服務啟動自身的木馬程式,這才是真正的難纏!
“服務”是 windows系統的一大核心部分,在nt架構系統中,服務是指執行指定系統功能的程式、例程或進程,以便支持其他程式,尤其是底層(接近硬體)程式。通過網路提供服務時,服務可以在active directory中發布,從而促進了以服務為中心的管理和使用。服務是一種應用程式類型,它在後台運行。服務應用程式通常可以在本地和通過網路為用戶提供一些功能,例如客戶端/伺服器應用程式、web伺服器、資料庫伺服器以及其他基於伺服器的應用程式。 “服務”自身也是一種程式,由於使用的領域和作用不同,服務程式也有兩種形式:exe和dll,採用dll形式的服務是因為dll能實現hook,這是一些服務必需的數據交換行為,而nt架構系統採用一個被稱為“SvcHost.exe”的程式來執行dll的載入過程,所有服務dll都統一由這個程式根據特定分組載入記憶體,然而,如今越來越多病毒作者瞄上了這個系統自帶的載入器,因為它永遠也不能被查殺。
病毒作者將木馬主體寫成一個符合微軟開發文檔規範的服務性質dll模組檔案,然後通過一段安裝程式,將木馬dll放入系統目錄,並在服務管理器(scm)里註冊自身為通過 svchost.exe載入的服務dll組件之一,為了提高隱蔽性,病毒作者甚至直接替換系統里某些不太重要而默認開啟的服務載入代碼,如 “distributed link tracking client”,其默認的啟動命令是“svchost -k netsvcs”,如果有個病毒替換了啟動命令為自己建立的分組“netsvsc”,即“svchost -k netsvsc”,在這種旁門左道加社會工程學的攻勢下,即使是具備一般查毒經驗的用戶也難以在第一時間內察覺到問題出自服務項,於是病毒得以成功逃離各種查殺。
目前被發現使用此方法的木馬已經出現,其中一個進程名為“ad1.exe”的廣告程式就是典型例子,它通過替換 “distributed link tracking client”服務的svchost啟動項來躲過一般的手工查殺,同時它自身還是個病毒下載器,一旦系統感染了這個惡意程式,各種木馬都有可能光臨你的機器。
要清理dll木馬,用戶需要藉助於sysinternals出品的第三方進程管理工具 “Process Explorer”,利用它的“find handle or dll”功能,能迅速搜尋到某個dll依附的進程信息並終結,讓dll失去載體後就能成功刪除,而dll木馬的檔案名稱為了避免和系統dll發生衝突,一般不會起得太專業,甚至有“safaf.dll”、“est.dll”這樣的命名出現,或者在某些系統下根本不會出現的檔案名稱,如 “kernel.dll”、“rundll32.dll”等。除了使用
“process explorer”查找並終止進程以外,還可以用Icesword強行卸載某個進程里的dll模組來達到效果。
對於服務性質的dll,我們仍然使用“process explorer”進行查殺,由於它的層次結構,用戶可以很直觀的看到進程的啟動聯繫,如果一台機器感染了殺不掉的頑固木馬,有經驗的用戶做的第一件事情就是禁止掉不相關或者不重要的程式和服務在開機時運行,然後使用“process explorer”觀察各個進程的情況,通過svchost.exe啟動的dll木馬雖然狡猾,但是它釋放出exe檔案運行時,一切都暴露了:一個 svchost.exe服務進程執行了一個AD1.exe,還有比這更明顯的嗎?
svchost的分組信息位於註冊表的 “hkey_local_machine\ software\microsoft\windows nt\currentversion\svchost”項目,這是svchost載入dll時的分組依據,如果用戶發現了一個奇怪的分組信息,那就要提高警惕了。
隱藏技術發展的顛峰:Rootkit木馬
隨著安全技術的發展和計算機用戶群的技術提高,一般的木馬後門越來越難生存,於是一部分有能力的後門作者把眼光投向了系統底層——ring 0。位於ring 0層的是系統核心模組和各種驅動程式模組,所以位於這一層的木馬也是以驅動的形式生存的,而不是一般的exe。後門作者把後門寫成符合wdm規範(windows driver model)的驅動程式模組,把自身添加進註冊表的驅動程式載入入口,便實現了“無啟動項”運行。一般的進程查看器都只能枚舉執行檔exe的信息,所以通過驅動模組和執行檔案結合的後門程式便得以生存下來,由於它運行在ring 0級別,擁有與系統核心同等級的許可權,因此它可以更輕易的把自己隱藏起來,無論是進程信息還是檔案體,甚至通訊的連線埠和流量也能被隱藏起來,在如此強大的隱藏技術面前,無論是任務管理器還是系統配置實用程式,甚至系統自帶的註冊表工具都失去了效果,這種木馬,就是讓人問之色變的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這一類恐怖的寄生蟲,它們也並非所向無敵的,要知道,既然 Rootkit是利用核心和ring 0配合的欺騙,那么我們同樣也能使用可以“越權”的檢查程式,繞過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提前載入運行,這就涉及到優先權的問題,也是讓業界感覺不太滿意的一種方式,因為這樣做的後果會導致系統運行效率下降,不到緊急關頭,都不要輕易採用這種方法,然而現在的瑞星卡卡助手所推廣的“破甲”技術,實現原理是與之類似的,它也會對系統造成一定影響,因而,這個介於安全和效率之間的選擇,唯有留給用戶自己思考了。

相關詞條

熱門詞條

聯絡我們