前言
後門!相信這個詞語對您來說一定不會陌生,它的危害不然而欲,但隨著人們的安全意識逐步增強,又加上殺毒軟體的"大力支援",使傳統的後門無法在隱藏自己,任何稍微有點電腦知識的人,都知道"查連接埠""看進程",以便發現一些"蛛絲馬跡"。所以,後門的編寫者及時調整了思路,把目光放到了動態鏈接程序庫上,也就是說,把後門做成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使用的函數原型:
其命令行下的使用方法為:Rundll32.exe DLLname,Functionname [Arguments]
Void CALLBACK FunctionName (
HWND hwnd、
HINSTANCE hinst、
LPTSTR lpCmdLine、
Int nCmdShow
);
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""全局鉤子(HOOK)""遠程執行緒"等。
遠程執行緒技術指的是通過在一個進程中創建遠程執行緒的方法來進入那個進程的記憶體地址空間。當EXE載體(或Rundll32.exe)在那個被插入的進程裡創建了遠程執行緒,並命令它執行某個DLL檔案時,我們的DLL後門就掛上去執行了,這裡不會產生新的進程,要想讓DLL後門停止,隻有讓這個鏈接DLL後門的進程終止。但如果和某些系統的關鍵進程鏈接,那就不能終止了,如果你終止了系統進程,那Windows也隨即被終止!!!
3,DLL後門的啟動特性
啟動DLL後門的載體EXE是不可缺少的,也是非常重要的,它被稱為
oader。如果沒有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來啟動,平常不開連接埠,可以進行反向連接(最大的特點哦),對於有防火牆的主機來說,這個功能在好不過了。
在介紹清除方法之前,我們先來簡單的介紹一下svchost.exe這個系統的關鍵服務:
Svchost隻是做為服務的宿主,本身並不實現什麼功能,如果需要使用Svchost來啟動服務,則某個服務是以DLL形式實現的,該DLL的載體Loader指向svchost,所以,在啟動服務的時候由svchost調用該服務的DLL來實現啟動的目的。使用svchost啟動某個服務的DLL檔案是由註冊表中的參數來決定的,在需要啟動服務的下邊都有一個Parameters子鍵,其中的ServiceDll表明該服務由哪個DLL檔案負責,並且這個DLL檔案必須導出一個ServiceMain()函數,為處理服務任務提供支援。
呵呵!看了上邊的理論,是不是有點蒙(我都快睡著了),別著急,我們來看看具體的內容。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs下的Parameters子鍵,其鍵值為%SystemRoot%\system32\rpcss.dll。這就說明:啟動RpcSs服務時。Svchost調用WINNT\system32目錄下的rpcss.dll。
註冊表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost,裡邊存放著Svchost啟動的組和組內的各個服務,其中netsvcs組的服務最多。要使用Svchost啟動某個服務,則該服務名就會出現在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost下。這裡有四種方法來實現:
1, 添加一個新的組,在組裡添加服務名
2, 在現有組裡添加服務名
3, 直接使用現有組裡的一個服務名,但是本機沒有安裝的服務
4, 修改現有組裡的現有服務,把它的ServiceDll指向自己的DLL後門
我測試的PortLess BackDoor使用的第三種方法。
好了,我想大家看完了上邊的原理,一定可以想到我們清除PortLess BackDoor的方法了,對,就是在註冊表的Svchost鍵下做文章。好,我們現在開始。
注:由於本文隻是介紹清除方法,使用方法在此略過。
| 歡迎光臨 中央論壇 - CENTER BBS (https://centerbbs.com/) | Powered by Discuz! X3 |