DLL後門清除完全篇

前言
後門!相信這個詞語對您來說一定不會陌生,它的危害不然而欲,但隨着人們的安全意識逐步增強,又加上殺毒軟件的"大力支持", 使傳統的後門無法在隱藏自己,任何稍微有點計算機知識的人,都知道"查端口""看進程",以便發現一些"蛛絲馬跡"。所以,後門的編寫者及時調整了思路, 把目光放到了動態鏈接程序庫上,也就是說,把後門做成DLL文件,然後由某一個EXE做爲載體,或者使用Rundll32.exe來啓動,這樣就不會有進 程,不開端口等特點,也就實現了進程、端口的隱藏。本文以"DLL的原理""DLL的清除""DLL的防範"爲主題,並展開論述,旨在能讓大家對DLL後 門"快速上手",不在恐懼DLL後門。好了,進入我們的主題。
一,DLL的原理
1,動態鏈接程序庫
動態鏈接程序庫,全稱:Dynamic Link Library,簡稱:DLL,作用在於爲應用程序提供擴展功能。應用程序想要調用DLL文件,需要跟其進行"動態鏈接";從編程的角度,應用程序需要知 道DLL文件導出的API函數方可調用。由此可見,DLL文件本身並不可以運行,需要應用程序調用。正因爲DLL文件運行時必須插入到應用程序的內存模塊 當中,這就說明了:DLL文件無法刪除。這是由於Windows內部機製造成的:正在運行的程序不能關閉。所以,DLL後門由此而生!
2,DLL後門原理及特點
把一個實現了後門功能的代碼寫成一個DLL文件,然後插入到一個EXE文件當中,使其可以執行,這樣就不需要佔用進程,也就沒有相對應的PID號,也就 可以在任務管理器中隱藏。DLL文件本身和EXE文件相差不大,但必須使用程序(EXE)調用才能執行DLL文件。DLL文件的執行,需要EXE文件加 載,但EXE想要加載DLL文件,需要知道一個DLL文件的入口函數(既DLL文件的導出函數),所以,根據DLL文件的編寫標準:EXE必須執行DLL 文件中的DLLMain()作爲加載的條件(如同EXE的mian())。做DLL後門基本分爲兩種:1)把所有功能都在DLL文件中實現;2)把DLL 做成一個啓動文件,在需要的時候啓動一個普通的EXE後門。
常見的編寫方法:
(1),只有一個DLL文件
這類後門很簡單,只把自己做成一個DLL文件,在註冊表Run鍵值或其他可以被系統自動加載的地方,使用Rundll32.exe來自動啓動。 Rundll32.exe是什麼?顧名思意,"執行32位的DLL文件"。它的作用是執行DLL文件中的內部函數,這樣在進程當中,只會有 Rundll32.exe,而不會有DLL後門的進程,這樣,就實現了進程上的隱藏。如果看到系統中有多個Rundll32.exe,不必驚慌,這證明用 Rundll32.exe啓動了多少個的DLL文件。當然,這些Rundll32.exe執行的DLL文件是什麼,我們都可以從系統自動加載的地方找到。
現在,我來介紹一下Rundll32.exe這個文件,意思上邊已經說過,功能就是以命令行的方式調用動態鏈接程序庫。系統中還有一 個Rundll.exe文件,他的意思是"執行16位的DLL文件",這裏要注意一下。在來看看Rundll32.exe使用的函數原型:
Void CALLBACK FunctionName (
HWND hwnd,
HINSTANCE hinst,
LPTSTR lpCmdLine,
Int nCmdShow
);
其命令行下的使用方法爲:Rundll32.exe DLLname,Functionname [Arguments]
DLLname爲需要執行的DLL文件名;Functionname爲前邊需要執行的DLL文件的具體引出函數;[Arguments]爲引出函數的具體參數。
(2),替換系統中的DLL文件
這類後門就比上邊的先進了一些,它把實現了後門功能的代碼做成一個和系統匹配的DLL文件,並把原來的DLL文件改名。遇到應用程序請求原來的DLL文 件時, DLL後門就啓一個轉發的作用,把"參數"傳遞給原來的DLL文件;如果遇到特殊的請求時(比如客戶端),DLL後門就開始,啓動並運行了。對於這類後 門,把所有操作都在DLL文件中實現最爲安全,但需要的編程知識也非常多,也非常不容易編寫。所以,這類後門一般都是把DLL文件做成一個"啓動"文件, 在遇到特殊的情況下(比如客戶端的請求),就啓動一個普通的EXE後門;在客戶端結束連接之後,把EXE後門停止,然後DLL文件進入"休息"狀態,在下 次客戶端連接之前,都不會啓動。但隨着微軟的"數字簽名"和"文件恢復"的功能出臺,這種後門已經逐步衰落。
提示:
在WINNTsystem32目錄下,有一個dllcache文件夾,裏邊存放着衆多DLL文件(也包括一些重要的EXE文件),在DLL文件被非法修 改之後,系統就從這裏來恢復被修改的DLL文件。如果要修改某個DLL文件,首先應該把dllcache目錄下的同名DLL文件刪除或更名,否則系統會自 動恢復。
(3),動態嵌入式
這纔是DLL後門最常用的方法。其意義是將DLL文件嵌入到正在運行的系 統進程當中。在Windows系統中,每個進程都有自己的私有內存空間,但還是有種種方法來進入其進程的私有內存空間,來實現動態嵌入式。由於系統的關鍵 進程是不能終止的,所以這類後門非常隱蔽,查殺也非常困難。常見的動態嵌入式有:"掛接API""全局鉤子(HOOK)""遠程線程"等。
遠程線程技術指的是通過在一個進程中創建遠程線程的方法來進入那個進程的內存地址空間。當EXE載體(或Rundll32.exe)在那個被插入的進程 裏創建了遠程線程,並命令它執行某個DLL文件時,我們的DLL後門就掛上去執行了,這裏不會產生新的進程,要想讓DLL後門停止,只有讓這個鏈接DLL 後門的進程終止。但如果和某些系統的關鍵進程鏈接,那就不能終止了,如果你終止了系統進程,那Windows也隨即被終止!!!
3,DLL後門的啓動特性
啓動DLL後門的載體EXE是不可缺少的,也是非常重要的,它被稱爲:Loader。如果沒有Loader,那我們的DLL後門如何啓動呢?因此,一個 好的DLL後門會盡力保護自己的Loader不被查殺。Loader的方式有很多,可以是爲我們的DLL後門而專門編寫的一個EXE文件;也可以是系統自 帶的Rundll32.exe,即使停止了Rundll32.exe,DLL後門的主體還是存在的。3721網絡實名就是一個例子,雖然它並不是"真正" 的後門。
二,DLL的清除
本節以三款比較有名的DLL後門例,分別爲 "SvchostDLL.dll""BITS.dll""QoServer.dll"。詳細講解其手工清除方法。希望大家在看過這三款DLL後門的清除方 法之後,能夠舉一反三,靈活運用,在不懼怕DLL後門。其實,手工清除DLL後門還是比較簡單的,無非就是在註冊表中做文章。具體怎麼做,請看下文。
 
