隨著計算機的發展,木馬技術也在不停的發展,以冰河為首的老一代經典木馬已經開始慢慢消失在經典木馬行列中,取而代之的則是新一代的嵌入式木馬,也就是通常所說的dll型注入式木馬,其運用了動態嵌入技術,動態嵌入最常見的是最常見的是鉤子、API以及遠程線程技術,而現在大多數的嵌入式木馬都是運用遠程線程技術把自己本身掛在一個正常的系統進程中,通常這一類木馬清除起來比較困難。 嵌入式木馬之迷 那到底什麼是嵌入式dll型木馬呢?DLL的代碼和其他程序幾乎沒什麼兩樣,僅僅是接口和啟動模式不同,只要改動一下代碼入口,DLL就變成一個獨立的程序了。當然,DLL文件是沒有程序邏輯的,這裡並不是說DLL=EXE,不過,依然可以把DLL看做缺少了main入口的EXE,DLL帶的各個功能函數可以看作一個程序的幾個函數模塊。DLL木馬就是把一個實現了木馬功能的代碼,加上一些特殊代碼寫成DLL文件,導出相關的API,在別人看來,這只是一個普通的DLL,但是這個DLL卻攜帶了完整的木馬功能,而dll木馬的標准執行入口為dllmain,dllmain包含了木馬的運行代碼,或者其指向木馬的執行模塊,在dll木馬中通過在另一個進程中創建遠程線程(RemoteThread)的方法進入那個進程的內存地址空間被稱為“注入”,當載體在那個被注入的進程裡創建了遠程線程並命令它加載DLL時,木馬就掛上去執行了,沒有新進程產生,這就是嵌入式dll木馬。 因此黑客通常把dll木馬注入到一些系統關鍵進程,如嵌入到ie浏覽器,Explorer.exe中,來達到更好的啟動和隱蔽自身的目的。如今除了專門的dll木馬外,還有許多優秀的木馬也可以選擇生成一般的exe木馬和dll木馬2種類型,來提供給用戶各種需要,其中的典型的木馬是黑洞和灰鴿子,這2款經典之作就支持這2種服務端的生成,其生成的dll木馬服務端的穩定性也相當出色,各大殺毒產商都將其列入重點查殺對象。 揪出嵌入式木馬 在了解了嵌入式木馬的工作原理後,我們應該如何來及時發現和清除這一類木馬呢?不管是傳統木馬還是嵌入式木馬,首先我們要了解木馬的藏身之地,同傳統木馬一樣system32同樣也是嵌入式木馬最喜愛的藏身之所,根據這個特點我們在安裝好系統和必要的應用程序後,對該目錄下的exe文件和dll文件做一個記錄,運行CMD--轉換目錄到system32--dir *.exe>exe.txt & dir*.dll>dll.txt,這樣所有的EXE和DLL文件的名稱都被分別記錄到exe.txt和dllback.txt中。 如果系統在以後的使用中出現異常而用傳統的方法查不出來的時候,我們就要考慮是不是嵌入式木馬在搗亂了,此時我們再次運行CMD--轉換目錄到system32--dir *.exe>exe1.txt & dir*.dll>dll1.txt將system32下的exe和dll文件分別再記錄到exe1.txt和dll1.txt中,接下來我們就可以對2次記錄的文件進行比較了,來判斷是否存在嵌入式木馬,方法如下:運行CMD--fc exe.txt exe1.txt>change.txt & fc dll.txt dll1.txt>change.txt,其含義為用fc命令比較exe和dll的2次記錄文件,並將結果輸出到change.txt中。這時我們就可以從change.txt中發現發生變化的exe和dll文件以及多出來的exe和dll文件,最後我們查看這些文件的創建時間、版本、是否經過壓縮等就能夠比較容易地判斷出是不是已經被DLL木馬修改了。 如果有的話,在沒有把握的情況下就把dll文件先刪除到回收站中,以便誤刪以後還能文件還原,如果重新啟動後系統沒有任何異常,我們就可以徹底刪除此dll文件了。但同時由於有的進程調用的DLL文件非常多,使得靠我們自己去一個一個去核對變的不太現實,所以此時我們可以借助一些工具來幫助我們縮小范圍,其中NT進程/內存模塊查看器ps.exe就是一款很不錯的工具,用命令ps.exe /a /m >usedll.txt將系統目前正在調用的所有DLL文件名稱保存到usedll.txt中,然後再用fc dll.txt usedll.txt>changenow.txt把比較結果輸出到changenow.txt中,這樣我們就能大大的縮小查找范圍。同時端口也是值得我們重視的一部分,我們可以用進程端口查看工具Fport.exe來查看與端口對應的進程,一般木馬開放的是高端口(但也不排除其使用了端口轉發和復用技術)樣還可以將范圍縮小到具體的進程,然後結合Procedump.exe這款脫殼工具來查看此進程調用的dll文件,再利用上面介紹的文件比較法來比較,從而使得查找DLL木馬變的更容易。針對端口我們還可以使用嗅探的方法來嗅探端口所傳輸的數據,如果數據異常則,再使用Fport來找出端口所對應進程然後再重復以上步驟。 實戰文件對比法 以上講了這麼多方法來揪出嵌入式木馬,也許大家看著這些操作無從做起,以下我將給出文件對比的主要步驟。 ◆應用環境◆ Windows2000 pro,d:/test文件夾的對比 ◆實戰流程◆ 步驟一:進入d盤test文件夾,對test文件夾下內容進行記錄,5自學網,運行CMD--轉換目錄到d:/test--dir *.exe>exe.txt & dir *.dll>dll.txt,如下圖所示:
這樣我們就會在d:/test下生成exe和dll兩個記事本文件,5自學網,內容分別如下: exe.txt文件: 驅動器 D 中的卷是 娛樂 卷的序列號是 6078-F043 D:\test 的目錄 2005-12-04 11:59a 26,772,480 dx81setup.exe 2005-12-04 11:59a 473,600 g5setup解碼.exe 2 個文件 27,246,080 字節 0 個目錄 505,454,592 可用字節 dll.txt文件: 驅動器 D 中的卷是 娛樂 卷的序列號是 6078-F043 D:\test 的目錄 2005-03-31 02:52a 36,924 php5apache.dll 2005-03-31 02:52a 36,925 php5apache2.dll 2005-03-31 02:52a 53,314 php5apache_hooks.dll 3 個文件 127,163 字節
0 個目錄 505,454,592 可用字節 步驟二:我向test文件夾中拷貝幾個exe和dll文件進去,再次重復步驟一,得到exe1.txt和dll1.txt兩個文件,同樣他們位於test文件夾中。 步驟三:比較exe.txt和exe1.txt文件以及dll.txt和dll1.txt文件,運行CMD--fc exe.txt exe1.txt>change.txt & fc dll.txt dll1.txt>change.txt,如下圖所示:
對比後得到changedll.txt和changeexe.txt兩個文件內容如下: changedll.txt: 正在比較文件 dll.txt 和 DLL1.TXT ***** dll.txt 2005-03-31 02:52a 36,924 php5apache.dll ***** DLL1.TXT 2005-03-31 02:52a 417,792 fdftk.dll 2005-03-31 02:52a 90,112 fribidi.dll 2005-03-31 02:52a 346,624 gds32.dll 2005-03-31 02:52a 36,924 php5apache.dll ***** ***** dll.txt 2005-03-31 02:52a 53,314 php5apache_hooks.dll 3 個文件 127,163 字節 0 個目錄 505,454,592 可用字節 ***** DLL1.TXT 2005-03-31 02:52a 53,314 php5apache_hooks.dll 6 個文件 981,691 字節 0 個目錄 475,787,264 可用字節 ***** 其中我們只需看上面我加粗的部分,這部分內容為增加的文件。加粗部分上面一段dll.txt內容只顯示一行信息2005-03-31 02:52a 36,924 php5apache.dll,其他文件內容信息省略了,這一行內容就代表了dll.txt中的內容,而加粗這部分DLL1.TXT中的2005-03-31 02:52a 36,924 php5apache.dll就代表了dll.txt中所有內容,剩下的就是我加粗了的文件了,即增加了的文件。 changeexe.txt: 正在比較文件 exe.txt 和 EXE1.TXT ***** exe.txt 2005-12-04 11:59a 473,600 g5setup解碼.exe 2 個文件 27,246,080 字節 0 個目錄 505,454,592 可用字節 ***** EXE1.TXT 2005-12-04 11:59a 473,600 g5setup解碼.exe 2005-12-04 12:02p 13,058,048 mpsetup.exe 2004-10-30 09:11a 11,761,184 RealPlayer10-5GOLD_cn.EXE 2005-12-04 12:02p 3,963,392 Winamp278cn_DFX_Blue.EXE 5 個文件 56,028,704 字節 0 個目錄 475,787,264 可用字節 ***** 以上增加了的內容為: 2005-12-04 12:02p 13,058,048 mpsetup.exe 2004-10-30 09:11a 11,761,184 RealPlayer10-5GOLD_cn.EXE 2005-12-04 12:02p 3,963,392 Winamp278cn_DFX_Blue.EXE 步驟四:判斷以上增加的內容是否是自己,曾經安裝在test文件夾中的exe或者dll文件,如果不是則刪除即可。 結束語 總而言之要查殺這類嵌入式木馬最有效的辦法就是文件對比法,除了上面介紹的一些縮小查找范圍的辦法外,用戶還可以自己再發揮想象把范圍縮至最小,從而更加准確的查殺此類嵌入式木馬,讓嵌入式木馬在我們面前無法遁形。