資源描述:
《基于端口復(fù)用技術(shù)的木馬研究》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、基于端口復(fù)用技術(shù)的木馬研究1概述木馬是駐留在LI標(biāo)機(jī)器上的程序,該程序主要在U標(biāo)機(jī)器上執(zhí)行一些未經(jīng)授權(quán)的操作,如竊取口令、銀行帳號(hào)和密碼以及控制忖標(biāo)計(jì)算機(jī)等,因此,木馬程序普遍具冇非法性。木馬程序?yàn)榱吮苊獗话l(fā)覺,人多會(huì)采用各種方法隱藏自最近幾年,木馬技術(shù)發(fā)展很快,其隱蔽性也越來越強(qiáng)。下面是一些新型的木馬技術(shù):(1)反彈端11木馬[1]。此類木馬主要是改傳統(tǒng)木馬的被動(dòng)監(jiān)聽方式為主動(dòng)連接。(2)基于窗口HOOK、掛接API或遠(yuǎn)程線程技術(shù)動(dòng)態(tài)嵌入式木馬。(3)基于動(dòng)態(tài)鏈接庫轉(zhuǎn)發(fā)的木馬[2]。(4)協(xié)同隱藏型
2、木馬[3]。該類木馬主耍是綜合利用多種隱藏技術(shù)。上述4類木馬技術(shù)是當(dāng)前非常流行的木馬技術(shù),特別是類型(2)和類型(3),可以將木馬線程植入合法進(jìn)程體內(nèi),利用介法進(jìn)程與外界通信,很具迷惑性。但是上述木馬均有一個(gè)共同的弱點(diǎn),那就是要打開一個(gè)新的端口。所以加強(qiáng)對(duì)端口的監(jiān)控仍然是對(duì)付這些木馬的有效方法。對(duì)于類型(2)和類型(3),還可以采用應(yīng)用程序和端口相關(guān)聯(lián)的技術(shù)來進(jìn)行檢測(cè)。如果一個(gè)合法的進(jìn)程打開了一個(gè)它不屬于它的端口,那么一定是感染了木馬。端口監(jiān)測(cè)是當(dāng)前防火墻普遍采用的核心技術(shù)z-—,如果木馬程序能夠不打
3、開新的端口,而是宵接利用系統(tǒng)12經(jīng)打開的端口(筆者把這種情況稱為端口復(fù)用)與外界進(jìn)行通信,那么隱蔽性將更強(qiáng),也就更容易穿過防火墻。木文以SPI為基礎(chǔ),實(shí)現(xiàn)了一個(gè)具冇端口復(fù)用特征的木馬。2端口復(fù)用的實(shí)現(xiàn)原理對(duì)于基于UDP或TCP的網(wǎng)絡(luò)應(yīng)用程序進(jìn)行通信時(shí),首先必須將木地IP和一個(gè)端口綁定在一個(gè)套接字上,然后利用該套接字進(jìn)行通信。不同的網(wǎng)絡(luò)應(yīng)用程序不會(huì)打開相同的端口。當(dāng)系統(tǒng)收到一?個(gè)數(shù)據(jù)包時(shí),會(huì)根據(jù)數(shù)據(jù)包指示的端口號(hào)找到對(duì)應(yīng)的應(yīng)用程序并轉(zhuǎn)交該數(shù)據(jù)包。如果對(duì)某個(gè)端口采用了復(fù)用技術(shù),那么系統(tǒng)收到數(shù)據(jù)包時(shí),就不能
4、夠直接將它轉(zhuǎn)交給相應(yīng)的網(wǎng)絡(luò)應(yīng)用程序,而是應(yīng)該對(duì)系統(tǒng)行為作出適當(dāng)?shù)男薷摹D1展示了端口復(fù)用的原理。數(shù)據(jù)包歸屬判斷模塊主耍是判斷該復(fù)川端口收到的數(shù)據(jù)包是應(yīng)該轉(zhuǎn)發(fā)給網(wǎng)絡(luò)應(yīng)用程序,還是轉(zhuǎn)發(fā)給端口復(fù)用模塊。3SPT的基本原理服務(wù)提供者接口(serviceproviderinterface,SPI)是Windows的WinSock2的新特性。服務(wù)提供者接口代表著另一端的Winsock編程(和Winsock2API相對(duì)應(yīng))。Winsock2不僅提供了一個(gè)供應(yīng)用程序訪問網(wǎng)絡(luò)服務(wù)的Windowssocket應(yīng)用程序編程
5、接口(API),述包含了由傳輸服務(wù)提供者和名字斛析服務(wù)提供者實(shí)現(xiàn)的Winsock服務(wù)提供者接口(SPI)和ws2_32.dllo圖2展示了應(yīng)用程序、Ws2_32.dll和傳輸服務(wù)提供者接口之間的層關(guān)系[4]。IWindowssocket2應(yīng)用程序
6、Windowssocket2API
7、WS2_32.DLL
8、Windowssocket2傳輸SPI
9、傳輸服務(wù)提供者(DLL)圖2網(wǎng)絡(luò)丿應(yīng)用程序T作原理傳輸服務(wù)提供者是以DLL的形式存在的,它對(duì)外只有一個(gè)入口函數(shù):WSPStartup,其中的參數(shù)LPWSPPRO
10、C_TABLE結(jié)構(gòu)指針指向函數(shù)派遣表,該函數(shù)派遣表里包含30個(gè)SPI函數(shù)指針項(xiàng)。每一個(gè)SPI函數(shù)有與Z相對(duì)應(yīng)的API。如WSPRocv和WSPSend,它們?cè)赪s232.dll中的對(duì)應(yīng)函數(shù)是WSARecv和WSASend,再如WSPRecvFroni和WSPScndTo,在Ws232.dll中的對(duì)應(yīng)函數(shù)是WSARecvFrom和WSASendTo.WS2_32.DLL就是通過函數(shù)派遣表來實(shí)現(xiàn)對(duì)傳輸服務(wù)提供者的所冇SPI函數(shù)的調(diào)用的。當(dāng)網(wǎng)絡(luò)血用程序調(diào)用WSASocket/socket函數(shù)創(chuàng)建套接字時(shí),會(huì)
11、有3個(gè)參數(shù):地址族,套接字類型和協(xié)議,這3個(gè)參數(shù)共同決定r由哪一個(gè)類型的傳輸服務(wù)提供者來實(shí)現(xiàn)本應(yīng)用程序的功能[5]。在整個(gè)層次結(jié)構(gòu)中,旳2.32.dll只起到了媒介的作用,應(yīng)用程序則是對(duì)用戶功能的實(shí)現(xiàn),而真正實(shí)現(xiàn)網(wǎng)絡(luò)傳輸功能的是傳輸服務(wù)捉供者接口。當(dāng)前系統(tǒng)中有一些默認(rèn)的服務(wù)提供者,它們己經(jīng)實(shí)現(xiàn)了人部分基本的功能,所以在書寫服務(wù)提供者程序時(shí),只須對(duì)數(shù)據(jù)報(bào)進(jìn)行處理后,就可將數(shù)據(jù)報(bào)傳送給系統(tǒng)服務(wù)捉供者來實(shí)現(xiàn)剩下的功能。4基于SPI的端口復(fù)用技術(shù)對(duì)于端口復(fù)用技術(shù),核心問題是對(duì)數(shù)據(jù)包的接收處理。本文只研究基于S
12、PT的UDP端口的復(fù)用問題。當(dāng)網(wǎng)絡(luò)應(yīng)用程序接收一個(gè)數(shù)據(jù)包時(shí),如圖2,會(huì)通過API函數(shù)RecvFrom或WSARecvFrom調(diào)用對(duì)應(yīng)的SPI函數(shù)WSPRecvFrom通過對(duì)WSPRecvFrom的重新設(shè)計(jì)刊以實(shí)現(xiàn)端口復(fù)用的功能,和關(guān)核心代碼如下:intWSPAPIWSPRecvFrom(參數(shù)略){//先接收網(wǎng)絡(luò)數(shù)據(jù)包nextproctable.lpWSPRecvFrom(s,lpBuffers,dwBufferCount,lpNumberOfBytesR