早期的驅(qū)動(dòng)木馬雖然采取了驅(qū)動(dòng)形態(tài)達(dá)到隱藏自己避免查殺的目的,但是在安全模式里它仍然被發(fā)現(xiàn)了。因?yàn)閃indows的“安全模式”不僅僅限于加載用戶界面和啟動(dòng)項(xiàng)這些區(qū)別,它還包括各種驅(qū)動(dòng)的“安全模式”,在安全模式里,為了確保Windows不會(huì)由于某個(gè)驅(qū)動(dòng)文件的缺陷而崩潰--畢竟一部分人被迫進(jìn)入安全模式就是因?yàn)橛龅搅四承┰O(shè)備驅(qū)動(dòng)不兼容或存在問題而導(dǎo)致系統(tǒng)不能正常運(yùn)行,大部分被標(biāo)記為“不必要”的驅(qū)動(dòng)在“硬件抽象層(HAL)”的干涉下,是不會(huì)被加載的,甚至顯卡驅(qū)動(dòng)也不能例外
。所以此時(shí)Windows是相對(duì)安全的基于“默認(rèn)硬件”運(yùn)行的界面簡(jiǎn)陋的系統(tǒng)。操作系統(tǒng)廠商此舉其實(shí)很好理解,想象一下如果你因?yàn)榘惭b了某個(gè)設(shè)備的驅(qū)動(dòng)程序而導(dǎo)致系統(tǒng)藍(lán)屏,然后你來到安全模式里想要修復(fù)它,卻不幸的發(fā)現(xiàn)安全模式也出現(xiàn)了藍(lán)屏--因?yàn)檫@個(gè)驅(qū)動(dòng)被系統(tǒng)加載了,如果這樣,安全模式還有什么意義。于是,在這樣的設(shè)計(jì)思想下,早期的驅(qū)動(dòng)木馬到了安全模式,還是很好清理的,因?yàn)槟莻€(gè)時(shí)候,大部分開發(fā)者還處于開發(fā)Rootkit的試探階段,誰也不敢貿(mào)然繞過這種安全體系。
硬件抽象層(Hardware Abstraction Layer,HAL)是微軟公司為了便于操作系統(tǒng)在不同硬件結(jié)構(gòu)上進(jìn)行移植而提出的將系統(tǒng)底層與硬件相關(guān)的部分獨(dú)立運(yùn)作的思想,HAL為系統(tǒng)實(shí)現(xiàn)了“硬件無關(guān)性”,即在不同的硬件平臺(tái)上,硬件與操作系統(tǒng)的交互也不會(huì)有所差異,這樣一來,硬件廠商開發(fā)驅(qū)動(dòng)的難度便能大大降低,HAL將硬件的接口細(xì)節(jié)隱藏起來,并為操作系統(tǒng)提供一個(gè)標(biāo)準(zhǔn)硬件交互接口,目前所有的硬件驅(qū)動(dòng)都工作在這個(gè)層面上,當(dāng)外界硬件存在指令請(qǐng)求時(shí),驅(qū)動(dòng)程序響應(yīng)請(qǐng)求并將指令通過HAL轉(zhuǎn)換為系統(tǒng)核心層能理解的指令交給內(nèi)核執(zhí)行,如果未找到相應(yīng)的驅(qū)動(dòng)程序類型,則將其視為“默認(rèn)硬件”(Default Hardware)處理,什么叫“默認(rèn)硬件”呢?最簡(jiǎn)單的例子就是進(jìn)入安全模式,這時(shí)候大部分驅(qū)動(dòng)程序不會(huì)被加載,此時(shí)的系統(tǒng)便是工作于“默認(rèn)硬件”上。
然而在經(jīng)歷了一段時(shí)間的試煉以后,開發(fā)者的技術(shù)熟練了,膽子也大了,他們開始修改驅(qū)動(dòng)模塊的運(yùn)行級(jí)別--系統(tǒng)的“默認(rèn)硬件”是根據(jù)驅(qū)動(dòng)模塊加載入口聲明的啟動(dòng)優(yōu)先級(jí)判斷的,對(duì)于絕對(duì)安全的驅(qū)動(dòng)程序,它的優(yōu)先級(jí)被提高了,于是系統(tǒng)無論在什么模式下都會(huì)加載它,例如鍵盤驅(qū)動(dòng)、鼠標(biāo)驅(qū)動(dòng)、各種基礎(chǔ)的系統(tǒng)設(shè)備驅(qū)動(dòng)等,如果某個(gè)驅(qū)動(dòng)文件的優(yōu)先級(jí)被人為提高,系統(tǒng)就會(huì)將其視為必備驅(qū)動(dòng)加載,而這個(gè)優(yōu)先級(jí)的提高方法非常簡(jiǎn)單,只需要改動(dòng)注冊(cè)表的驅(qū)動(dòng)模塊分支里的一個(gè)數(shù)據(jù)而已。至此,即使在加載模塊最少的“基于命令提示符的安全模式”下,這樣驅(qū)動(dòng)木馬就可以不受阻礙的橫行霸道了,即使是專業(yè)的計(jì)算機(jī)用戶查殺也很困難了,更別說那么“菜鳥”們了。
大部分驅(qū)動(dòng)木馬的驅(qū)動(dòng)模塊并不是用來實(shí)現(xiàn)入侵行為或者進(jìn)行瀏覽器劫持的,而是為真正負(fù)責(zé)這部分操作的位于用戶層的可執(zhí)行程序本體提供保護(hù)功能,因此驅(qū)動(dòng)木馬的大部分工作就是攔截相關(guān)的系統(tǒng)API調(diào)用工作,使得用戶無法直接查找到真正的文件本體,或者對(duì)它們屢殺不禁,甚至連相關(guān)的注冊(cè)表項(xiàng)目都無法刪除,這就是因?yàn)樗鼈冎苯訌尿?qū)動(dòng)層攔截了實(shí)現(xiàn)這些功能的API。
雖然驅(qū)動(dòng)木馬使用的種種手段使得自己可以保全于普通的系統(tǒng)安全檢測(cè)工具下,但是在基于驅(qū)動(dòng)層的安全檢測(cè)工具出現(xiàn)后,這個(gè)一方獨(dú)霸的局面被打破了,通過使用國(guó)產(chǎn)的幾個(gè)優(yōu)秀工具如IceSword和安全巡警專業(yè)版(AST Pro),普通用戶也能具備發(fā)現(xiàn)驅(qū)動(dòng)木馬的能力。
那么,如何判斷系統(tǒng)是否中了木馬,以及是中了驅(qū)動(dòng)木馬呢?首先用戶要具備基礎(chǔ)的系統(tǒng)啟動(dòng)項(xiàng)知識(shí),雖然啟動(dòng)項(xiàng)里的東西會(huì)隨著用戶安裝的一些軟件而增加,但是實(shí)際上系統(tǒng)可以只存在最少的兩個(gè)甚至一個(gè)啟動(dòng)項(xiàng):用于同步的mobsync、輸入法指示器internat(Windows 2000)或高級(jí)文字服務(wù)ctfmon(Windows XP),默認(rèn)情況下Windows XP還會(huì)出現(xiàn)一些MG或IME開頭的啟動(dòng)項(xiàng),這些都是無關(guān)緊要的。
也許您會(huì)問,如果我一直沒有養(yǎng)成記錄系統(tǒng)啟動(dòng)項(xiàng)的習(xí)慣,也沒有過檢測(cè)木馬的經(jīng)驗(yàn),我該如何去判斷一個(gè)啟動(dòng)項(xiàng)是否木馬呢?這個(gè)問題很難用固定的思維回答,但是用戶可以采取一個(gè)笨而實(shí)用的方法來測(cè)試,雖然它很煩瑣,但是卻比較直觀。
首先運(yùn)行“系統(tǒng)配置實(shí)用工具”msconfig.exe,在它的“啟動(dòng)”選項(xiàng)卡里面把所有啟動(dòng)項(xiàng)取消,然后重啟計(jì)算機(jī),你會(huì)發(fā)現(xiàn)系統(tǒng)任務(wù)欄右邊的托盤區(qū)少了許多東西,這時(shí)候,再次運(yùn)行msconfig,邊把當(dāng)前的啟動(dòng)項(xiàng)名稱記錄在筆記上并勾上第一個(gè)啟動(dòng)項(xiàng),然后確定重啟,通過觀察系統(tǒng)啟動(dòng)后托盤區(qū)里是否多出了圖標(biāo)就可以判斷出這個(gè)啟動(dòng)項(xiàng)的大概作用了,如果托盤區(qū)出現(xiàn)了圖標(biāo)或者直接就出現(xiàn)了一些窗口界面如QQ的登錄對(duì)話框,就可以確認(rèn)這是個(gè)正常的啟動(dòng)項(xiàng),在筆記上對(duì)應(yīng)的啟動(dòng)項(xiàng)名稱前打勾。然后再次運(yùn)行msconfig,取消第一個(gè)啟動(dòng)項(xiàng)的勾,勾上第二個(gè)啟動(dòng)項(xiàng),再次重啟,直到所有啟動(dòng)項(xiàng)都分別獨(dú)立開啟了一次為止,最后看看你記錄下來的筆記里有多少個(gè)項(xiàng)目是打了勾的,而剩下那些未被勾選的項(xiàng)目,有80%的幾率就是一般的木馬。
這個(gè)方法最保險(xiǎn),也最煩瑣,所以用戶需要記住一條規(guī)律,如今有許多木馬的文件名和啟動(dòng)項(xiàng)名稱都是很混亂或者很“系統(tǒng)”的,如看到“48ED0A5E”、“svchost”、“svohost”、“services”、“ssdt”、“ssodl”這樣的啟動(dòng)項(xiàng),那就不必懷疑了,它絕對(duì)是木馬。
用戶的疑問又來了,這方法的結(jié)尾說,這只是測(cè)試“一般的木馬”而已,那我該如何判斷系統(tǒng)是否感染了“驅(qū)動(dòng)木馬”呢?其實(shí),如果用戶的機(jī)器已經(jīng)感染了驅(qū)動(dòng)木馬,那么在剛才的測(cè)試?yán)锼鸵呀?jīng)暴露了,細(xì)心的用戶應(yīng)該不難發(fā)現(xiàn),他們的機(jī)器里有一個(gè)甚至多個(gè)啟動(dòng)項(xiàng),即使剛才在msconfig里已經(jīng)取消,重啟后卻發(fā)現(xiàn)它仍然是選中的狀態(tài),如果用戶是使用具備實(shí)時(shí)刷新功能的第三方工具管理啟動(dòng)項(xiàng),甚至?xí)l(fā)現(xiàn)自己剛?cè)∠诉@個(gè)啟動(dòng)項(xiàng)就馬上被自動(dòng)恢復(fù)了,而這些始終不肯放棄自啟動(dòng)權(quán)利的項(xiàng)目,就是我們要找的驅(qū)動(dòng)木馬的用戶層本體--不要高興,它并不是驅(qū)動(dòng)木馬的真正危害部分,這個(gè)只是驅(qū)動(dòng)木馬千方百計(jì)要保護(hù)的對(duì)象而已。這個(gè)方法正是利用驅(qū)動(dòng)木馬的保護(hù)特性,讓它自我暴露。
結(jié)束語:以上從木馬的隱藏技術(shù)一直到驅(qū)動(dòng)木馬的識(shí)別,進(jìn)行了詳盡的敘述,而光發(fā)現(xiàn)和識(shí)別驅(qū)動(dòng)木馬是不夠了,如何絞殺這些討厭的家伙呢,請(qǐng)大家關(guān)注我們后續(xù)的文章!