探析dll木馬的高深伎倆

 在這個萬“馬”奔騰的時代,網絡上充斥着各種各樣的木馬,不過隨着殺毒技術的進步和大家防毒意識的提高,傳統木馬已漸漸失去市場,而DLL木馬則“與時俱進”以其強大的生命力,繼續網絡中“爲非作歹”。因DLL木馬的啓動方式比較特別,它不象傳統的木馬,啓動時會“傻傻”地在進程列表中暴露自己,而且還可以通過插入系統進程運行自己,具有很強的隱蔽性。本文就和大家一起來揭開DLL木馬的神祕面紗。
  一、初識DLL木馬
  首先了解一下DLL文件,DLL(Dynamic Link Library)是系統中的動態鏈接庫文件,DLL文件本身並不能夠運行,需要應用程序來調用。當程序運行時,Windows將其裝入內存中,並尋找文件中出現的動態鏈接庫文件。對於每個動態鏈接,Windows都會裝入指定的DLL文件並把它映射到相應虛擬地址空間中。DLL木馬實際就是把一段實現了木馬功能的代碼加上一些特殊代碼寫成DLL文件。DLL文件運行時是插入到應用程序的內存模塊當中,所以DLL文件無法刪除。
  下面以一個實例說明DLL文件的運行,單擊“開始→運行”並輸入“rundll32.exe netplwiz.dll,UsersRunDll”,回車後會看到一個用戶賬戶設置窗口,打開進程列表發現系統新增一個“rundll32.exe”進程,但是並不會發現DLL之類的進程,“netplwiz.dll,UsersRunDll”就是通過“rundll32.exe”來調用的,如果這是一個DLL木馬,那麼它啓動後新增的進程就是正常的“rundll32.exe”,一般用戶也不會將“rundll32.exe”中止或刪除,而木馬此時卻可以在後臺悄悄地“作惡”。
  小提示
  當然除了用“rundll32.exe”作爲載體外,DLL木馬還可以通過動態嵌入技術,通過任意一個系統進程進行加載。
  二、查殺方法
  前面介紹了DLL文件自身並不能運行,它必須通過其它程序調用才能“作惡”,主要有以下兩種途徑:
  
1.通過Rundl32l.exe啓動的木馬

  木馬運行如上所述,系統啓動後若發現加載了“rundll32.exe”進程,那很可能就是中招了。不過系統也會調用“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)。這樣每次啓動系統後“CnsMin.dll”都會被Rundll32.exe調用,而在進程列表出現的則是Rundl32.exe。此類DLL木馬的運行過程大多如此,查殺方法是:首先將“rundll32.exe”進程終止,接着查找註冊表各啓動鍵值,從啓動命令的路徑中找到相應的DLL文件並刪除即可。

圖1 註冊表
  
2. 嵌入式木馬
 
  運用Rundl32l.exe調用的木馬,很容易被用戶發現並查殺。爲了提高“馬兒”的成活率,網上出現了動態嵌入式木馬,它是將木馬代碼嵌入到正在運行的進程中。理論上來說,在Windows中的每個進程都有自己的私有內存空間,別的進程是不允許對這個私有空間進行操作的,但實際上,動態嵌入式木馬就是通過嵌入進程來“作惡”的。雖然編寫這種動態式嵌入木馬有一定的技術難度,但是很多“雷鋒”式的制馬高手將此類木馬隨意放在網上,初學者下載這種木馬後只要按提示選擇嵌入進程就可以輕鬆生成木馬,把客戶端發送到對方電腦並運行後,動態嵌入式木馬就可以在我們的電腦“安家落戶”了,這也是衆多用戶中招的原因。下面以查殺“winlogon.exe”進程木馬爲例,介紹一下查殺技巧。
  ①.查看連接
  不管是何種類型的木馬,它要“作惡”肯定要通過本地端口與外部電腦連接,只要查看本機開放端口和連接情況,一般就可以找出木馬客戶端。查看端口和連接可用“netstat”命令(格式:nestat –a –o),不過這個命令並不能看到發起連接的進程。這裏推薦大家使用“CurrPorts 漢化版”,它是一款免費的網絡連接檢測工具,除了能夠列出所有TCP/IP和UDP連接外,還可以列出打開端口的應用程序,並提供終止程序功能。運行“CurrPorts”後,會發現“winlogon.exe”已被一遠程地址連接,打開的端口是6666、6671、6669、6672。“winlogon.exe”是Windows NT的用戶登陸程序,這個進程是管理用戶登錄和退出的,它在用戶按下CTRL+ALT+DEL時就激活了,顯示安全對話框。正常情況下,這個進程是不會向外發起連接的,若“winlogon.exe”發起連接,則是中了嵌入“winlogon.exe”進程的DLL木馬,在“CurrPorts”中選中進程,依次將連接中斷(如圖2),需要注意的是不要選擇“終止打開選中端口的進程”,否則電腦會自動重啓。


   
下載Currports