1,PortLess BackDoor
這是一款功能非常強大的DLL後門程序,除了可以獲得Local System權限的Shell之外,還支持如"檢測克隆帳戶""安裝終端服務"等一系列功能(具體可以參見程序幫助),適用 Windows2000/xp/2003等系統。程序使用svchost.exe來啓動,平常不開端口,可以進行反向連接(最大的特點哦),對於有 _blank">防火牆的主機來說,這個功能在好不過了。
在介紹清除方法之前,我們先來簡單的介紹一下svchost.exe這個系統的關鍵服務:
Svchost只是做爲服務的宿主,本身並不實現什麼功能,如果需要使用Svchost來啓動服務,則某個服務是以DLL形式實現的,該DLL的載體 Loader指向svchost,所以,在啓�
��服務的時候由svchost調用該服務的DLL來實現啓動的目的。使用svchost啓動某個服務的DLL 文件是由註冊表中的參數來決定的,在需要啓動服務的下邊都有一個Parameters子鍵,其中的ServiceDll表明該服務由哪個DLL文件負責, 並且這個DLL文件必須導出一個ServiceMain()函數,爲處理服務任務提供支持。
呵呵!看了上邊的理論,是不是有點蒙 (我都快睡着了),彆着急,我們來看看具體的內容)。我們可以看到 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRpcSs下的Parameters子鍵,其鍵值 爲%SystemRoot%system32rpcss.dll。這就說明:啓動RpcSs服務時。Svchost調用WINNTsystem32目錄下 的rpcss.dll。
這是註冊表的HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchost,裏邊存放着Svchost啓動的組和組內的各個服務,其中netsvcs組的服務最多。要使用 Svchost啓動某個服務,則該服務名就會出現在HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchost下。這裏有四種方法來實現:
1, 添加一個新的組,在組裏添加服務名
2, 在現有組裏添加服務名
3, 直接使用現有組裏的一個服務名,但是本機沒有安裝的服務
4, 修改現有組裏的現有服務,把它的ServiceDll指向自己的DLL後門
我測試的PortLess BackDoor使用的第三種方法。
好了,我想大家看完了上邊的原理,一定可以想到我們清除PortLess BackDoor的方法了,對,就是在註冊表的Svchost鍵下做文章。好,我們現在開始。
注:由於本文只是介紹清除方法,使用方法在此略過。
後門的Loader把SvchostDLL.dll插入Svchost進程當中,所以,我們先打開Windows優化大師中的Windows進程管理 2.5,查看Svchost進程中的模塊信息,SvchostDLL.dll已經插入到Svchost進程中了,在根據"直接使用現有組裏的一個服務名, 但是本機沒有安裝的服務"的提示,我們可以斷定,在"管理工具"—"服務"中會有一項新的服務。證明了我的說法,此服務名稱爲:IPRIP,由 Svchost啓動,-k netsvcs表示此服務包含在netsvcs服務組中。
我們把該服務停掉,然後打開註冊表編輯器 (開始—運行–regedit),來到 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesIPRIP下,查看其Parameters子 鍵)。Program鍵的鍵值SvcHostDLL.exe爲後門的Loader;ServiceDll的鍵值C: WINNTsystem32svchostdll.dll爲調用的DLL文件,這正是後門的DLL文件。現在我們刪除IPRIP子鍵(或者用SC來刪 除),然後在來到HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchost下,編輯netsvcs服務組,把49 00 70 00 72 00 69 00 70 00 00 00刪除,這裏對應的就是IPRIP的服務名。然後退出,重啓。重啓之後刪除WINNTsystem32目錄下的後門文件即可。
2,BITS.dll
這是榕哥的作品,也是DLL後門,和SvchostDLL.dll原理基本一樣,不過這裏使用的是上邊介紹的第四種方法,即"修改現有組裏的現有服務, 把它的ServiceDll指向自己的DLL後門"。換句話說,該後門修改現有的某一個服務,把其原有服務的DLL指向自己(也就是BITS.dll), 這樣就達到了自動加載的目的;其次,該後門沒有自己的Loader,而是使用系統自帶的Rundll32.exe來加載。我們還是用Windows 進程管理2.5來查看,從圖7中,我們可以看到bits.dll已經插入到Svchost進程當中。
好,現在我們來看看具體的清 除方法,由於該後門是修改現有服務,而我們並不知道具體是修改了哪個服務,所以,在註冊表中搜索bits.dll,最後在 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRasAuto下搜索到了bits.dll,查看 Parameters子鍵下的ServiceDll,其鍵值爲C:WINNTsystem32bits.dll(如圖8)。原來,該後門把RasAuto 服務原來的DLL文件替換爲bits.dll了,這樣來實現自動加載。知道了原因就好辦了,現在我們把ServiceDll的鍵值修改爲RasAuto服 務原有的DLL文件,即%SystemRoot%System32rasauto.dll,退出,重啓。之後刪除WINNTsystem32目錄下的 bits.dll即可。
3,NOIR–QUEEN
NOIR–QUEEN(守護者)是一個DLL後門&***程序,服務端以DLL文件的形式插入到系統的Lsass.exe進程裏,由於Lsass.exe是系統的關鍵進程,所以不能終止。在來介紹清除方法之前,我先介紹一下Lsass.exe進程:
這是一個本地的安全授權服務,並且它會爲使用Winlogon服務的授權用戶生成一個進程,如果授權是成功的,Lsass就會產生用戶的進入令牌,令牌使用啓動初始 的Shell。其他的由用戶初始化的進程會繼承這個令牌。
從上邊的介紹我們就可以看出Lsass對系統的重要性,那具體怎麼清除呢?請看下文。
後門在安裝成功後,會在服務中添加一個名爲QoSserver的服務,並把QoSserver.dll後門文件插入到Lsass進程當中,使其可以隱藏 進程並自動啓動(如圖9)。現在我們打開註冊表,來到 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesQoSserver,直接刪除QoSserver 鍵,然後重啓。重啓之後,我們在來到服務列表中,會看到QoSserver服務還在,但沒有啓動,類別是自動,我們把他修改爲"已禁用";然後往上看,會 發現一個服務名爲AppCPI的服務,其可執行程序指向QoSserver.exe(原因後邊我會說到),具體如圖11所示。我們再次打開註冊表,來到 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesAppCPI,刪除AppCPI鍵,重啓,再刪除 QoSserver,最後刪除WINNTsystem32目錄下的後門文件。
本人和這個後門"搏鬥"了3個多小時,重啓N次。原 因在於即使刪除了QoSserver服務,後門還是在運行,而且服務列表中的QoSserver服務又"死灰復燃"。後來才知道原因:在我刪除了 QoSserver服務並重啓之後,插入到Lsass進程當中的QoSserver.dll文件又恢復了QoSserver服務,並且生成了另外一個服 務,即AppCPI,所以我們必須在到註冊表中刪除AppCPI服務纔算是把該後門清除。由此可以看出,現在的後門的保護措施,真是一環扣環。
注意:在刪除QoSserver服務並重啓之後,恢復的QoSserver的啓動類別要修改爲"已禁用",否則即便刪除了AppCPI服務,QoSserver服務又運行了。
 
