朱漢云, 洪 濤
(1.安徽電子信息職業(yè)技術(shù)學(xué)院 電子工程系,安徽 蚌埠 233040;2.蚌埠市公安局,安徽 蚌埠 233000)
基于自建網(wǎng)絡(luò)堆棧通訊技術(shù)實(shí)現(xiàn)木馬隱蔽通信的方法研究
朱漢云1, 洪 濤2
(1.安徽電子信息職業(yè)技術(shù)學(xué)院 電子工程系,安徽 蚌埠 233040;2.蚌埠市公安局,安徽 蚌埠 233000)
木馬如何隱藏于網(wǎng)絡(luò)通訊過程,及其產(chǎn)生的網(wǎng)絡(luò)流量已經(jīng)成為一個(gè)新的技術(shù)難題.本研究基于自建網(wǎng)絡(luò)堆棧的互聯(lián)網(wǎng)通訊技術(shù),同時(shí)采用在驅(qū)動(dòng)層完成網(wǎng)絡(luò)安全通信技術(shù)實(shí)現(xiàn)方案.底層自建TCP堆棧技術(shù)來進(jìn)行流量隱藏,實(shí)現(xiàn)前后臺(tái)之間的命令和文件交互,完成隱蔽通信.
自建網(wǎng)絡(luò)堆棧;驅(qū)動(dòng)層;TCP;流量隱藏
網(wǎng)絡(luò)安全防護(hù)技術(shù)的飛速發(fā)展和個(gè)人安全意識(shí)的提高,使得木馬的安全性和隱蔽性越來越難以提高.特別在木馬系統(tǒng)與控制后臺(tái)通訊階段,產(chǎn)生的網(wǎng)絡(luò)連接、網(wǎng)絡(luò)流量等信息,極易被防火墻等軟件偵測(cè)到,如360安全衛(wèi)士自帶的網(wǎng)絡(luò)流量監(jiān)控功能,已經(jīng)成為用戶常規(guī)的網(wǎng)絡(luò)木馬檢測(cè)手段.因此木馬如何隱藏網(wǎng)絡(luò)通訊過程,及其產(chǎn)生的網(wǎng)絡(luò)流量已經(jīng)成為一個(gè)新的技術(shù)難題.
故此,以提高木馬的安全性和隱蔽性為宗旨,鑒于當(dāng)前網(wǎng)絡(luò)安全技術(shù)水平,為了實(shí)現(xiàn)木馬系統(tǒng)前后臺(tái)之間保密通信,通過研究新的網(wǎng)絡(luò)通訊技術(shù),設(shè)計(jì)了基于自建網(wǎng)絡(luò)堆棧的互聯(lián)網(wǎng)通訊技術(shù),同時(shí)采用在驅(qū)動(dòng)層實(shí)現(xiàn)網(wǎng)絡(luò)安全通信技術(shù)實(shí)現(xiàn)方案.底層技術(shù)通過自實(shí)現(xiàn)的驅(qū)動(dòng),以及自建的TCP堆棧技術(shù)來進(jìn)行流量隱藏.
圖1 系統(tǒng)分層結(jié)構(gòu)
物理層包括物理網(wǎng)卡和網(wǎng)卡驅(qū)動(dòng),物理網(wǎng)卡,將需要傳輸?shù)男畔⑥D(zhuǎn)換成實(shí)際的電信號(hào)或者光信號(hào),在物理線路上傳輸?shù)綄?duì)端.鏈路層對(duì)應(yīng)于Windows的NDIS(Network Driver Interface Specification)層,主要是封裝了所有NIC硬件的實(shí)現(xiàn),使得上層應(yīng)用可以通用的編程接口訪問下面的各種NIC接口卡.網(wǎng)絡(luò)層和傳輸層在Windows體系的TDI(Transport Driver Inteface)驅(qū)動(dòng)中實(shí)現(xiàn)網(wǎng)絡(luò)層和傳輸層的封裝,可以向上提供數(shù)據(jù)服務(wù),向下調(diào)用NDIS層實(shí)現(xiàn)封包和收發(fā).自建網(wǎng)絡(luò)堆棧通訊技術(shù)主要通過在NDIS底層截獲數(shù)據(jù)包,然后在已有數(shù)據(jù)包的基礎(chǔ)上,在用戶態(tài)自建Tcp/IP堆棧,從而實(shí)現(xiàn)了一個(gè)與Windows網(wǎng)絡(luò)架構(gòu)平行的一個(gè)網(wǎng)絡(luò)體系.
“底層數(shù)據(jù)包”是運(yùn)行于數(shù)據(jù)鏈路層的數(shù)據(jù)包,簡(jiǎn)單的說就是“以太網(wǎng)幀”,而我們常用的Socket只能發(fā)送運(yùn)行在傳輸層的TCP、UDP等包.木馬發(fā)送的IRP寫請(qǐng)求(WriteFile()函數(shù)),傳遞到協(xié)議驅(qū)動(dòng)程序后,調(diào)用派遣函數(shù)NdisProtWrite,通過IRP I/O堆棧里面的內(nèi)核文件對(duì)象循環(huán)遍歷FilePort鏈表找到對(duì)應(yīng)的節(jié)點(diǎn),然后把木馬截取的數(shù)據(jù)通過緩沖區(qū)讀寫設(shè)備的方式拷貝到NDISPROT_OPEN_CONTEXT結(jié)構(gòu)的相應(yīng)的Priority SendQueue優(yōu)先級(jí)隊(duì)列中.按照多級(jí)反饋隊(duì)列調(diào)度算法處理,經(jīng)過簡(jiǎn)化的TCP/IP協(xié)議棧,然后再調(diào)用NdisSendPackets函數(shù)逐步微流量發(fā)送給網(wǎng)卡驅(qū)動(dòng)程序.在TCP/IP協(xié)議棧中,把該數(shù)據(jù)的優(yōu)先級(jí)值賦值給IP首部的服務(wù)類型(TOS)字段中,使收包的時(shí)候根據(jù)此字段的優(yōu)先級(jí)值把包放進(jìn)相應(yīng)的收包優(yōu)先級(jí)隊(duì)列中.用IPPROTO_RAW初始化的原始套接字可以直接收發(fā)網(wǎng)絡(luò)層數(shù)據(jù)包,發(fā)送一個(gè)TCP包時(shí)需要手工構(gòu)造隱藏IP頭、TCP頭、內(nèi)容以及各校驗(yàn)和,構(gòu)造完隱藏?cái)?shù)據(jù)包后,用sendto方法將該包發(fā)送.Winpcap是一個(gè)由多組件(動(dòng)態(tài)鏈接庫(kù)+驅(qū)動(dòng)程序)和相關(guān)SDK組成的"庫(kù)".Winpcap用它發(fā)送一個(gè)以隱藏以太網(wǎng)幀的代碼如下:
隱蔽發(fā)送接收一個(gè)以太網(wǎng)幀,可分為三步:打開Win-Pcap設(shè)備、手工構(gòu)造一個(gè)底層數(shù)據(jù)、發(fā)送和接收.Winpcap最底層是一個(gè)NPF(Netgroup Packet Filter,網(wǎng)絡(luò)組包過濾)驅(qū)動(dòng),這是一個(gè)NDIS中間件驅(qū)動(dòng),所有經(jīng)過網(wǎng)卡的數(shù)據(jù)包都會(huì)“途經(jīng)”該驅(qū)動(dòng),在收到路過的數(shù)據(jù)包時(shí),NPF可以選擇僅僅統(tǒng)計(jì)一下包的情況或?qū)懭胛募ㄗ隽髁勘O(jiān)控),或者寫到一個(gè)環(huán)形緩沖區(qū)中,然后用戶態(tài)程序調(diào)用wpcap.dll中一些函數(shù),使用WinAPI和驅(qū)動(dòng)程序交互,獲取驅(qū)動(dòng)緩沖區(qū)中的數(shù)據(jù),則達(dá)到了監(jiān)控底層數(shù)據(jù)包的目的.至于發(fā)送數(shù)據(jù)包,用戶態(tài)程序調(diào)用Winpcap的SDK函數(shù),這些函數(shù)調(diào)用dll中的方法,dll再用API和NPF通信,NPF是很最低層的驅(qū)動(dòng)了,但它并不負(fù)責(zé)直接收發(fā)數(shù)據(jù),NPF再調(diào)用更底層的網(wǎng)卡驅(qū)動(dòng)實(shí)現(xiàn)數(shù)據(jù)包的發(fā)送.
Winpcap中NPF的數(shù)據(jù)包過濾部分基于BSD Packet Filter(BPF),這是一種能實(shí)現(xiàn)極高效率數(shù)據(jù)過濾的方案,在BPF中,一個(gè)復(fù)雜的過濾(匹配)規(guī)則被轉(zhuǎn)化成一個(gè)規(guī)則符號(hào)串(或稱BPF程序),然后在過濾的時(shí)候并不會(huì)對(duì)原過濾規(guī)則進(jìn)行計(jì)算,而是將數(shù)據(jù)送入一個(gè)由規(guī)則符號(hào)串控制的狀態(tài)機(jī)中進(jìn)行處理,這種符號(hào)串可由狀態(tài)機(jī)表示,在NPF中則進(jìn)行了進(jìn)一步優(yōu)化,匹配規(guī)則轉(zhuǎn)化為符號(hào)串再生成為機(jī)器碼.過濾規(guī)則由用戶態(tài)程序給出,在傳入驅(qū)動(dòng)之前,wpcap.dll將其轉(zhuǎn)換為BPF程序,NPF收到后,在調(diào)用它過濾之前將其轉(zhuǎn)換為機(jī)器碼,再調(diào)用轉(zhuǎn)換后的“過濾函數(shù)”匹配底層數(shù)據(jù)包,以追求高效率.
Winpcap使用NDIS驅(qū)動(dòng)來做到監(jiān)聽、發(fā)送底層數(shù)據(jù)包,已經(jīng)是一種很好的解決方案了.AFD驅(qū)動(dòng)是一個(gè)未公開接口的驅(qū)動(dòng)層次(系統(tǒng)的一部分),由Winsock等調(diào)用,這方面的知識(shí)很多源自對(duì)ReactOS的源碼分析,TDI(Transport Driver Interface)即傳輸層驅(qū)動(dòng)接口,該層由AFD調(diào)用,用于實(shí)現(xiàn)傳輸層邏輯并和上層程序聯(lián)系,一些防火墻和大部分流量監(jiān)控軟件均基于TDI層驅(qū)動(dòng),在該層的優(yōu)勢(shì)是在監(jiān)控、攔截和執(zhí)行網(wǎng)絡(luò)行為的同時(shí),仍可以獲得相關(guān)進(jìn)程信息.TDI的層次比較低,如果程序直接調(diào)用該層進(jìn)行網(wǎng)絡(luò)操作,那么基于TDI以上層次的防火墻和監(jiān)控程序?qū)o法檢測(cè)到.該工程已經(jīng)實(shí)現(xiàn)了一個(gè)最基本的無連接NDIS協(xié)議驅(qū)動(dòng),支持收/發(fā)以太網(wǎng)幀.
木馬已經(jīng)成功在宿主機(jī)運(yùn)行的情況下,如需要長(zhǎng)期穩(wěn)定的監(jiān)控宿主機(jī)狀態(tài),在保證木馬系統(tǒng)的隱蔽性之外,以上述底層堆棧技術(shù)通過自實(shí)現(xiàn)驅(qū)動(dòng)以及自建的TCP堆棧技術(shù)來進(jìn)行流量隱藏,實(shí)現(xiàn)前后臺(tái)之間的命令和文件交互,借以完成了隱蔽通信任務(wù).
〔1〕祝明慧.網(wǎng)絡(luò)安全中的堆棧溢出技術(shù)解析[J].微計(jì)算機(jī)信息,2006(33):109-111.
〔2〕陳國(guó)定,姚景新,洑佳紅.基于堆棧式自編碼器的尾礦庫(kù)安全評(píng)價(jià)[J].浙江工業(yè)大學(xué)學(xué)報(bào),2015(03):326-331.
〔3〕楊璐皓.分布式隱蔽通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京郵電大學(xué),2014.
TP393.08
A
1673-260X(2017)04-0010-02
2017-02-03