姬國珍,譚全福
(中國電子科技集團(tuán)公司第三十研究所,四川 成都 610041)
網(wǎng)絡(luò)在給人們帶來方便的同時,也備受攻擊者的青睞。網(wǎng)絡(luò)通信面臨各類攻擊,攻擊者利用公開的網(wǎng)絡(luò)協(xié)議和數(shù)據(jù)隱蔽傳輸惡意通信數(shù)據(jù)(惡意代碼﹑病毒﹑木馬等),極大地增加了通信的隱蔽性。同時,攻擊者可以繞過殺毒軟件﹑IPS等網(wǎng)絡(luò)防護(hù)系統(tǒng),對網(wǎng)絡(luò)信息的安全性和秘密性構(gòu)成了嚴(yán)重威脅。
網(wǎng)絡(luò)隱蔽通信的基本方式是以網(wǎng)絡(luò)數(shù)據(jù)流為載體,采用隱寫術(shù)[1]來構(gòu)建隱蔽信道。隱蔽信道(Covert Channel)是指采用特殊編譯碼使不合法的信息流(通常為秘密信息)逃避常規(guī)安全控制機(jī)制的檢測,在普通系統(tǒng)中形成一個秘密的傳輸通道傳給未授權(quán)者。網(wǎng)絡(luò)隱蔽通信中的隱蔽信道可分為兩種模式,即存儲型隱蔽信道(Storage Covert Channel)和時分型隱蔽信道(Timing Covert Channel)。存儲型隱蔽信道是指將秘密信息嵌入網(wǎng)絡(luò)數(shù)據(jù)包的某些未用位或者載荷中,隨著網(wǎng)絡(luò)包一起發(fā)送出去;時分型隱蔽信道是指將秘密信息調(diào)制進(jìn)網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)包間隔﹑發(fā)包速率﹑發(fā)包次序等特征中進(jìn)行傳遞。在時分型隱蔽信道模型中,存在一種利用時間間隔傳遞信息的隱蔽通道構(gòu)建方法。在網(wǎng)絡(luò)中存在各種不同數(shù)據(jù),這些不同類型的數(shù)據(jù)通過全球標(biāo)準(zhǔn)的TCP/IP協(xié)議或者一些專有協(xié)議來完成相互間通信。在網(wǎng)絡(luò)的大量流量中存在大量數(shù)據(jù)包,這些數(shù)據(jù)包的時間間隔不盡相同。利用這一特性可以構(gòu)建隱蔽通道。因此,本文通過分析基于時間間隔的隱蔽通道原理,實現(xiàn)了一種利用時間間隔傳遞信息的隱蔽通道構(gòu)建方法。
由于受網(wǎng)絡(luò)設(shè)備性能﹑網(wǎng)絡(luò)時延以及帶寬等各方面影響,數(shù)據(jù)包之間存在一定的時間間隔。通過對來自源主機(jī)和目的主機(jī)的數(shù)據(jù)包進(jìn)行抓包統(tǒng)計分析,可以看到這些數(shù)據(jù)包的時間間隔在一個范圍內(nèi)。假定這些數(shù)據(jù)包的最長時間間隔[2]為I,那么網(wǎng)絡(luò)數(shù)據(jù)包時間間隔集合為[0,I ]。將這個區(qū)間劃分為不同長度的子區(qū)間,如[0,I1],[0,I2]…[0,In],這樣數(shù)據(jù)包時間間隔就被劃分為n個區(qū)間,n一般取值為2或4。當(dāng)n=2時,前后兩個數(shù)據(jù)包之間的時間間隔可以攜帶1 bit的隱藏信息,非0即1;當(dāng)n=4時,前后兩個數(shù)據(jù)包的時間間隔可以攜帶2 bit的隱藏信息,即00﹑01﹑10﹑11。當(dāng)數(shù)據(jù)包的時間間隔落在這n個區(qū)間中的某一個時,就可以通過n來表征前后兩個數(shù)據(jù)包的時間間隔。
對網(wǎng)絡(luò)中源主機(jī)到目的主機(jī)某個特定協(xié)議的數(shù)據(jù)包進(jìn)行統(tǒng)計分析,通過網(wǎng)絡(luò)抓包軟件對該協(xié)議的數(shù)據(jù)包傳輸時延進(jìn)行統(tǒng)計分析。假設(shè)前后數(shù)據(jù)包時間間隔最大值為I,將最大時間間隔I進(jìn)行N(N=2n,n=1,2)等份,n的大小決定了一個時間間隔可編碼數(shù)據(jù)的大小。當(dāng)N為2時,一個時間間隔可以攜帶1 bit信息;當(dāng)N為4時,一個時間間隔可以攜帶2 bit信息。這樣,一個ASCII字符就可以通過(8/n)+1個數(shù)據(jù)包的時間間隔來承載。在發(fā)送端根據(jù)一個字符編碼值設(shè)置數(shù)據(jù)包的時間間隔(如數(shù)字1的ASCII碼為00110001,采用2位編碼方式,數(shù)字1就可以通過發(fā)送5個連續(xù)的數(shù)據(jù)包傳送來實現(xiàn)隱蔽信息的承載)。在接收端根據(jù)接收到的數(shù)據(jù)包之間的時間間隔進(jìn)行相應(yīng)的二進(jìn)制信息還原,四個連續(xù)的時間間隔對應(yīng)一個字符,對接收的所有數(shù)據(jù)包進(jìn)行編碼,就可以還原發(fā)端的所有內(nèi)容。
選取基于時間間隔的隱蔽通道,首先選取常見的ICMP。該協(xié)議是常見的通道檢測協(xié)議,無需建立三次握手,一般網(wǎng)絡(luò)不會過濾該數(shù)據(jù)報文。
基于時間間隔的隱蔽通道構(gòu)建需要以下三個步驟。
(1)構(gòu)建數(shù)據(jù)包:利用Winpcap驅(qū)動接口程序構(gòu)建ping Request數(shù)據(jù)包。該數(shù)據(jù)包需要與操作系統(tǒng)系統(tǒng)原有ping請求數(shù)據(jù)包有所區(qū)別。
(2)定時發(fā)送數(shù)據(jù)包:發(fā)送端按照一定時間間隔(時間間隔根據(jù)當(dāng)前待傳送數(shù)據(jù)的二進(jìn)制編碼來判斷)定時發(fā)包。
(3)接收檢測數(shù)據(jù)包:接收端對數(shù)據(jù)包進(jìn)行接收檢測,并對時間間隔進(jìn)行編碼,還原隱蔽數(shù)據(jù)。
為了簡單,將最大時間間隔分為2個區(qū)間。對于是否滿足時間間隔門限值,分別對應(yīng)為二進(jìn)制數(shù)值的1和0。這樣傳輸m個字符就需要8m+1個數(shù)據(jù)包發(fā)包實現(xiàn)。下面就隱蔽通道構(gòu)建過程中的這三個部分進(jìn)行詳細(xì)描述。
利用Winpcap接口發(fā)送數(shù)據(jù)包為原始數(shù)據(jù)包,包括以太網(wǎng)頭部﹑IP頭部﹑ICMP頭部以及填充字段等三部分。原始數(shù)據(jù)包的封裝結(jié)構(gòu)如圖1所示。
圖1 ICMP協(xié)議原始數(shù)據(jù)包結(jié)構(gòu)
其中,以太網(wǎng)頭部14個字節(jié)包含6個字節(jié)的源MAC地址﹑6字節(jié)的目的MAC地址以及2字節(jié)的協(xié)議類型標(biāo)識。IP頭部需要填充源IP地址和目的IP地址,而其余字節(jié)可以根據(jù)一般ping數(shù)據(jù)包的相關(guān)內(nèi)容填充。
構(gòu)建數(shù)據(jù)包采用最常用的ping Reqeust數(shù)據(jù)包,需要對構(gòu)建的數(shù)據(jù)包某些字節(jié)做一些改動,以便區(qū)分網(wǎng)絡(luò)中的原有數(shù)據(jù)包。ICMP協(xié)議[3]的數(shù)據(jù)包格式如圖2所示。
圖2 ICMP回顯請求與應(yīng)答數(shù)據(jù)包
回顯請求數(shù)據(jù)包構(gòu)建方法如下:類型填充為0,代碼字段為0x00表示回顯請求,校驗和字段需要根據(jù)ICMP協(xié)議頭部和選項數(shù)據(jù)重新計算校驗和。標(biāo)識符ID用當(dāng)前的進(jìn)程號填充。序號初始值為0,后續(xù)數(shù)據(jù)包序號自增1?;仫@請求數(shù)據(jù)包選項數(shù)據(jù)用a到w之間的數(shù)據(jù)填充。
由于選項數(shù)據(jù)部分內(nèi)容可以任意填充,目的主機(jī)收到該數(shù)據(jù)包后將類型字段改為0,并在響應(yīng)報文中填寫標(biāo)識域和序列號域,選項域原封不動返回給請求端。因此,可以將選項字段的其中一個字節(jié)用來標(biāo)識發(fā)送端的初始包和后續(xù)數(shù)據(jù)包。實現(xiàn)的方法是將初始數(shù)據(jù)包選項數(shù)據(jù)的第四個字節(jié)填充為0x00,后續(xù)其他數(shù)據(jù)包的選項字段的第四個字節(jié)填充為0x71。選項數(shù)據(jù)的其他字節(jié)填充為Windows系統(tǒng)下ping程序的填充數(shù)據(jù),以起到隱蔽的作用。
下面討論如何將構(gòu)建好的數(shù)據(jù)包定時發(fā)送出去。延時發(fā)送數(shù)據(jù)包的關(guān)鍵在于時間間隔的確定。減少時間間隔會增加數(shù)據(jù)包接收檢測的難度,同時也會增加接收檢測的誤碼率;增加時間間隔則會降低傳輸信息的效率。因此,需要對數(shù)據(jù)包發(fā)包延時進(jìn)行測試,以確定時間間隔門限。通過局域網(wǎng)內(nèi)的兩臺Windows 7系統(tǒng)測試,確定20 ms是一個相對較好的時間間隔門限。
發(fā)送數(shù)據(jù)包的具體時間間隔是根據(jù)待發(fā)送的二進(jìn)制碼流決定。首先,需要將待發(fā)送的隱蔽信息轉(zhuǎn)換為對應(yīng)的二進(jìn)制碼流,假如每次發(fā)送1位,發(fā)送N個字符需要8N+1個數(shù)據(jù)包。第一個數(shù)據(jù)包為起始數(shù)據(jù)包,隨后的每個數(shù)據(jù)包延時特定時間后發(fā)包。發(fā)送端的程序執(zhí)行流程如圖3所示。
延時器用來控制發(fā)送數(shù)據(jù)包的時間間隔,在整個系統(tǒng)中處于核心地址,影響著整個時間信道的數(shù)據(jù)傳輸速率和穩(wěn)定性。簡單的Sleep()函數(shù)的精度約在30 ms,使用它來做延時器效益太低,不滿足時間隱蔽信道的要求。在精度要求較高的情況下,VC可以采用多媒體定時器函數(shù)DWORD timeGetTime(void),定時精度為毫秒級,返回從系統(tǒng)啟動經(jīng)過的毫秒數(shù)。利用該多媒體定時器可以很精確讀出系統(tǒng)的當(dāng)前時間,并且能夠在非常精確的時間間隔內(nèi)完成一個事件﹑函數(shù)或者過程的調(diào)用。本程序使用多媒體定時器函數(shù)timeGetTime(void),由于使用該函數(shù)是通過查詢的方式進(jìn)行定時控制的,所以應(yīng)該建立定時循環(huán)控制定時事件。具體方法是:記錄上一個發(fā)包時刻t2=timeGetTime();之后不斷查詢目前時刻t1=timeGetTime(),直到t1與t2之差為需要的時間間隔再發(fā)包,從而完成一次時間間隔內(nèi)數(shù)據(jù)包的發(fā)送。
圖3 發(fā)送端程序流程
接收端通過一個線程函數(shù)完成數(shù)據(jù)包的接收和處理。接收端程序處理流程如圖4所示。
圖4 接收端程序流程
接收端程序首先需要對接收到的數(shù)據(jù)包的協(xié)議字段進(jìn)行判斷,分析是否為自己發(fā)送的ping請求數(shù)據(jù)包。如果數(shù)據(jù)包不滿足要求,則不作處理繼續(xù)收包;滿足條件,則繼續(xù)判斷是否為初始數(shù)據(jù)包,記錄初始數(shù)據(jù)包的收包時刻t0,隨后每次收包修改前一個數(shù)據(jù)包的收包時刻t1,并獲取當(dāng)前收包時刻t2。計算前后數(shù)據(jù)包發(fā)包時間間隔,將該時間間隔與時間間隔門限TI按照一定算法計算后判決輸出編碼信息0或1。對輸出的編碼信息進(jìn)行存儲,每8位編碼數(shù)據(jù)對應(yīng)輸出一個字符。
由于數(shù)據(jù)包經(jīng)過不同局域網(wǎng)和路由器后引起的網(wǎng)絡(luò)時延不同,因此實際收包時間間隔與時間間隔門限TI存在較大誤差。時間間隔判決是接收端程序要處理的難點,時間間隔門限可以通過多次測量取平均值獲取。
對于局域網(wǎng)和經(jīng)過路由器后引起的網(wǎng)絡(luò)時延,需要通過網(wǎng)絡(luò)發(fā)包測試。通過分別在局域網(wǎng)和經(jīng)過路由器的網(wǎng)絡(luò)內(nèi)發(fā)送多個數(shù)據(jù)包測試網(wǎng)絡(luò)延時,構(gòu)建時間門限模型和網(wǎng)絡(luò)延時補(bǔ)償值δ(0<δ<TI)。當(dāng)實際收包時間間隔在[TI-δ,TI+δ]范圍內(nèi),則編碼輸出0或1。通過實際發(fā)包統(tǒng)計測試分析,將δ值放大,可以減少誤碼率,但會降低通信效率。因此,需要綜合考慮確定δ值的范圍。
圖5是基于以上原理和方法利用MFC開發(fā)的軟件。打開軟件選擇相應(yīng)的網(wǎng)卡,即可獲取本網(wǎng)卡對應(yīng)的IP地址和MAC地址,輸入遠(yuǎn)端IP地址,即可獲取遠(yuǎn)端主機(jī)的MAC地址。設(shè)置時間間隔門限20 ms和待發(fā)送的文本數(shù)據(jù)點擊發(fā)送,即可實現(xiàn)數(shù)據(jù)包的構(gòu)建。程序?qū)崿F(xiàn)中,當(dāng)bit為0時,設(shè)置時延為時間間隔門限0.5TI;當(dāng)bit為1時,設(shè)置時延為時間間隔門限1.5TI。發(fā)送端設(shè)置如圖5所示。
圖5 發(fā)送端軟件設(shè)置
發(fā)端數(shù)據(jù)的網(wǎng)絡(luò)抓包如圖6所示??梢钥吹剑瑪?shù)據(jù)包時間間隔有2 ms﹑15 ms﹑31 ms,在接收端按照判決條件(0≤Δt≤TI時輸出0,TI<Δt<2TI時輸出1)輸出0或1,那么圖6所示數(shù)據(jù)包之間的時間間隔2 ms﹑15 ms﹑31 ms﹑31 ms﹑15 ms﹑15 ms﹑15 ms﹑31 ms分別代表了0﹑0﹑1﹑1﹑0﹑0﹑0﹑1。接收端按照此方式進(jìn)行編碼,就可以還原傳輸信息的二進(jìn)制比特流。
接收端數(shù)據(jù)接收和操作信息如圖7所示。可以看到接收端只需要設(shè)置時間間隔門限20 ms并點擊設(shè)置確認(rèn)即可。為了提高傳輸?shù)碾[蔽性,可對傳輸數(shù)據(jù)包的時間間隔進(jìn)行編碼。編碼信息在軟件右側(cè)的操作日志中顯示??梢钥吹?,編碼信息的前8 bit分別為00110001,即十六進(jìn)制0x31,對應(yīng)的字符為‘1’。接口窗口內(nèi)顯示的是二進(jìn)制碼流編碼后的文本信息。所有數(shù)據(jù)均可以無誤傳輸,滿足利用數(shù)據(jù)包屬性時間間隔實現(xiàn)信息隱蔽傳輸?shù)哪康摹?/p>
圖6 數(shù)據(jù)發(fā)送后網(wǎng)絡(luò)抓包
圖7 接收端接收數(shù)據(jù)結(jié)果
可以通過對網(wǎng)絡(luò)通信數(shù)據(jù)流量進(jìn)行大量抓包并統(tǒng)計分析,分別對不同的網(wǎng)絡(luò)協(xié)議進(jìn)行統(tǒng)計,分析各個網(wǎng)絡(luò)數(shù)據(jù)包之間的特征屬性與通常情況下的網(wǎng)絡(luò)數(shù)據(jù)包之間的差異。網(wǎng)絡(luò)數(shù)據(jù)包的延時特性由當(dāng)時網(wǎng)絡(luò)的狀態(tài)決定,可以通過利用Matlab分析各種網(wǎng)絡(luò)數(shù)據(jù)的延時特性。如果延時特性具有明顯的特征,則需要進(jìn)一步分析這些延時特征是否存在某種規(guī)律。如果存在的某種規(guī)律能被解碼為具體的信息,則可能存在隱蔽通道。但是,由于網(wǎng)絡(luò)數(shù)據(jù)流量非常大,想在海量數(shù)據(jù)中分析其中部分協(xié)議存在隱蔽通道,并判斷是否傳輸隱蔽信息,則需要大量的分析工作。
本文分析了常見的兩類隱蔽信道構(gòu)建原理,實現(xiàn)了基于時間間隔的隱蔽通道,最后針對隱蔽通道檢測,分析了檢測方法和面臨的瓶頸。下一步應(yīng)該重點加強(qiáng)針對時間間隔隱蔽通道檢測技術(shù)研究。
[1] 黃永峰,李松斌.網(wǎng)絡(luò)隱蔽通信及其檢測技術(shù)[M].北京:清華大學(xué)出版社,2016.
HUANG Yong-feng,LI Song-bin.Network Hiding Information and Detection Technology[M].Beijing:Tsinghua University Press,2016.
[2] 翟江濤.網(wǎng)絡(luò)通信的信息隱藏技術(shù)研究[D].南京:南京理工大學(xué),2008.
ZHAI Jiang-tao.A Study of Information Hiding Technology of Network Communication[D].Master Thesis of Nanjing University of Science and Technology,2008.
[3] 盧大航.基于網(wǎng)絡(luò)協(xié)議的隱蔽通道研究與實現(xiàn)[J].計算機(jī)工程與應(yīng)用,2003,39(02):183-186.
LU Da-hang.Research and Implementation of Covert Channel based on Network Protocol[J].Cumputer Engineering and Application,2003,39(02):183-186.