三,DLL的防範
看了上邊的例子,我想大家對清除DLL後門的方法有了一定的瞭解,但在現實中,DLL後門並不會使用默認的文件名,所以你也就不能肯定是否中了DLL後 門。對於DLL後門,system32目錄下是個好地方,大多數後門也是如此,所以這裏要非常注意。下面我來具體介紹一下怎麼發現DLL後門,希望對大家 有所幫助。
1,安裝好系統和所有的應用程序之後,備份system32目錄下的EXE和DLL文件:打開CMD,來到 WINNTsystem32目錄下,執行:dir *.exe>exe.txt & dir *.dll>dll.txt,這樣,就會把所有的EXE和DLL文件備份到exe.txt和dll.txt文件中;日後,如發現異常,可以使用相同 的命令再次備份EXE和DLL文件(這裏我們假設是exe0.txt和dll0.txt),並使用:fc exe.txt exe0.txt>exedll.txt & fc dll.txt dll0.txt>exedll.txt,其意思爲使用FC命令比較兩次的EXE文件和DLL文件,並將比較結果保存到exedll.txt文件 中。通過這種方法,我們就可以發現多出來的EXE和DLL文件,並通過文件大小,創建時間來判斷是否是DLL後門。
2,使用內存 /模塊工具來查看進程調用的DLL文件,比如Windows優化大師中的Windows 進程管理 2.5。這樣,可以發現進程到底調用了什麼DLL文件,在結合上邊用FC命令比較出來的結果,又能進一步來確定是否中了DLL後門。��
�果沒有優化大師,可 以使用TaskList,這個小工具也可以顯示進程調用的DLL文件,而且還有源代碼,方便修改。
3,普通後門連接需要打開特定 的端口,DLL後門也不例外,不管它怎麼隱藏,連接的時候都需要打開端口。我們可以用netstat –an來查看所有TCP/UDP端口的連接,以發現非法連接。大家平時要對自己打開的端口心中有數,並對netstat –an中的state屬性有所瞭解。當然,也可以使用Fport來顯示端口對應的進程,這樣,系統有什麼不明的連接和端口,都可以盡收眼底。
4,定期檢查系統自動加載的地方,比如:註冊表,Winstart.bat,Autoexec.bat,win.ini,system.ini, wininit.ini,Autorun.inf,Config.sys等。其次是對服務進行管理,對系統默認的服務要有所瞭解,在發現有問題的服務時, 可以使用Windows 2000 Server Resource Kit中的SC來刪除。以上這些地方都可以用來加載DLL後門的Loader,如果我們把DLL後門Loader刪除了,試問?DLL後門還怎麼運行?!
通過使用上邊的方法,我想大多數DLL後門都可以"現形",如果我們平時多做一些備份,那對查找DLL後門會啓到事半功倍的效果。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章