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