圖2 將連接中斷
  小知識:端口狀態參數含義
  LISTENING表示處於偵聽狀態,就是說該端口是開放的,等待連接,但還沒有被連接,只有TCP協議的服務端口才能處於LISTENING狀態。
  ESTABLISHED的意思是建立連接,表示兩臺機器正在通信。
  TIME_WAIT的意思是結束了這次連接。說明端口曾經有過訪問,但訪問結束了。
  SYN_SENT是本機向其它計算機發出的連接請求,一般這個狀態存在的時間很短。
 ②.分析
  既然是插入進程的DLL木馬,通過查看“winlogon.exe”進程加載DLL模塊應該可以找出“真兇”。查看模塊利用免費軟件“prcmgrWindows進程管理器”,運行軟件後選中進程並切換到“進程模塊”選項卡,接着單擊“導出列表”,將加載列表導出爲TXT文件(如圖3)。
  
下載Windows進程管理器

圖3 將加載列表導出爲TXT文件
  小提示
  若木馬插入到“Explorer”、“Iexplorer.exe”等進程中,由於啓動的應用程序不同,則加載的DLL模塊也是不同的,爲便於比較最好關閉所有不必要的程序再進行導出。
  ③.查找木馬
  用上文的方法到另一臺電腦中同樣導出“winlogon.exe”進程加載的DLL模塊文件,用記事本打開這兩個文件比較,可以看到中招電腦上進程模塊比正常電腦多出14個(如圖4),現在一一比較將相同模塊文件刪除後,順利找到多出的14個DLL文件,經查看文件屬性獲知,“e:/windows/rundll.dll”爲非微軟“製造”,它就是DLL木馬。

圖4 可以看到中招電腦上進程模塊比正常電腦多出14個
  小提示
  如果是系統正常的DLL文件,文件屬性中都會有一個“版本”標籤,公司名稱爲“Microsoft Corporation”,創建日期是“2001年9月5日,:13:00”,可根據這一特性來判斷是否爲木馬文件。如本例的“rundll.dll”木馬,創建日期“2004年11月13日, :11:59”,修改日期則是“2001年9月5日, :13:00”,也就是說還沒創建文件時就被修改了,顯然是非法文件!
  ④.刪除木馬
  由於“winlogon.exe”是系統關鍵進程無法終止,所以也無法直接刪除“rundll.dll”,這裏使用系統權限設置來禁止“winlogon.exe”的調用。打開“我的電腦”,單擊“工具→文件夾選項→查看”,然後在“高級設置”選項下去除“簡單文件共享(推薦)”前的小勾;隨後找到“rundll.dll”右擊選擇“屬性”命令,點擊“安全”標籤,接着單擊“高級”項,在彈出的窗口清除“從父項繼承那些可以應用到子對象的權限項目,包括那些在此明確定義的項目”複選框,最後單擊刪除,去除所有繼承的權限(如圖5),依次單擊“確定”後退出,這樣系統中就沒有任何進程可以調用“rundll.dll”,重啓後重新勾選“從父項繼承那些可以應用到子對象的權限項目權限”,然後將其刪除。

圖5  去除所有繼承的權限
  小提示
  上述權限操作僅對採用NTFS分區的系統有效,對於採用FAT32分區的系統,可以重啓後進入純DOS將木馬文件刪除。如果加載DLL木馬的進程可以被終止,如嵌入“Explorer.exe”木馬,只要將進程終止,然後找到文件將它刪除即可。
 ⑤.修復自啓動
  DLL木馬會通過註冊表鍵值進行自啓動,查看自啓動菜單推薦大家使用“Autoruns8.13漢化版”,它也是一款免費工具,可以查看系統所有啓動項目。運行後單擊“登錄”,可以看到[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/policies/Explorer/Run]下,有一“Windows服務”啓動項極爲可疑(加載的是“E:/WINDOWS/msagent/msymrj.com”),右擊選擇“轉到具體位置”(如圖6)。此時程序將直接打開註冊表,隨後將該鍵值刪除,至此DLL木馬順利被查殺。那麼“msymrj.com”與“rundll”木馬究竟是什麼關係?這其實是一對守護進程,用於守護嵌入“winlogon.exe”進程的木馬,如果發現被插入的進程被終止,立刻重新啓動該進程。不過本例的“winlogon.exe”進程如果被終止,系統會重新啓動,它也幫不上什麼忙了。

  
下載Autoruns

圖6 轉到具體位置
  小提示
  很多DLL木馬被終止後立刻又會復活,就是由於有守護進程的存在,只有把守護進程“掐死”後,才能終止木馬的運行。
  三、總結經驗
  嵌入式木馬作爲一種“科技含量”較高的木馬,用一般方法不易發現,查殺也有一定的難度,我們只要根據上述流程進行查殺,還是可以將其全部“消滅”。總結一下查殺步驟:首先用“CurrPorts”查看本機開放端口和連接並終止非法連接,找到發起連接進程,接着用“prcmgrWindows進程管理器”找出DLL木馬,然後將木馬文件刪除,最後通過“Autoruns”修復註冊表即可。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章