1.動態鏈接庫
動態鏈接庫,全稱:動態鏈接庫,簡稱: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文件,用Rundll32.exe在註冊表Run鍵值或者其他可以被系統自動加載的地方自動啟動。什麽是Rundll32.exe?顧銘認為,“執行32位DLL文件”。它的作用是執行DLL文件中的內部函數,這樣在進程中,只會有Rundll32.exe,不會有DLL後門進程,從而實現進程隱藏。如果妳在系統中看到多個Rundll32.exe,不要驚慌,這證明了有多少DLL文件是用Rundll32.exe啟動的。當然,Rundll32.exe執行的這些DLL文件是什麽?我們可以從系統自動加載它們的地方找到它們。
現在我來介紹壹下文件Rundll32.exe,也就是說它的功能是通過命令行調用動態鏈接庫。系統中還有壹個Rundll.exe文件,意思是“執行16位DLL文件”。請註意這裏。我們來看看Rundll32.exe使用的函數原型:
Void回調函數名稱(
HWND hwnd,
HINSTANCE hinst,
LPTSTR lpCmdLine,
Int nCmdShow
);
命令行下的使用方法是:Rundll32.exe dllname,函數名【arguments】。
DLLname是要執行的DLL的文件名;Functionname是前面要執行的DLL文件的具體派生函數;【Arguments】是求導函數的具體參數。
(2)替換系統中的DLL文件
這種借殼比上面的稍微高級壹點。它將實現後門功能的代碼制作成與系統匹配的DLL文件,並對原DLL文件進行重命名。當應用程序請求原始DLL文件時,DLL後門程序將啟動壹個轉發功能,並將“參數”傳遞給原始DLL文件。如果遇到特殊請求(比如客戶端),DLL後門啟動,啟動,運行。對於這種後門,在DLL文件中實現所有操作是最安全的,但也需要大量的編程知識,編寫起來非常困難。所以這種後門通常會把DLL文件做成“啟動”文件,在特殊情況下(比如客戶端的請求)啟動壹個普通的EXE後門;客戶端結束連接後,停止EXE後門,然後DLL文件會進入“休眠”狀態,直到下壹次客戶端連接才會啟動。但隨著微軟“數字簽名”和“文件恢復”功能的推出,這種後門逐漸式微。
提示:
在WINNT/system32目錄下,有壹個dllcache文件夾,裏面有很多DLL文件(包括壹些重要的EXE文件)。DLL文件被非法修改後,系統會從這裏恢復修改後的DLL文件。如果要修改壹個DLL文件,應該先刪除或重命名dllcache目錄中同名的DLL文件,否則系統會自動恢復。
(3)動態嵌入式系統
這是DLL後門最常用的方法。其意義在於將DLL文件嵌入到正在運行的系統進程中。在Windows系統中,每個進程都有自己的私有內存空間,但是仍然有各種方法可以進入其進程的私有內存空間實現動態嵌入。因為系統的關鍵進程不能終止,所以這種後門非常隱蔽,很難查殺。常見的動態嵌入有:“鉤子API”、“全局鉤子”、“遠程線程”等等。
遠程線程技術是指通過在壹個進程中創建壹個遠程線程來進入該進程的內存地址空間。當EXE載體(或Rundll32.exe)在插入的進程中創建壹個遠程線程,並命令它執行壹個DLL文件時,我們的DLL後門就會被掛起並執行,這裏不會生成新的進程。如果我們想停止DLL後門,我們必須停止鏈接DLL後門的進程。但是如果和系統的壹些關鍵流程鏈接,就不能終止。如果您終止系統進程,那麽Windows將立即終止!!!
3.DLL後門的啟動特性
EXE這個啟動DLL後門的載體,不可或缺,非常重要。它被稱為裝載機。如果沒有加載程序,我們的DLL後門怎麽啟動?所以好的DLL後門會想盡辦法保護自己的加載程序不被殺。Loader有很多種方式,可以是專門為我們的DLL後門編寫的EXE文件。也可以是系統自帶的Rundll32.exe。即使Rundll32.exe被停止,DLL後門的主體仍然存在。3721網絡實名就是壹個例子,雖然不是“真正的”後門。
第二,DLL的清除
本節以三個眾所周知的DLL後門為例,分別是“SvchostDLL.dll”、“BITS.dll”和“QoServer.dll”。詳細解釋其手動移除方法。希望大家看完這三種清理DLL後門的方法,可以舉壹反三,靈活運用,不要害怕DLL的後門。其實手動清除DLL後門比較簡單,無非就是在註冊表上做文章。具體怎麽做,請看下文。
1,無端口後門
這是壹個非常強大的DLL後門程序,除了具有本地系統權限的Shell(詳見程序幫助)之外,還支持“檢測克隆賬號”、“安裝終端服務”等壹系列功能,適用於Windows2000/xp/2003等系統。Svchost.exe是用來啟動程序的。平時不開端口,可以反接(最大的特點是哦)。對於那些帶有_blank " >的對於防火墻的主機來說,這個功能是完美的。
在介紹清理方法之前,先簡單介紹壹下svchost.exe的關鍵服務:
作為服務的宿主,Svchost不實現任何功能。如果需要使用svchost啟動服務,服務是以DLL的形式實現的,DLL的載體加載器指向Svchost。因此,在啟動服務時,svchost調用服務的DLL來達到啟動的目的。使用svchost啟動服務的DLL文件由註冊表中的參數決定。要啟動的服務下面有壹個parameters子項,其中ServiceDll表示哪個Dll文件負責服務,這個DLL文件必須導出壹個ServiceMain()函數,為處理服務任務提供支持。
哈哈!看了上面的理論,是不是有點混亂(我差點睡著了),別急,我們來看看具體內容)。我們可以在HKEY _本地_機器系統當前控制服務sRPCSS下看到Parameters子項,其鍵值為% systemroot % system32RPCSS.dll。這意味著當RpcSs服務啟動時。Svchost在WINNTsystem32目錄中調用rpcss.dll。
這是註冊表中的HKEY _本地_機器軟件微軟windows ntcurrentversionSvchost,存儲了Svchost啟動的組以及組內的服務,其中netsvcs組的服務最多。要使用Svchost啟動服務,服務名稱將出現在HKEY _本地_機器軟件Microsoft windows ntcurrentversionsvchost下。有四種方法可以實現這壹點:
1,添加新組,在組中添加服務名。
2.將服務名稱添加到現有組中。
3.直接使用現有組中的服務名,但此計算機上沒有安裝服務。
4.修改現有組中的現有服務,並將其ServiceDll指向自己的Dll後門。
我測試的無端口後門使用的第三種方法。
嗯,我想看了上面的原理,妳壹定能想到我們清除無端口後門的方法。沒錯,就是在註冊表的Svchost鍵下做文章。好,我們現在開始。
註意:由於本文只介紹清潔方法,這裏省略使用方法。
後門的加載程序將SvchostDLL.dll插入到Svchost進程中,所以我們先在Windows優化器中打開Windows Process Management 2.5,檢查Svchost進程中的模塊信息。SvchostDLL.dll已被插入Svchost流程。根據“直接使用已有組中的壹個服務名,但是本機沒有安裝服務”的提示,可以斷定“管理工具”中會有壹個新的服務——“服務”。證明了我的說法,服務名是:IPRIP,由Svchost啟動,-k netsvcs表示這個服務包含在netsvcs服務組中。
讓我們停止服務,然後打開註冊表編輯器(開始-運行-註冊表編輯),並前往HKEY _本地_機器系統當前控制設置服務SiPrep檢查其參數子項)。程序鍵的鍵值SvcHostDLL.exe是加載器;後門的;ServiceDll C的鍵值:WINNTsystem32svchostDLL。dll就是被調用的dll文件,正是後門的DLL文件。現在我們刪除IPR子項(或者用SC刪除),然後到HKEY _本地_機器軟件微軟windows ntcurrentversionsvchost,編輯netsvcs服務組,刪除49 00 70 00 72 00 69 00 70 00 00 00 00,這是IPR的服務名。然後退出並重新啟動。重啟後刪除WINNTsystem32目錄下的後門文件。
2、BITS.dll
這是榮哥的作品,也是壹個DLL後門,和SvchostDLL.dll的原理基本相同,但這裏用的是上面介紹的第四種方法,即“修改現有組中的現有服務,將其ServiceDll指向自己的DLL後門”。換句話說,後門修改壹個已有的服務,把它原來服務的DLL指向自己(也就是BITS.dll),從而達到自動加載的目的;其次,後門沒有自己的加載器,而是使用系統自帶的Rundll32.exe來加載。我們還是用Windows進程管理2.5吧。從圖7中,我們可以看到bits.dll已經被插入到Svchost流程中。
好了,現在我們來看看具體的移除方法。因為後門是修改已有服務,具體修改哪個服務我們也不知道,所以我們在註冊表裏搜索了bits.dll,最後在HKEY _ local _ machine system CurrentControlSetServicesRasauto下搜索了bits.dll。看看Parameters子項下的ServiceDll,它的鍵值是C:WINNTsystem32bits.dll(如圖8所示)。原來後門用bits.dll替換了RasAuto服務原來的DLL文件,從而實現自動加載。很容易知道原因。現在我們將ServiceDll的鍵值改為RasAuto服務的原始Dll文件,即% systemroot% system32Rasauto。退出並重新啟動。然後刪除WINNTsystem32目錄中的bits.dll。
3、黑色女王
NOIR - QUEEN是壹個DLL後門&;木馬程序,服務器以DLL文件的形式插入到系統的Lsass.exe進程中。因為Lsass.exe是系統的關鍵過程,所以它不能被終止。在介紹去除方法之前,讓我先介紹壹下Lsass.exe過程:
這是壹個本地安全授權服務,它將為使用Winlogon服務的授權用戶生成壹個進程。如果授權成功,Lsass將生成用戶的入口令牌,該令牌將啟動初始Shell。其他用戶啟動的進程將繼承此令牌。
從上面的介紹可以看出Lsass對系統的重要性,那麽如何去除呢?請看下文。
後門安裝成功後,服務中會添加壹個名為QoSserver的服務,QoSserver.dll後門文件會插入到Lsass進程中,這樣就可以隱藏進程並自動啟動(如圖9所示)。現在我們打開註冊表,進入HKEY _本地_機器系統當前控制設置服務sQosserver,直接刪除Qosserver鍵,然後重啟。重啟後,當我們來到服務列表時,我們會看到QoSserver服務還在,但沒有啟動。類別是自動的,所以我們將其更改為“禁用”。然後妳往上看,會發現壹個名為AppCPI的服務,它的可執行程序指向QoSserver.exe(原因我後面會講),如圖11。我們再次打開註冊表,進入HKEY _ local _ MachinerSystemCurrentControlSetServiceAppCPI,刪除AppCPI鍵,重啟,刪除QoSserver,最後刪除WINNTsystem32目錄下的後門文件。
這個後門我糾結了3個多小時,重啟了n次。原因是即使刪除了QoSserver服務,後門仍然在運行,服務列表中的QoSserver服務“復活”了。後來才知道原因:在我刪除了qoss server服務並重新啟動後,Lsass進程中插入的QoSserver.dll文件恢復了qoss server服務,生成了另壹個服務AppCPI。所以我們必須刪除註冊表中的AppCPI服務來清除後門。可見目前後門的防護措施真的是壹個扣環。
註意:刪除並重新啟動QoSserver服務後,恢復後的QoSserver的啟動類別應改為“禁用”,否則,即使刪除AppCPI服務,QoSserver服務也會重新運行。
第三,DLL的預防
看了上面的例子,我想大家對清除DLL後門的方法都有壹定的了解了,但是現實中DLL後門並沒有使用默認的文件名,所以妳並不確定自己是否中了DLL後門。對於DLL後門,system32目錄是壹個好地方,大多數後門也是如此,所以在這裏要特別註意。下面我來詳細介紹壹下如何找到DLL的後門,希望對大家有所幫助。
1,安裝好系統和所有應用程序後,備份system32目錄下的EXE和DLL文件:打開CMD,轉到WINNTsystem32目錄,執行:dir *。exe & gtexe.txt & ampdir *。dll & gtDll.txt,這樣,所有的EXE和Dll文件都會備份到exe.txt和dll.txt文件中;以後如果發現有異常,可以用同樣的命令再次備份EXE和DLL文件(這裏我們假設是exe0.txt和dll0.txt),用:fc EXE . txt EXE 0 . txt & gt;exedll.txt & ampfc dll . txt dll 0 . txt & gt;Exedll.txt,意思是用FC命令對EXE文件和dll文件進行兩次比較,並將比較結果保存到exedll.txt文件中。這樣就可以找出多余的EXE和DLL文件,通過文件大小和創建時間判斷是否是DLL後門。
2.使用內存/模塊工具查看進程調用的DLL文件,如Windows優化器中的Windows Process Management 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後門加載程序。如果刪除DLL後門加載程序,可以問什麽?DLL後門是如何工作的?!
通過使用上述方法,我認為大多數DLL後門都可以被“揭露”。如果平時多做備份,找DLL後門會事半功倍。
附言
本文詳細介紹了DLL後門的壹些知識。其實從上面不難看出,DLL的後門並沒有想象中的那麽可怕,清理起來也相對簡單。文章開頭說:旨在讓大家對DLL後門“快速入門”,所以希望這篇笨拙的文章能幫到妳。如文中有錯誤,請見諒,謝謝!