一、初識(shí)DLL木馬
首先了解一下DLL文件,DLL(Dynamic Link Library)是系統(tǒng)中的動(dòng)態(tài)鏈接庫文件,DLL文件本身并不能夠運(yùn)行,需要應(yīng)用程序來調(diào)用。當(dāng)程序運(yùn)行時(shí),Windows將其裝入內(nèi)存中,并尋找文件中出現(xiàn)的動(dòng)態(tài)鏈接庫文件。對(duì)于每個(gè)動(dòng)態(tài)鏈接,Windows都會(huì)裝入指定的DLL文件并把它映射到相應(yīng)虛擬地址空間中。DLL木馬實(shí)際就是把一段實(shí)現(xiàn)了木馬功能的代碼加上一些特殊代碼寫成DLL文件。DLL文件運(yùn)行時(shí)是插入到應(yīng)用程序的內(nèi)存模塊當(dāng)中,所以DLL文件無法刪除。
下面以一個(gè)實(shí)例說明DLL文件的運(yùn)行,單擊“開始→運(yùn)行”并輸入“rundll32.exe netplwiz.dll,UsersRunDll”,回車后會(huì)看到一個(gè)用戶賬戶設(shè)置窗口,打開進(jìn)程列表發(fā)現(xiàn)系統(tǒng)新增一個(gè)“rundll32.exe”進(jìn)程,但是并不會(huì)發(fā)現(xiàn)DLL之類的進(jìn)程,“netplwiz.dll,UsersRunDll”就是通過“rundll32.exe”來調(diào)用的,如果這是一個(gè)DLL木馬,那么它啟動(dòng)后新增的進(jìn)程就是正常的“rundll32.exe”,一般用戶也不會(huì)將“rundll32.exe”中止或刪除,而木馬此時(shí)卻可以在后臺(tái)悄悄地“作惡”。
小提示
當(dāng)然除了用“rundll32.exe”作為載體外,DLL木馬還可以通過動(dòng)態(tài)嵌入技術(shù),通過任意一個(gè)系統(tǒng)進(jìn)程進(jìn)行加載。
二、查殺方法
前面介紹了DLL文件自身并不能運(yùn)行,它必須通過其它程序調(diào)用才能“作惡”,主要有以下兩種途徑:
1.通過Rundl32l.exe啟動(dòng)的木馬
木馬運(yùn)行如上所述,系統(tǒng)啟動(dòng)后若發(fā)現(xiàn)加載了“rundll32.exe”進(jìn)程,那很可能就是中招了。不過系統(tǒng)也會(huì)調(diào)用“rundll32.exe”來加載正常的DLL文件,主要看加載的是什么DLL文件,因?yàn)槟抉R大多是通過注冊(cè)表鍵值來自啟動(dòng)。首先檢查那些常見的自啟動(dòng)鍵值,如“3721”就是通過DLL文件來啟動(dòng)的,雖然它并不是木馬,但是它的自啟動(dòng)和運(yùn)行方式可以借鑒。它在注冊(cè)表的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下,新添了一個(gè)“CnsMin”的鍵值,啟動(dòng)命令是“Rundll32.exe E:\WINDOWS\DOWNLO~1\CnsMin.dll,Rundll32”(如圖1)。這樣每次啟動(dòng)系統(tǒng)后“CnsMin.dll”都會(huì)被Rundll32.exe調(diào)用,而在進(jìn)程列表出現(xiàn)的則是Rundl32.exe。此類DLL木馬的運(yùn)行過程大多如此,查殺方法是:首先將“rundll32.exe”進(jìn)程終止,接著查找注冊(cè)表各啟動(dòng)鍵值,從啟動(dòng)命令的路徑中找到相應(yīng)的DLL文件并刪除即可。
圖1 注冊(cè)表
2. 嵌入式木馬
運(yùn)用Rundl32l.exe調(diào)用的木馬,很容易被用戶發(fā)現(xiàn)并查殺。為了提高“馬兒”的成活率,網(wǎng)上出現(xiàn)了動(dòng)態(tài)嵌入式木馬,它是將木馬代碼嵌入到正在運(yùn)行的進(jìn)程中。理論上來說,在Windows中的每個(gè)進(jìn)程都有自己的私有內(nèi)存空間,別的進(jìn)程是不允許對(duì)這個(gè)私有空間進(jìn)行操作的,但實(shí)際上,動(dòng)態(tài)嵌入式木馬就是通過嵌入進(jìn)程來“作惡”的。雖然編寫這種動(dòng)態(tài)式嵌入木馬有一定的技術(shù)難度,但是很多“雷鋒”式的制馬高手將此類木馬隨意放在網(wǎng)上,初學(xué)者下載這種木馬后只要按提示選擇嵌入進(jìn)程就可以輕松生成木馬,把客戶端發(fā)送到對(duì)方電腦并運(yùn)行后,動(dòng)態(tài)嵌入式木馬就可以在我們的電腦“安家落戶”了,這也是眾多用戶中招的原因。下面以查殺“winlogon.exe”進(jìn)程木馬為例,介紹一下查殺技巧。
①.查看連接
不管是何種類型的木馬,它要“作惡”肯定要通過本地端口與外部電腦連接,只要查看本機(jī)開放端口和連接情況,一般就可以找出木馬客戶端。查看端口和連接可用“netstat”命令(格式:nestat –a –o),不過這個(gè)命令并不能看到發(fā)起連接的進(jìn)程。這里推薦大家使用“CurrPorts 漢化版”,它是一款免費(fèi)的網(wǎng)絡(luò)連接檢測(cè)工具,除了能夠列出所有TCP/IP和UDP連接外,還可以列出打開端口的應(yīng)用程序,并提供終止程序功能。運(yùn)行“CurrPorts”后,會(huì)發(fā)現(xiàn)“winlogon.exe”已被一遠(yuǎn)程地址連接,打開的端口是6666、6671、6669、6672。“winlogon.exe”是Windows NT的用戶登陸程序,這個(gè)進(jìn)程是管理用戶登錄和退出的,它在用戶按下CTRL+ALT+DEL時(shí)就激活了,顯示安全對(duì)話框。正常情況下,這個(gè)進(jìn)程是不會(huì)向外發(fā)起連接的,若“winlogon.exe”發(fā)起連接,則是中了嵌入“winlogon.exe”進(jìn)程的DLL木馬,在“CurrPorts”中選中進(jìn)程,依次將連接中斷(如圖2),需要注意的是不要選擇“終止打開選中端口的進(jìn)程”,否則電腦會(huì)自動(dòng)重啟。
下載CurrPorts:
http://down1.tech.sina.com.cn/download/downContent/2004-06-30/10694.shtml
圖2 將連接中斷
小知識(shí):端口狀態(tài)參數(shù)含義
LISTENING表示處于偵聽狀態(tài),就是說該端口是開放的,等待連接,但還沒有被連接,只有TCP協(xié)議的服務(wù)端口才能處于LISTENING狀態(tài)。
ESTABLISHED的意思是建立連接,表示兩臺(tái)機(jī)器正在通信。
TIME_WAIT的意思是結(jié)束了這次連接。說明端口曾經(jīng)有過訪問,但訪問結(jié)束了。
SYN_SENT是本機(jī)向其它計(jì)算機(jī)發(fā)出的連接請(qǐng)求,一般這個(gè)狀態(tài)存在的時(shí)間很短。
②.分析
既然是插入進(jìn)程的DLL木馬,通過查看“winlogon.exe”進(jìn)程加載DLL模塊應(yīng)該可以找出“真兇”。查看模塊利用免費(fèi)軟件“prcmgrWindows進(jìn)程管理器”,運(yùn)行軟件后選中進(jìn)程并切換到“進(jìn)程模塊”選項(xiàng)卡,接著單擊“導(dǎo)出列表”,將加載列表導(dǎo)出為TXT文件(如圖3)。
下載windows進(jìn)程管理器:
http://down1.tech.sina.com.cn/download/downContent/2005-12-13/16432.shtml
圖3 將加載列表導(dǎo)出為TXT文件
小提示
若木馬插入到“Explorer”、“Iexplorer.exe”等進(jìn)程中,由于啟動(dòng)的應(yīng)用程序不同,則加載的DLL模塊也是不同的,為便于比較最好關(guān)閉所有不必要的程序再進(jìn)行導(dǎo)出。
③.查找木馬
用上文的方法到另一臺(tái)電腦中同樣導(dǎo)出“winlogon.exe”進(jìn)程加載的DLL模塊文件,用記事本打開這兩個(gè)文件比較,可以看到中招電腦上進(jìn)程模塊比正常電腦多出14個(gè)(如圖4),現(xiàn)在一一比較將相同模塊文件刪除后,順利找到多出的14個(gè)DLL文件,經(jīng)查看文件屬性獲知,“e:\windows\rundll.dll”為非微軟“制造”,它就是DLL木馬。
圖4 可以看到中招電腦上進(jìn)程模塊比正常電腦多出14個(gè)
小提示
如果是系統(tǒng)正常的DLL文件,文件屬性中都會(huì)有一個(gè)“版本”標(biāo)簽,公司名稱為“Microsoft Corporation”,創(chuàng)建日期是“2001年9月5日,:13:00”,可根據(jù)這一特性來判斷是否為木馬文件。如本例的“rundll.dll”木馬,創(chuàng)建日期“2004年11月13日, :11:59”,修改日期則是“2001年9月5日, :13:00”,也就是說還沒創(chuàng)建文件時(shí)就被修改了,顯然是非法文件!
④.刪除木馬(設(shè)置系統(tǒng)權(quán)限)
由于“winlogon.exe”是系統(tǒng)關(guān)鍵進(jìn)程無法終止,所以也無法直接刪除“rundll.dll”,這里使用系統(tǒng)權(quán)限設(shè)置來禁止“winlogon.exe”的調(diào)用。打開“我的電腦”,單擊“工具→文件夾選項(xiàng)→查看”,然后在“高級(jí)設(shè)置”選項(xiàng)下去除“簡(jiǎn)單文件共享(推薦)”前的小勾;隨后找到“rundll.dll”右擊選擇“屬性”命令,點(diǎn)擊“安全”標(biāo)簽,接著單擊“高級(jí)”項(xiàng),在彈出的窗口清除“從父項(xiàng)繼承那些可以應(yīng)用到子對(duì)象的權(quán)限項(xiàng)目,包括那些在此明確定義的項(xiàng)目”復(fù)選框,最后單擊刪除,去除所有繼承的權(quán)限(如圖5),依次單擊“確定”后退出,這樣系統(tǒng)中就沒有任何進(jìn)程可以調(diào)用“rundll.dll”,重啟后重新勾選“從父項(xiàng)繼承那些可以應(yīng)用到子對(duì)象的權(quán)限項(xiàng)目權(quán)限”,然后將其刪除。
圖5 去除所有繼承的權(quán)限
小提示
上述權(quán)限操作僅對(duì)采用NTFS分區(qū)的系統(tǒng)有效,對(duì)于采用FAT32分區(qū)的系統(tǒng),可以重啟后進(jìn)入純DOS將木馬文件刪除。如果加載DLL木馬的進(jìn)程可以被終止,如嵌入“Explorer.exe”木馬,只要將進(jìn)程終止,然后找到文件將它刪除即可。
⑤.修復(fù)自啟動(dòng)
DLL木馬會(huì)通過注冊(cè)表鍵值進(jìn)行自啟動(dòng),查看自啟動(dòng)菜單推薦大家使用“Autoruns8.13漢化版”,它也是一款免費(fèi)工具,可以查看系統(tǒng)所有啟動(dòng)項(xiàng)目。運(yùn)行后單擊“登錄”,可以看到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run]下,有一“Windows服務(wù)”啟動(dòng)項(xiàng)極為可疑(加載的是“E:\WINDOWS\msagent\msymrj.com”),右擊選擇“轉(zhuǎn)到具體位置”(如圖6)。此時(shí)程序?qū)⒅苯哟蜷_注冊(cè)表,隨后將該鍵值刪除,至此DLL木馬順利被查殺。那么“msymrj.com”與“rundll”木馬究竟是什么關(guān)系?這其實(shí)是一對(duì)守護(hù)進(jìn)程,用于守護(hù)嵌入“winlogon.exe”進(jìn)程的木馬,如果發(fā)現(xiàn)被插入的進(jìn)程被終止,立刻重新啟動(dòng)該進(jìn)程。不過本例的“winlogon.exe”進(jìn)程如果被終止,系統(tǒng)會(huì)重新啟動(dòng),它也幫不上什么忙了。
下載Autornus:
http://down1.tech.sina.com.cn/download/downContent/2004-09-13/11464.shtml
圖6 轉(zhuǎn)到具體位置
小提示
很多DLL木馬被終止后立刻又會(huì)復(fù)活,就是由于有守護(hù)進(jìn)程的存在,只有把守護(hù)進(jìn)程“掐死”后,才能終止木馬的運(yùn)行。
三、總結(jié)經(jīng)驗(yàn)
聯(lián)系客服