一提起木馬或者病毒,大家都會是一臉憎惡且避而遠之的態度。但是現實卻是殘酷的,在當今這個時代,國內用於家庭和企業的電腦,平均每十台就有至少一台感染過後門,染毒途徑除了移動媒介擴散以外,最常見的就是網絡途徑,如那些被植入木馬的網站、網絡中爬行的蠕蟲、即時聊天系統傳輸的文件、系統漏洞導致的入侵植馬和帶毒的電子郵件等。可以說,各種途徑都可能使你的計算機受到感染,即使你只是打開了幾個網站頁面看看當天的時事新聞。
正所謂知己知彼、百戰不殆,要想遠離木馬或病毒的騷擾,當然需要我們對它們有詳細的了解,才能讓我們戰勝這些木馬、病毒以及那些惡意的入侵!下面我們就為大家介紹一種歷史悠久的木馬――驅動木馬。
一、 隱藏技術的演變:
要談驅動木馬的識別,就不能不介紹木馬、病毒的隱藏技術的演變過程。最初的木馬,如同惡意軟件或流氓軟件那樣,使用普通的EXE可運行文件和簡單的隱藏技術。較為強大的木馬,是直接跳過了第一代木馬形態,而采用DLL文件形態和線程注射技術。
線程注射的全稱是“遠程線程注射”(RemoteThread Injection),通常情況下,各個進程的內存空間是不可以相互訪問的,這也是為程序能夠穩定運行打下基礎,這個訪問限制讓所有進程之間互相獨立,這樣一來,任何一個非系統關鍵進程發生崩潰時都不會影響到其他內存空間裡的進程執行,從而使NT架構的穩定性遠遠高於Win9x架構。但是在一些特定的場合裡,必須讓進程之間可以互相訪問和管理,這就是“遠程線程”技術的初衷,這個技術實現了進程之間的跨內存空間訪問,其核心是產生一個特殊的線程,這個線程能夠將一段執行代碼連接到另一個進程所處的內存空間裡,作為另一個進程的其中一個非核心線程來運行,從而達到交換數據的目的,這個連接的過程被稱為“注射”(Injection)。遠程線程技術好比一棵寄生在大樹上的蔓籐,一旦目標進程被注射,這段新生的線程就成為目標進程的一部分代碼了,只要目標進程不被終止,原進程無論是否還在運行都不會再影響到執行結果了。
曾經,線程注射技術成為擺在用戶面前的一道難題,因為一旦它加載運行,一般的手段就無法對其造成傷害,但是隨著時代變遷,它的“弊端”也開始暴露得越來越明顯了,例如在安全模式下,由於載體EXE的啟動項無法被調用運行,這些木馬自然也就失去了作用。而一部分木馬則利用開始浏覽器,只要“Windows外殼”Explorer.exe程序被加載,它就隨之啟動了,雖然它使用這種方法實現了在一般的安全模式裡也能保持運行,但是在更進一步的“命令提示符的安全模式”裡,由於它的依賴載體Explorer.exe並不會被調用(該模式裡使用CMD.EXE作為外殼),在有經驗的用戶面前,這種保護模式也就被破解了。
二、驅動木馬的誕生:
於是木馬開發者開始尋求一種更高級更保險的手段來確保自己的“作品”不受破壞,最終他們把眼光投向了系統底層——Ring 0,這裡運行著系統核心模塊和各種驅動程序模塊,而且也只能運行這些以驅動文件為形態的代碼。為了達到目的,後門作者們把“作品”編寫成符合WDM規范(Windows Driver Model)的驅動程序模塊,把自身添加進注冊表的驅動程序加載入口,便實現了“無啟動項”運行。一般的進程查看器都只能枚舉可執行文件EXE的信息,所以通過驅動模塊和執行文件結合的後門程序便得以生存下來,由於它運行在Ring 0級別,擁有與系統核心同等級的權限,因此它可以更輕易的把自己隱藏起來,無論是進程信息還是文件體,甚至通訊的端口也能被隱藏起來,在如此強大的隱藏技術面前,無論是任務管理器還是系統配置實用程序,甚至系統自帶的注冊表工具都失去了效果,這種木馬,就是讓人聞之色變的Rootkit。
起初,這種技術僅僅為高級的木馬所使用,然而到了後期,為了避免自身被用戶和惡意軟件清理工具卸載,越來越多的惡意軟件紛紛加入了這個陣營,到了這個階段,惡意軟件已經徹底成為流氓了,有許多惡意軟件甚至結合了多種途徑蠶食用戶的系統領域,包括驅動形態、線程注射的DLL形態和表面上的EXE——它們只比類似的木馬多了一個EXE而已。在多種技術的結合下,這些惹人討厭的東西越來越難以查殺。
【責編:Chuan】
三、驅動木馬的發展:
早期的驅動木馬雖然采取了驅動形態達到隱藏自己避免查殺的目的,但是在安全模式裡它仍然被發現了。因為Windows的“安全模式”不僅僅限於加載用戶界面和啟動項這些區別,它還包括各種驅動的“安全模式”,在安全模式裡,為了確保Windows不會由於某個驅動文件的缺陷而崩潰——畢竟一部分人被迫進入安全模式就是因為遇到了某些設備驅動不兼容或存在問題而導致系統不能正常運行,大部分被標記為“不必要”的驅動在“硬件抽象層(HAL)”的干涉下,是不會被加載的,甚至顯卡驅動也不能例外。所以此時Windows是相對安全的基於“默認硬件”運行的界面簡陋的系統。操作系統廠商此舉其實很好理解,想象一下如果你因為安裝了某個設備的驅動程序而導致系統藍屏,然後你來到安全模式裡想要修復它,卻不幸的發現安全模式也出現了藍屏——因為這個驅動被系統加載了,如果這樣,安全模式還有什麼意義。於是,在這樣的設計思想下,早期的驅動木馬到了安全模式,還是很好清理的,因為那個時候,大部分開發者還處於開發Rootkit的試探階段,誰也不敢貿然繞過這種安全體系。
硬件抽象層(Hardware Abstraction Layer,HAL)是微軟公司為了便於操作系統在不同硬件結構上進行移植而提出的將系統底層與硬件相關的部分獨立運作的思想,HAL為系統實現了“硬件無關性”,即在不同的硬件平台上,硬件與操作系統的交互也不會有所差異,這樣一來,硬件廠商開發驅動的難度便能大大降低,HAL將硬件的接口細節隱藏起來,並為操作系統提供一個標准硬件交互接口,目前所有的硬件驅動都工作在這個層面上,當外界硬件存在指令請求時,驅動程序響應請求並將指令通過HAL轉換為系統核心層能理解的指令交給內核執行,如果未找到相應的驅動程序類型,則將其視為“默認硬件”(Default Hardware)處理,什麼叫“默認硬件”呢?最簡單的例子就是進入安全模式,這時候大部分驅動程序不會被加載,此時的系統便是工作於“默認硬件”上。
然而在經歷了一段時間的試煉以後,開發者的技術熟練了,膽子也大了,他們開始修改驅動模塊的運行級別——系統的“默認硬件”是根據驅動模塊加載入口聲明的啟動優先級判斷的,對於絕對安全的驅動程序,它的優先級被提高了,於是系統無論在什麼模式下都會加載它,例如鍵盤驅動、鼠標驅動、各種基礎的系統設備驅動等,如果某個驅動文件的優先級被人為提高,系統就會將其視為必備驅動加載,而這個優先級的提高方法非常簡單,只需要改動注冊表的驅動模塊分支裡的一個數據而已。至此,即使在加載模塊最少的“基於命令提示符的安全模式”下,這樣驅動木馬就可以不受阻礙的橫行霸道了,即使是專業的計算機用戶查殺也很困難了,更別說那麼“菜鳥”們了。
四、識別驅動木馬:
大部分驅動木馬的驅動模塊並不是用來實現入侵行為或者進行浏覽器劫持的,而是為真正負責這部分操作的位於用戶層的可執行程序本體提供保護功能,因此驅動木馬的大部分工作就是攔截相關的系統API調用工作,使得用戶無法直接查找到真正的文件本體,或者對它們屢殺不禁,甚至連相關的注冊表項目都無法刪除,這就是因為它們直接從驅動層攔截了實現這些功能的API。
雖然驅動木馬使用的種種手段使得自己可以保全於普通的系統安全檢測工具下,但是在基於驅動層的安全檢測工具出現後,這個一方獨霸的局面被打破了,通過使用國產的幾個優秀工具如IceSword和安全巡警專業版(AST Pro),普通用戶也能具備發現驅動木馬的能力。那麼,如何判斷系統是否中了木馬,以及是中了驅動木馬呢?首先用戶要具備基礎的系統啟動項知識,雖然啟動項裡的東西會隨著用戶安裝的一些軟件而增加,但是實際上系統可以只存在最少的兩個甚至一個啟動項:用於同步的mobsync、輸入法指示器internat(Windows 2000)或高級文字服務ctfmon(Windows XP),默認情況下Windows XP還會出現一些MG或IME開頭的啟動項,這些都是無關緊要的。
也許您會問,如果我一直沒有養成記錄系統啟動項的習慣,也沒有過檢測木馬的經驗,我該如何去判斷一個啟動項是否木馬呢?這個問題很難用固定的思維回答,但是用戶可以采取一個笨而實用的方法來測試,雖然它很煩瑣,但是卻比較直觀。
首先運行“系統配置實用工具”msconfig.exe,在它的“啟動”選項卡裡面把所有啟動項取消,然後重啟計算機,你會發現系統任務欄右邊的托盤區少了許多東西,這時候,再次運行msconfig,邊把當前的啟動項名稱記錄在筆記上並勾上第一個啟動項,然後確定重啟,通過觀察系統啟動後托盤區裡是否多出了圖標就可以判斷出這個啟動項的大概作用了,如果托盤區出現了圖標或者直接就出現了一些窗口界面如QQ的登錄對話框,就可以確認這是個正常的啟動項,在筆記上對應的啟動項名稱前打勾。然後再次運行msconfig,取消第一個啟動項的勾,勾上第二個啟動項,再次重啟,直到所有啟動項都分別獨立開啟了一次為止,最後看看你記錄下來的筆記裡有多少個項目是打了勾的,而剩下那些未被勾選的項目,有80%的幾率就是一般的木馬。
這個方法最保險,也最煩瑣,所以用戶需要記住一條規律,如今有許多木馬的文件名和啟動項名稱都是很混亂或者很“系統”的,如看到“48ED0A5E”、“svchost”、&ldqu