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